Name: series-workflow7ll6n Phase: Succeeded StartedAt: 2026-08-28 22:45:50 +0000 UTC FinishedAt: 2026-08-29 02:26:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[0] Phase: Succeeded StartedAt: 2026-08-28 22:45:50 +0000 UTC FinishedAt: 2026-08-28 22:48:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[0].run-triage Phase: Succeeded StartedAt: 2026-08-28 22:45:50 +0000 UTC FinishedAt: 2026-08-28 22:48:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4e15e89faac9f308baeb01f46c13a051814d2449", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_TCP", "RDS_RDMA", "INFINIBAND", "INFINIBAND_ADDR_TRANS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4e15e89faac9f308baeb01f46c13a051814d2449", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_TCP", "RDS_RDMA", "INFINIBAND", "INFINIBAND_ADDR_TRANS" ], "series_id": "f00fbdba-93f0-4a7f-817c-8a6edbed661c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rds_conn_shutdown", "rds_send_xmit", "rds_tcp_reset_callbacks", "rds_tcp_accept_one", "rds_ib_recv_refill" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDssCiAgICAmIzM0O1JEU19SRE1BJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORF9BRERSX1RSQU5TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmRzX2Nvbm5fc2h1dGRvd24mIzM0OywKICAgICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX2FjY2VwdF9vbmUmIzM0OywKICAgICYjMzQ7cmRzX2liX3JlY3ZfcmVmaWxsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlc29sdmVzIGNvbmN1cnJlbmN5LCByYWNlIGNvbmRpdGlvbiwgYW5kIHN0YXRlLW1hY2hpbmUgc3luY2hyb25pemF0aW9uIGJ1Z3MgaW4gdGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgc3Vic3lzdGVtIGR1cmluZyBjb25uZWN0aW9uIHRlYXJkb3duLCByZXNldCwgYW5kIGR1ZWxsaW5nIFNZTiByZXNvbHV0aW9uIChzcGVjaWZpY2FsbHkgbG9ja2luZyBhbmQgYml0LW1hbmlwdWxhdGlvbiBvZiBSRFNfSU5fWE1JVCwgUkRTX1JFQ1ZfUkVGSUxMLCBhbmQgUkRTX0NPTk5fKiBzdGF0ZSB0cmFuc2l0aW9ucykuXG5cbi0gTm8gbmV3IGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhZGRlZCBvciBtb2RpZmllZC5cbi0gTm8ga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zIChlLmcuLCBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rLCBpb2N0bCwgZ2V0c29ja29wdCkgb3IgdXNlci1mYWNpbmcgc3RydWN0cyBhcmUgdG91Y2hlZC5cbi0gTm8gYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja3MsIG9yIHBheWxvYWQgcGFyc2luZyByb3V0aW5lcyBhcmUgYWx0ZXJlZCB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4tIEFueSBjb25jdXJyZW5jeSBidWdzLCB1c2UtYWZ0ZXItZnJlZSwgZGVhZGxvY2tzLCBvciBsb2NrIG9yZGVyaW5nIGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gdGhlc2UgY2hhbmdlcyBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcywgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBtZWNoYW5pc21zIChzcGVjaWZpY2FsbHkgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBiaXRsb2Nrcywgd2FpdHF1ZXVlIGJhcnJpZXJzLCBhbmQgc3RhdGUgdHJhbnNpdGlvbnMpIGluIFJEUyBjb25uZWN0aW9uIHRlYXJkb3duLCBzZW5kLCByZWNlaXZlLXJlZmlsbCwgYW5kIFRDUCBzb2NrZXQgc3dhcHBpbmcgcGF0aHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBuZXR3b3JrIHNvY2tldCBvcGVyYXRpb25zIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRmZTM3Njc5MGI3YzlkY2YzZTZmNTMxZTU2NWYyMzc3ZmNlZmIzYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAyMjo0NzowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5pbmRleCA3YzhhYjhlOTczZTFiLi5iNmM0YmViNTBlYWYwIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9jb25uZWN0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5AQCAtMTA2LDEwICYjNDM7MTA2LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXG4gfVxuIFxuIC8qXG4tICogVGhpcyBpcyBjYWxsZWQgYnkgdHJhbnNwb3J0cyBhcyB0aGV5JiMzOTtyZSBicmluZ2luZyBkb3duIGEgY29ubmVjdGlvbi5cbi0gKiBJdCBjbGVhcnMgcGFydGlhbCBtZXNzYWdlIHN0YXRlIHNvIHRoYXQgdGhlIHRyYW5zcG9ydCBjYW4gc3RhcnQgc2VuZGluZ1xuLSAqIGFuZCByZWNlaXZpbmcgb3ZlciB0aGlzIGNvbm5lY3Rpb24gYWdhaW4gaW4gdGhlIGZ1dHVyZS4gIEl0IGlzIHVwIHRvXG4tICogdGhlIHRyYW5zcG9ydCB0byBoYXZlIHNlcmlhbGl6ZWQgdGhpcyBjYWxsIHdpdGggaXRzIHNlbmQgYW5kIHJlY3YuXG4mIzQzOyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHJkc19jb25uX3NodXRkb3duKCkgb25jZSB0aGUgdHJhbnNwb3J0IGhhcyBicm91Z2h0XG4mIzQzOyAqIGEgcGF0aCBkb3duLiAgSXQgY2xlYXJzIHBhcnRpYWwgbWVzc2FnZSBzdGF0ZSBzbyB0aGF0IHRoZSB0cmFuc3BvcnRcbiYjNDM7ICogY2FuIHN0YXJ0IHNlbmRpbmcgYW5kIHJlY2VpdmluZyBvdmVyIHRoaXMgcGF0aCBhZ2FpbiBpbiB0aGUgZnV0dXJlLlxuJiM0MzsgKiBUaGUgY2FsbGVyIG93bnMgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBhY3Jvc3MgdGhpcyBjYWxsLFxuJiM0MzsgKiB3aGljaCBpcyB3aGF0IHNlcmlhbGl6ZXMgaXQgYWdhaW5zdCB0aGUgc2VuZCBhbmQgcmVjZWl2ZS1yZWZpbGxcbiYjNDM7ICogcGF0aHMuXG4gICovXG4gc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4ge1xuQEAgLTEyMCw3ICYjNDM7MTIyLDE2IEBAIHN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIFxuIFx0cmRzX3N0YXRzX2luYyhzX2Nvbm5fcmVzZXQpO1xuIFx0cmRzX3NlbmRfcGF0aF9yZXNldChjcCk7XG4tXHRjcC1cdTAwM2VjcF9mbGFncyA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIENsZWFyIHRoZSBiaXRzIHRoZSByZXNldCBpcyByZXNwb25zaWJsZSBmb3IgaW5kaXZpZHVhbGx5OiBhXG4mIzQzO1x0ICogYmxhbmtldCBjcF9mbGFncyA9IDAgaXMgYSBwbGFpbiBzdG9yZSB0aGF0IGNhbiBjbG9iYmVyIGFcbiYjNDM7XHQgKiBjb25jdXJyZW50IGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBvbiB0aGUgc2FtZSB3b3JkLlxuJiM0MztcdCAqIFJEU19JTl9YTUlUIGFuZCBSRFNfUkVDVl9SRUZJTEwgYXJlIGhlbGQgYXMgbG9ja3MgYnkgdGhlXG4mIzQzO1x0ICogY2FsbGVyLCByZHNfY29ubl9zaHV0ZG93bigpLCB3aGljaCByZWxlYXNlcyB0aGVtIG9uY2UgdGhlXG4mIzQzO1x0ICogdGVhcmRvd24gaXMgY29tcGxldGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y2xlYXJfYml0KFJEU19MTF9TRU5EX0ZVTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbiYjNDM7XHRjbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4gXG4gXHQvKiBEbyBub3QgY2xlYXIgbmV4dF9yeF9zZXEgaGVyZSwgZWxzZSB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2hcbiBcdCAqIHJldHJhbnNtaXR0ZWQgcGFja2V0cyBmcm9tIG5ldyBwYWNrZXRzLCBhbmQgd2lsbCBoYW5kIGFsbFxuQEAgLTQwNiwyOCAmIzQzOzQxNyw3MCBAQCB2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFx0fVxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2Y3AtXHUwMDNlY3BfY21fbG9jayk7XG4gXG4mIzQzO1x0XHQvKiBRdWllc2NlIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZS1yZWZpbGwgcGF0aHMgYnlcbiYjNDM7XHRcdCAqIGFjcXVpcmluZyB0aGVpciBiaXQgbG9ja3MsIG5vdCBtZXJlbHkgd2FpdGluZyBmb3JcbiYjNDM7XHRcdCAqIHRoZW0gdG8gYmUgcmVsZWFzZWQ6IHdpdGggYSBwbGFpbiB3YWl0LCBlaXRoZXIgcGF0aFxuJiM0MztcdFx0ICogY2FuIHJlLXRha2UgaXRzIGxvY2sgdGhlIGluc3RhbnQgYWZ0ZXIgd2Ugc2FtcGxlIGl0XG4mIzQzO1x0XHQgKiBjbGVhciBhbmQgdGhlbiBydW4gY29uY3VycmVudGx5IHdpdGggdGhlIHRyYW5zcG9ydFxuJiM0MztcdFx0ICogc2h1dGRvd24gYW5kIHRoZSBwYXRoIHJlc2V0IGJlbG93LiAgSG9sZGluZyBib3RoXG4mIzQzO1x0XHQgKiBsb2NrcyBhY3Jvc3MgdGhlIHRlYXJkb3duIG1ha2VzIHRoYXQgc3RydWN0dXJhbGx5XG4mIzQzO1x0XHQgKiBpbXBvc3NpYmxlLlxuJiM0MztcdFx0ICovXG4gXHRcdHdhaXRfZXZlbnQoY3AtXHUwMDNlY3Bfd2FpdHEsXG4tXHRcdFx0ICAgIXRlc3RfYml0KFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuJiM0MztcdFx0XHQgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuIFx0XHR3YWl0X2V2ZW50KGNwLVx1MDAzZWNwX3dhaXRxLFxuLVx0XHRcdCAgICF0ZXN0X2JpdChSRFNfUkVDVl9SRUZJTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSk7XG4mIzQzO1x0XHRcdCAgICF0ZXN0X2FuZF9zZXRfYml0KFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiBcbiBcdFx0Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZWNvbm5fcGF0aF9zaHV0ZG93bihjcCk7XG4gXHRcdHJkc19jb25uX3BhdGhfcmVzZXQoY3ApO1xuIFxuJiM0MztcdFx0LyogUmVsZWFzZSB0aGUgdHdvIGxvY2tzIGFuZCB3YWtlIGFueSB3YWl0ZXIgKGUuZy5cbiYjNDM7XHRcdCAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkpIHRoYXQgYmxvY2tlZCBvbiB0aGVtIHdoaWxlXG4mIzQzO1x0XHQgKiB3ZSBoZWxkIHRoZW0uICBUaGUgdW5sb2NrIG9yZGVycyB0aGUgdHJhbnNwb3J0JiMzOTtzIHJpbmdcbiYjNDM7XHRcdCAqIHJlLWluaXRpYWxpemF0aW9uIGFuZCB0aGUgcGF0aCByZXNldCBhYm92ZSBiZWZvcmVcbiYjNDM7XHRcdCAqIGVpdGhlciBiaXQgaXMgc2VlbiBjbGVhci4gIHJkc19jb25uX3BhdGhfcmVzZXQoKSBsZWF2ZXNcbiYjNDM7XHRcdCAqIGJvdGggYml0cyBhbG9uZTogb3duZXJzaGlwIGVuZHMgaGVyZSwgbm90IGluc2lkZSB0aGVcbiYjNDM7XHRcdCAqIHJlc2V0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4mIzQzO1x0XHRjbGVhcl9iaXRfdW5sb2NrKFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpO1xuJiM0MztcdFx0d2FrZV91cF9hbGwoXHUwMDI2Y3AtXHUwMDNlY3Bfd2FpdHEpO1xuJiM0MztcbiBcdFx0aWYgKCFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX0RJU0NPTk5FQ1RJTkcsXG4tXHRcdFx0XHRcdCAgICAgIFJEU19DT05OX0RPV04pIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRVJST1IsXG4gXHRcdFx0XHRcdCAgICAgIFJEU19DT05OX0RPV04pKSB7XG4tXHRcdFx0LyogVGhpcyBjYW4gaGFwcGVuIC0gZWcgd2hlbiB3ZSYjMzk7cmUgaW4gdGhlIG1pZGRsZSBvZiB0ZWFyaW5nXG4tXHRcdFx0ICogZG93biB0aGUgY29ubmVjdGlvbiwgYW5kIHNvbWVvbmUgdW5sb2FkcyB0aGUgcmRzIG1vZHVsZS5cbi1cdFx0XHQgKiBRdWl0ZSByZXByb2R1Y2libGUgd2l0aCBsb29wYmFjayBjb25uZWN0aW9ucy5cbi1cdFx0XHQgKiBNb3N0bHkgaGFybWxlc3MuXG4mIzQzO1x0XHRcdC8qIFRoZSBwYXRoIHdhcyBkcm9wcGVkIGFnYWluIHdoaWxlIHdlIHRvcmUgaXRcbiYjNDM7XHRcdFx0ICogZG93bjogYnkgYSBzb2NrZXQgc3RhdGUtY2hhbmdlIGNhbGxiYWNrIGluXG4mIzQzO1x0XHRcdCAqIGlycSBjb250ZXh0IG9uIHJlY2VpcHQgb2YgYSBGSU4sIG9yIGJ5IGFuXG4mIzQzO1x0XHRcdCAqIGFjY2VwdCB0aGF0IGNsYWltZWQgdGhlIHBhdGgganVzdCBiZWZvcmUgYVxuJiM0MztcdFx0XHQgKiBkcm9wIHB1dCBpdCBiYWNrIHRvIFJEU19DT05OX0VSUk9SIGFuZCB0aGVuXG4mIzQzO1x0XHRcdCAqIGluc3RhbGxlZCBhIGZyZXNoIHNvY2tldCBvbiBpdC4gIFVubGVzcyBhXG4mIzQzO1x0XHRcdCAqIHBlbmRpbmcgZGVzdHJveSBzdXBwcmVzc2VkIGl0LCB0aGUgZHJvcCBhbHNvXG4mIzQzO1x0XHRcdCAqIHF1ZXVlZCBhbm90aGVyIHNodXRkb3duIHBhc3MsIGFuZCB0aGF0IHBhc3NcbiYjNDM7XHRcdFx0ICogbXVzdCBydW4sIGJlY2F1c2UgaXQgaXMgd2hhdCB0ZWFycyBkb3duXG4mIzQzO1x0XHRcdCAqIHdoYXRldmVyIGF0dGFjaGVkIHRvIHRoZSBwYXRoIGFmdGVyIHRoZVxuJiM0MztcdFx0XHQgKiB0cmFuc3BvcnQgc2h1dGRvd24gYWJvdmUgc2FtcGxlZCBpdHMgc3RhdGUuXG4mIzQzO1x0XHRcdCAqIENvbnN1bWluZyB0aGUgUkRTX0NPTk5fRVJST1IgaGVyZSB3b3VsZCB0dXJuXG4mIzQzO1x0XHRcdCAqIHRoYXQgcGFzcyBpbnRvIGEgbm8tb3A6IGxlYXZlIHRoZSBzdGF0ZVxuJiM0MztcdFx0XHQgKiBhbG9uZSwgYW5kIGxldCB0aGUgcGFzcyBmaW5pc2ggdGhlIGpvYi5cbiBcdFx0XHQgKlxuLVx0XHRcdCAqIE5vdGUgdGhhdCB0aGlzIGFsc28gaGFwcGVucyB3aXRoIHJkcy10Y3AgYmVjYXVzZVxuLVx0XHRcdCAqIHdlIGNvdWxkIGhhdmUgdHJpZ2dlcmVkIHJkc19jb25uX3BhdGhfZHJvcCBpbiBpcnFcbi1cdFx0XHQgKiBtb2RlIGZyb20gcmRzX3RjcF9zdGF0ZSBjaGFuZ2Ugb24gdGhlIHJlY2VpcHQgb2Zcbi1cdFx0XHQgKiBhIEZJTiwgdGh1cyB3ZSBuZWVkIHRvIHJlY2hlY2sgZm9yIFJEU19DT05OX0VSUk9SXG4tXHRcdFx0ICogaGVyZS5cbiYjNDM7XHRcdFx0ICogUXVpZXNjZSB0aGUgcmVjb25uZWN0IHRpbWVyIGJlZm9yZSBiYWlsaW5nXG4mIzQzO1x0XHRcdCAqIG91dCwgdGhvdWdoLiAgV2hlbiBhIHBlbmRpbmcgZGVzdHJveSBkaWRcbiYjNDM7XHRcdFx0ICogc3VwcHJlc3MgdGhlIHF1ZXVlLCBubyBsYXRlciBwYXNzIHJ1bnMsIGFuZFxuJiM0MztcdFx0XHQgKiByZHNfY29ubl9wYXRoX2Rlc3Ryb3koKSBpcyBhYm91dCB0byBmbHVzaFxuJiM0MztcdFx0XHQgKiBjcF9kb3duX3cgYW5kIGZyZWUgdGhlIHBhdGg6IGl0IG11c3Qgbm90XG4mIzQzO1x0XHRcdCAqIGZpbmQgY3BfY29ubl93IHN0aWxsIGFybWVkLiAgQSBzdWNjZXNzb3JcbiYjNDM7XHRcdFx0ICogcGFzcywgd2hlbiB0aGVyZSBpcyBvbmUsIHJlLWFybXMgdGhlXG4mIzQzO1x0XHRcdCAqIHJlY29ubmVjdCBmcm9tIGl0cyBvd24gdGFpbC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZjcC1cdTAwM2VjcF9jb25uX3cpO1xuJiM0MztcdFx0XHRjbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAocmRzX2Nvbm5fcGF0aF9zdGF0ZShjcCkgPT0gUkRTX0NPTk5fRVJST1IpXG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHQvKiBObyBjdXJyZW50IGNwX3N0YXRlIHdyaXRlciBsZWF2ZXMgYVxuJiM0MztcdFx0XHQgKiBESVNDT05ORUNUSU5HIHBhdGggaW4gYW55IHN0YXRlIGJ1dFxuJiM0MztcdFx0XHQgKiBSRFNfQ09OTl9FUlJPUjsgcmVwb3J0IGxvdWRseSBpZiBvbmUgZXZlclxuJiM0MztcdFx0XHQgKiBkb2VzLlxuIFx0XHRcdCAqL1xuIFx0XHRcdHJkc19jb25uX3BhdGhfZXJyb3IoY3AsIFwmIzM0OyVzOiBmYWlsZWQgdG8gdHJhbnNpdGlvbiBcJiMzNDtcbiBcdFx0XHRcdFx0ICAgIFwmIzM0O3RvIHN0YXRlIERPV04sIGN1cnJlbnQgc3RhdGUgXCYjMzQ7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZWN2LmMgYi9uZXQvcmRzL2liX3JlY3YuY1xuaW5kZXggMzU3MTI4ZDM0YTU0Ni4uYmQ2Y2IzZmZhYTU3MSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvaWJfcmVjdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL2liX3JlY3YuY1xuQEAgLTM2MywxNSAmIzQzOzM2MywxNCBAQCBzdGF0aWMgaW50IGFjcXVpcmVfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbiBcbiBzdGF0aWMgdm9pZCByZWxlYXNlX3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4ge1xuLVx0Y2xlYXJfYml0KFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y29ubi1cdTAwM2VjX2ZsYWdzKTtcbi1cdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XG4mIzQzO1x0Y2xlYXJfYml0X3VubG9jayhSRFNfUkVDVl9SRUZJTEwsIFx1MDAyNmNvbm4tXHUwMDNlY19mbGFncyk7XG4gXG4gXHQvKiBXZSBkb24mIzM5O3QgdXNlIHdhaXRfb25fYml0KCkvd2FrZV91cF9iaXQoKSBiZWNhdXNlIG91ciB3YWtpbmcgaXMgaW4gYVxuIFx0ICogaG90IHBhdGggYW5kIGZpbmRpbmcgd2FpdGVycyBpcyB2ZXJ5IHJhcmUuICBXZSBkb24mIzM5O3Qgd2FudCB0byB3YWxrXG4gXHQgKiB0aGUgc3lzdGVtLXdpZGUgaGFzaGVkIHdhaXRxdWV1ZSBidWNrZXRzIGluIHRoZSBmYXN0IHBhdGggb25seSB0b1xuIFx0ICogYWxtb3N0IG5ldmVyIGZpbmQgd2FpdGVycy5cbiBcdCAqL1xuLVx0aWYgKHdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2Y29ubi1cdTAwM2VjX3dhaXRxKSlcbiYjNDM7XHRpZiAod3FfaGFzX3NsZWVwZXIoXHUwMDI2Y29ubi1cdTAwM2VjX3dhaXRxKSlcbiBcdFx0d2FrZV91cF9hbGwoXHUwMDI2Y29ubi1cdTAwM2VjX3dhaXRxKTtcbiB9XG4gXG5AQCAtMzkyLDcgJiM0MzszOTEsOSBAQCB2b2lkIHJkc19pYl9yZWN2X3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGludCBwcmVmaWxsLCBnZnBfdCBnZnApXG4gXG4gXHQvKiB0aGUgZ29hbCBoZXJlIGlzIHRvIGp1c3QgbWFrZSBzdXJlIHRoYXQgc29tZW9uZSwgc29tZXdoZXJlXG4gXHQgKiBpcyBwb3N0aW5nIGJ1ZmZlcnMuICBJZiB3ZSBjYW4mIzM5O3QgZ2V0IHRoZSByZWZpbGwgbG9jayxcbi1cdCAqIGxldCB0aGVtIGRvIHRoZWlyIHRoaW5nXG4mIzQzO1x0ICogbGV0IHRoZW0gZG8gdGhlaXIgdGhpbmcuICBUaGUgaG9sZGVyIG1heSBhbHNvIGJlXG4mIzQzO1x0ICogcmRzX2Nvbm5fc2h1dGRvd24oKSB0ZWFyaW5nIHRoZSBwYXRoIGRvd24sIGluIHdoaWNoIGNhc2VcbiYjNDM7XHQgKiB0aGVyZSBpcyBub3RoaW5nIHRvIHBvc3QuXG4gXHQgKi9cbiBcdGlmICghYWNxdWlyZV9yZWZpbGwoY29ubikpXG4gXHRcdHJldHVybjtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jXG5pbmRleCAxNWExYjk3ZjEzZTc2Li4xYWZhOTgxZTVjMDZkIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvc2VuZC5jXG5AQCAtMTE0LDggJiM0MzsxMTQsMTMgQEAgc3RhdGljIHZvaWQgcmVsZWFzZV9pbl94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdCAqIGhvdCBwYXRoIGFuZCBmaW5kaW5nIHdhaXRlcnMgaXMgdmVyeSByYXJlLiAgV2UgZG9uJiMzOTt0IHdhbnQgdG8gd2Fsa1xuIFx0ICogdGhlIHN5c3RlbS13aWRlIGhhc2hlZCB3YWl0cXVldWUgYnVja2V0cyBpbiB0aGUgZmFzdCBwYXRoIG9ubHkgdG9cbiBcdCAqIGFsbW9zdCBuZXZlciBmaW5kIHdhaXRlcnMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiB3cV9oYXNfc2xlZXBlcigpIHN1cHBsaWVzIHRoZSBmdWxsIGJhcnJpZXIgdGhhdCBvcmRlcnMgdGhlIHdhaXRcbiYjNDM7XHQgKiBxdWV1ZSByZWFkIGFmdGVyIHRoZSBiaXQgY2xlYXI7IGNsZWFyX2JpdF91bmxvY2soKSBhbG9uZSBpcyBvbmx5XG4mIzQzO1x0ICogYSByZWxlYXNlIGFuZCB3b3VsZCBsZXQgdGhpcyBjaGVjayByZWFkIGEgc3RhbGUgZW1wdHkgcXVldWUsXG4mIzQzO1x0ICogbG9zaW5nIHRoZSB3YWtlLXVwLlxuIFx0ICovXG4tXHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcdTAwMjZjcC1cdTAwM2VjcF93YWl0cSkpXG4mIzQzO1x0aWYgKHdxX2hhc19zbGVlcGVyKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKSlcbiBcdFx0d2FrZV91cF9hbGwoXHUwMDI2Y3AtXHUwMDNlY3Bfd2FpdHEpO1xuIH1cbiBcbkBAIC0yMzksOCAmIzQzOzI0NCwxMSBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRXUklURV9PTkNFKGNwLVx1MDAzZWNwX3NlbmRfZ2VuLCBzZW5kX2dlbik7XG4gXG4gXHQvKlxuLVx0ICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIHRlc3RzIFJEU19JTl9YTUlULFxuLVx0ICogd2UgZG8gdGhlIG9wcG9zaXRlIHRvIGF2b2lkIHJhY2VzLlxuJiM0MztcdCAqIHJkc19jb25uX3NodXRkb3duKCkgc2V0cyB0aGUgY29ubiBzdGF0ZSBhbmQgdGhlbiBhY3F1aXJlc1xuJiM0MztcdCAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZS5cbiYjNDM7XHQgKiBPd25lcnNoaXAgaXMgZGVjaWRlZCBieSB0aGUgYXRvbWljIFJNVyBvbiB0aGUgY3BfZmxhZ3Mgd29yZDpcbiYjNDM7XHQgKiBpZiB0aGUgdGVhcmRvd24gd29uIHRoZSBiaXQgd2UgYmFjayBvZmYgaGVyZSwgYW5kIGlmIHdlIHdvblxuJiM0MztcdCAqIGl0IHRoZSB0ZWFyZG93biB3YWl0cyB1bnRpbCB3ZSByZWxlYXNlIGl0LlxuIFx0ICovXG4gXHRpZiAoIXJkc19jb25uX3BhdGhfdXAoY3ApKSB7XG4gXHRcdHJlbGVhc2VfaW5feG1pdChjcCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3AuYyBiL25ldC9yZHMvdGNwLmNcbmluZGV4IGIyNjM2MzRhYzc1MGQuLjc3NGE3MWY4OGQzNzUgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcC5jXG5AQCAtMTE1LDQ2ICYjNDM7MTE1LDkwIEBAIHZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIH1cbiBcbiAvKlxuLSAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgdGhlIHRvIHRoZSBuZXcgc29jayBhbmRcbi0gKiByZXR1cm5zIHRoZSBleGlzdGluZyB0Yy1cdTAwM2V0X3NvY2suXG4mIzQzOyAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgYSBwYXRoIHRvIGEgbmV3IHNvY2tldCBhbmRcbiYjNDM7ICogcmVsZWFzZXMgdGhlIG9sZCBvbmUgaXQgZmluZHMgaW4gdGMtXHUwMDNldF9zb2NrLCByZXNvbHZpbmcgYSBkdWVsbGluZ1xuJiM0MzsgKiBTWU4uXG4gICpcbi0gKiBUaGUgb25seSBmdW5jdGlvbnMgdGhhdCBzZXQgdGMtXHUwMDNldF9zb2NrIGFyZSByZHNfdGNwX3NldF9jYWxsYmFja3Ncbi0gKiBhbmQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3MuICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXRcbi0gKiBpdCBpcyBzZXQuICBUaGUgYWJzZW5jZSBvZiBSRFNfQ09OTl9VUCBiaXQgcHJvdGVjdHMgdGhvc2UgcGF0aHNcbi0gKiBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24mIzM5O3Qgc2V0LlxuJiM0MzsgKiB0Yy1cdTAwM2V0X3NvY2sgaXMgc2V0IGJ5IHJkc190Y3Bfc2V0X2NhbGxiYWNrcygpIGFuZCBjbGVhcmVkIGJ5XG4mIzQzOyAqIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3MoKS4gIEZvdXIgcGF0aHMgd3JpdGUgaXQ6IHRoZSBhY3RpdmVcbiYjNDM7ICogY29ubmVjdCBpbiByZHNfdGNwX2Nvbm5fcGF0aF9jb25uZWN0KCksIHdoaWNoIHNldHMgaXQgYW5kIGNsZWFycyBpdFxuJiM0MzsgKiBhZ2FpbiBvbiBmYWlsdXJlOyB0aGUgYWNjZXB0IHBhdGggaW4gcmRzX3RjcF9hY2NlcHRfb25lKCksIHdoaWNoXG4mIzQzOyAqIHNldHMgaXQgZm9yIGEgcGF0aCB3aXRoIG5vIHNvY2tldCB5ZXQ7IHRoZSB0ZWFyZG93biBpblxuJiM0MzsgKiByZHNfdGNwX2Nvbm5fcGF0aF9zaHV0ZG93bigpLCB3aGljaCBjbGVhcnMgaXQ7IGFuZCB0aGUgc3dhcCBkb25lXG4mIzQzOyAqIGhlcmUsIHdoaWNoIGRvZXMgYm90aC4gIFRoZSBjb25uZWN0IGFuZCBhY2NlcHQgcGF0aHMgYXJlIHNlcmlhbGl6ZWRcbiYjNDM7ICogYWdhaW5zdCBlYWNoIG90aGVyIGJ5IHRfY29ubl9wYXRoX2xvY2suICBTZW5kIGFuZCByZWNlaXZlIHRydXN0XG4mIzQzOyAqIHRoYXQgaXQgaXMgc2V0OiB0aGUgYWJzZW5jZSBvZiBSRFNfQ09OTl9VUCBwcm90ZWN0cyB0aG9zZSBwYXRoc1xuJiM0MzsgKiBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24mIzM5O3QsIGFuZCB0aGUgc3dhcCBkb25lIGhlcmUgcnVucyB1bmRlclxuJiM0MzsgKiBSRFNfSU5fWE1JVCBzbyB0aGF0IGl0IGNhbm5vdCBpbnRlcmxlYXZlIHdpdGggYSBzZW5kZXIgYWxyZWFkeVxuJiM0MzsgKiBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpLlxuICAqL1xuIHZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0XHQgICAgIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiB7XG4gXHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLVx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xuLVx0c3RydWN0IHNvY2tldCAqb3NvY2sgPSB0Yy1cdTAwM2V0X3NvY2s7XG4tXG4tXHRpZiAoIW9zb2NrKVxuLVx0XHRnb3RvIG5ld3NvY2s7XG4mIzQzO1x0c3RydWN0IHNvY2tldCAqb3NvY2s7XG4gXG4gXHQvKiBOZWVkIHRvIHJlc29sdmUgYSBkdWVsbGluZyBTWU4gYmV0d2VlbiBwZWVycy5cbiBcdCAqIFdlIGhhdmUgYW4gb3V0c3RhbmRpbmcgU1lOIHRvIHRoaXMgcGVlciwgd2hpY2ggbWF5XG4gXHQgKiBwb3RlbnRpYWxseSBoYXZlIHRyYW5zaXRpb25lZCB0byB0aGUgUkRTX0NPTk5fVVAgc3RhdGUsXG4gXHQgKiBzbyB3ZSBtdXN0IHF1aWVzY2UgYW55IHNlbmQgdGhyZWFkcyBiZWZvcmUgcmVzZXR0aW5nXG4tXHQgKiBjcF90cmFuc3BvcnRfZGF0YS4gV2UgcXVpZXNjZSB0aGVzZSB0aHJlYWRzIGJ5IHNldHRpbmdcbi1cdCAqIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFJEU19DT05OX1VQLCBhbmQgdGhlblxuLVx0ICogd2FpdGluZyBmb3IgYW55IGV4aXN0aW5nIHRocmVhZHMgaW4gcmRzX3NlbmRfeG1pdCB0b1xuLVx0ICogY29tcGxldGUgcmVsZWFzZV9pbl94bWl0KCkuIChTdWJzZXF1ZW50IHRocmVhZHMgZW50ZXJpbmdcbi1cdCAqIHJkc19zZW5kX3htaXQoKSB3aWxsIGJhaWwgb24gIXJkc19jb25uX3VwKCkuXG4mIzQzO1x0ICogY3BfdHJhbnNwb3J0X2RhdGEuICBTZXR0aW5nIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlclxuJiM0MztcdCAqIHRoYW4gUkRTX0NPTk5fVVAgc3RvcHMgbmV3IHNlbmRlcnMsIGFuZCBvd25pbmcgUkRTX0lOX1hNSVRcbiYjNDM7XHQgKiBleGNsdWRlcyBhbnkgdGhyZWFkIGFscmVhZHkgaW5zaWRlIHJkc19zZW5kX3htaXQoKSAtIG9yIGFcbiYjNDM7XHQgKiB0ZWFyZG93biBpbiByZHNfY29ubl9zaHV0ZG93bigpLCB3aGljaCBob2xkcyB0aGUgc2FtZSBsb2NrXG4mIzQzO1x0ICogZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNwb3J0IHNodXRkb3duIC0gZm9yIHRoZSB3aG9sZVxuJiM0MztcdCAqIHNvY2tldCBzd2FwIGFuZCB0aGUgcmRzX3NlbmRfcGF0aF9yZXNldCgpIGJlbG93LlxuIFx0ICpcbi1cdCAqIEhvd2V2ZXIgYW4gaW5jb21pbmcgc3luLWFjayBhdCB0aGlzIHBvaW50IHdvdWxkIGVuZCB1cFxuLVx0ICogbWFya2luZyB0aGUgY29ubiBhcyBSRFNfQ09OTl9VUCwgYW5kIHdvdWxkIGFnYWluIHBlcm1pdFxuLVx0ICogcmRzX3NlbmRfeG1pKCkgdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkXG4tXHQgKiBzeW5jaHJvbml6ZSBvbiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdFxuLVx0ICogZG8gdGhhdDogd2FpdGluZyBvbiAhUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5XG4tXHQgKiBlbmQgdXAgZGVhZGxvY2tpbmcgd2l0aCB0Y3Bfc2VuZG1zZygpLCBhbmQgdGhlIFJEU19JTl9YTUlUXG4tXHQgKiB3b3VsZCBub3QgZ2V0IHNldC4gQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvXG4tXHQgKiBSRFNfQ09OTl9SRVNFVFRUSU5HLCB0byBlbnN1cmUgdGhhdCByZHNfdGNwX3N0YXRlX2NoYW5nZVxuLVx0ICogY2Fubm90IG1hcmsgcmRzX2Nvbm5fcGF0aF91cCgpIGluIHRoZSB3aW5kb3cgYmVmb3JlIGxvY2tfc29jaygpXG4mIzQzO1x0ICogQW4gaW5jb21pbmcgc3luLWFjayBhdCB0aGlzIHBvaW50IHdvdWxkIGVuZCB1cCBtYXJraW5nIHRoZVxuJiM0MztcdCAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpXG4mIzQzO1x0ICogdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkIHN5bmNocm9uaXplIG9uXG4mIzQzO1x0ICogUkRTX0NPTk5fVVAgYWZ0ZXIgbG9ja19zb2NrKCksIGJ1dCBjYW5ub3QgZG8gdGhhdDogYWNxdWlyaW5nXG4mIzQzO1x0ICogUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5IGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoXG4mIzQzO1x0ICogdGNwX3NlbmRtc2coKSwgd2hpY2ggdGFrZXMgdGhlIHNvY2tldCBsb2NrIHdoaWxlIGhvbGRpbmdcbiYjNDM7XHQgKiBSRFNfSU5fWE1JVC4gIEFzIGEgcmVzdWx0LCB3ZSBzZXQgY19zdGF0ZSB0b1xuJiM0MztcdCAqIFJEU19DT05OX1JFU0VUVElORywgdG8gZW5zdXJlIHRoYXQgcmRzX3RjcF9zdGF0ZV9jaGFuZ2VcbiYjNDM7XHQgKiBjYW5ub3QgbWFyayByZHNfY29ubl9wYXRoX3VwKCkgaW4gdGhlIHdpbmRvdyBiZWZvcmVcbiYjNDM7XHQgKiBsb2NrX3NvY2soKS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIE9ubHkgbWFrZSB0aGF0IHRyYW5zaXRpb24gaWYgdGhlIHBhdGggaXMgc3RpbGwgY29ubmVjdGluZ1xuJiM0MztcdCAqIChvciBhbHJlYWR5IHJlc2V0dGluZyBmcm9tIGFuIGVhcmxpZXIgZHVlbCkuICBBIHBhdGggaW4gYW55XG4mIzQzO1x0ICogb3RoZXIgc3RhdGUgLSB0eXBpY2FsbHkgUkRTX0NPTk5fRElTQ09OTkVDVElORyBvclxuJiM0MztcdCAqIFJEU19DT05OX0VSUk9SIHdpdGggYSBzaHV0ZG93biBpbiBmbGlnaHQgLSBpcyBkcm9wcGVkXG4mIzQzO1x0ICogaW5zdGVhZC4gIFRoYXQgc3RpbGwgcmVwbGFjZXMgaXRzIHN0YXRlLCB3aXRoIFJEU19DT05OX0VSUk9SLFxuJiM0MztcdCAqIGFuZCwgdW5sZXNzIGEgcGVuZGluZyBkZXN0cm95IGlzIGFib3V0IHRvIHJlYXAgdGhlIHdob2xlXG4mIzQzO1x0ICogY29ubmVjdGlvbiBhbnl3YXksIHF1ZXVlcyBvbmUgbW9yZSBzaHV0ZG93biBwYXNzLiAgQSBzaHV0ZG93blxuJiM0MztcdCAqIGFscmVhZHkgaW4gZmxpZ2h0IGxlYXZlcyB0aGF0IFJEU19DT05OX0VSUk9SIGFsb25lIHdoZW4gaXRcbiYjNDM7XHQgKiBmaW5pc2hlczsgdGhlIHF1ZXVlZCBwYXNzIHRoZW4gY29tcGxldGVzIHRoZSB0cmFuc2l0aW9uIHRvXG4mIzQzO1x0ICogUkRTX0NPTk5fRE9XTiBhbmQgdGVhcnMgZG93biBhbnl0aGluZyB0aGF0IGF0dGFjaGVkIHRvIHRoZVxuJiM0MztcdCAqIHBhdGggaW4gdGhlIG1lYW50aW1lLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9DT05ORUNUSU5HLFxuJiM0MztcdFx0XHRcdCAgICAgIFJEU19DT05OX1JFU0VUVElORykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX1JFU0VUVElORyxcbiYjNDM7XHRcdFx0XHQgICAgICBSRFNfQ09OTl9SRVNFVFRJTkcpKVxuJiM0MztcdFx0cmRzX2Nvbm5fcGF0aF9kcm9wKGNwLCAwKTtcbiYjNDM7XHR3YWl0X2V2ZW50KGNwLVx1MDAzZWNwX3dhaXRxLFxuJiM0MztcdFx0ICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiYjNDM7XG4mIzQzO1x0LyogUmVhZCB0X3NvY2sgb25seSB3aGlsZSBvd25pbmcgUkRTX0lOX1hNSVQsIG5ldmVyIGJlZm9yZSB0aGVcbiYjNDM7XHQgKiB3YWl0OiB0aGUgdGVhcmRvd24gaW4gcmRzX2Nvbm5fc2h1dGRvd24oKSByZWxlYXNlcyB0aGUgb2xkXG4mIzQzO1x0ICogc29ja2V0IGFuZCBjbGVhcnMgdF9zb2NrLCBzbyBhIHBvaW50ZXIgc2FtcGxlZCBlYXJsaWVyIGNhblxuJiM0MztcdCAqIGJlIHN0YWxlIGJ5IHRoZSB0aW1lIHdlIHdha2UgdXAuICBUaGUgdGVhcmRvd24gaG9sZHMgdGhlXG4mIzQzO1x0ICogc2FtZSBsb2NrIHdoaWxlIGl0IGRvZXMgc28sIHNvIHdoYXQgd2UgcmVhZCBoZXJlIGNhbm5vdFxuJiM0MztcdCAqIGNoYW5nZSB1bmRlciB1cyB1bnRpbCB3ZSByZWxlYXNlIGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdG9zb2NrID0gdGMtXHUwMDNldF9zb2NrO1xuJiM0MztcdGlmICghb3NvY2spXG4mIzQzO1x0XHRnb3RvIG5ld3NvY2s7XG4mIzQzO1xuJiM0MztcdC8qIHJlc2V0IHJlY2VpdmUgc2lkZSBzdGF0ZSBmb3IgcmRzX3RjcF9kYXRhX3JlY3YoKSBmb3Igb3NvY2suXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgc3luYyBjYW5jZWxzIHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVCByZWx5IG9uIGNwX3dxXG4mIzQzO1x0ICogYmVpbmcgb3JkZXJlZDogYSB0ZWFyZG93biBibG9ja2VkIG9uIHRoZSBiaXQgb2NjdXBpZXNcbiYjNDM7XHQgKiBjcF93cSYjMzk7cyBvbmx5IGV4ZWN1dGlvbiBzbG90LCBzbyBjcF9zZW5kX3cgYW5kIGNwX3JlY3ZfdyBhcmVcbiYjNDM7XHQgKiBwZW5kaW5nIGF0IG1vc3QgYW5kIHRoZSBjYW5jZWxzIG5ldmVyIGZsdXNoLiAgTm90aGluZyBoZXJlXG4mIzQzO1x0ICogbWF5IGZsdXNoIG9yIHdhaXQgb24gY3Bfd3EgaXRzZWxmLlxuIFx0ICovXG4tXHRhdG9taWNfc2V0KFx1MDAyNmNwLVx1MDAzZWNwX3N0YXRlLCBSRFNfQ09OTl9SRVNFVFRJTkcpO1xuLVx0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSwgIXRlc3RfYml0KFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuLVx0LyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jayAgKi9cbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZjcC1cdTAwM2VjcF9zZW5kX3cpO1xuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmNwLVx1MDAzZWNwX3JlY3Zfdyk7XG4gXHRsb2NrX3NvY2sob3NvY2stXHUwMDNlc2spO1xuQEAgLTE3Miw2ICYjNDM7MjE2LDkgQEAgdm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0bG9ja19zb2NrKHNvY2stXHUwMDNlc2spO1xuIFx0cmRzX3RjcF9zZXRfY2FsbGJhY2tzKHNvY2ssIGNwKTtcbiBcdHJlbGVhc2Vfc29jayhzb2NrLVx1MDAzZXNrKTtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0X3VubG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpO1xuJiM0MztcdHdha2VfdXBfYWxsKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKTtcbiB9XG4gXG4gLyogQWRkIHRjIHRvIHJkc190Y3BfdGNfbGlzdCBhbmQgc2V0IHRjLVx1MDAzZXRfc29jay4gU2VlIGNvbW1lbnRzXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xuaW5kZXggYTNkYjliMDU3MDg0ZC4uMTNmYTYwYzE5ODViYiAxMDA2NDRcbi0tLSBhL25ldC9yZHMvdGNwX2xpc3Rlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xuQEAgLTI5NSw3ICYjNDM7Mjk1LDExIEBAIGludCByZHNfdGNwX2FjY2VwdF9vbmUoc3RydWN0IHJkc190Y3BfbmV0ICpydG4pXG4gXHRpZiAocnNfdGNwLVx1MDAzZXRfc29jaykge1xuIFx0XHQvKiBEdWVsbGluZyBTWU4gaGFzIGJlZW4gaGFuZGxlZCBpbiByZHNfdGNwX2FjY2VwdF9vbmUoKSAqL1xuIFx0XHRyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhuZXdfc29jaywgY3ApO1xuLVx0XHQvKiByZHNfY29ubmVjdF9wYXRoX2NvbXBsZXRlKCkgbWFya3MgUkRTX0NPTk5fVVAgKi9cbiYjNDM7XHRcdC8qIHJkc19jb25uZWN0X3BhdGhfY29tcGxldGUoKSBtYXJrcyBSRFNfQ09OTl9VUCwgb3IsXG4mIzQzO1x0XHQgKiBpZiBhIGNvbmN1cnJlbnQgc2h1dGRvd24gd29uIHRoZSBkdWVsLCBkcm9wcyB0aGVcbiYjNDM7XHRcdCAqIHBhdGggYWdhaW4gYW5kIHRoZSBwYXNzIHRoYXQgZHJvcCBxdWV1ZXMgcmVhcHMgdGhlXG4mIzQzO1x0XHQgKiBzb2NrZXQgaW5zdGFsbGVkIGFib3ZlLlxuJiM0MztcdFx0ICovXG4gXHRcdHJkc19jb25uZWN0X3BhdGhfY29tcGxldGUoY3AsIFJEU19DT05OX1JFU0VUVElORyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRyZHNfdGNwX3NldF9jYWxsYmFja3MobmV3X3NvY2ssIGNwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSRFMmIzM0OywKICAgICYjMzQ7UkRTX1RDUCYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jkc19jb25uX3NodXRkb3duJiMzNDssCiAgICAmIzM0O3Jkc19zZW5kX3htaXQmIzM0OywKICAgICYjMzQ7cmRzX3RjcF9yZXNldF9jYWxsYmFja3MmIzM0OywKICAgICYjMzQ7cmRzX3RjcF9hY2NlcHRfb25lJiMzNDssCiAgICAmIzM0O3Jkc19pYl9yZWN2X3JlZmlsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgbWVjaGFuaXNtcyAoc3BlY2lmaWNhbGx5IFJEU19JTl9YTUlUIGFuZCBSRFNfUkVDVl9SRUZJTEwgYml0bG9ja3MsIHdhaXRxdWV1ZSBiYXJyaWVycywgYW5kIHN0YXRlIHRyYW5zaXRpb25zKSBpbiBSRFMgY29ubmVjdGlvbiB0ZWFyZG93biwgc2VuZCwgcmVjZWl2ZS1yZWZpbGwsIGFuZCBUQ1Agc29ja2V0IHN3YXBwaW5nIHBhdGhzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbmV0d29yayBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZmUzNzY3OTBiN2M5ZGNmM2U2ZjUzMWU1NjVmMjM3N2ZjZWZiM2FlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjggMjI6NDc6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCmluZGV4IDdjOGFiOGU5NzNlMWIuLmI2YzRiZWI1MGVhZjAgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvY29ubmVjdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCkBAIC0xMDYsMTAgJiM0MzsxMDYsMTIgQEAgc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwKIH0KIAogLyoKLSAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRyYW5zcG9ydHMgYXMgdGhleSYjMzk7cmUgYnJpbmdpbmcgZG93biBhIGNvbm5lY3Rpb24uCi0gKiBJdCBjbGVhcnMgcGFydGlhbCBtZXNzYWdlIHN0YXRlIHNvIHRoYXQgdGhlIHRyYW5zcG9ydCBjYW4gc3RhcnQgc2VuZGluZwotICogYW5kIHJlY2VpdmluZyBvdmVyIHRoaXMgY29ubmVjdGlvbiBhZ2FpbiBpbiB0aGUgZnV0dXJlLiAgSXQgaXMgdXAgdG8KLSAqIHRoZSB0cmFuc3BvcnQgdG8gaGF2ZSBzZXJpYWxpemVkIHRoaXMgY2FsbCB3aXRoIGl0cyBzZW5kIGFuZCByZWN2LgomIzQzOyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHJkc19jb25uX3NodXRkb3duKCkgb25jZSB0aGUgdHJhbnNwb3J0IGhhcyBicm91Z2h0CiYjNDM7ICogYSBwYXRoIGRvd24uICBJdCBjbGVhcnMgcGFydGlhbCBtZXNzYWdlIHN0YXRlIHNvIHRoYXQgdGhlIHRyYW5zcG9ydAomIzQzOyAqIGNhbiBzdGFydCBzZW5kaW5nIGFuZCByZWNlaXZpbmcgb3ZlciB0aGlzIHBhdGggYWdhaW4gaW4gdGhlIGZ1dHVyZS4KJiM0MzsgKiBUaGUgY2FsbGVyIG93bnMgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBhY3Jvc3MgdGhpcyBjYWxsLAomIzQzOyAqIHdoaWNoIGlzIHdoYXQgc2VyaWFsaXplcyBpdCBhZ2FpbnN0IHRoZSBzZW5kIGFuZCByZWNlaXZlLXJlZmlsbAomIzQzOyAqIHBhdGhzLgogICovCiBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKIHsKQEAgLTEyMCw3ICYjNDM7MTIyLDE2IEBAIHN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogCiAJcmRzX3N0YXRzX2luYyhzX2Nvbm5fcmVzZXQpOwogCXJkc19zZW5kX3BhdGhfcmVzZXQoY3ApOwotCWNwLSZndDtjcF9mbGFncyA9IDA7CiYjNDM7CiYjNDM7CS8qIENsZWFyIHRoZSBiaXRzIHRoZSByZXNldCBpcyByZXNwb25zaWJsZSBmb3IgaW5kaXZpZHVhbGx5OiBhCiYjNDM7CSAqIGJsYW5rZXQgY3BfZmxhZ3MgPSAwIGlzIGEgcGxhaW4gc3RvcmUgdGhhdCBjYW4gY2xvYmJlciBhCiYjNDM7CSAqIGNvbmN1cnJlbnQgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIG9uIHRoZSBzYW1lIHdvcmQuCiYjNDM7CSAqIFJEU19JTl9YTUlUIGFuZCBSRFNfUkVDVl9SRUZJTEwgYXJlIGhlbGQgYXMgbG9ja3MgYnkgdGhlCiYjNDM7CSAqIGNhbGxlciwgcmRzX2Nvbm5fc2h1dGRvd24oKSwgd2hpY2ggcmVsZWFzZXMgdGhlbSBvbmNlIHRoZQomIzQzOwkgKiB0ZWFyZG93biBpcyBjb21wbGV0ZS4KJiM0MzsJICovCiYjNDM7CWNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CWNsZWFyX2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKTsKIAogCS8qIERvIG5vdCBjbGVhciBuZXh0X3J4X3NlcSBoZXJlLCBlbHNlIHdlIGNhbm5vdCBkaXN0aW5ndWlzaAogCSAqIHJldHJhbnNtaXR0ZWQgcGFja2V0cyBmcm9tIG5ldyBwYWNrZXRzLCBhbmQgd2lsbCBoYW5kIGFsbApAQCAtNDA2LDI4ICYjNDM7NDE3LDcwIEBAIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogCQl9CiAJCW11dGV4X3VubG9jaygmYW1wO2NwLSZndDtjcF9jbV9sb2NrKTsKIAomIzQzOwkJLyogUXVpZXNjZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUtcmVmaWxsIHBhdGhzIGJ5CiYjNDM7CQkgKiBhY3F1aXJpbmcgdGhlaXIgYml0IGxvY2tzLCBub3QgbWVyZWx5IHdhaXRpbmcgZm9yCiYjNDM7CQkgKiB0aGVtIHRvIGJlIHJlbGVhc2VkOiB3aXRoIGEgcGxhaW4gd2FpdCwgZWl0aGVyIHBhdGgKJiM0MzsJCSAqIGNhbiByZS10YWtlIGl0cyBsb2NrIHRoZSBpbnN0YW50IGFmdGVyIHdlIHNhbXBsZSBpdAomIzQzOwkJICogY2xlYXIgYW5kIHRoZW4gcnVuIGNvbmN1cnJlbnRseSB3aXRoIHRoZSB0cmFuc3BvcnQKJiM0MzsJCSAqIHNodXRkb3duIGFuZCB0aGUgcGF0aCByZXNldCBiZWxvdy4gIEhvbGRpbmcgYm90aAomIzQzOwkJICogbG9ja3MgYWNyb3NzIHRoZSB0ZWFyZG93biBtYWtlcyB0aGF0IHN0cnVjdHVyYWxseQomIzQzOwkJICogaW1wb3NzaWJsZS4KJiM0MzsJCSAqLwogCQl3YWl0X2V2ZW50KGNwLSZndDtjcF93YWl0cSwKLQkJCSAgICF0ZXN0X2JpdChSRFNfSU5fWE1JVCwgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpKTsKJiM0MzsJCQkgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwogCQl3YWl0X2V2ZW50KGNwLSZndDtjcF93YWl0cSwKLQkJCSAgICF0ZXN0X2JpdChSRFNfUkVDVl9SRUZJTEwsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7CiYjNDM7CQkJICAgIXRlc3RfYW5kX3NldF9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwogCiAJCWNvbm4tJmd0O2NfdHJhbnMtJmd0O2Nvbm5fcGF0aF9zaHV0ZG93bihjcCk7CiAJCXJkc19jb25uX3BhdGhfcmVzZXQoY3ApOwogCiYjNDM7CQkvKiBSZWxlYXNlIHRoZSB0d28gbG9ja3MgYW5kIHdha2UgYW55IHdhaXRlciAoZS5nLgomIzQzOwkJICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSkgdGhhdCBibG9ja2VkIG9uIHRoZW0gd2hpbGUKJiM0MzsJCSAqIHdlIGhlbGQgdGhlbS4gIFRoZSB1bmxvY2sgb3JkZXJzIHRoZSB0cmFuc3BvcnQmIzM5O3MgcmluZwomIzQzOwkJICogcmUtaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBwYXRoIHJlc2V0IGFib3ZlIGJlZm9yZQomIzQzOwkJICogZWl0aGVyIGJpdCBpcyBzZWVuIGNsZWFyLiAgcmRzX2Nvbm5fcGF0aF9yZXNldCgpIGxlYXZlcwomIzQzOwkJICogYm90aCBiaXRzIGFsb25lOiBvd25lcnNoaXAgZW5kcyBoZXJlLCBub3QgaW5zaWRlIHRoZQomIzQzOwkJICogcmVzZXQuCiYjNDM7CQkgKi8KJiM0MzsJCWNsZWFyX2JpdF91bmxvY2soUkRTX0lOX1hNSVQsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKTsKJiM0MzsJCWNsZWFyX2JpdF91bmxvY2soUkRTX1JFQ1ZfUkVGSUxMLCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CQl3YWtlX3VwX2FsbCgmYW1wO2NwLSZndDtjcF93YWl0cSk7CiYjNDM7CiAJCWlmICghcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9ESVNDT05ORUNUSU5HLAotCQkJCQkgICAgICBSRFNfQ09OTl9ET1dOKSAmYW1wOyZhbXA7Ci0JCSAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9FUlJPUiwKIAkJCQkJICAgICAgUkRTX0NPTk5fRE9XTikpIHsKLQkJCS8qIFRoaXMgY2FuIGhhcHBlbiAtIGVnIHdoZW4gd2UmIzM5O3JlIGluIHRoZSBtaWRkbGUgb2YgdGVhcmluZwotCQkJICogZG93biB0aGUgY29ubmVjdGlvbiwgYW5kIHNvbWVvbmUgdW5sb2FkcyB0aGUgcmRzIG1vZHVsZS4KLQkJCSAqIFF1aXRlIHJlcHJvZHVjaWJsZSB3aXRoIGxvb3BiYWNrIGNvbm5lY3Rpb25zLgotCQkJICogTW9zdGx5IGhhcm1sZXNzLgomIzQzOwkJCS8qIFRoZSBwYXRoIHdhcyBkcm9wcGVkIGFnYWluIHdoaWxlIHdlIHRvcmUgaXQKJiM0MzsJCQkgKiBkb3duOiBieSBhIHNvY2tldCBzdGF0ZS1jaGFuZ2UgY2FsbGJhY2sgaW4KJiM0MzsJCQkgKiBpcnEgY29udGV4dCBvbiByZWNlaXB0IG9mIGEgRklOLCBvciBieSBhbgomIzQzOwkJCSAqIGFjY2VwdCB0aGF0IGNsYWltZWQgdGhlIHBhdGgganVzdCBiZWZvcmUgYQomIzQzOwkJCSAqIGRyb3AgcHV0IGl0IGJhY2sgdG8gUkRTX0NPTk5fRVJST1IgYW5kIHRoZW4KJiM0MzsJCQkgKiBpbnN0YWxsZWQgYSBmcmVzaCBzb2NrZXQgb24gaXQuICBVbmxlc3MgYQomIzQzOwkJCSAqIHBlbmRpbmcgZGVzdHJveSBzdXBwcmVzc2VkIGl0LCB0aGUgZHJvcCBhbHNvCiYjNDM7CQkJICogcXVldWVkIGFub3RoZXIgc2h1dGRvd24gcGFzcywgYW5kIHRoYXQgcGFzcwomIzQzOwkJCSAqIG11c3QgcnVuLCBiZWNhdXNlIGl0IGlzIHdoYXQgdGVhcnMgZG93bgomIzQzOwkJCSAqIHdoYXRldmVyIGF0dGFjaGVkIHRvIHRoZSBwYXRoIGFmdGVyIHRoZQomIzQzOwkJCSAqIHRyYW5zcG9ydCBzaHV0ZG93biBhYm92ZSBzYW1wbGVkIGl0cyBzdGF0ZS4KJiM0MzsJCQkgKiBDb25zdW1pbmcgdGhlIFJEU19DT05OX0VSUk9SIGhlcmUgd291bGQgdHVybgomIzQzOwkJCSAqIHRoYXQgcGFzcyBpbnRvIGEgbm8tb3A6IGxlYXZlIHRoZSBzdGF0ZQomIzQzOwkJCSAqIGFsb25lLCBhbmQgbGV0IHRoZSBwYXNzIGZpbmlzaCB0aGUgam9iLgogCQkJICoKLQkJCSAqIE5vdGUgdGhhdCB0aGlzIGFsc28gaGFwcGVucyB3aXRoIHJkcy10Y3AgYmVjYXVzZQotCQkJICogd2UgY291bGQgaGF2ZSB0cmlnZ2VyZWQgcmRzX2Nvbm5fcGF0aF9kcm9wIGluIGlycQotCQkJICogbW9kZSBmcm9tIHJkc190Y3Bfc3RhdGUgY2hhbmdlIG9uIHRoZSByZWNlaXB0IG9mCi0JCQkgKiBhIEZJTiwgdGh1cyB3ZSBuZWVkIHRvIHJlY2hlY2sgZm9yIFJEU19DT05OX0VSUk9SCi0JCQkgKiBoZXJlLgomIzQzOwkJCSAqIFF1aWVzY2UgdGhlIHJlY29ubmVjdCB0aW1lciBiZWZvcmUgYmFpbGluZwomIzQzOwkJCSAqIG91dCwgdGhvdWdoLiAgV2hlbiBhIHBlbmRpbmcgZGVzdHJveSBkaWQKJiM0MzsJCQkgKiBzdXBwcmVzcyB0aGUgcXVldWUsIG5vIGxhdGVyIHBhc3MgcnVucywgYW5kCiYjNDM7CQkJICogcmRzX2Nvbm5fcGF0aF9kZXN0cm95KCkgaXMgYWJvdXQgdG8gZmx1c2gKJiM0MzsJCQkgKiBjcF9kb3duX3cgYW5kIGZyZWUgdGhlIHBhdGg6IGl0IG11c3Qgbm90CiYjNDM7CQkJICogZmluZCBjcF9jb25uX3cgc3RpbGwgYXJtZWQuICBBIHN1Y2Nlc3NvcgomIzQzOwkJCSAqIHBhc3MsIHdoZW4gdGhlcmUgaXMgb25lLCByZS1hcm1zIHRoZQomIzQzOwkJCSAqIHJlY29ubmVjdCBmcm9tIGl0cyBvd24gdGFpbC4KJiM0MzsJCQkgKi8KJiM0MzsJCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3BfY29ubl93KTsKJiM0MzsJCQljbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CiYjNDM7CQkJaWYgKHJkc19jb25uX3BhdGhfc3RhdGUoY3ApID09IFJEU19DT05OX0VSUk9SKQomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJLyogTm8gY3VycmVudCBjcF9zdGF0ZSB3cml0ZXIgbGVhdmVzIGEKJiM0MzsJCQkgKiBESVNDT05ORUNUSU5HIHBhdGggaW4gYW55IHN0YXRlIGJ1dAomIzQzOwkJCSAqIFJEU19DT05OX0VSUk9SOyByZXBvcnQgbG91ZGx5IGlmIG9uZSBldmVyCiYjNDM7CQkJICogZG9lcy4KIAkJCSAqLwogCQkJcmRzX2Nvbm5fcGF0aF9lcnJvcihjcCwgJiMzNDslczogZmFpbGVkIHRvIHRyYW5zaXRpb24gJiMzNDsKIAkJCQkJICAgICYjMzQ7dG8gc3RhdGUgRE9XTiwgY3VycmVudCBzdGF0ZSAmIzM0OwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZWN2LmMgYi9uZXQvcmRzL2liX3JlY3YuYwppbmRleCAzNTcxMjhkMzRhNTQ2Li5iZDZjYjNmZmFhNTcxIDEwMDY0NAotLS0gYS9uZXQvcmRzL2liX3JlY3YuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL2liX3JlY3YuYwpAQCAtMzYzLDE1ICYjNDM7MzYzLDE0IEBAIHN0YXRpYyBpbnQgYWNxdWlyZV9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQogCiBzdGF0aWMgdm9pZCByZWxlYXNlX3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiB7Ci0JY2xlYXJfYml0KFJEU19SRUNWX1JFRklMTCwgJmFtcDtjb25uLSZndDtjX2ZsYWdzKTsKLQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwomIzQzOwljbGVhcl9iaXRfdW5sb2NrKFJEU19SRUNWX1JFRklMTCwgJmFtcDtjb25uLSZndDtjX2ZsYWdzKTsKIAogCS8qIFdlIGRvbiYjMzk7dCB1c2Ugd2FpdF9vbl9iaXQoKS93YWtlX3VwX2JpdCgpIGJlY2F1c2Ugb3VyIHdha2luZyBpcyBpbiBhCiAJICogaG90IHBhdGggYW5kIGZpbmRpbmcgd2FpdGVycyBpcyB2ZXJ5IHJhcmUuICBXZSBkb24mIzM5O3Qgd2FudCB0byB3YWxrCiAJICogdGhlIHN5c3RlbS13aWRlIGhhc2hlZCB3YWl0cXVldWUgYnVja2V0cyBpbiB0aGUgZmFzdCBwYXRoIG9ubHkgdG8KIAkgKiBhbG1vc3QgbmV2ZXIgZmluZCB3YWl0ZXJzLgogCSAqLwotCWlmICh3YWl0cXVldWVfYWN0aXZlKCZhbXA7Y29ubi0mZ3Q7Y193YWl0cSkpCiYjNDM7CWlmICh3cV9oYXNfc2xlZXBlcigmYW1wO2Nvbm4tJmd0O2Nfd2FpdHEpKQogCQl3YWtlX3VwX2FsbCgmYW1wO2Nvbm4tJmd0O2Nfd2FpdHEpOwogfQogCkBAIC0zOTIsNyAmIzQzOzM5MSw5IEBAIHZvaWQgcmRzX2liX3JlY3ZfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgaW50IHByZWZpbGwsIGdmcF90IGdmcCkKIAogCS8qIHRoZSBnb2FsIGhlcmUgaXMgdG8ganVzdCBtYWtlIHN1cmUgdGhhdCBzb21lb25lLCBzb21ld2hlcmUKIAkgKiBpcyBwb3N0aW5nIGJ1ZmZlcnMuICBJZiB3ZSBjYW4mIzM5O3QgZ2V0IHRoZSByZWZpbGwgbG9jaywKLQkgKiBsZXQgdGhlbSBkbyB0aGVpciB0aGluZwomIzQzOwkgKiBsZXQgdGhlbSBkbyB0aGVpciB0aGluZy4gIFRoZSBob2xkZXIgbWF5IGFsc28gYmUKJiM0MzsJICogcmRzX2Nvbm5fc2h1dGRvd24oKSB0ZWFyaW5nIHRoZSBwYXRoIGRvd24sIGluIHdoaWNoIGNhc2UKJiM0MzsJICogdGhlcmUgaXMgbm90aGluZyB0byBwb3N0LgogCSAqLwogCWlmICghYWNxdWlyZV9yZWZpbGwoY29ubikpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmMKaW5kZXggMTVhMWI5N2YxM2U3Ni4uMWFmYTk4MWU1YzA2ZCAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9zZW5kLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9zZW5kLmMKQEAgLTExNCw4ICYjNDM7MTE0LDEzIEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfaW5feG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJICogaG90IHBhdGggYW5kIGZpbmRpbmcgd2FpdGVycyBpcyB2ZXJ5IHJhcmUuICBXZSBkb24mIzM5O3Qgd2FudCB0byB3YWxrCiAJICogdGhlIHN5c3RlbS13aWRlIGhhc2hlZCB3YWl0cXVldWUgYnVja2V0cyBpbiB0aGUgZmFzdCBwYXRoIG9ubHkgdG8KIAkgKiBhbG1vc3QgbmV2ZXIgZmluZCB3YWl0ZXJzLgomIzQzOwkgKgomIzQzOwkgKiB3cV9oYXNfc2xlZXBlcigpIHN1cHBsaWVzIHRoZSBmdWxsIGJhcnJpZXIgdGhhdCBvcmRlcnMgdGhlIHdhaXQKJiM0MzsJICogcXVldWUgcmVhZCBhZnRlciB0aGUgYml0IGNsZWFyOyBjbGVhcl9iaXRfdW5sb2NrKCkgYWxvbmUgaXMgb25seQomIzQzOwkgKiBhIHJlbGVhc2UgYW5kIHdvdWxkIGxldCB0aGlzIGNoZWNrIHJlYWQgYSBzdGFsZSBlbXB0eSBxdWV1ZSwKJiM0MzsJICogbG9zaW5nIHRoZSB3YWtlLXVwLgogCSAqLwotCWlmICh3YWl0cXVldWVfYWN0aXZlKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKSkKJiM0MzsJaWYgKHdxX2hhc19zbGVlcGVyKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKSkKIAkJd2FrZV91cF9hbGwoJmFtcDtjcC0mZ3Q7Y3Bfd2FpdHEpOwogfQogCkBAIC0yMzksOCAmIzQzOzI0NCwxMSBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJV1JJVEVfT05DRShjcC0mZ3Q7Y3Bfc2VuZF9nZW4sIHNlbmRfZ2VuKTsKIAogCS8qCi0JICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIHRlc3RzIFJEU19JTl9YTUlULAotCSAqIHdlIGRvIHRoZSBvcHBvc2l0ZSB0byBhdm9pZCByYWNlcy4KJiM0MzsJICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIGFjcXVpcmVzCiYjNDM7CSAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZS4KJiM0MzsJICogT3duZXJzaGlwIGlzIGRlY2lkZWQgYnkgdGhlIGF0b21pYyBSTVcgb24gdGhlIGNwX2ZsYWdzIHdvcmQ6CiYjNDM7CSAqIGlmIHRoZSB0ZWFyZG93biB3b24gdGhlIGJpdCB3ZSBiYWNrIG9mZiBoZXJlLCBhbmQgaWYgd2Ugd29uCiYjNDM7CSAqIGl0IHRoZSB0ZWFyZG93biB3YWl0cyB1bnRpbCB3ZSByZWxlYXNlIGl0LgogCSAqLwogCWlmICghcmRzX2Nvbm5fcGF0aF91cChjcCkpIHsKIAkJcmVsZWFzZV9pbl94bWl0KGNwKTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwLmMgYi9uZXQvcmRzL3RjcC5jCmluZGV4IGIyNjM2MzRhYzc1MGQuLjc3NGE3MWY4OGQzNzUgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy90Y3AuYwpAQCAtMTE1LDQ2ICYjNDM7MTE1LDkwIEBAIHZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogfQogCiAvKgotICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSBzd2l0Y2hlcyB0aGUgdG8gdGhlIG5ldyBzb2NrIGFuZAotICogcmV0dXJucyB0aGUgZXhpc3RpbmcgdGMtJmd0O3Rfc29jay4KJiM0MzsgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpIHN3aXRjaGVzIGEgcGF0aCB0byBhIG5ldyBzb2NrZXQgYW5kCiYjNDM7ICogcmVsZWFzZXMgdGhlIG9sZCBvbmUgaXQgZmluZHMgaW4gdGMtJmd0O3Rfc29jaywgcmVzb2x2aW5nIGEgZHVlbGxpbmcKJiM0MzsgKiBTWU4uCiAgKgotICogVGhlIG9ubHkgZnVuY3Rpb25zIHRoYXQgc2V0IHRjLSZndDt0X3NvY2sgYXJlIHJkc190Y3Bfc2V0X2NhbGxiYWNrcwotICogYW5kIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzLiAgU2VuZCBhbmQgcmVjZWl2ZSB0cnVzdCB0aGF0Ci0gKiBpdCBpcyBzZXQuICBUaGUgYWJzZW5jZSBvZiBSRFNfQ09OTl9VUCBiaXQgcHJvdGVjdHMgdGhvc2UgcGF0aHMKLSAqIGZyb20gYmVpbmcgY2FsbGVkIHdoaWxlIGl0IGlzbiYjMzk7dCBzZXQuCiYjNDM7ICogdGMtJmd0O3Rfc29jayBpcyBzZXQgYnkgcmRzX3RjcF9zZXRfY2FsbGJhY2tzKCkgYW5kIGNsZWFyZWQgYnkKJiM0MzsgKiByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKCkuICBGb3VyIHBhdGhzIHdyaXRlIGl0OiB0aGUgYWN0aXZlCiYjNDM7ICogY29ubmVjdCBpbiByZHNfdGNwX2Nvbm5fcGF0aF9jb25uZWN0KCksIHdoaWNoIHNldHMgaXQgYW5kIGNsZWFycyBpdAomIzQzOyAqIGFnYWluIG9uIGZhaWx1cmU7IHRoZSBhY2NlcHQgcGF0aCBpbiByZHNfdGNwX2FjY2VwdF9vbmUoKSwgd2hpY2gKJiM0MzsgKiBzZXRzIGl0IGZvciBhIHBhdGggd2l0aCBubyBzb2NrZXQgeWV0OyB0aGUgdGVhcmRvd24gaW4KJiM0MzsgKiByZHNfdGNwX2Nvbm5fcGF0aF9zaHV0ZG93bigpLCB3aGljaCBjbGVhcnMgaXQ7IGFuZCB0aGUgc3dhcCBkb25lCiYjNDM7ICogaGVyZSwgd2hpY2ggZG9lcyBib3RoLiAgVGhlIGNvbm5lY3QgYW5kIGFjY2VwdCBwYXRocyBhcmUgc2VyaWFsaXplZAomIzQzOyAqIGFnYWluc3QgZWFjaCBvdGhlciBieSB0X2Nvbm5fcGF0aF9sb2NrLiAgU2VuZCBhbmQgcmVjZWl2ZSB0cnVzdAomIzQzOyAqIHRoYXQgaXQgaXMgc2V0OiB0aGUgYWJzZW5jZSBvZiBSRFNfQ09OTl9VUCBwcm90ZWN0cyB0aG9zZSBwYXRocwomIzQzOyAqIGZyb20gYmVpbmcgY2FsbGVkIHdoaWxlIGl0IGlzbiYjMzk7dCwgYW5kIHRoZSBzd2FwIGRvbmUgaGVyZSBydW5zIHVuZGVyCiYjNDM7ICogUkRTX0lOX1hNSVQgc28gdGhhdCBpdCBjYW5ub3QgaW50ZXJsZWF2ZSB3aXRoIGEgc2VuZGVyIGFscmVhZHkKJiM0MzsgKiBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpLgogICovCiB2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkgICAgIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKIHsKIAlzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLSZndDtjcF90cmFuc3BvcnRfZGF0YTsKLQlzdHJ1Y3Qgc29ja2V0ICpvc29jayA9IHRjLSZndDt0X3NvY2s7Ci0KLQlpZiAoIW9zb2NrKQotCQlnb3RvIG5ld3NvY2s7CiYjNDM7CXN0cnVjdCBzb2NrZXQgKm9zb2NrOwogCiAJLyogTmVlZCB0byByZXNvbHZlIGEgZHVlbGxpbmcgU1lOIGJldHdlZW4gcGVlcnMuCiAJICogV2UgaGF2ZSBhbiBvdXRzdGFuZGluZyBTWU4gdG8gdGhpcyBwZWVyLCB3aGljaCBtYXkKIAkgKiBwb3RlbnRpYWxseSBoYXZlIHRyYW5zaXRpb25lZCB0byB0aGUgUkRTX0NPTk5fVVAgc3RhdGUsCiAJICogc28gd2UgbXVzdCBxdWllc2NlIGFueSBzZW5kIHRocmVhZHMgYmVmb3JlIHJlc2V0dGluZwotCSAqIGNwX3RyYW5zcG9ydF9kYXRhLiBXZSBxdWllc2NlIHRoZXNlIHRocmVhZHMgYnkgc2V0dGluZwotCSAqIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFJEU19DT05OX1VQLCBhbmQgdGhlbgotCSAqIHdhaXRpbmcgZm9yIGFueSBleGlzdGluZyB0aHJlYWRzIGluIHJkc19zZW5kX3htaXQgdG8KLQkgKiBjb21wbGV0ZSByZWxlYXNlX2luX3htaXQoKS4gKFN1YnNlcXVlbnQgdGhyZWFkcyBlbnRlcmluZwotCSAqIHJkc19zZW5kX3htaXQoKSB3aWxsIGJhaWwgb24gIXJkc19jb25uX3VwKCkuCiYjNDM7CSAqIGNwX3RyYW5zcG9ydF9kYXRhLiAgU2V0dGluZyBjcF9zdGF0ZSB0byBzb21ldGhpbmcgb3RoZXIKJiM0MzsJICogdGhhbiBSRFNfQ09OTl9VUCBzdG9wcyBuZXcgc2VuZGVycywgYW5kIG93bmluZyBSRFNfSU5fWE1JVAomIzQzOwkgKiBleGNsdWRlcyBhbnkgdGhyZWFkIGFscmVhZHkgaW5zaWRlIHJkc19zZW5kX3htaXQoKSAtIG9yIGEKJiM0MzsJICogdGVhcmRvd24gaW4gcmRzX2Nvbm5fc2h1dGRvd24oKSwgd2hpY2ggaG9sZHMgdGhlIHNhbWUgbG9jawomIzQzOwkgKiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB0cmFuc3BvcnQgc2h1dGRvd24gLSBmb3IgdGhlIHdob2xlCiYjNDM7CSAqIHNvY2tldCBzd2FwIGFuZCB0aGUgcmRzX3NlbmRfcGF0aF9yZXNldCgpIGJlbG93LgogCSAqCi0JICogSG93ZXZlciBhbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwCi0JICogbWFya2luZyB0aGUgY29ubiBhcyBSRFNfQ09OTl9VUCwgYW5kIHdvdWxkIGFnYWluIHBlcm1pdAotCSAqIHJkc19zZW5kX3htaSgpIHRocmVhZHMgdGhyb3VnaCwgc28gaWRlYWxseSB3ZSB3b3VsZAotCSAqIHN5bmNocm9uaXplIG9uIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90Ci0JICogZG8gdGhhdDogd2FpdGluZyBvbiAhUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5Ci0JICogZW5kIHVwIGRlYWRsb2NraW5nIHdpdGggdGNwX3NlbmRtc2coKSwgYW5kIHRoZSBSRFNfSU5fWE1JVAotCSAqIHdvdWxkIG5vdCBnZXQgc2V0LiBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG8KLQkgKiBSRFNfQ09OTl9SRVNFVFRUSU5HLCB0byBlbnN1cmUgdGhhdCByZHNfdGNwX3N0YXRlX2NoYW5nZQotCSAqIGNhbm5vdCBtYXJrIHJkc19jb25uX3BhdGhfdXAoKSBpbiB0aGUgd2luZG93IGJlZm9yZSBsb2NrX3NvY2soKQomIzQzOwkgKiBBbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwIG1hcmtpbmcgdGhlCiYjNDM7CSAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpCiYjNDM7CSAqIHRocmVhZHMgdGhyb3VnaCwgc28gaWRlYWxseSB3ZSB3b3VsZCBzeW5jaHJvbml6ZSBvbgomIzQzOwkgKiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdCBkbyB0aGF0OiBhY3F1aXJpbmcKJiM0MzsJICogUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5IGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoCiYjNDM7CSAqIHRjcF9zZW5kbXNnKCksIHdoaWNoIHRha2VzIHRoZSBzb2NrZXQgbG9jayB3aGlsZSBob2xkaW5nCiYjNDM7CSAqIFJEU19JTl9YTUlULiAgQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvCiYjNDM7CSAqIFJEU19DT05OX1JFU0VUVElORywgdG8gZW5zdXJlIHRoYXQgcmRzX3RjcF9zdGF0ZV9jaGFuZ2UKJiM0MzsJICogY2Fubm90IG1hcmsgcmRzX2Nvbm5fcGF0aF91cCgpIGluIHRoZSB3aW5kb3cgYmVmb3JlCiYjNDM7CSAqIGxvY2tfc29jaygpLgomIzQzOwkgKgomIzQzOwkgKiBPbmx5IG1ha2UgdGhhdCB0cmFuc2l0aW9uIGlmIHRoZSBwYXRoIGlzIHN0aWxsIGNvbm5lY3RpbmcKJiM0MzsJICogKG9yIGFscmVhZHkgcmVzZXR0aW5nIGZyb20gYW4gZWFybGllciBkdWVsKS4gIEEgcGF0aCBpbiBhbnkKJiM0MzsJICogb3RoZXIgc3RhdGUgLSB0eXBpY2FsbHkgUkRTX0NPTk5fRElTQ09OTkVDVElORyBvcgomIzQzOwkgKiBSRFNfQ09OTl9FUlJPUiB3aXRoIGEgc2h1dGRvd24gaW4gZmxpZ2h0IC0gaXMgZHJvcHBlZAomIzQzOwkgKiBpbnN0ZWFkLiAgVGhhdCBzdGlsbCByZXBsYWNlcyBpdHMgc3RhdGUsIHdpdGggUkRTX0NPTk5fRVJST1IsCiYjNDM7CSAqIGFuZCwgdW5sZXNzIGEgcGVuZGluZyBkZXN0cm95IGlzIGFib3V0IHRvIHJlYXAgdGhlIHdob2xlCiYjNDM7CSAqIGNvbm5lY3Rpb24gYW55d2F5LCBxdWV1ZXMgb25lIG1vcmUgc2h1dGRvd24gcGFzcy4gIEEgc2h1dGRvd24KJiM0MzsJICogYWxyZWFkeSBpbiBmbGlnaHQgbGVhdmVzIHRoYXQgUkRTX0NPTk5fRVJST1IgYWxvbmUgd2hlbiBpdAomIzQzOwkgKiBmaW5pc2hlczsgdGhlIHF1ZXVlZCBwYXNzIHRoZW4gY29tcGxldGVzIHRoZSB0cmFuc2l0aW9uIHRvCiYjNDM7CSAqIFJEU19DT05OX0RPV04gYW5kIHRlYXJzIGRvd24gYW55dGhpbmcgdGhhdCBhdHRhY2hlZCB0byB0aGUKJiM0MzsJICogcGF0aCBpbiB0aGUgbWVhbnRpbWUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fQ09OTkVDVElORywKJiM0MzsJCQkJICAgICAgUkRTX0NPTk5fUkVTRVRUSU5HKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9SRVNFVFRJTkcsCiYjNDM7CQkJCSAgICAgIFJEU19DT05OX1JFU0VUVElORykpCiYjNDM7CQlyZHNfY29ubl9wYXRoX2Ryb3AoY3AsIDApOwomIzQzOwl3YWl0X2V2ZW50KGNwLSZndDtjcF93YWl0cSwKJiM0MzsJCSAgICF0ZXN0X2FuZF9zZXRfYml0X2xvY2soUkRTX0lOX1hNSVQsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7CiYjNDM7CiYjNDM7CS8qIFJlYWQgdF9zb2NrIG9ubHkgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlULCBuZXZlciBiZWZvcmUgdGhlCiYjNDM7CSAqIHdhaXQ6IHRoZSB0ZWFyZG93biBpbiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGQKJiM0MzsJICogc29ja2V0IGFuZCBjbGVhcnMgdF9zb2NrLCBzbyBhIHBvaW50ZXIgc2FtcGxlZCBlYXJsaWVyIGNhbgomIzQzOwkgKiBiZSBzdGFsZSBieSB0aGUgdGltZSB3ZSB3YWtlIHVwLiAgVGhlIHRlYXJkb3duIGhvbGRzIHRoZQomIzQzOwkgKiBzYW1lIGxvY2sgd2hpbGUgaXQgZG9lcyBzbywgc28gd2hhdCB3ZSByZWFkIGhlcmUgY2Fubm90CiYjNDM7CSAqIGNoYW5nZSB1bmRlciB1cyB1bnRpbCB3ZSByZWxlYXNlIGl0LgomIzQzOwkgKi8KJiM0MzsJb3NvY2sgPSB0Yy0mZ3Q7dF9zb2NrOwomIzQzOwlpZiAoIW9zb2NrKQomIzQzOwkJZ290byBuZXdzb2NrOwomIzQzOwomIzQzOwkvKiByZXNldCByZWNlaXZlIHNpZGUgc3RhdGUgZm9yIHJkc190Y3BfZGF0YV9yZWN2KCkgZm9yIG9zb2NrLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgc3luYyBjYW5jZWxzIHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVCByZWx5IG9uIGNwX3dxCiYjNDM7CSAqIGJlaW5nIG9yZGVyZWQ6IGEgdGVhcmRvd24gYmxvY2tlZCBvbiB0aGUgYml0IG9jY3VwaWVzCiYjNDM7CSAqIGNwX3dxJiMzOTtzIG9ubHkgZXhlY3V0aW9uIHNsb3QsIHNvIGNwX3NlbmRfdyBhbmQgY3BfcmVjdl93IGFyZQomIzQzOwkgKiBwZW5kaW5nIGF0IG1vc3QgYW5kIHRoZSBjYW5jZWxzIG5ldmVyIGZsdXNoLiAgTm90aGluZyBoZXJlCiYjNDM7CSAqIG1heSBmbHVzaCBvciB3YWl0IG9uIGNwX3dxIGl0c2VsZi4KIAkgKi8KLQlhdG9taWNfc2V0KCZhbXA7Y3AtJmd0O2NwX3N0YXRlLCBSRFNfQ09OTl9SRVNFVFRJTkcpOwotCXdhaXRfZXZlbnQoY3AtJmd0O2NwX3dhaXRxLCAhdGVzdF9iaXQoUkRTX0lOX1hNSVQsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7Ci0JLyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jayAgKi8KIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3Bfc2VuZF93KTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3BfcmVjdl93KTsKIAlsb2NrX3NvY2sob3NvY2stJmd0O3NrKTsKQEAgLTE3Miw2ICYjNDM7MjE2LDkgQEAgdm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCWxvY2tfc29jayhzb2NrLSZndDtzayk7CiAJcmRzX3RjcF9zZXRfY2FsbGJhY2tzKHNvY2ssIGNwKTsKIAlyZWxlYXNlX3NvY2soc29jay0mZ3Q7c2spOwomIzQzOwomIzQzOwljbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CXdha2VfdXBfYWxsKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKTsKIH0KIAogLyogQWRkIHRjIHRvIHJkc190Y3BfdGNfbGlzdCBhbmQgc2V0IHRjLSZndDt0X3NvY2suIFNlZSBjb21tZW50cwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uYwppbmRleCBhM2RiOWIwNTcwODRkLi4xM2ZhNjBjMTk4NWJiIDEwMDY0NAotLS0gYS9uZXQvcmRzL3RjcF9saXN0ZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcF9saXN0ZW4uYwpAQCAtMjk1LDcgJiM0MzsyOTUsMTEgQEAgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bikKIAlpZiAocnNfdGNwLSZndDt0X3NvY2spIHsKIAkJLyogRHVlbGxpbmcgU1lOIGhhcyBiZWVuIGhhbmRsZWQgaW4gcmRzX3RjcF9hY2NlcHRfb25lKCkgKi8KIAkJcmRzX3RjcF9yZXNldF9jYWxsYmFja3MobmV3X3NvY2ssIGNwKTsKLQkJLyogcmRzX2Nvbm5lY3RfcGF0aF9jb21wbGV0ZSgpIG1hcmtzIFJEU19DT05OX1VQICovCiYjNDM7CQkvKiByZHNfY29ubmVjdF9wYXRoX2NvbXBsZXRlKCkgbWFya3MgUkRTX0NPTk5fVVAsIG9yLAomIzQzOwkJICogaWYgYSBjb25jdXJyZW50IHNodXRkb3duIHdvbiB0aGUgZHVlbCwgZHJvcHMgdGhlCiYjNDM7CQkgKiBwYXRoIGFnYWluIGFuZCB0aGUgcGFzcyB0aGF0IGRyb3AgcXVldWVzIHJlYXBzIHRoZQomIzQzOwkJICogc29ja2V0IGluc3RhbGxlZCBhYm92ZS4KJiM0MzsJCSAqLwogCQlyZHNfY29ubmVjdF9wYXRoX2NvbXBsZXRlKGNwLCBSRFNfQ09OTl9SRVNFVFRJTkcpOwogCX0gZWxzZSB7CiAJCXJkc190Y3Bfc2V0X2NhbGxiYWNrcyhuZXdfc29jaywgY3ApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTc3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgd29ydGggdGhlIHRpbWUgdG8gdGhyb3cgc29tZSBmdXp6aW5nIGF0IGl0LiBMb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYG5ldC9yZHMvYCDigJMgdGhhdCBzY3JlYW1zIFJEUywgUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cy4gUmlnaHQsIEFGX1JEUyBzb2NrZXRzLiBUaGlzIGlzIGEgcHJldHR5IGNyaXRpY2FsIG5ldHdvcmtpbmcgcHJvdG9jb2wsIGFuZCBpdCBydW5zIGluIHRob3NlIHVzdWFsIGVudmlyb25tZW50cyDigJMgc3RhbmRhcmQsIFFFTVUsIEdDRSDigJMgYWNjZXNzaWJsZSB0aHJvdWdoIHNvY2tldHMgb3IgbG9vcGJhY2svVENQLiBUaGF0JiMzOTtzIGdvb2QgY292ZXJhZ2UgZm9yIGZ1enppbmcgdGFyZ2V0cy4KClNwZWNpZmljYWxseSwgdGhlIHBhdGNoIHRvdWNoZXMgYGNvbm5lY3Rpb24uY2AsIGBpYl9yZWN2LmNgLCBgc2VuZC5jYCwgYHRjcC5jYCwgYW5kIGB0Y3BfbGlzdGVuLmNgLiBIbW0sIHRob3NlIGZpbGUgbmFtZXMgdGhlbXNlbHZlcyBhcmUgaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSB0YWxraW5nIGxvY2tpbmcsIHN0YXRlIHRyYW5zaXRpb25zLCBzeW5jaHJvbml6YXRpb24gZHVyaW5nIGNvbm5lY3Rpb24gc2h1dGRvd24sIFRDUCB0cmFuc3BvcnQgcmVzZXQgY2FsbGJhY2tzLCByZWZpbGwgbG9ja2luZywgYW5kIHNlbmQgeG1pdCBmdW5jdGlvbnMuIFRoaXMgY291bGQgYmUgZ29sZCEgTG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlcyBhcmUgdGhlIGtpbmQgb2YgdGhpbmdzIGZ1enppbmcgbG92ZXMgdG8gZXhwb3NlLiBTdGF0ZSB0cmFuc2l0aW9ucyBhcmUgYW5vdGhlciBsaWtlbHkgc291cmNlIG9mIHdlaXJkbmVzcy4gVENQLXNwZWNpZmljIGNoYW5nZXMsIHRvbywgbWVhbiBtb3JlIHN1cmZhY2UgYXJlYS4gUmVmaWxsIGxvY2tpbmcgaXMgYW4gaW50ZXJlc3RpbmcgdmVjdG9yLiBTZW5kIHhtaXQgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgc28gZXZlbiB0aGUgbW9zdCBiYXNpYyBlcnJvciBoZXJlIHdvdWxkIGNhdXNlIHRyb3VibGUuCgpOb3csIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBmaWxlcyBhbmQgY2hlY2sgdGhlIEtjb25maWcgZm9yIFJEUy4uLiBHb3R0YSBtYWtlIHN1cmUgaXQmIzM5O3MgZW5hYmxlZCBhbmQgd2UgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zIGJlZm9yZSB3YXN0aW5nIHRpbWUgZnV6emluZyBzb21ldGhpbmcgdGhhdCYjMzk7cyBub3QgZXZlbiBidWlsdCBpbnRvIHRoZSBrZXJuZWwuIEFmdGVyIHRoYXQsIHdlIGRpdmUgaW4gYW5kIGFzc2VzcyB0aGUgZnVuY3Rpb25zIGltcGFjdGVkIHRvIGxvb2sgYXQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgdGhlIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJEUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnLTItXG5uZXQvcmRzL0tjb25maWc6Mzpjb25maWcgUkRTXG5uZXQvcmRzL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O1RoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXCYjMzQ7XG4tLVxubmV0L3Jkcy9LY29uZmlnLTktXG5uZXQvcmRzL0tjb25maWc6MTA6Y29uZmlnIFJEU19SRE1BXG5uZXQvcmRzL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBJbmZpbmliYW5kXCYjMzQ7XG4tLVxubmV0L3Jkcy9LY29uZmlnLTE2LVxubmV0L3Jkcy9LY29uZmlnOjE3OmNvbmZpZyBSRFNfVENQXG5uZXQvcmRzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBUQ1BcJiMzNDtcbi0tXG5uZXQvcmRzL0tjb25maWctMjQtXG5uZXQvcmRzL0tjb25maWc6MjU6Y29uZmlnIFJEU19ERUJVR1xubmV0L3Jkcy9LY29uZmlnLTI2LVx0Ym9vbCBcJiMzNDtSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcwMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBSRFMgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFJlbW90ZSBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoUkRNQSkgb3ZlciBUQ1AgKFJEUykga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHRoZSB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUuIFNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gY3JhY2sgb3BlbiB0aGUgYG5ldC9yZHMvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gcGxhY2UgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLCByaWdodD8gSXQmIzM5O2xsIGxheSBvdXQgYWxsIHRoZSByZWxhdGlvbnNoaXBzIGFuZCBwb3NzaWJpbGl0aWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBpbiB0aGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGJ1aWxkIHNldHRpbmdzIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBGcm9tIHRoZXJlLCBJIGNhbiBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIHRvIGNvbmZpZ3VyaW5nIGl0IHRvIHdvcmsgd2l0aGluIG91ciBzcGVjaWZpYyBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yZHMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdGNvbmZpZyBSRFNcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXCYjMzQ7XG4gICA1Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgVGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgcHJvdG9jb2wgcHJvdmlkZXMgcmVsaWFibGUsXG4gICA4Olx0XHQgIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiBkYXRhZ3JhbXMgb3ZlciBJbmZpbmliYW5kIG9yIFRDUC5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgUkRTX1JETUFcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIEluZmluaWJhbmRcJiMzNDtcbiAgMTI6XHRcdGRlcGVuZHMgb24gUkRTIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EX0FERFJfVFJBTlNcbiAgMTM6XHRcdGhlbHBcbiAgMTQ6XHRcdCAgQWxsb3cgUkRTIHRvIHVzZSBJbmZpbmliYW5kIGFzIGEgdHJhbnNwb3J0LlxuICAxNTpcdFx0ICBUaGlzIHRyYW5zcG9ydCBzdXBwb3J0cyBSRE1BIG9wZXJhdGlvbnMuXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFJEU19UQ1BcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIFRDUFwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBSRFNcbiAgMjA6XHRcdGRlcGVuZHMgb24gSVBWNiB8fCAhSVBWNlxuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBBbGxvdyBSRFMgdG8gdXNlIFRDUCBhcyBhIHRyYW5zcG9ydC5cbiAgMjM6XHRcdCAgVGhpcyB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCBSRE1BIG9wZXJhdGlvbnMuXG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIFJEU19ERUJVR1xuICAyNjpcdFx0Ym9vbCBcJiMzNDtSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXCYjMzQ7XG4gIDI3Olx0XHRkZXBlbmRzIG9uIFJEU1xuICAyODpcdFx0ZGVmYXVsdCBuXG4gIDI5Olx0XG4gIDMwOlx0Y29uZmlnIEdDT1ZfUFJPRklMRV9SRFNcbiAgMzE6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIFJEU1wmIzM0O1xuICAzMjpcdFx0ZGVwZW5kcyBvbiBHQ09WX0tFUk5FTFxuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBFbmFibGUgR0NPViBwcm9maWxpbmcgb24gUkRTIGZvciBjaGVja2luZyB3aGljaCBmdW5jdGlvbnMvbGluZXNcbiAgMzU6XHRcdCAgYXJlIGV4ZWN1dGVkLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIFJEUyBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgbmV0L3Jkc2AgZGlyZWN0b3J5LiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIHZhcmlvdXMgUkRTIGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkLCBhbmQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIHRyaWdnZXIgdGhlIGluY2x1c2lvbiAob3IgZXhjbHVzaW9uKSBvZiBzcGVjaWZpYyBzb3VyY2UgZmlsZXMuIFRoZSBNYWtlZmlsZSBpcyB0aGUgbmF0dXJhbCBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBhbmFseXNpcy4gSSYjMzk7bSBsb29raW5nIHRvIG1hcCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBsb2dpY+KAlHNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNlZSB3aGljaCBzb3VyY2UgZmlsZXMgYXJlIGJ1aWx0LCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmbGFncy4gVGhpcyB3aWxsIHRlbGwgbWUgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZGVwZW5kaW5nIG9uIGtlcm5lbCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yZHMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0b2JqLSQoQ09ORklHX1JEUykgJiM0Mzs9IHJkcy5vXG4gICAzOlx0cmRzLXkgOj1cdGFmX3Jkcy5vIGJpbmQubyBjb25nLm8gY29ubmVjdGlvbi5vIGluZm8ubyBtZXNzYWdlLm8gICBcXFxuICAgNDpcdFx0XHRcdHJlY3YubyBzZW5kLm8gc3RhdHMubyBzeXNjdGwubyB0aHJlYWRzLm8gdHJhbnNwb3J0Lm8gXFxcbiAgIDU6XHRcdFx0XHRsb29wLm8gcGFnZS5vIHJkbWEub1xuICAgNjpcdFxuICAgNzpcdG9iai0kKENPTkZJR19SRFNfUkRNQSkgJiM0Mzs9IHJkc19yZG1hLm9cbiAgIDg6XHRyZHNfcmRtYS15IDo9XHRyZG1hX3RyYW5zcG9ydC5vIFxcXG4gICA5Olx0XHRcdFx0aWIubyBpYl9jbS5vIGliX3JlY3YubyBpYl9yaW5nLm8gaWJfc2VuZC5vIGliX3N0YXRzLm8gXFxcbiAgMTA6XHRcdFx0XHRpYl9zeXNjdGwubyBpYl9yZG1hLm8gaWJfZnJtci5vXG4gIDExOlx0XG4gIDEyOlx0XG4gIDEzOlx0b2JqLSQoQ09ORklHX1JEU19UQ1ApICYjNDM7PSByZHNfdGNwLm9cbiAgMTQ6XHRyZHNfdGNwLXkgOj1cdFx0dGNwLm8gdGNwX2Nvbm5lY3QubyB0Y3BfbGlzdGVuLm8gdGNwX3JlY3YubyBcXFxuICAxNTpcdFx0XHRcdHRjcF9zZW5kLm8gdGNwX3N0YXRzLm9cbiAgMTY6XHRcbiAgMTc6XHRjY2ZsYWdzLSQoQ09ORklHX1JEU19ERUJVRylcdDo9XHQtRFJEU19ERUJVR1xuICAxODpcdFxuICAxOTpcdCMgZm9yIEdDT1YgY292ZXJhZ2UgcHJvZmlsaW5nXG4gIDIwOlx0aWZkZWYgQ09ORklHX0dDT1ZfUFJPRklMRV9SRFNcbiAgMjE6XHRHQ09WX1BST0ZJTEUgOj0geVxuICAyMjpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk1MAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQ0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUkRTIE1vZHVsZSBEZXBlbmRlbmNpZXMgYW5kIEZ1bmN0aW9uIFVzYWdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFJEUyBjb2RlIGFuZCB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFuZCBob3cgdGhlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhY3Jvc3MgdGhlIG1vZHVsZXMuIEZpcnN0LCBJIHNlZSB0aGF0IGBuZXQvcmRzL2Nvbm5lY3Rpb24uY2AgYW5kIGBuZXQvcmRzL3NlbmQuY2AgYXJlIHN0cmFpZ2h0Zm9yd2FyZGx5IGJ1aWx0IHVuZGVyIGBDT05GSUdfUkRTYC4gYG5ldC9yZHMvaWJfcmVjdi5jYCBoYXMgYSBtb3JlIHNwZWNpZmljIGRlcGVuZGVuY3k7IGl0JiMzOTtzIGJ1aWx0IG9ubHkgaWYgYENPTkZJR19SRFNfUkRNQWAgaXMgZW5hYmxlZCwgd2hpY2ggaW1wbGllcyB3ZSBoYXZlIFJEUywgSW5maW5pYmFuZCwgYW5kIHRoZSBJbmZpbmliYW5kIGFkZHJlc3MgdHJhbnNsYXRpb24gY29tcG9uZW50cyBhbGwgaW4gcGxheS4gRmluYWxseSwgYG5ldC9yZHMvdGNwLmNgIGFuZCBgbmV0L3Jkcy90Y3BfbGlzdGVuLmNgIHJlbHkgb24gYENPTkZJR19SRFNfVENQYCwgbWVhbmluZyBSRFMgbXVzdCBiZSBlbmFibGVkIGFzIGEgcHJlcmVxdWlzaXRlLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBmdW5jdGlvbnMuIEluIGBuZXQvcmRzL2Nvbm5lY3Rpb24uY2AsIGByZHNfY29ubl9zaHV0ZG93bmAgaXMgdGhlIGltcG9ydGFudCBvbmUgaGVyZSwgYW5kIGl0JiMzOTtzIGV4cG9ydGVkLCB3aGljaCBpcyBnb29kIHRvIGtub3csIGFuZCB0aGUgY29kZSBjb21tZW50cyBkbyBub3RlIHRoYXQgaXRzIHVzZWQgYWNyb3NzIFJEUyBtb2R1bGVzLiBXZSBhbHNvIGhhdmUgYHJkc19jb25uX3BhdGhfcmVzZXRgLCB3aGljaCBpcyBzdGF0aWMuIEluIGBuZXQvcmRzL2liX3JlY3YuY2AsIGByZHNfaWJfcmVjdl9yZWZpbGxgIGlzIG5vbi1zdGF0aWMgYW5kIGByZWxlYXNlX3JlZmlsbGAgaXMgc3RhdGljLiBJbiBgbmV0L3Jkcy9zZW5kLmNgLCBgcmRzX3NlbmRfeG1pdGAgaXMgbm9uLXN0YXRpYywgYW5kIGByZWxlYXNlX2luX3htaXRgIGlzIHN0YXRpYy4gRmluYWxseSwgaW4gdGhlIFRDUCBtb2R1bGVzLCBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIGFuZCBgcmRzX3RjcF9hY2NlcHRfb25lYCBhcmUgYm90aCBub24tc3RhdGljLgoKTm93IEkgbmVlZCB0byBjaGVjayB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhZ2Fpbi4gSSYjMzk7bSBnb2luZyB0byByZXZpc2l0IGByZHNfY29ubl9zaHV0ZG93bmAsIGByZHNfc2VuZF94bWl0YCwgYHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzYCwgYHJkc190Y3BfYWNjZXB0X29uZWAsIGFuZCBgcmRzX2liX3JlY3ZfcmVmaWxsYCBzcGVjaWZpY2FsbHksIGFuZCB2ZXJpZnkgaWYgdGhleSBhcmUgZXhwb3J0ZWQgb3Igbm90LCBhbmQgYW55IGhlYWRlcnMgb3IgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBmdW5jdGlvbiwgaW4gb3JkZXIgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jkc19jb25uX3NodXRkb3dufHJkc19zZW5kX3htaXR8cmRzX3RjcF9yZXNldF9jYWxsYmFja3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvY29uZy5jPTIxNz12b2lkIHJkc19jb25nX3F1ZXVlX3VwZGF0ZXMoc3RydWN0IHJkc19jb25nX21hcCAqbWFwKVxuLS1cbm5ldC9yZHMvY29uZy5jLTIzMC1cdFx0XHRyZHNfc3RhdHNfaW5jKHNfY29uZ191cGRhdGVfcXVldWVkKTtcbm5ldC9yZHMvY29uZy5jOjIzMTpcdFx0XHQvKiBXZSBjYW5ub3QgaW5saW5lIHRoZSBjYWxsIHRvIHJkc19zZW5kX3htaXQoKSBoZXJlXG5uZXQvcmRzL2NvbmcuYy0yMzItXHRcdFx0ICogZm9yIHR3byByZWFzb25zIChib3RoIHBlcnRhaW5pbmcgdG8gYSBUQ1AgdHJhbnNwb3J0KTpcbi0tXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYz04Mz1zdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9yZHMvY29ubmVjdGlvbi5jLTEwOC0vKlxubmV0L3Jkcy9jb25uZWN0aW9uLmM6MTA5OiAqIFRoaXMgaXMgY2FsbGVkIGJ5IHJkc19jb25uX3NodXRkb3duKCkgb25jZSB0aGUgdHJhbnNwb3J0IGhhcyBicm91Z2h0XG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0xMTAtICogYSBwYXRoIGRvd24uICBJdCBjbGVhcnMgcGFydGlhbCBtZXNzYWdlIHN0YXRlIHNvIHRoYXQgdGhlIHRyYW5zcG9ydFxuLS1cbm5ldC9yZHMvY29ubmVjdGlvbi5jPTExNj1zdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbi0tXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0xMjktXHQgKiBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGFyZSBoZWxkIGFzIGxvY2tzIGJ5IHRoZVxubmV0L3Jkcy9jb25uZWN0aW9uLmM6MTMwOlx0ICogY2FsbGVyLCByZHNfY29ubl9zaHV0ZG93bigpLCB3aGljaCByZWxlYXNlcyB0aGVtIG9uY2UgdGhlXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0xMzEtXHQgKiB0ZWFyZG93biBpcyBjb21wbGV0ZS5cbi0tXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYz0zOTA9RVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKTtcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTM5MS1cbm5ldC9yZHMvY29ubmVjdGlvbi5jOjM5Mjp2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTM5My17XG4tLVxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDM3LVx0XHQvKiBSZWxlYXNlIHRoZSB0d28gbG9ja3MgYW5kIHdha2UgYW55IHdhaXRlciAoZS5nLlxubmV0L3Jkcy9jb25uZWN0aW9uLmM6NDM4Olx0XHQgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpKSB0aGF0IGJsb2NrZWQgb24gdGhlbSB3aGlsZVxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDM5LVx0XHQgKiB3ZSBoZWxkIHRoZW0uICBUaGUgdW5sb2NrIG9yZGVycyB0aGUgdHJhbnNwb3J0JiMzOTtzIHJpbmdcbi0tXG5uZXQvcmRzL2liX2NtLmM9MjgyPXN0YXRpYyB2b2lkIHJkc19pYl90YXNrbGV0X2ZuX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKVxuLS1cbm5ldC9yZHMvaWJfY20uYy0yOTktXHQgICAgdGVzdF9iaXQoMCwgXHUwMDI2Y29ubi1cdTAwM2VjX21hcF9xdWV1ZWQpKSlcbm5ldC9yZHMvaWJfY20uYzozMDA6XHRcdHJkc19zZW5kX3htaXQoXHUwMDI2aWMtXHUwMDNlY29ubi1cdTAwM2VjX3BhdGhbMF0pO1xubmV0L3Jkcy9pYl9jbS5jLTMwMS19XG4tLVxubmV0L3Jkcy9pYl9yZWN2LmM9MzgyPXZvaWQgcmRzX2liX3JlY3ZfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgaW50IHByZWZpbGwsIGdmcF90IGdmcClcbi0tXG5uZXQvcmRzL2liX3JlY3YuYy0zOTQtXHQgKiBsZXQgdGhlbSBkbyB0aGVpciB0aGluZy4gIFRoZSBob2xkZXIgbWF5IGFsc28gYmVcbm5ldC9yZHMvaWJfcmVjdi5jOjM5NTpcdCAqIHJkc19jb25uX3NodXRkb3duKCkgdGVhcmluZyB0aGUgcGF0aCBkb3duLCBpbiB3aGljaCBjYXNlXG5uZXQvcmRzL2liX3JlY3YuYy0zOTYtXHQgKiB0aGVyZSBpcyBub3RoaW5nIHRvIHBvc3QuXG4tLVxubmV0L3Jkcy9pYl9zZW5kLmM9MjQ1PXZvaWQgcmRzX2liX3NlbmRfY3FlX2hhbmRsZXIoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3djICp3Yylcbi0tXG5uZXQvcmRzL2liX3NlbmQuYy0zMzUtICpcbm5ldC9yZHMvaWJfc2VuZC5jOjMzNjogKiBUaGUgUkRTIHNlbmQgY29kZSBpcyBlc3NlbnRpYWxseSBzaW5nbGUtdGhyZWFkZWQ7IHJkc19zZW5kX3htaXRcbm5ldC9yZHMvaWJfc2VuZC5jLTMzNy0gKiBzZXRzIFJEU19JTl9YTUlUIHRvIGVuc3VyZSBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBzZW5kIHJpbmcuXG4tLVxubmV0L3Jkcy9sb29wLmM9MjM1PXZvaWQgcmRzX2xvb3BfbmV0X2V4aXQodm9pZClcbi0tXG5uZXQvcmRzL2xvb3AuYy0yNDEtICogVGhpcyBpcyBtaXNzaW5nIC54bWl0XyogYmVjYXVzZSBsb29wIGRvZXNuJiMzOTt0IGdvIHRocm91Z2ggZ2VuZXJpY1xubmV0L3Jkcy9sb29wLmM6MjQyOiAqIHJkc19zZW5kX3htaXQoKSBhbmQgZG9lc24mIzM5O3QgY2FsbCByZHNfcmVjdl9pbmNvbWluZygpLiAgLmxpc3Rlbl9zdG9wIGFuZFxubmV0L3Jkcy9sb29wLmMtMjQzLSAqIC5sYWRkcl9jaGVjayBhcmUgbWlzc2luZyBiZWNhdXNlIHRyYW5zcG9ydC5jIGRvZXNuJiMzOTt0IGl0ZXJhdGUgb3ZlclxuLS1cbm5ldC9yZHMvcmRzLmg9NTQwPXN0cnVjdCByZHNfdHJhbnNwb3J0IHtcbi0tXG5uZXQvcmRzL3Jkcy5oLTU4MC1cdC8qXG5uZXQvcmRzL3Jkcy5oOjU4MTpcdCAqIC54bWl0IGlzIGNhbGxlZCBieSByZHNfc2VuZF94bWl0KCkgdG8gdGVsbCB0aGUgdHJhbnNwb3J0IHRvIHNlbmRcbm5ldC9yZHMvcmRzLmgtNTgyLVx0ICogcGFydCBvZiBhIG1lc3NhZ2UuICBUaGUgY2FsbGVyIHNlcmlhbGl6ZXMgb24gdGhlIHNlbmRfc2VtIHNvIHRoaXNcbi0tXG5uZXQvcmRzL3Jkcy5oPTgxNT1zdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3Jkcy9yZHMuaC04MTktXHRcdFx0XHRcdFx0dTggdG9zLCBnZnBfdCBnZnAsIGludCBkZXZfaWYpO1xubmV0L3Jkcy9yZHMuaDo4MjA6dm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3BhdGgpO1xubmV0L3Jkcy9yZHMuaC04MjEtdm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XG4tLVxubmV0L3Jkcy9yZHMuaD05NTc9dm9pZCByZHNfc2VuZF9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjb25uKTtcbm5ldC9yZHMvcmRzLmg6OTU4OmludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XG5uZXQvcmRzL3Jkcy5oLTk1OS1zdHJ1Y3Qgc29ja2FkZHJfaW47XG4tLVxubmV0L3Jkcy9zZW5kLmMtNDQtXG5uZXQvcmRzL3NlbmQuYzo0NTovKiBXaGVuIHRyYW5zbWl0dGluZyBtZXNzYWdlcyBpbiByZHNfc2VuZF94bWl0LCB3ZSBuZWVkIHRvIGVtZXJnZSBmcm9tXG5uZXQvcmRzL3NlbmQuYy00Ni0gKiB0aW1lIHRvIHRpbWUgYW5kIGJyaWVmbHkgcmVsZWFzZSB0aGUgQ1BVLiBPdGhlcndpc2UgdGhlIHNvZnRsb2NrIHdhdGNoZG9nXG4tLVxubmV0L3Jkcy9zZW5kLmM9NTk9c3RhdGljIHZvaWQgcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jayhzdHJ1Y3QgbGlzdF9oZWFkICptZXNzYWdlcywgaW50IHN0YXR1cyk7XG4tLVxubmV0L3Jkcy9zZW5kLmMtNjItICogUmVzZXQgdGhlIHNlbmQgc3RhdGUuICBDYWxsZXJzIG11c3QgZW5zdXJlIHRoYXQgdGhpcyBkb2VzbiYjMzk7dCByYWNlIHdpdGhcbm5ldC9yZHMvc2VuZC5jOjYzOiAqIHJkc19zZW5kX3htaXQoKS5cbm5ldC9yZHMvc2VuZC5jLTY0LSAqL1xuLS1cbm5ldC9yZHMvc2VuZC5jPTEzMz1zdGF0aWMgYm9vbCByZHNfbXByZHNfY3AwX2NhdGNodXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTE5MS0gKi9cbm5ldC9yZHMvc2VuZC5jOjE5MjppbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG5uZXQvcmRzL3NlbmQuYy0xOTMte1xuLS1cbm5ldC9yZHMvc2VuZC5jLTI0Ni1cdC8qXG5uZXQvcmRzL3NlbmQuYzoyNDc6XHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gYWNxdWlyZXNcbm5ldC9yZHMvc2VuZC5jLTI0OC1cdCAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZS5cbi0tXG5uZXQvcmRzL3NlbmQuYy01NTctfVxubmV0L3Jkcy9zZW5kLmM6NTU4OkVYUE9SVF9TWU1CT0xfR1BMKHJkc19zZW5kX3htaXQpO1xubmV0L3Jkcy9zZW5kLmMtNTU5LVxuLS1cbm5ldC9yZHMvc2VuZC5jPTY5Mj1zdGF0aWMgdm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTc2Ny0gKiBtZXNzYWdlcyB1cCB0bywgYW5kIGluY2x1ZGluZywgdGhlIGdpdmVuIHNlcXVlbmNlIG51bWJlci4gIE1lc3NhZ2VzIGFyZVxubmV0L3Jkcy9zZW5kLmM6NzY4OiAqIG1vdmVkIHRvIHRoZSByZXRyYW5zIHF1ZXVlIHdoZW4gcmRzX3NlbmRfeG1pdCBwaWNrcyB0aGVtIG9mZiB0aGUgc2VuZFxubmV0L3Jkcy9zZW5kLmMtNzY5LSAqIHF1ZXVlLiBUaGlzIG1lYW5zIHRoYXQgaW4gdGhlIFRDUCBjYXNlLCB0aGUgbWVzc2FnZSBtYXkgbm90IGhhdmUgYmVlblxuLS1cbm5ldC9yZHMvc2VuZC5jPTExNTQ9aW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTE0NTEtXG5uZXQvcmRzL3NlbmQuYzoxNDUyOlx0cmV0ID0gcmRzX3NlbmRfeG1pdChjcGF0aCk7XG5uZXQvcmRzL3NlbmQuYy0xNDUzLVx0aWYgKHJldCA9PSAtRU5PTUVNIHx8IHJldCA9PSAtRUFHQUlOKSB7XG4tLVxubmV0L3Jkcy90Y3AuYz05Nj12b2lkIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvcmRzL3RjcC5jLTExNy0vKlxubmV0L3Jkcy90Y3AuYzoxMTg6ICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSBzd2l0Y2hlcyBhIHBhdGggdG8gYSBuZXcgc29ja2V0IGFuZFxubmV0L3Jkcy90Y3AuYy0xMTktICogcmVsZWFzZXMgdGhlIG9sZCBvbmUgaXQgZmluZHMgaW4gdGMtXHUwMDNldF9zb2NrLCByZXNvbHZpbmcgYSBkdWVsbGluZ1xuLS1cbm5ldC9yZHMvdGNwLmMtMTMyLSAqIFJEU19JTl9YTUlUIHNvIHRoYXQgaXQgY2Fubm90IGludGVybGVhdmUgd2l0aCBhIHNlbmRlciBhbHJlYWR5XG5uZXQvcmRzL3RjcC5jOjEzMzogKiBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpLlxubmV0L3Jkcy90Y3AuYy0xMzQtICovXG5uZXQvcmRzL3RjcC5jOjEzNTp2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQvcmRzL3RjcC5jLTEzNi1cdFx0XHQgICAgIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbi0tXG5uZXQvcmRzL3RjcC5jLTE0Ni1cdCAqIHRoYW4gUkRTX0NPTk5fVVAgc3RvcHMgbmV3IHNlbmRlcnMsIGFuZCBvd25pbmcgUkRTX0lOX1hNSVRcbm5ldC9yZHMvdGNwLmM6MTQ3Olx0ICogZXhjbHVkZXMgYW55IHRocmVhZCBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkgLSBvciBhXG5uZXQvcmRzL3RjcC5jOjE0ODpcdCAqIHRlYXJkb3duIGluIHJkc19jb25uX3NodXRkb3duKCksIHdoaWNoIGhvbGRzIHRoZSBzYW1lIGxvY2tcbm5ldC9yZHMvdGNwLmMtMTQ5LVx0ICogZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNwb3J0IHNodXRkb3duIC0gZm9yIHRoZSB3aG9sZVxuLS1cbm5ldC9yZHMvdGNwLmMtMTUyLVx0ICogQW4gaW5jb21pbmcgc3luLWFjayBhdCB0aGlzIHBvaW50IHdvdWxkIGVuZCB1cCBtYXJraW5nIHRoZVxubmV0L3Jkcy90Y3AuYzoxNTM6XHQgKiBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0IHJkc19zZW5kX3htaXQoKVxubmV0L3Jkcy90Y3AuYy0xNTQtXHQgKiB0aHJlYWRzIHRocm91Z2gsIHNvIGlkZWFsbHkgd2Ugd291bGQgc3luY2hyb25pemUgb25cbi0tXG5uZXQvcmRzL3RjcC5jLTE4My1cdC8qIFJlYWQgdF9zb2NrIG9ubHkgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlULCBuZXZlciBiZWZvcmUgdGhlXG5uZXQvcmRzL3RjcC5jOjE4NDpcdCAqIHdhaXQ6IHRoZSB0ZWFyZG93biBpbiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGRcbm5ldC9yZHMvdGNwLmMtMTg1LVx0ICogc29ja2V0IGFuZCBjbGVhcnMgdF9zb2NrLCBzbyBhIHBvaW50ZXIgc2FtcGxlZCBlYXJsaWVyIGNhblxuLS1cbm5ldC9yZHMvdGNwLmMtMjI0LS8qIEFkZCB0YyB0byByZHNfdGNwX3RjX2xpc3QgYW5kIHNldCB0Yy1cdTAwM2V0X3NvY2suIFNlZSBjb21tZW50c1xubmV0L3Jkcy90Y3AuYzoyMjU6ICogYWJvdmUgcmRzX3RjcF9yZXNldF9jYWxsYmFja3MgZm9yIG5vdGVzIGFib3V0IHN5bmNocm9uaXphdGlvblxubmV0L3Jkcy90Y3AuYy0yMjYtICogd2l0aCBkYXRhIHBhdGhcbi0tXG5uZXQvcmRzL3RjcC5oPTc0PXZvaWQgcmRzX3RjcF9zZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XG5uZXQvcmRzL3RjcC5oOjc1OnZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJkc19jb25uX3BhdGggKmNwKTtcbm5ldC9yZHMvdGNwLmgtNzYtdm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L3Jkcy90Y3BfbGlzdGVuLmM9MTUyPWludCByZHNfdGNwX2FjY2VwdF9vbmUoc3RydWN0IHJkc190Y3BfbmV0ICpydG4pXG4tLVxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMjk2LVx0XHQvKiBEdWVsbGluZyBTWU4gaGFzIGJlZW4gaGFuZGxlZCBpbiByZHNfdGNwX2FjY2VwdF9vbmUoKSAqL1xubmV0L3Jkcy90Y3BfbGlzdGVuLmM6Mjk3Olx0XHRyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhuZXdfc29jaywgY3ApO1xubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMjk4LVx0XHQvKiByZHNfY29ubmVjdF9wYXRoX2NvbXBsZXRlKCkgbWFya3MgUkRTX0NPTk5fVVAsIG9yLFxuLS1cbm5ldC9yZHMvdGhyZWFkcy5jPTE5MT12b2lkIHJkc19zZW5kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Jkcy90aHJlYWRzLmMtMTk5LVx0XHRjbGVhcl9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpO1xubmV0L3Jkcy90aHJlYWRzLmM6MjAwOlx0XHRyZXQgPSByZHNfc2VuZF94bWl0KGNwKTtcbm5ldC9yZHMvdGhyZWFkcy5jLTIwMS1cdFx0Y29uZF9yZXNjaGVkKCk7XG4tLVxubmV0L3Jkcy90aHJlYWRzLmM9MjQzPXZvaWQgcmRzX3NodXRkb3duX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Jkcy90aHJlYWRzLmMtMjQ4LVxubmV0L3Jkcy90aHJlYWRzLmM6MjQ5Olx0cmRzX2Nvbm5fc2h1dGRvd24oY3ApO1xubmV0L3Jkcy90aHJlYWRzLmMtMjUwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NDEKCQkJCQkJCW91dHB1dDogMTgwCgkJCQkJCQl0aG91Z2h0czogNDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJEUyBQcm90b2NvbCBJbnZlc3RpZ2F0aW9uOiBDb25maWdzIGFuZCBGb2N1cyBTeW1ib2xzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9ucyBmb3IgdGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgcHJvdG9jb2wuIFNwZWNpZmljYWxseSwgYFJEU2AgaXRzZWxmIGRlcGVuZHMgb24gYElORVRgLCB3aGljaCBpcyBzdGFuZGFyZCwgYnV0IHRoZSBrZXkgb25lcywgYFJEU19UQ1BgIGFuZCBgUkRTX1JETUFgLCByZXF1aXJlIGRlZXBlciBleGFtaW5hdGlvbi4gYFJEU19UQ1BgIHJlbGllcyBvbiBgUkRTYCBhbmQgZWl0aGVyIGBJUFY2YCBvciBpdHMgbmVnYXRpb24sIHdoaWNoIGlzIGV4cGVjdGVkLiBgUkRTX1JETUFgIGlzIG1vcmUgaW50ZXJlc3RpbmcsIGFzIGl0IGRlcGVuZHMgb24gYFJEU2AsIGBJTkZJTklCQU5EYCwgYW5kIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gU2VlbXMgbGlrZSAmIzM0O1JEUyYjMzQ7LCAmIzM0O1JEU19UQ1AmIzM0OywgYW5kICYjMzQ7UkRTX1JETUEmIzM0OyBhcmUgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyLCBhbG9uZyB3aXRoICYjMzQ7SU5GSU5JQkFORCYjMzQ7IGFuZCAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7IGlmIFJETUEgaXMgZW5hYmxlZC4KCk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZm9jdXMgc3ltYm9scy4gSSYjMzk7dmUgaWRlbnRpZmllZCBgcmRzX2Nvbm5fc2h1dGRvd25gLCBgcmRzX3NlbmRfeG1pdGAsIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AsIGByZHNfaWJfcmVjdl9yZWZpbGxgLCBhbmQgYHJkc190Y3BfYWNjZXB0X29uZWAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJIHNob3VsZCBjb25jZW50cmF0ZSBvbiBmb3IgYW55IGFuYWx5c2lzLgoKVGhlIG1vc3QgaW1wb3J0YW50IHBhcnQgaXMgdGhlIHdvcnRoaW5lc3Mgb2YgdGhpcyBhcmVhIGZvciBmdXp6aW5nLiBBYnNvbHV0ZWx5LCB0aGlzIGlzIGNvcmUgUkRTIG5ldHdvcmtpbmcgY29kZS4gSXQgaGFuZGxlcyBsb2Nrcywgc3RhdGUgbWFjaGluZXMsIHRoZSBTWU5zLCB0aGUgc29ja2V0IHN3YXBzLCBhbmQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBib3RoIHRlYXJkb3duIGFuZCBkYXRhIHRyYW5zZmVyLiBBbmQsIGltcG9ydGFudGx5LCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCBieSBleHBsb2l0aW5nIHRoZSBzb2NrZXQgb3BlcmF0aW9ucyBvbiBBRl9SRFMgc29ja2V0cyBhY3Jvc3MgdGhlIGRpZmZlcmVudCB0cmFuc3BvcnRzIChUQ1AvbG9vcGJhY2svUkRNQSkuCgpGaW5hbGx5LCBJIHdpbGwgY29sbGF0ZSBhbGwgb2YgdGhpczogdGhlIGNvbmZpZ3MsIHRoZSBzeW1ib2xzLCBhbmQgdGhlIHJhdGlvbmFsZSBmb3IgdGhlIG5leHQgc3RlcCwgd2hpY2ggaXMgY2FsbGluZyB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHdpdGggdGhlc2UgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSRFMmIzM0OywKICAgICYjMzQ7UkRTX1RDUCYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jkc19jb25uX3NodXRkb3duJiMzNDssCiAgICAmIzM0O3Jkc19zZW5kX3htaXQmIzM0OywKICAgICYjMzQ7cmRzX3RjcF9yZXNldF9jYWxsYmFja3MmIzM0OywKICAgICYjMzQ7cmRzX3RjcF9hY2NlcHRfb25lJiMzNDssCiAgICAmIzM0O3Jkc19pYl9yZWN2X3JlZmlsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgbWVjaGFuaXNtcyAoc3BlY2lmaWNhbGx5IFJEU19JTl9YTUlUIGFuZCBSRFNfUkVDVl9SRUZJTEwgYml0bG9ja3MsIHdhaXRxdWV1ZSBiYXJyaWVycywgYW5kIHN0YXRlIHRyYW5zaXRpb25zKSBpbiBSRFMgY29ubmVjdGlvbiB0ZWFyZG93biwgc2VuZCwgcmVjZWl2ZS1yZWZpbGwsIGFuZCBUQ1Agc29ja2V0IHN3YXBwaW5nIHBhdGhzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbmV0d29yayBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDssCiAgICAmIzM0O1JEU19SRE1BJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORF9BRERSX1RSQU5TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmRzX2Nvbm5fc2h1dGRvd24mIzM0OywKICAgICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX2FjY2VwdF9vbmUmIzM0OywKICAgICYjMzQ7cmRzX2liX3JlY3ZfcmVmaWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBtZWNoYW5pc21zIChzcGVjaWZpY2FsbHkgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBiaXRsb2Nrcywgd2FpdHF1ZXVlIGJhcnJpZXJzLCBhbmQgc3RhdGUgdHJhbnNpdGlvbnMpIGluIFJEUyBjb25uZWN0aW9uIHRlYXJkb3duLCBzZW5kLCByZWNlaXZlLXJlZmlsbCwgYW5kIFRDUCBzb2NrZXQgc3dhcHBpbmcgcGF0aHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBuZXR3b3JrIHNvY2tldCBvcGVyYXRpb25zIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZXNvbHZlcyBjb25jdXJyZW5jeSwgcmFjZSBjb25kaXRpb24sIGFuZCBzdGF0ZS1tYWNoaW5lIHN5bmNocm9uaXphdGlvbiBidWdzIGluIHRoZSBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIHN1YnN5c3RlbSBkdXJpbmcgY29ubmVjdGlvbiB0ZWFyZG93biwgcmVzZXQsIGFuZCBkdWVsbGluZyBTWU4gcmVzb2x1dGlvbiAoc3BlY2lmaWNhbGx5IGxvY2tpbmcgYW5kIGJpdC1tYW5pcHVsYXRpb24gb2YgUkRTX0lOX1hNSVQsIFJEU19SRUNWX1JFRklMTCwgYW5kIFJEU19DT05OXyogc3RhdGUgdHJhbnNpdGlvbnMpLlxuXG4tIE5vIG5ldyBoZWFwL3N0YWNrIGFsbG9jYXRpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYWRkZWQgb3IgbW9kaWZpZWQuXG4tIE5vIGtlcm5lbC10by11c2VyIGNvcHkgb3BlcmF0aW9ucyAoZS5nLiwgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluaywgaW9jdGwsIGdldHNvY2tvcHQpIG9yIHVzZXItZmFjaW5nIHN0cnVjdHMgYXJlIHRvdWNoZWQuXG4tIE5vIGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tzLCBvciBwYXlsb2FkIHBhcnNpbmcgcm91dGluZXMgYXJlIGFsdGVyZWQgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuLSBBbnkgY29uY3VycmVuY3kgYnVncywgdXNlLWFmdGVyLWZyZWUsIGRlYWRsb2Nrcywgb3IgbG9jayBvcmRlcmluZyBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIHRoZXNlIGNoYW5nZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZmUzNzY3OTBiN2M5ZGNmM2U2ZjUzMWU1NjVmMjM3N2ZjZWZiM2FlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjggMjI6NDc6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCmluZGV4IDdjOGFiOGU5NzNlMWIuLmI2YzRiZWI1MGVhZjAgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvY29ubmVjdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCkBAIC0xMDYsMTAgJiM0MzsxMDYsMTIgQEAgc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwKIH0KIAogLyoKLSAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRyYW5zcG9ydHMgYXMgdGhleSYjMzk7cmUgYnJpbmdpbmcgZG93biBhIGNvbm5lY3Rpb24uCi0gKiBJdCBjbGVhcnMgcGFydGlhbCBtZXNzYWdlIHN0YXRlIHNvIHRoYXQgdGhlIHRyYW5zcG9ydCBjYW4gc3RhcnQgc2VuZGluZwotICogYW5kIHJlY2VpdmluZyBvdmVyIHRoaXMgY29ubmVjdGlvbiBhZ2FpbiBpbiB0aGUgZnV0dXJlLiAgSXQgaXMgdXAgdG8KLSAqIHRoZSB0cmFuc3BvcnQgdG8gaGF2ZSBzZXJpYWxpemVkIHRoaXMgY2FsbCB3aXRoIGl0cyBzZW5kIGFuZCByZWN2LgomIzQzOyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHJkc19jb25uX3NodXRkb3duKCkgb25jZSB0aGUgdHJhbnNwb3J0IGhhcyBicm91Z2h0CiYjNDM7ICogYSBwYXRoIGRvd24uICBJdCBjbGVhcnMgcGFydGlhbCBtZXNzYWdlIHN0YXRlIHNvIHRoYXQgdGhlIHRyYW5zcG9ydAomIzQzOyAqIGNhbiBzdGFydCBzZW5kaW5nIGFuZCByZWNlaXZpbmcgb3ZlciB0aGlzIHBhdGggYWdhaW4gaW4gdGhlIGZ1dHVyZS4KJiM0MzsgKiBUaGUgY2FsbGVyIG93bnMgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBhY3Jvc3MgdGhpcyBjYWxsLAomIzQzOyAqIHdoaWNoIGlzIHdoYXQgc2VyaWFsaXplcyBpdCBhZ2FpbnN0IHRoZSBzZW5kIGFuZCByZWNlaXZlLXJlZmlsbAomIzQzOyAqIHBhdGhzLgogICovCiBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKIHsKQEAgLTEyMCw3ICYjNDM7MTIyLDE2IEBAIHN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogCiAJcmRzX3N0YXRzX2luYyhzX2Nvbm5fcmVzZXQpOwogCXJkc19zZW5kX3BhdGhfcmVzZXQoY3ApOwotCWNwLSZndDtjcF9mbGFncyA9IDA7CiYjNDM7CiYjNDM7CS8qIENsZWFyIHRoZSBiaXRzIHRoZSByZXNldCBpcyByZXNwb25zaWJsZSBmb3IgaW5kaXZpZHVhbGx5OiBhCiYjNDM7CSAqIGJsYW5rZXQgY3BfZmxhZ3MgPSAwIGlzIGEgcGxhaW4gc3RvcmUgdGhhdCBjYW4gY2xvYmJlciBhCiYjNDM7CSAqIGNvbmN1cnJlbnQgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIG9uIHRoZSBzYW1lIHdvcmQuCiYjNDM7CSAqIFJEU19JTl9YTUlUIGFuZCBSRFNfUkVDVl9SRUZJTEwgYXJlIGhlbGQgYXMgbG9ja3MgYnkgdGhlCiYjNDM7CSAqIGNhbGxlciwgcmRzX2Nvbm5fc2h1dGRvd24oKSwgd2hpY2ggcmVsZWFzZXMgdGhlbSBvbmNlIHRoZQomIzQzOwkgKiB0ZWFyZG93biBpcyBjb21wbGV0ZS4KJiM0MzsJICovCiYjNDM7CWNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CWNsZWFyX2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKTsKIAogCS8qIERvIG5vdCBjbGVhciBuZXh0X3J4X3NlcSBoZXJlLCBlbHNlIHdlIGNhbm5vdCBkaXN0aW5ndWlzaAogCSAqIHJldHJhbnNtaXR0ZWQgcGFja2V0cyBmcm9tIG5ldyBwYWNrZXRzLCBhbmQgd2lsbCBoYW5kIGFsbApAQCAtNDA2LDI4ICYjNDM7NDE3LDcwIEBAIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogCQl9CiAJCW11dGV4X3VubG9jaygmYW1wO2NwLSZndDtjcF9jbV9sb2NrKTsKIAomIzQzOwkJLyogUXVpZXNjZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUtcmVmaWxsIHBhdGhzIGJ5CiYjNDM7CQkgKiBhY3F1aXJpbmcgdGhlaXIgYml0IGxvY2tzLCBub3QgbWVyZWx5IHdhaXRpbmcgZm9yCiYjNDM7CQkgKiB0aGVtIHRvIGJlIHJlbGVhc2VkOiB3aXRoIGEgcGxhaW4gd2FpdCwgZWl0aGVyIHBhdGgKJiM0MzsJCSAqIGNhbiByZS10YWtlIGl0cyBsb2NrIHRoZSBpbnN0YW50IGFmdGVyIHdlIHNhbXBsZSBpdAomIzQzOwkJICogY2xlYXIgYW5kIHRoZW4gcnVuIGNvbmN1cnJlbnRseSB3aXRoIHRoZSB0cmFuc3BvcnQKJiM0MzsJCSAqIHNodXRkb3duIGFuZCB0aGUgcGF0aCByZXNldCBiZWxvdy4gIEhvbGRpbmcgYm90aAomIzQzOwkJICogbG9ja3MgYWNyb3NzIHRoZSB0ZWFyZG93biBtYWtlcyB0aGF0IHN0cnVjdHVyYWxseQomIzQzOwkJICogaW1wb3NzaWJsZS4KJiM0MzsJCSAqLwogCQl3YWl0X2V2ZW50KGNwLSZndDtjcF93YWl0cSwKLQkJCSAgICF0ZXN0X2JpdChSRFNfSU5fWE1JVCwgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpKTsKJiM0MzsJCQkgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwogCQl3YWl0X2V2ZW50KGNwLSZndDtjcF93YWl0cSwKLQkJCSAgICF0ZXN0X2JpdChSRFNfUkVDVl9SRUZJTEwsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7CiYjNDM7CQkJICAgIXRlc3RfYW5kX3NldF9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwogCiAJCWNvbm4tJmd0O2NfdHJhbnMtJmd0O2Nvbm5fcGF0aF9zaHV0ZG93bihjcCk7CiAJCXJkc19jb25uX3BhdGhfcmVzZXQoY3ApOwogCiYjNDM7CQkvKiBSZWxlYXNlIHRoZSB0d28gbG9ja3MgYW5kIHdha2UgYW55IHdhaXRlciAoZS5nLgomIzQzOwkJICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSkgdGhhdCBibG9ja2VkIG9uIHRoZW0gd2hpbGUKJiM0MzsJCSAqIHdlIGhlbGQgdGhlbS4gIFRoZSB1bmxvY2sgb3JkZXJzIHRoZSB0cmFuc3BvcnQmIzM5O3MgcmluZwomIzQzOwkJICogcmUtaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBwYXRoIHJlc2V0IGFib3ZlIGJlZm9yZQomIzQzOwkJICogZWl0aGVyIGJpdCBpcyBzZWVuIGNsZWFyLiAgcmRzX2Nvbm5fcGF0aF9yZXNldCgpIGxlYXZlcwomIzQzOwkJICogYm90aCBiaXRzIGFsb25lOiBvd25lcnNoaXAgZW5kcyBoZXJlLCBub3QgaW5zaWRlIHRoZQomIzQzOwkJICogcmVzZXQuCiYjNDM7CQkgKi8KJiM0MzsJCWNsZWFyX2JpdF91bmxvY2soUkRTX0lOX1hNSVQsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKTsKJiM0MzsJCWNsZWFyX2JpdF91bmxvY2soUkRTX1JFQ1ZfUkVGSUxMLCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CQl3YWtlX3VwX2FsbCgmYW1wO2NwLSZndDtjcF93YWl0cSk7CiYjNDM7CiAJCWlmICghcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9ESVNDT05ORUNUSU5HLAotCQkJCQkgICAgICBSRFNfQ09OTl9ET1dOKSAmYW1wOyZhbXA7Ci0JCSAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9FUlJPUiwKIAkJCQkJICAgICAgUkRTX0NPTk5fRE9XTikpIHsKLQkJCS8qIFRoaXMgY2FuIGhhcHBlbiAtIGVnIHdoZW4gd2UmIzM5O3JlIGluIHRoZSBtaWRkbGUgb2YgdGVhcmluZwotCQkJICogZG93biB0aGUgY29ubmVjdGlvbiwgYW5kIHNvbWVvbmUgdW5sb2FkcyB0aGUgcmRzIG1vZHVsZS4KLQkJCSAqIFF1aXRlIHJlcHJvZHVjaWJsZSB3aXRoIGxvb3BiYWNrIGNvbm5lY3Rpb25zLgotCQkJICogTW9zdGx5IGhhcm1sZXNzLgomIzQzOwkJCS8qIFRoZSBwYXRoIHdhcyBkcm9wcGVkIGFnYWluIHdoaWxlIHdlIHRvcmUgaXQKJiM0MzsJCQkgKiBkb3duOiBieSBhIHNvY2tldCBzdGF0ZS1jaGFuZ2UgY2FsbGJhY2sgaW4KJiM0MzsJCQkgKiBpcnEgY29udGV4dCBvbiByZWNlaXB0IG9mIGEgRklOLCBvciBieSBhbgomIzQzOwkJCSAqIGFjY2VwdCB0aGF0IGNsYWltZWQgdGhlIHBhdGgganVzdCBiZWZvcmUgYQomIzQzOwkJCSAqIGRyb3AgcHV0IGl0IGJhY2sgdG8gUkRTX0NPTk5fRVJST1IgYW5kIHRoZW4KJiM0MzsJCQkgKiBpbnN0YWxsZWQgYSBmcmVzaCBzb2NrZXQgb24gaXQuICBVbmxlc3MgYQomIzQzOwkJCSAqIHBlbmRpbmcgZGVzdHJveSBzdXBwcmVzc2VkIGl0LCB0aGUgZHJvcCBhbHNvCiYjNDM7CQkJICogcXVldWVkIGFub3RoZXIgc2h1dGRvd24gcGFzcywgYW5kIHRoYXQgcGFzcwomIzQzOwkJCSAqIG11c3QgcnVuLCBiZWNhdXNlIGl0IGlzIHdoYXQgdGVhcnMgZG93bgomIzQzOwkJCSAqIHdoYXRldmVyIGF0dGFjaGVkIHRvIHRoZSBwYXRoIGFmdGVyIHRoZQomIzQzOwkJCSAqIHRyYW5zcG9ydCBzaHV0ZG93biBhYm92ZSBzYW1wbGVkIGl0cyBzdGF0ZS4KJiM0MzsJCQkgKiBDb25zdW1pbmcgdGhlIFJEU19DT05OX0VSUk9SIGhlcmUgd291bGQgdHVybgomIzQzOwkJCSAqIHRoYXQgcGFzcyBpbnRvIGEgbm8tb3A6IGxlYXZlIHRoZSBzdGF0ZQomIzQzOwkJCSAqIGFsb25lLCBhbmQgbGV0IHRoZSBwYXNzIGZpbmlzaCB0aGUgam9iLgogCQkJICoKLQkJCSAqIE5vdGUgdGhhdCB0aGlzIGFsc28gaGFwcGVucyB3aXRoIHJkcy10Y3AgYmVjYXVzZQotCQkJICogd2UgY291bGQgaGF2ZSB0cmlnZ2VyZWQgcmRzX2Nvbm5fcGF0aF9kcm9wIGluIGlycQotCQkJICogbW9kZSBmcm9tIHJkc190Y3Bfc3RhdGUgY2hhbmdlIG9uIHRoZSByZWNlaXB0IG9mCi0JCQkgKiBhIEZJTiwgdGh1cyB3ZSBuZWVkIHRvIHJlY2hlY2sgZm9yIFJEU19DT05OX0VSUk9SCi0JCQkgKiBoZXJlLgomIzQzOwkJCSAqIFF1aWVzY2UgdGhlIHJlY29ubmVjdCB0aW1lciBiZWZvcmUgYmFpbGluZwomIzQzOwkJCSAqIG91dCwgdGhvdWdoLiAgV2hlbiBhIHBlbmRpbmcgZGVzdHJveSBkaWQKJiM0MzsJCQkgKiBzdXBwcmVzcyB0aGUgcXVldWUsIG5vIGxhdGVyIHBhc3MgcnVucywgYW5kCiYjNDM7CQkJICogcmRzX2Nvbm5fcGF0aF9kZXN0cm95KCkgaXMgYWJvdXQgdG8gZmx1c2gKJiM0MzsJCQkgKiBjcF9kb3duX3cgYW5kIGZyZWUgdGhlIHBhdGg6IGl0IG11c3Qgbm90CiYjNDM7CQkJICogZmluZCBjcF9jb25uX3cgc3RpbGwgYXJtZWQuICBBIHN1Y2Nlc3NvcgomIzQzOwkJCSAqIHBhc3MsIHdoZW4gdGhlcmUgaXMgb25lLCByZS1hcm1zIHRoZQomIzQzOwkJCSAqIHJlY29ubmVjdCBmcm9tIGl0cyBvd24gdGFpbC4KJiM0MzsJCQkgKi8KJiM0MzsJCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3BfY29ubl93KTsKJiM0MzsJCQljbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CiYjNDM7CQkJaWYgKHJkc19jb25uX3BhdGhfc3RhdGUoY3ApID09IFJEU19DT05OX0VSUk9SKQomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJLyogTm8gY3VycmVudCBjcF9zdGF0ZSB3cml0ZXIgbGVhdmVzIGEKJiM0MzsJCQkgKiBESVNDT05ORUNUSU5HIHBhdGggaW4gYW55IHN0YXRlIGJ1dAomIzQzOwkJCSAqIFJEU19DT05OX0VSUk9SOyByZXBvcnQgbG91ZGx5IGlmIG9uZSBldmVyCiYjNDM7CQkJICogZG9lcy4KIAkJCSAqLwogCQkJcmRzX2Nvbm5fcGF0aF9lcnJvcihjcCwgJiMzNDslczogZmFpbGVkIHRvIHRyYW5zaXRpb24gJiMzNDsKIAkJCQkJICAgICYjMzQ7dG8gc3RhdGUgRE9XTiwgY3VycmVudCBzdGF0ZSAmIzM0OwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZWN2LmMgYi9uZXQvcmRzL2liX3JlY3YuYwppbmRleCAzNTcxMjhkMzRhNTQ2Li5iZDZjYjNmZmFhNTcxIDEwMDY0NAotLS0gYS9uZXQvcmRzL2liX3JlY3YuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL2liX3JlY3YuYwpAQCAtMzYzLDE1ICYjNDM7MzYzLDE0IEBAIHN0YXRpYyBpbnQgYWNxdWlyZV9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQogCiBzdGF0aWMgdm9pZCByZWxlYXNlX3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiB7Ci0JY2xlYXJfYml0KFJEU19SRUNWX1JFRklMTCwgJmFtcDtjb25uLSZndDtjX2ZsYWdzKTsKLQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwomIzQzOwljbGVhcl9iaXRfdW5sb2NrKFJEU19SRUNWX1JFRklMTCwgJmFtcDtjb25uLSZndDtjX2ZsYWdzKTsKIAogCS8qIFdlIGRvbiYjMzk7dCB1c2Ugd2FpdF9vbl9iaXQoKS93YWtlX3VwX2JpdCgpIGJlY2F1c2Ugb3VyIHdha2luZyBpcyBpbiBhCiAJICogaG90IHBhdGggYW5kIGZpbmRpbmcgd2FpdGVycyBpcyB2ZXJ5IHJhcmUuICBXZSBkb24mIzM5O3Qgd2FudCB0byB3YWxrCiAJICogdGhlIHN5c3RlbS13aWRlIGhhc2hlZCB3YWl0cXVldWUgYnVja2V0cyBpbiB0aGUgZmFzdCBwYXRoIG9ubHkgdG8KIAkgKiBhbG1vc3QgbmV2ZXIgZmluZCB3YWl0ZXJzLgogCSAqLwotCWlmICh3YWl0cXVldWVfYWN0aXZlKCZhbXA7Y29ubi0mZ3Q7Y193YWl0cSkpCiYjNDM7CWlmICh3cV9oYXNfc2xlZXBlcigmYW1wO2Nvbm4tJmd0O2Nfd2FpdHEpKQogCQl3YWtlX3VwX2FsbCgmYW1wO2Nvbm4tJmd0O2Nfd2FpdHEpOwogfQogCkBAIC0zOTIsNyAmIzQzOzM5MSw5IEBAIHZvaWQgcmRzX2liX3JlY3ZfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgaW50IHByZWZpbGwsIGdmcF90IGdmcCkKIAogCS8qIHRoZSBnb2FsIGhlcmUgaXMgdG8ganVzdCBtYWtlIHN1cmUgdGhhdCBzb21lb25lLCBzb21ld2hlcmUKIAkgKiBpcyBwb3N0aW5nIGJ1ZmZlcnMuICBJZiB3ZSBjYW4mIzM5O3QgZ2V0IHRoZSByZWZpbGwgbG9jaywKLQkgKiBsZXQgdGhlbSBkbyB0aGVpciB0aGluZwomIzQzOwkgKiBsZXQgdGhlbSBkbyB0aGVpciB0aGluZy4gIFRoZSBob2xkZXIgbWF5IGFsc28gYmUKJiM0MzsJICogcmRzX2Nvbm5fc2h1dGRvd24oKSB0ZWFyaW5nIHRoZSBwYXRoIGRvd24sIGluIHdoaWNoIGNhc2UKJiM0MzsJICogdGhlcmUgaXMgbm90aGluZyB0byBwb3N0LgogCSAqLwogCWlmICghYWNxdWlyZV9yZWZpbGwoY29ubikpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmMKaW5kZXggMTVhMWI5N2YxM2U3Ni4uMWFmYTk4MWU1YzA2ZCAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9zZW5kLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9zZW5kLmMKQEAgLTExNCw4ICYjNDM7MTE0LDEzIEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfaW5feG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJICogaG90IHBhdGggYW5kIGZpbmRpbmcgd2FpdGVycyBpcyB2ZXJ5IHJhcmUuICBXZSBkb24mIzM5O3Qgd2FudCB0byB3YWxrCiAJICogdGhlIHN5c3RlbS13aWRlIGhhc2hlZCB3YWl0cXVldWUgYnVja2V0cyBpbiB0aGUgZmFzdCBwYXRoIG9ubHkgdG8KIAkgKiBhbG1vc3QgbmV2ZXIgZmluZCB3YWl0ZXJzLgomIzQzOwkgKgomIzQzOwkgKiB3cV9oYXNfc2xlZXBlcigpIHN1cHBsaWVzIHRoZSBmdWxsIGJhcnJpZXIgdGhhdCBvcmRlcnMgdGhlIHdhaXQKJiM0MzsJICogcXVldWUgcmVhZCBhZnRlciB0aGUgYml0IGNsZWFyOyBjbGVhcl9iaXRfdW5sb2NrKCkgYWxvbmUgaXMgb25seQomIzQzOwkgKiBhIHJlbGVhc2UgYW5kIHdvdWxkIGxldCB0aGlzIGNoZWNrIHJlYWQgYSBzdGFsZSBlbXB0eSBxdWV1ZSwKJiM0MzsJICogbG9zaW5nIHRoZSB3YWtlLXVwLgogCSAqLwotCWlmICh3YWl0cXVldWVfYWN0aXZlKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKSkKJiM0MzsJaWYgKHdxX2hhc19zbGVlcGVyKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKSkKIAkJd2FrZV91cF9hbGwoJmFtcDtjcC0mZ3Q7Y3Bfd2FpdHEpOwogfQogCkBAIC0yMzksOCAmIzQzOzI0NCwxMSBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJV1JJVEVfT05DRShjcC0mZ3Q7Y3Bfc2VuZF9nZW4sIHNlbmRfZ2VuKTsKIAogCS8qCi0JICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIHRlc3RzIFJEU19JTl9YTUlULAotCSAqIHdlIGRvIHRoZSBvcHBvc2l0ZSB0byBhdm9pZCByYWNlcy4KJiM0MzsJICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIGFjcXVpcmVzCiYjNDM7CSAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZS4KJiM0MzsJICogT3duZXJzaGlwIGlzIGRlY2lkZWQgYnkgdGhlIGF0b21pYyBSTVcgb24gdGhlIGNwX2ZsYWdzIHdvcmQ6CiYjNDM7CSAqIGlmIHRoZSB0ZWFyZG93biB3b24gdGhlIGJpdCB3ZSBiYWNrIG9mZiBoZXJlLCBhbmQgaWYgd2Ugd29uCiYjNDM7CSAqIGl0IHRoZSB0ZWFyZG93biB3YWl0cyB1bnRpbCB3ZSByZWxlYXNlIGl0LgogCSAqLwogCWlmICghcmRzX2Nvbm5fcGF0aF91cChjcCkpIHsKIAkJcmVsZWFzZV9pbl94bWl0KGNwKTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwLmMgYi9uZXQvcmRzL3RjcC5jCmluZGV4IGIyNjM2MzRhYzc1MGQuLjc3NGE3MWY4OGQzNzUgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy90Y3AuYwpAQCAtMTE1LDQ2ICYjNDM7MTE1LDkwIEBAIHZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogfQogCiAvKgotICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSBzd2l0Y2hlcyB0aGUgdG8gdGhlIG5ldyBzb2NrIGFuZAotICogcmV0dXJucyB0aGUgZXhpc3RpbmcgdGMtJmd0O3Rfc29jay4KJiM0MzsgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpIHN3aXRjaGVzIGEgcGF0aCB0byBhIG5ldyBzb2NrZXQgYW5kCiYjNDM7ICogcmVsZWFzZXMgdGhlIG9sZCBvbmUgaXQgZmluZHMgaW4gdGMtJmd0O3Rfc29jaywgcmVzb2x2aW5nIGEgZHVlbGxpbmcKJiM0MzsgKiBTWU4uCiAgKgotICogVGhlIG9ubHkgZnVuY3Rpb25zIHRoYXQgc2V0IHRjLSZndDt0X3NvY2sgYXJlIHJkc190Y3Bfc2V0X2NhbGxiYWNrcwotICogYW5kIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzLiAgU2VuZCBhbmQgcmVjZWl2ZSB0cnVzdCB0aGF0Ci0gKiBpdCBpcyBzZXQuICBUaGUgYWJzZW5jZSBvZiBSRFNfQ09OTl9VUCBiaXQgcHJvdGVjdHMgdGhvc2UgcGF0aHMKLSAqIGZyb20gYmVpbmcgY2FsbGVkIHdoaWxlIGl0IGlzbiYjMzk7dCBzZXQuCiYjNDM7ICogdGMtJmd0O3Rfc29jayBpcyBzZXQgYnkgcmRzX3RjcF9zZXRfY2FsbGJhY2tzKCkgYW5kIGNsZWFyZWQgYnkKJiM0MzsgKiByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKCkuICBGb3VyIHBhdGhzIHdyaXRlIGl0OiB0aGUgYWN0aXZlCiYjNDM7ICogY29ubmVjdCBpbiByZHNfdGNwX2Nvbm5fcGF0aF9jb25uZWN0KCksIHdoaWNoIHNldHMgaXQgYW5kIGNsZWFycyBpdAomIzQzOyAqIGFnYWluIG9uIGZhaWx1cmU7IHRoZSBhY2NlcHQgcGF0aCBpbiByZHNfdGNwX2FjY2VwdF9vbmUoKSwgd2hpY2gKJiM0MzsgKiBzZXRzIGl0IGZvciBhIHBhdGggd2l0aCBubyBzb2NrZXQgeWV0OyB0aGUgdGVhcmRvd24gaW4KJiM0MzsgKiByZHNfdGNwX2Nvbm5fcGF0aF9zaHV0ZG93bigpLCB3aGljaCBjbGVhcnMgaXQ7IGFuZCB0aGUgc3dhcCBkb25lCiYjNDM7ICogaGVyZSwgd2hpY2ggZG9lcyBib3RoLiAgVGhlIGNvbm5lY3QgYW5kIGFjY2VwdCBwYXRocyBhcmUgc2VyaWFsaXplZAomIzQzOyAqIGFnYWluc3QgZWFjaCBvdGhlciBieSB0X2Nvbm5fcGF0aF9sb2NrLiAgU2VuZCBhbmQgcmVjZWl2ZSB0cnVzdAomIzQzOyAqIHRoYXQgaXQgaXMgc2V0OiB0aGUgYWJzZW5jZSBvZiBSRFNfQ09OTl9VUCBwcm90ZWN0cyB0aG9zZSBwYXRocwomIzQzOyAqIGZyb20gYmVpbmcgY2FsbGVkIHdoaWxlIGl0IGlzbiYjMzk7dCwgYW5kIHRoZSBzd2FwIGRvbmUgaGVyZSBydW5zIHVuZGVyCiYjNDM7ICogUkRTX0lOX1hNSVQgc28gdGhhdCBpdCBjYW5ub3QgaW50ZXJsZWF2ZSB3aXRoIGEgc2VuZGVyIGFscmVhZHkKJiM0MzsgKiBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpLgogICovCiB2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkgICAgIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKIHsKIAlzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLSZndDtjcF90cmFuc3BvcnRfZGF0YTsKLQlzdHJ1Y3Qgc29ja2V0ICpvc29jayA9IHRjLSZndDt0X3NvY2s7Ci0KLQlpZiAoIW9zb2NrKQotCQlnb3RvIG5ld3NvY2s7CiYjNDM7CXN0cnVjdCBzb2NrZXQgKm9zb2NrOwogCiAJLyogTmVlZCB0byByZXNvbHZlIGEgZHVlbGxpbmcgU1lOIGJldHdlZW4gcGVlcnMuCiAJICogV2UgaGF2ZSBhbiBvdXRzdGFuZGluZyBTWU4gdG8gdGhpcyBwZWVyLCB3aGljaCBtYXkKIAkgKiBwb3RlbnRpYWxseSBoYXZlIHRyYW5zaXRpb25lZCB0byB0aGUgUkRTX0NPTk5fVVAgc3RhdGUsCiAJICogc28gd2UgbXVzdCBxdWllc2NlIGFueSBzZW5kIHRocmVhZHMgYmVmb3JlIHJlc2V0dGluZwotCSAqIGNwX3RyYW5zcG9ydF9kYXRhLiBXZSBxdWllc2NlIHRoZXNlIHRocmVhZHMgYnkgc2V0dGluZwotCSAqIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFJEU19DT05OX1VQLCBhbmQgdGhlbgotCSAqIHdhaXRpbmcgZm9yIGFueSBleGlzdGluZyB0aHJlYWRzIGluIHJkc19zZW5kX3htaXQgdG8KLQkgKiBjb21wbGV0ZSByZWxlYXNlX2luX3htaXQoKS4gKFN1YnNlcXVlbnQgdGhyZWFkcyBlbnRlcmluZwotCSAqIHJkc19zZW5kX3htaXQoKSB3aWxsIGJhaWwgb24gIXJkc19jb25uX3VwKCkuCiYjNDM7CSAqIGNwX3RyYW5zcG9ydF9kYXRhLiAgU2V0dGluZyBjcF9zdGF0ZSB0byBzb21ldGhpbmcgb3RoZXIKJiM0MzsJICogdGhhbiBSRFNfQ09OTl9VUCBzdG9wcyBuZXcgc2VuZGVycywgYW5kIG93bmluZyBSRFNfSU5fWE1JVAomIzQzOwkgKiBleGNsdWRlcyBhbnkgdGhyZWFkIGFscmVhZHkgaW5zaWRlIHJkc19zZW5kX3htaXQoKSAtIG9yIGEKJiM0MzsJICogdGVhcmRvd24gaW4gcmRzX2Nvbm5fc2h1dGRvd24oKSwgd2hpY2ggaG9sZHMgdGhlIHNhbWUgbG9jawomIzQzOwkgKiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB0cmFuc3BvcnQgc2h1dGRvd24gLSBmb3IgdGhlIHdob2xlCiYjNDM7CSAqIHNvY2tldCBzd2FwIGFuZCB0aGUgcmRzX3NlbmRfcGF0aF9yZXNldCgpIGJlbG93LgogCSAqCi0JICogSG93ZXZlciBhbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwCi0JICogbWFya2luZyB0aGUgY29ubiBhcyBSRFNfQ09OTl9VUCwgYW5kIHdvdWxkIGFnYWluIHBlcm1pdAotCSAqIHJkc19zZW5kX3htaSgpIHRocmVhZHMgdGhyb3VnaCwgc28gaWRlYWxseSB3ZSB3b3VsZAotCSAqIHN5bmNocm9uaXplIG9uIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90Ci0JICogZG8gdGhhdDogd2FpdGluZyBvbiAhUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5Ci0JICogZW5kIHVwIGRlYWRsb2NraW5nIHdpdGggdGNwX3NlbmRtc2coKSwgYW5kIHRoZSBSRFNfSU5fWE1JVAotCSAqIHdvdWxkIG5vdCBnZXQgc2V0LiBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG8KLQkgKiBSRFNfQ09OTl9SRVNFVFRUSU5HLCB0byBlbnN1cmUgdGhhdCByZHNfdGNwX3N0YXRlX2NoYW5nZQotCSAqIGNhbm5vdCBtYXJrIHJkc19jb25uX3BhdGhfdXAoKSBpbiB0aGUgd2luZG93IGJlZm9yZSBsb2NrX3NvY2soKQomIzQzOwkgKiBBbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwIG1hcmtpbmcgdGhlCiYjNDM7CSAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpCiYjNDM7CSAqIHRocmVhZHMgdGhyb3VnaCwgc28gaWRlYWxseSB3ZSB3b3VsZCBzeW5jaHJvbml6ZSBvbgomIzQzOwkgKiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdCBkbyB0aGF0OiBhY3F1aXJpbmcKJiM0MzsJICogUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5IGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoCiYjNDM7CSAqIHRjcF9zZW5kbXNnKCksIHdoaWNoIHRha2VzIHRoZSBzb2NrZXQgbG9jayB3aGlsZSBob2xkaW5nCiYjNDM7CSAqIFJEU19JTl9YTUlULiAgQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvCiYjNDM7CSAqIFJEU19DT05OX1JFU0VUVElORywgdG8gZW5zdXJlIHRoYXQgcmRzX3RjcF9zdGF0ZV9jaGFuZ2UKJiM0MzsJICogY2Fubm90IG1hcmsgcmRzX2Nvbm5fcGF0aF91cCgpIGluIHRoZSB3aW5kb3cgYmVmb3JlCiYjNDM7CSAqIGxvY2tfc29jaygpLgomIzQzOwkgKgomIzQzOwkgKiBPbmx5IG1ha2UgdGhhdCB0cmFuc2l0aW9uIGlmIHRoZSBwYXRoIGlzIHN0aWxsIGNvbm5lY3RpbmcKJiM0MzsJICogKG9yIGFscmVhZHkgcmVzZXR0aW5nIGZyb20gYW4gZWFybGllciBkdWVsKS4gIEEgcGF0aCBpbiBhbnkKJiM0MzsJICogb3RoZXIgc3RhdGUgLSB0eXBpY2FsbHkgUkRTX0NPTk5fRElTQ09OTkVDVElORyBvcgomIzQzOwkgKiBSRFNfQ09OTl9FUlJPUiB3aXRoIGEgc2h1dGRvd24gaW4gZmxpZ2h0IC0gaXMgZHJvcHBlZAomIzQzOwkgKiBpbnN0ZWFkLiAgVGhhdCBzdGlsbCByZXBsYWNlcyBpdHMgc3RhdGUsIHdpdGggUkRTX0NPTk5fRVJST1IsCiYjNDM7CSAqIGFuZCwgdW5sZXNzIGEgcGVuZGluZyBkZXN0cm95IGlzIGFib3V0IHRvIHJlYXAgdGhlIHdob2xlCiYjNDM7CSAqIGNvbm5lY3Rpb24gYW55d2F5LCBxdWV1ZXMgb25lIG1vcmUgc2h1dGRvd24gcGFzcy4gIEEgc2h1dGRvd24KJiM0MzsJICogYWxyZWFkeSBpbiBmbGlnaHQgbGVhdmVzIHRoYXQgUkRTX0NPTk5fRVJST1IgYWxvbmUgd2hlbiBpdAomIzQzOwkgKiBmaW5pc2hlczsgdGhlIHF1ZXVlZCBwYXNzIHRoZW4gY29tcGxldGVzIHRoZSB0cmFuc2l0aW9uIHRvCiYjNDM7CSAqIFJEU19DT05OX0RPV04gYW5kIHRlYXJzIGRvd24gYW55dGhpbmcgdGhhdCBhdHRhY2hlZCB0byB0aGUKJiM0MzsJICogcGF0aCBpbiB0aGUgbWVhbnRpbWUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fQ09OTkVDVElORywKJiM0MzsJCQkJICAgICAgUkRTX0NPTk5fUkVTRVRUSU5HKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9SRVNFVFRJTkcsCiYjNDM7CQkJCSAgICAgIFJEU19DT05OX1JFU0VUVElORykpCiYjNDM7CQlyZHNfY29ubl9wYXRoX2Ryb3AoY3AsIDApOwomIzQzOwl3YWl0X2V2ZW50KGNwLSZndDtjcF93YWl0cSwKJiM0MzsJCSAgICF0ZXN0X2FuZF9zZXRfYml0X2xvY2soUkRTX0lOX1hNSVQsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7CiYjNDM7CiYjNDM7CS8qIFJlYWQgdF9zb2NrIG9ubHkgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlULCBuZXZlciBiZWZvcmUgdGhlCiYjNDM7CSAqIHdhaXQ6IHRoZSB0ZWFyZG93biBpbiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGQKJiM0MzsJICogc29ja2V0IGFuZCBjbGVhcnMgdF9zb2NrLCBzbyBhIHBvaW50ZXIgc2FtcGxlZCBlYXJsaWVyIGNhbgomIzQzOwkgKiBiZSBzdGFsZSBieSB0aGUgdGltZSB3ZSB3YWtlIHVwLiAgVGhlIHRlYXJkb3duIGhvbGRzIHRoZQomIzQzOwkgKiBzYW1lIGxvY2sgd2hpbGUgaXQgZG9lcyBzbywgc28gd2hhdCB3ZSByZWFkIGhlcmUgY2Fubm90CiYjNDM7CSAqIGNoYW5nZSB1bmRlciB1cyB1bnRpbCB3ZSByZWxlYXNlIGl0LgomIzQzOwkgKi8KJiM0MzsJb3NvY2sgPSB0Yy0mZ3Q7dF9zb2NrOwomIzQzOwlpZiAoIW9zb2NrKQomIzQzOwkJZ290byBuZXdzb2NrOwomIzQzOwomIzQzOwkvKiByZXNldCByZWNlaXZlIHNpZGUgc3RhdGUgZm9yIHJkc190Y3BfZGF0YV9yZWN2KCkgZm9yIG9zb2NrLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgc3luYyBjYW5jZWxzIHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVCByZWx5IG9uIGNwX3dxCiYjNDM7CSAqIGJlaW5nIG9yZGVyZWQ6IGEgdGVhcmRvd24gYmxvY2tlZCBvbiB0aGUgYml0IG9jY3VwaWVzCiYjNDM7CSAqIGNwX3dxJiMzOTtzIG9ubHkgZXhlY3V0aW9uIHNsb3QsIHNvIGNwX3NlbmRfdyBhbmQgY3BfcmVjdl93IGFyZQomIzQzOwkgKiBwZW5kaW5nIGF0IG1vc3QgYW5kIHRoZSBjYW5jZWxzIG5ldmVyIGZsdXNoLiAgTm90aGluZyBoZXJlCiYjNDM7CSAqIG1heSBmbHVzaCBvciB3YWl0IG9uIGNwX3dxIGl0c2VsZi4KIAkgKi8KLQlhdG9taWNfc2V0KCZhbXA7Y3AtJmd0O2NwX3N0YXRlLCBSRFNfQ09OTl9SRVNFVFRJTkcpOwotCXdhaXRfZXZlbnQoY3AtJmd0O2NwX3dhaXRxLCAhdGVzdF9iaXQoUkRTX0lOX1hNSVQsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7Ci0JLyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jayAgKi8KIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3Bfc2VuZF93KTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3BfcmVjdl93KTsKIAlsb2NrX3NvY2sob3NvY2stJmd0O3NrKTsKQEAgLTE3Miw2ICYjNDM7MjE2LDkgQEAgdm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCWxvY2tfc29jayhzb2NrLSZndDtzayk7CiAJcmRzX3RjcF9zZXRfY2FsbGJhY2tzKHNvY2ssIGNwKTsKIAlyZWxlYXNlX3NvY2soc29jay0mZ3Q7c2spOwomIzQzOwomIzQzOwljbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CXdha2VfdXBfYWxsKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKTsKIH0KIAogLyogQWRkIHRjIHRvIHJkc190Y3BfdGNfbGlzdCBhbmQgc2V0IHRjLSZndDt0X3NvY2suIFNlZSBjb21tZW50cwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uYwppbmRleCBhM2RiOWIwNTcwODRkLi4xM2ZhNjBjMTk4NWJiIDEwMDY0NAotLS0gYS9uZXQvcmRzL3RjcF9saXN0ZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcF9saXN0ZW4uYwpAQCAtMjk1LDcgJiM0MzsyOTUsMTEgQEAgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bikKIAlpZiAocnNfdGNwLSZndDt0X3NvY2spIHsKIAkJLyogRHVlbGxpbmcgU1lOIGhhcyBiZWVuIGhhbmRsZWQgaW4gcmRzX3RjcF9hY2NlcHRfb25lKCkgKi8KIAkJcmRzX3RjcF9yZXNldF9jYWxsYmFja3MobmV3X3NvY2ssIGNwKTsKLQkJLyogcmRzX2Nvbm5lY3RfcGF0aF9jb21wbGV0ZSgpIG1hcmtzIFJEU19DT05OX1VQICovCiYjNDM7CQkvKiByZHNfY29ubmVjdF9wYXRoX2NvbXBsZXRlKCkgbWFya3MgUkRTX0NPTk5fVVAsIG9yLAomIzQzOwkJICogaWYgYSBjb25jdXJyZW50IHNodXRkb3duIHdvbiB0aGUgZHVlbCwgZHJvcHMgdGhlCiYjNDM7CQkgKiBwYXRoIGFnYWluIGFuZCB0aGUgcGFzcyB0aGF0IGRyb3AgcXVldWVzIHJlYXBzIHRoZQomIzQzOwkJICogc29ja2V0IGluc3RhbGxlZCBhYm92ZS4KJiM0MzsJCSAqLwogCQlyZHNfY29ubmVjdF9wYXRoX2NvbXBsZXRlKGNwLCBSRFNfQ09OTl9SRVNFVFRJTkcpOwogCX0gZWxzZSB7CiAJCXJkc190Y3Bfc2V0X2NhbGxiYWNrcyhuZXdfc29jaywgY3ApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk3NAoJCQkJCQkJb3V0cHV0OiAyMzgKCQkJCQkJCXRob3VnaHRzOiAxMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBSRFMgQ29ubmVjdGlvbiBMaWZlY3ljbGUgU3luY2hyb25pemF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBwcmltYXJpbHkgYSBzeW5jaHJvbml6YXRpb24gYW5kIGNvbmN1cnJlbmN5IGZpeCB3aXRoaW4gdGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgY29ubmVjdGlvbiBsaWZlY3ljbGUgbWFuYWdlbWVudC4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczogYGNvbm5lY3Rpb24uY2AsIGBpYl9yZWN2LmNgLCBgc2VuZC5jYCwgYHRjcC5jYCwgYW5kIGB0Y3BfbGlzdGVuLmNgLiBNeSBleHBlcnQgZXllIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBtb2RpZmljYXRpb25zIGludm9sdmluZyBhdG9taWMgb3BlcmF0aW9ucywgYml0bG9ja3MsIGFuZCB3YWl0cXVldWVzLCB3aGljaCBzY3JlYW0gJiMzNDtyYWNlIGNvbmRpdGlvbiBmaXguJiMzNDsKClNwZWNpZmljYWxseSwgbGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgoqICAgYGNvbm5lY3Rpb24uY2A6IFRoZSBwYXRjaCBlbGVnYW50bHkgdHJhbnNpdGlvbnMgZnJvbSBzaW1wbGUgZmxhZyBjbGVhcnMgdG8gdXNpbmcgYGNsZWFyX2JpdGAgd2l0aCBgY2xlYXJfYml0X3VubG9ja2Agd2l0aGluIHRoZSBgcmRzX2Nvbm5fcGF0aF9yZXNldCgpYCBhbmQgYHJkc19jb25uX3NodXRkb3duKClgIGZ1bmN0aW9ucy4gVGhpcyBpbmRpY2F0ZXMgYSBjb25zY2lvdXMgZWZmb3J0IHRvIGF2b2lkIGNsb2JiZXJpbmcgY29uY3VycmVudCBhdG9taWMgb3BlcmF0aW9ucyBvbiB0aGUgYGNwX2ZsYWdzYCBmaWVsZCwgY3J1Y2lhbCBpbiBhbnkgY29uY3VycmVudCBzeXN0ZW0uIFRoZSB1c2Ugb2YgYHRlc3RfYW5kX3NldF9iaXRfbG9ja2AgdG8gc2VyaWFsaXplIGFjY2VzcyBkdXJpbmcgc2h1dGRvd24gbWFrZXMgcGVyZmVjdCBzZW5zZSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhlIGRpc2Nvbm5lY3Rpb24gcHJvY2Vzcy4gVGhlIHN0YXRlIHRyYW5zaXRpb24gYW5kIGhhbmRsaW5nIG9mIGRlbGF5ZWQgd29yayBzZWVtIGxpa2UgYSB0eXBpY2FsIGJ1ZyBmaXggZHVyaW5nIGNvbm5lY3Rpb24gdGVhcmRvd24uCiogICBgaWJfcmVjdi5jYCBhbmQgYHNlbmQuY2A6IFRoZSByZXBsYWNlbWVudCBvZiBgY2xlYXJfYml0YCAmIzQzOyBgc21wX21iX19hZnRlcl9hdG9taWMoKWAgYW5kIGB3YWl0cXVldWVfYWN0aXZlKClgIHdpdGggYGNsZWFyX2JpdF91bmxvY2soKWAgYW5kIGB3cV9oYXNfc2xlZXBlcigpYCBpbiBgcmVsZWFzZV9yZWZpbGwoKWAgYW5kIGByZWxlYXNlX2luX3htaXQoKWAgcmVzcGVjdGl2ZWx5IGlzIGEgY2xhc3NpYyBvcHRpbWl6YXRpb24gYW5kIHNpbXBsaWZpY2F0aW9uLCB3aGlsZSBtYWludGFpbmluZyBzeW5jaHJvbml6YXRpb24gY29ycmVjdG5lc3MsIHRvIGNoZWNrIGlmIGEgdGFzayBpcyB3YWl0aW5nIG9uIHRoYXQgcXVldWUuCiogICBgdGNwLmNgOiBUaGUgaW50cm9kdWN0aW9uIG9mIGB0ZXN0X2FuZF9zZXRfYml0X2xvY2tgIGluIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpYCBiZWZvcmUgYWNjZXNzaW5nIGB0Yy0mZ3Q7dF9zb2NrYCBzdWdnZXN0cyBhIGNyaXRpY2FsIGZpeCBmb3Igc29ja2V0IHN3YXBwaW5nIGFnYWluc3Qgc2VuZGVycyBhbmQgdGVhcmRvd24gaW4gYSBtdWx0aS10aHJlYWRlZCBvciBpbnRlcnJ1cHQtZHJpdmVuIGNvbnRleHQuIFRoaXMgZ3VhcmFudGVlcyB0aGF0IHNvY2tldCBzdGF0ZSBpcyB2YWxpZCB3aGVuIGJlaW5nIHVzZWQsIGFuZCBhdm9pZHMgb3RoZXIgcmFjZXMgb24gaXQuCiogICBgdGNwX2xpc3Rlbi5jYDogVGhlIGNvbW1lbnQgdXBkYXRlIGlzIGluc2lnbmlmaWNhbnQuCgpOb3csIGxldCYjMzk7cyBtZXRob2RpY2FsbHkgYWRkcmVzcyB0aGUgcG90ZW50aWFsIHJpc2tzLiBNeSBwcmltYXJ5IGZvY3VzIGlzIGFsd2F5cyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgKEtNU0FOKSBvciBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZXMgKEtBU0FOLCBMT0NLREVQLCBldGMuKS4KCjEuICAqKlVzZXIgU3BhY2UgSW50ZXJhY3Rpb246KiogVGhpcyBwYXRjaCAqZG9lc24mIzM5O3QqIHRvdWNoIGFueSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgdmlhIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucy4gU28sIG5vIGNvbmNlcm5zIHRoZXJlLgoyLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlczoqKiBUaGUgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIG5ldyBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgZGVwZW5kZW50IG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBFdmVyeXRoaW5nIEkgc2VlIGlzIHdvcmtpbmcgd2l0aCBhdG9taWMgZmxhZ3Mgb3IgcHJlLWV4aXN0aW5nIGZpZWxkcyB3aXRoaW4gYHJkc19jb25uZWN0aW9uYCwgYHJkc19jb25uX3BhdGhgLCBvciBgcmRzX3RjcF9jb25uZWN0aW9uYCBvYmplY3RzIHRoYXQgYXJlIGFzc3VtZWQgdG8gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCjMuICAqKkRhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIEkmIzM5O20gbm90IHNlZWluZyBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9uIG9yIGFueSBjaGFuZ2VzIHRoYXQgY291bGQgbGVhZCB0byBzdWJzZXF1ZW50IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Lgo0LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgbW9kaWZ5IGFueSBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgYnVmZmVyIG92ZXJydW5zLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBwcmltYXJpbHkgYWRkcmVzc2VzICpjb25jdXJyZW5jeSBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlcyosIHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIG9yIHBvdGVudGlhbCBzdGF0ZSBtYWNoaW5lIGRlc3luY2hyb25pemF0aW9uLiBUaGVzZSBhcmUgdGhlIGtpbmRzIG9mIGlzc3VlcyBkZXRlY3RlZCBieSB0b29scyBsaWtlIEtBU0FOLCBMT0NLREVQLCBhbmQgcG90ZW50aWFsbHkgZnVuY3Rpb25hbCB0ZXN0aW5nLiBJdCBpcyAqbm90KiByZWxhdGVkIHRvIEtNU0FOIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBwcm90ZWN0aW5nIGFnYWluc3QgZGF0YSByYWNlcyBvbiBzaGFyZWQgc3RhdGUuCgpUaGUgS01TQU4gZG9jdW1lbnRhdGlvbiBpcyBjbGVhcjogJiMzNDtUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLiYjMzQ7IEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcyBhbmQgbXkgYW5hbHlzaXMsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgZmFsc2UuIEkmIzM5O20gY29tZm9ydGFibGUgaW4gc2F5aW5nIHRoaXMgcGF0Y2ggaXMgYSBnb29kIHRoaW5nOyB0aGUgc3luY2hyb25pemF0aW9uIGZpeGVzIGFyZSBjbGVhcmx5IGJlbmVmaWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZXNvbHZlcyBjb25jdXJyZW5jeSwgcmFjZSBjb25kaXRpb24sIGFuZCBzdGF0ZS1tYWNoaW5lIHN5bmNocm9uaXphdGlvbiBidWdzIGluIHRoZSBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIHN1YnN5c3RlbSBkdXJpbmcgY29ubmVjdGlvbiB0ZWFyZG93biwgcmVzZXQsIGFuZCBkdWVsbGluZyBTWU4gcmVzb2x1dGlvbiAoc3BlY2lmaWNhbGx5IGxvY2tpbmcgYW5kIGJpdC1tYW5pcHVsYXRpb24gb2YgUkRTX0lOX1hNSVQsIFJEU19SRUNWX1JFRklMTCwgYW5kIFJEU19DT05OXyogc3RhdGUgdHJhbnNpdGlvbnMpLlxuXG4tIE5vIG5ldyBoZWFwL3N0YWNrIGFsbG9jYXRpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYWRkZWQgb3IgbW9kaWZpZWQuXG4tIE5vIGtlcm5lbC10by11c2VyIGNvcHkgb3BlcmF0aW9ucyAoZS5nLiwgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluaywgaW9jdGwsIGdldHNvY2tvcHQpIG9yIHVzZXItZmFjaW5nIHN0cnVjdHMgYXJlIHRvdWNoZWQuXG4tIE5vIGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tzLCBvciBwYXlsb2FkIHBhcnNpbmcgcm91dGluZXMgYXJlIGFsdGVyZWQgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuLSBBbnkgY29uY3VycmVuY3kgYnVncywgdXNlLWFmdGVyLWZyZWUsIGRlYWRsb2Nrcywgb3IgbG9jayBvcmRlcmluZyBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIHRoZXNlIGNoYW5nZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlc29sdmVzIGNvbmN1cnJlbmN5LCByYWNlIGNvbmRpdGlvbiwgYW5kIHN0YXRlLW1hY2hpbmUgc3luY2hyb25pemF0aW9uIGJ1Z3MgaW4gdGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgc3Vic3lzdGVtIGR1cmluZyBjb25uZWN0aW9uIHRlYXJkb3duLCByZXNldCwgYW5kIGR1ZWxsaW5nIFNZTiByZXNvbHV0aW9uIChzcGVjaWZpY2FsbHkgbG9ja2luZyBhbmQgYml0LW1hbmlwdWxhdGlvbiBvZiBSRFNfSU5fWE1JVCwgUkRTX1JFQ1ZfUkVGSUxMLCBhbmQgUkRTX0NPTk5fKiBzdGF0ZSB0cmFuc2l0aW9ucykuXG5cbi0gTm8gbmV3IGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhZGRlZCBvciBtb2RpZmllZC5cbi0gTm8ga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zIChlLmcuLCBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rLCBpb2N0bCwgZ2V0c29ja29wdCkgb3IgdXNlci1mYWNpbmcgc3RydWN0cyBhcmUgdG91Y2hlZC5cbi0gTm8gYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja3MsIG9yIHBheWxvYWQgcGFyc2luZyByb3V0aW5lcyBhcmUgYWx0ZXJlZCB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4tIEFueSBjb25jdXJyZW5jeSBidWdzLCB1c2UtYWZ0ZXItZnJlZSwgZGVhZGxvY2tzLCBvciBsb2NrIG9yZGVyaW5nIGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gdGhlc2UgY2hhbmdlcyBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcywgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjAyLjc2MDAxOTIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyNDk1MDU1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfVENQXCIsXG4gICAgXCJSRFNfUkRNQVwiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiSU5GSU5JQkFORF9BRERSX1RSQU5TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX2Nvbm5fc2h1dGRvd25cIixcbiAgICBcInJkc19zZW5kX3htaXRcIixcbiAgICBcInJkc190Y3BfcmVzZXRfY2FsbGJhY2tzXCIsXG4gICAgXCJyZHNfdGNwX2FjY2VwdF9vbmVcIixcbiAgICBcInJkc19pYl9yZWN2X3JlZmlsbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlc29sdmVzIGNvbmN1cnJlbmN5LCByYWNlIGNvbmRpdGlvbiwgYW5kIHN0YXRlLW1hY2hpbmUgc3luY2hyb25pemF0aW9uIGJ1Z3MgaW4gdGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgc3Vic3lzdGVtIGR1cmluZyBjb25uZWN0aW9uIHRlYXJkb3duLCByZXNldCwgYW5kIGR1ZWxsaW5nIFNZTiByZXNvbHV0aW9uIChzcGVjaWZpY2FsbHkgbG9ja2luZyBhbmQgYml0LW1hbmlwdWxhdGlvbiBvZiBSRFNfSU5fWE1JVCwgUkRTX1JFQ1ZfUkVGSUxMLCBhbmQgUkRTX0NPTk5fKiBzdGF0ZSB0cmFuc2l0aW9ucykuXFxuXFxuLSBObyBuZXcgaGVhcC9zdGFjayBhbGxvY2F0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGFkZGVkIG9yIG1vZGlmaWVkLlxcbi0gTm8ga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zIChlLmcuLCBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rLCBpb2N0bCwgZ2V0c29ja29wdCkgb3IgdXNlci1mYWNpbmcgc3RydWN0cyBhcmUgdG91Y2hlZC5cXG4tIE5vIGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tzLCBvciBwYXlsb2FkIHBhcnNpbmcgcm91dGluZXMgYXJlIGFsdGVyZWQgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Llxcbi0gQW55IGNvbmN1cnJlbmN5IGJ1Z3MsIHVzZS1hZnRlci1mcmVlLCBkZWFkbG9ja3MsIG9yIGxvY2sgb3JkZXJpbmcgaXNzdWVzIHRoYXQgY291bGQgYXJpc2UgZnJvbSB0aGVzZSBjaGFuZ2VzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBtZWNoYW5pc21zIChzcGVjaWZpY2FsbHkgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBiaXRsb2Nrcywgd2FpdHF1ZXVlIGJhcnJpZXJzLCBhbmQgc3RhdGUgdHJhbnNpdGlvbnMpIGluIFJEUyBjb25uZWN0aW9uIHRlYXJkb3duLCBzZW5kLCByZWNlaXZlLXJlZmlsbCwgYW5kIFRDUCBzb2NrZXQgc3dhcHBpbmcgcGF0aHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBuZXR3b3JrIHNvY2tldCBvcGVyYXRpb25zIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDc6MDIuNzYwMDIzNTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5OTAxMTc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRmZTM3Njc5MGI3YzlkY2YzZTZmNTMxZTU2NWYyMzc3ZmNlZmIzYWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjggMjI6NDc6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9jb25uZWN0aW9uLmMgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uY1xcbmluZGV4IDdjOGFiOGU5NzNlMWIuLmI2YzRiZWI1MGVhZjAgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9jb25uZWN0aW9uLmNcXG4rKysgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uY1xcbkBAIC0xMDYsMTAgKzEwNiwxMiBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxcbiB9XFxuIFxcbiAvKlxcbi0gKiBUaGlzIGlzIGNhbGxlZCBieSB0cmFuc3BvcnRzIGFzIHRoZXkncmUgYnJpbmdpbmcgZG93biBhIGNvbm5lY3Rpb24uXFxuLSAqIEl0IGNsZWFycyBwYXJ0aWFsIG1lc3NhZ2Ugc3RhdGUgc28gdGhhdCB0aGUgdHJhbnNwb3J0IGNhbiBzdGFydCBzZW5kaW5nXFxuLSAqIGFuZCByZWNlaXZpbmcgb3ZlciB0aGlzIGNvbm5lY3Rpb24gYWdhaW4gaW4gdGhlIGZ1dHVyZS4gIEl0IGlzIHVwIHRvXFxuLSAqIHRoZSB0cmFuc3BvcnQgdG8gaGF2ZSBzZXJpYWxpemVkIHRoaXMgY2FsbCB3aXRoIGl0cyBzZW5kIGFuZCByZWN2LlxcbisgKiBUaGlzIGlzIGNhbGxlZCBieSByZHNfY29ubl9zaHV0ZG93bigpIG9uY2UgdGhlIHRyYW5zcG9ydCBoYXMgYnJvdWdodFxcbisgKiBhIHBhdGggZG93bi4gIEl0IGNsZWFycyBwYXJ0aWFsIG1lc3NhZ2Ugc3RhdGUgc28gdGhhdCB0aGUgdHJhbnNwb3J0XFxuKyAqIGNhbiBzdGFydCBzZW5kaW5nIGFuZCByZWNlaXZpbmcgb3ZlciB0aGlzIHBhdGggYWdhaW4gaW4gdGhlIGZ1dHVyZS5cXG4rICogVGhlIGNhbGxlciBvd25zIFJEU19JTl9YTUlUIGFuZCBSRFNfUkVDVl9SRUZJTEwgYWNyb3NzIHRoaXMgY2FsbCxcXG4rICogd2hpY2ggaXMgd2hhdCBzZXJpYWxpemVzIGl0IGFnYWluc3QgdGhlIHNlbmQgYW5kIHJlY2VpdmUtcmVmaWxsXFxuKyAqIHBhdGhzLlxcbiAgKi9cXG4gc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuIHtcXG5AQCAtMTIwLDcgKzEyMiwxNiBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG4gXFxuIFxcdHJkc19zdGF0c19pbmMoc19jb25uX3Jlc2V0KTtcXG4gXFx0cmRzX3NlbmRfcGF0aF9yZXNldChjcCk7XFxuLVxcdGNwLVxcdTAwM2VjcF9mbGFncyA9IDA7XFxuK1xcbitcXHQvKiBDbGVhciB0aGUgYml0cyB0aGUgcmVzZXQgaXMgcmVzcG9uc2libGUgZm9yIGluZGl2aWR1YWxseTogYVxcbitcXHQgKiBibGFua2V0IGNwX2ZsYWdzID0gMCBpcyBhIHBsYWluIHN0b3JlIHRoYXQgY2FuIGNsb2JiZXIgYVxcbitcXHQgKiBjb25jdXJyZW50IGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBvbiB0aGUgc2FtZSB3b3JkLlxcbitcXHQgKiBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGFyZSBoZWxkIGFzIGxvY2tzIGJ5IHRoZVxcbitcXHQgKiBjYWxsZXIsIHJkc19jb25uX3NodXRkb3duKCksIHdoaWNoIHJlbGVhc2VzIHRoZW0gb25jZSB0aGVcXG4rXFx0ICogdGVhcmRvd24gaXMgY29tcGxldGUuXFxuK1xcdCAqL1xcbitcXHRjbGVhcl9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncyk7XFxuK1xcdGNsZWFyX2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsIFxcdTAwMjZjcC1cXHUwMDNlY3BfZmxhZ3MpO1xcbiBcXG4gXFx0LyogRG8gbm90IGNsZWFyIG5leHRfcnhfc2VxIGhlcmUsIGVsc2Ugd2UgY2Fubm90IGRpc3Rpbmd1aXNoXFxuIFxcdCAqIHJldHJhbnNtaXR0ZWQgcGFja2V0cyBmcm9tIG5ldyBwYWNrZXRzLCBhbmQgd2lsbCBoYW5kIGFsbFxcbkBAIC00MDYsMjggKzQxNyw3MCBAQCB2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG4gXFx0XFx0fVxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNwLVxcdTAwM2VjcF9jbV9sb2NrKTtcXG4gXFxuK1xcdFxcdC8qIFF1aWVzY2UgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlLXJlZmlsbCBwYXRocyBieVxcbitcXHRcXHQgKiBhY3F1aXJpbmcgdGhlaXIgYml0IGxvY2tzLCBub3QgbWVyZWx5IHdhaXRpbmcgZm9yXFxuK1xcdFxcdCAqIHRoZW0gdG8gYmUgcmVsZWFzZWQ6IHdpdGggYSBwbGFpbiB3YWl0LCBlaXRoZXIgcGF0aFxcbitcXHRcXHQgKiBjYW4gcmUtdGFrZSBpdHMgbG9jayB0aGUgaW5zdGFudCBhZnRlciB3ZSBzYW1wbGUgaXRcXG4rXFx0XFx0ICogY2xlYXIgYW5kIHRoZW4gcnVuIGNvbmN1cnJlbnRseSB3aXRoIHRoZSB0cmFuc3BvcnRcXG4rXFx0XFx0ICogc2h1dGRvd24gYW5kIHRoZSBwYXRoIHJlc2V0IGJlbG93LiAgSG9sZGluZyBib3RoXFxuK1xcdFxcdCAqIGxvY2tzIGFjcm9zcyB0aGUgdGVhcmRvd24gbWFrZXMgdGhhdCBzdHJ1Y3R1cmFsbHlcXG4rXFx0XFx0ICogaW1wb3NzaWJsZS5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdHdhaXRfZXZlbnQoY3AtXFx1MDAzZWNwX3dhaXRxLFxcbi1cXHRcXHRcXHQgICAhdGVzdF9iaXQoUkRTX0lOX1hNSVQsIFxcdTAwMjZjcC1cXHUwMDNlY3BfZmxhZ3MpKTtcXG4rXFx0XFx0XFx0ICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhSRFNfSU5fWE1JVCwgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncykpO1xcbiBcXHRcXHR3YWl0X2V2ZW50KGNwLVxcdTAwM2VjcF93YWl0cSxcXG4tXFx0XFx0XFx0ICAgIXRlc3RfYml0KFJEU19SRUNWX1JFRklMTCwgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncykpO1xcbitcXHRcXHRcXHQgICAhdGVzdF9hbmRfc2V0X2JpdChSRFNfUkVDVl9SRUZJTEwsIFxcdTAwMjZjcC1cXHUwMDNlY3BfZmxhZ3MpKTtcXG4gXFxuIFxcdFxcdGNvbm4tXFx1MDAzZWNfdHJhbnMtXFx1MDAzZWNvbm5fcGF0aF9zaHV0ZG93bihjcCk7XFxuIFxcdFxcdHJkc19jb25uX3BhdGhfcmVzZXQoY3ApO1xcbiBcXG4rXFx0XFx0LyogUmVsZWFzZSB0aGUgdHdvIGxvY2tzIGFuZCB3YWtlIGFueSB3YWl0ZXIgKGUuZy5cXG4rXFx0XFx0ICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSkgdGhhdCBibG9ja2VkIG9uIHRoZW0gd2hpbGVcXG4rXFx0XFx0ICogd2UgaGVsZCB0aGVtLiAgVGhlIHVubG9jayBvcmRlcnMgdGhlIHRyYW5zcG9ydCdzIHJpbmdcXG4rXFx0XFx0ICogcmUtaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBwYXRoIHJlc2V0IGFib3ZlIGJlZm9yZVxcbitcXHRcXHQgKiBlaXRoZXIgYml0IGlzIHNlZW4gY2xlYXIuICByZHNfY29ubl9wYXRoX3Jlc2V0KCkgbGVhdmVzXFxuK1xcdFxcdCAqIGJvdGggYml0cyBhbG9uZTogb3duZXJzaGlwIGVuZHMgaGVyZSwgbm90IGluc2lkZSB0aGVcXG4rXFx0XFx0ICogcmVzZXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKTtcXG4rXFx0XFx0Y2xlYXJfYml0X3VubG9jayhSRFNfUkVDVl9SRUZJTEwsIFxcdTAwMjZjcC1cXHUwMDNlY3BfZmxhZ3MpO1xcbitcXHRcXHR3YWtlX3VwX2FsbChcXHUwMDI2Y3AtXFx1MDAzZWNwX3dhaXRxKTtcXG4rXFxuIFxcdFxcdGlmICghcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9ESVNDT05ORUNUSU5HLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBSRFNfQ09OTl9ET1dOKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRVJST1IsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFJEU19DT05OX0RPV04pKSB7XFxuLVxcdFxcdFxcdC8qIFRoaXMgY2FuIGhhcHBlbiAtIGVnIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiB0ZWFyaW5nXFxuLVxcdFxcdFxcdCAqIGRvd24gdGhlIGNvbm5lY3Rpb24sIGFuZCBzb21lb25lIHVubG9hZHMgdGhlIHJkcyBtb2R1bGUuXFxuLVxcdFxcdFxcdCAqIFF1aXRlIHJlcHJvZHVjaWJsZSB3aXRoIGxvb3BiYWNrIGNvbm5lY3Rpb25zLlxcbi1cXHRcXHRcXHQgKiBNb3N0bHkgaGFybWxlc3MuXFxuK1xcdFxcdFxcdC8qIFRoZSBwYXRoIHdhcyBkcm9wcGVkIGFnYWluIHdoaWxlIHdlIHRvcmUgaXRcXG4rXFx0XFx0XFx0ICogZG93bjogYnkgYSBzb2NrZXQgc3RhdGUtY2hhbmdlIGNhbGxiYWNrIGluXFxuK1xcdFxcdFxcdCAqIGlycSBjb250ZXh0IG9uIHJlY2VpcHQgb2YgYSBGSU4sIG9yIGJ5IGFuXFxuK1xcdFxcdFxcdCAqIGFjY2VwdCB0aGF0IGNsYWltZWQgdGhlIHBhdGgganVzdCBiZWZvcmUgYVxcbitcXHRcXHRcXHQgKiBkcm9wIHB1dCBpdCBiYWNrIHRvIFJEU19DT05OX0VSUk9SIGFuZCB0aGVuXFxuK1xcdFxcdFxcdCAqIGluc3RhbGxlZCBhIGZyZXNoIHNvY2tldCBvbiBpdC4gIFVubGVzcyBhXFxuK1xcdFxcdFxcdCAqIHBlbmRpbmcgZGVzdHJveSBzdXBwcmVzc2VkIGl0LCB0aGUgZHJvcCBhbHNvXFxuK1xcdFxcdFxcdCAqIHF1ZXVlZCBhbm90aGVyIHNodXRkb3duIHBhc3MsIGFuZCB0aGF0IHBhc3NcXG4rXFx0XFx0XFx0ICogbXVzdCBydW4sIGJlY2F1c2UgaXQgaXMgd2hhdCB0ZWFycyBkb3duXFxuK1xcdFxcdFxcdCAqIHdoYXRldmVyIGF0dGFjaGVkIHRvIHRoZSBwYXRoIGFmdGVyIHRoZVxcbitcXHRcXHRcXHQgKiB0cmFuc3BvcnQgc2h1dGRvd24gYWJvdmUgc2FtcGxlZCBpdHMgc3RhdGUuXFxuK1xcdFxcdFxcdCAqIENvbnN1bWluZyB0aGUgUkRTX0NPTk5fRVJST1IgaGVyZSB3b3VsZCB0dXJuXFxuK1xcdFxcdFxcdCAqIHRoYXQgcGFzcyBpbnRvIGEgbm8tb3A6IGxlYXZlIHRoZSBzdGF0ZVxcbitcXHRcXHRcXHQgKiBhbG9uZSwgYW5kIGxldCB0aGUgcGFzcyBmaW5pc2ggdGhlIGpvYi5cXG4gXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogTm90ZSB0aGF0IHRoaXMgYWxzbyBoYXBwZW5zIHdpdGggcmRzLXRjcCBiZWNhdXNlXFxuLVxcdFxcdFxcdCAqIHdlIGNvdWxkIGhhdmUgdHJpZ2dlcmVkIHJkc19jb25uX3BhdGhfZHJvcCBpbiBpcnFcXG4tXFx0XFx0XFx0ICogbW9kZSBmcm9tIHJkc190Y3Bfc3RhdGUgY2hhbmdlIG9uIHRoZSByZWNlaXB0IG9mXFxuLVxcdFxcdFxcdCAqIGEgRklOLCB0aHVzIHdlIG5lZWQgdG8gcmVjaGVjayBmb3IgUkRTX0NPTk5fRVJST1JcXG4tXFx0XFx0XFx0ICogaGVyZS5cXG4rXFx0XFx0XFx0ICogUXVpZXNjZSB0aGUgcmVjb25uZWN0IHRpbWVyIGJlZm9yZSBiYWlsaW5nXFxuK1xcdFxcdFxcdCAqIG91dCwgdGhvdWdoLiAgV2hlbiBhIHBlbmRpbmcgZGVzdHJveSBkaWRcXG4rXFx0XFx0XFx0ICogc3VwcHJlc3MgdGhlIHF1ZXVlLCBubyBsYXRlciBwYXNzIHJ1bnMsIGFuZFxcbitcXHRcXHRcXHQgKiByZHNfY29ubl9wYXRoX2Rlc3Ryb3koKSBpcyBhYm91dCB0byBmbHVzaFxcbitcXHRcXHRcXHQgKiBjcF9kb3duX3cgYW5kIGZyZWUgdGhlIHBhdGg6IGl0IG11c3Qgbm90XFxuK1xcdFxcdFxcdCAqIGZpbmQgY3BfY29ubl93IHN0aWxsIGFybWVkLiAgQSBzdWNjZXNzb3JcXG4rXFx0XFx0XFx0ICogcGFzcywgd2hlbiB0aGVyZSBpcyBvbmUsIHJlLWFybXMgdGhlXFxuK1xcdFxcdFxcdCAqIHJlY29ubmVjdCBmcm9tIGl0cyBvd24gdGFpbC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2Y3AtXFx1MDAzZWNwX2Nvbm5fdyk7XFxuK1xcdFxcdFxcdGNsZWFyX2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsIFxcdTAwMjZjcC1cXHUwMDNlY3BfZmxhZ3MpO1xcbitcXG4rXFx0XFx0XFx0aWYgKHJkc19jb25uX3BhdGhfc3RhdGUoY3ApID09IFJEU19DT05OX0VSUk9SKVxcbitcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdC8qIE5vIGN1cnJlbnQgY3Bfc3RhdGUgd3JpdGVyIGxlYXZlcyBhXFxuK1xcdFxcdFxcdCAqIERJU0NPTk5FQ1RJTkcgcGF0aCBpbiBhbnkgc3RhdGUgYnV0XFxuK1xcdFxcdFxcdCAqIFJEU19DT05OX0VSUk9SOyByZXBvcnQgbG91ZGx5IGlmIG9uZSBldmVyXFxuK1xcdFxcdFxcdCAqIGRvZXMuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRyZHNfY29ubl9wYXRoX2Vycm9yKGNwLCBcXFwiJXM6IGZhaWxlZCB0byB0cmFuc2l0aW9uIFxcXCJcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJ0byBzdGF0ZSBET1dOLCBjdXJyZW50IHN0YXRlIFxcXCJcXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZWN2LmMgYi9uZXQvcmRzL2liX3JlY3YuY1xcbmluZGV4IDM1NzEyOGQzNGE1NDYuLmJkNmNiM2ZmYWE1NzEgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9pYl9yZWN2LmNcXG4rKysgYi9uZXQvcmRzL2liX3JlY3YuY1xcbkBAIC0zNjMsMTUgKzM2MywxNCBAQCBzdGF0aWMgaW50IGFjcXVpcmVfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcXG4gXFxuIHN0YXRpYyB2b2lkIHJlbGVhc2VfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcXG4ge1xcbi1cXHRjbGVhcl9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCBcXHUwMDI2Y29ubi1cXHUwMDNlY19mbGFncyk7XFxuLVxcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XFxuK1xcdGNsZWFyX2JpdF91bmxvY2soUkRTX1JFQ1ZfUkVGSUxMLCBcXHUwMDI2Y29ubi1cXHUwMDNlY19mbGFncyk7XFxuIFxcbiBcXHQvKiBXZSBkb24ndCB1c2Ugd2FpdF9vbl9iaXQoKS93YWtlX3VwX2JpdCgpIGJlY2F1c2Ugb3VyIHdha2luZyBpcyBpbiBhXFxuIFxcdCAqIGhvdCBwYXRoIGFuZCBmaW5kaW5nIHdhaXRlcnMgaXMgdmVyeSByYXJlLiAgV2UgZG9uJ3Qgd2FudCB0byB3YWxrXFxuIFxcdCAqIHRoZSBzeXN0ZW0td2lkZSBoYXNoZWQgd2FpdHF1ZXVlIGJ1Y2tldHMgaW4gdGhlIGZhc3QgcGF0aCBvbmx5IHRvXFxuIFxcdCAqIGFsbW9zdCBuZXZlciBmaW5kIHdhaXRlcnMuXFxuIFxcdCAqL1xcbi1cXHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcXHUwMDI2Y29ubi1cXHUwMDNlY193YWl0cSkpXFxuK1xcdGlmICh3cV9oYXNfc2xlZXBlcihcXHUwMDI2Y29ubi1cXHUwMDNlY193YWl0cSkpXFxuIFxcdFxcdHdha2VfdXBfYWxsKFxcdTAwMjZjb25uLVxcdTAwM2VjX3dhaXRxKTtcXG4gfVxcbiBcXG5AQCAtMzkyLDcgKzM5MSw5IEBAIHZvaWQgcmRzX2liX3JlY3ZfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgaW50IHByZWZpbGwsIGdmcF90IGdmcClcXG4gXFxuIFxcdC8qIHRoZSBnb2FsIGhlcmUgaXMgdG8ganVzdCBtYWtlIHN1cmUgdGhhdCBzb21lb25lLCBzb21ld2hlcmVcXG4gXFx0ICogaXMgcG9zdGluZyBidWZmZXJzLiAgSWYgd2UgY2FuJ3QgZ2V0IHRoZSByZWZpbGwgbG9jayxcXG4tXFx0ICogbGV0IHRoZW0gZG8gdGhlaXIgdGhpbmdcXG4rXFx0ICogbGV0IHRoZW0gZG8gdGhlaXIgdGhpbmcuICBUaGUgaG9sZGVyIG1heSBhbHNvIGJlXFxuK1xcdCAqIHJkc19jb25uX3NodXRkb3duKCkgdGVhcmluZyB0aGUgcGF0aCBkb3duLCBpbiB3aGljaCBjYXNlXFxuK1xcdCAqIHRoZXJlIGlzIG5vdGhpbmcgdG8gcG9zdC5cXG4gXFx0ICovXFxuIFxcdGlmICghYWNxdWlyZV9yZWZpbGwoY29ubikpXFxuIFxcdFxcdHJldHVybjtcXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuY1xcbmluZGV4IDE1YTFiOTdmMTNlNzYuLjFhZmE5ODFlNWMwNmQgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcXG4rKysgYi9uZXQvcmRzL3NlbmQuY1xcbkBAIC0xMTQsOCArMTE0LDEzIEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfaW5feG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuIFxcdCAqIGhvdCBwYXRoIGFuZCBmaW5kaW5nIHdhaXRlcnMgaXMgdmVyeSByYXJlLiAgV2UgZG9uJ3Qgd2FudCB0byB3YWxrXFxuIFxcdCAqIHRoZSBzeXN0ZW0td2lkZSBoYXNoZWQgd2FpdHF1ZXVlIGJ1Y2tldHMgaW4gdGhlIGZhc3QgcGF0aCBvbmx5IHRvXFxuIFxcdCAqIGFsbW9zdCBuZXZlciBmaW5kIHdhaXRlcnMuXFxuK1xcdCAqXFxuK1xcdCAqIHdxX2hhc19zbGVlcGVyKCkgc3VwcGxpZXMgdGhlIGZ1bGwgYmFycmllciB0aGF0IG9yZGVycyB0aGUgd2FpdFxcbitcXHQgKiBxdWV1ZSByZWFkIGFmdGVyIHRoZSBiaXQgY2xlYXI7IGNsZWFyX2JpdF91bmxvY2soKSBhbG9uZSBpcyBvbmx5XFxuK1xcdCAqIGEgcmVsZWFzZSBhbmQgd291bGQgbGV0IHRoaXMgY2hlY2sgcmVhZCBhIHN0YWxlIGVtcHR5IHF1ZXVlLFxcbitcXHQgKiBsb3NpbmcgdGhlIHdha2UtdXAuXFxuIFxcdCAqL1xcbi1cXHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcXHUwMDI2Y3AtXFx1MDAzZWNwX3dhaXRxKSlcXG4rXFx0aWYgKHdxX2hhc19zbGVlcGVyKFxcdTAwMjZjcC1cXHUwMDNlY3Bfd2FpdHEpKVxcbiBcXHRcXHR3YWtlX3VwX2FsbChcXHUwMDI2Y3AtXFx1MDAzZWNwX3dhaXRxKTtcXG4gfVxcbiBcXG5AQCAtMjM5LDggKzI0NCwxMSBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuIFxcdFdSSVRFX09OQ0UoY3AtXFx1MDAzZWNwX3NlbmRfZ2VuLCBzZW5kX2dlbik7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gdGVzdHMgUkRTX0lOX1hNSVQsXFxuLVxcdCAqIHdlIGRvIHRoZSBvcHBvc2l0ZSB0byBhdm9pZCByYWNlcy5cXG4rXFx0ICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIGFjcXVpcmVzXFxuK1xcdCAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZS5cXG4rXFx0ICogT3duZXJzaGlwIGlzIGRlY2lkZWQgYnkgdGhlIGF0b21pYyBSTVcgb24gdGhlIGNwX2ZsYWdzIHdvcmQ6XFxuK1xcdCAqIGlmIHRoZSB0ZWFyZG93biB3b24gdGhlIGJpdCB3ZSBiYWNrIG9mZiBoZXJlLCBhbmQgaWYgd2Ugd29uXFxuK1xcdCAqIGl0IHRoZSB0ZWFyZG93biB3YWl0cyB1bnRpbCB3ZSByZWxlYXNlIGl0LlxcbiBcXHQgKi9cXG4gXFx0aWYgKCFyZHNfY29ubl9wYXRoX3VwKGNwKSkge1xcbiBcXHRcXHRyZWxlYXNlX2luX3htaXQoY3ApO1xcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcC5jIGIvbmV0L3Jkcy90Y3AuY1xcbmluZGV4IGIyNjM2MzRhYzc1MGQuLjc3NGE3MWY4OGQzNzUgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy90Y3AuY1xcbisrKyBiL25ldC9yZHMvdGNwLmNcXG5AQCAtMTE1LDQ2ICsxMTUsOTAgQEAgdm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIH1cXG4gXFxuIC8qXFxuLSAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgdGhlIHRvIHRoZSBuZXcgc29jayBhbmRcXG4tICogcmV0dXJucyB0aGUgZXhpc3RpbmcgdGMtXFx1MDAzZXRfc29jay5cXG4rICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSBzd2l0Y2hlcyBhIHBhdGggdG8gYSBuZXcgc29ja2V0IGFuZFxcbisgKiByZWxlYXNlcyB0aGUgb2xkIG9uZSBpdCBmaW5kcyBpbiB0Yy1cXHUwMDNldF9zb2NrLCByZXNvbHZpbmcgYSBkdWVsbGluZ1xcbisgKiBTWU4uXFxuICAqXFxuLSAqIFRoZSBvbmx5IGZ1bmN0aW9ucyB0aGF0IHNldCB0Yy1cXHUwMDNldF9zb2NrIGFyZSByZHNfdGNwX3NldF9jYWxsYmFja3NcXG4tICogYW5kIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzLiAgU2VuZCBhbmQgcmVjZWl2ZSB0cnVzdCB0aGF0XFxuLSAqIGl0IGlzIHNldC4gIFRoZSBhYnNlbmNlIG9mIFJEU19DT05OX1VQIGJpdCBwcm90ZWN0cyB0aG9zZSBwYXRoc1xcbi0gKiBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24ndCBzZXQuXFxuKyAqIHRjLVxcdTAwM2V0X3NvY2sgaXMgc2V0IGJ5IHJkc190Y3Bfc2V0X2NhbGxiYWNrcygpIGFuZCBjbGVhcmVkIGJ5XFxuKyAqIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3MoKS4gIEZvdXIgcGF0aHMgd3JpdGUgaXQ6IHRoZSBhY3RpdmVcXG4rICogY29ubmVjdCBpbiByZHNfdGNwX2Nvbm5fcGF0aF9jb25uZWN0KCksIHdoaWNoIHNldHMgaXQgYW5kIGNsZWFycyBpdFxcbisgKiBhZ2FpbiBvbiBmYWlsdXJlOyB0aGUgYWNjZXB0IHBhdGggaW4gcmRzX3RjcF9hY2NlcHRfb25lKCksIHdoaWNoXFxuKyAqIHNldHMgaXQgZm9yIGEgcGF0aCB3aXRoIG5vIHNvY2tldCB5ZXQ7IHRoZSB0ZWFyZG93biBpblxcbisgKiByZHNfdGNwX2Nvbm5fcGF0aF9zaHV0ZG93bigpLCB3aGljaCBjbGVhcnMgaXQ7IGFuZCB0aGUgc3dhcCBkb25lXFxuKyAqIGhlcmUsIHdoaWNoIGRvZXMgYm90aC4gIFRoZSBjb25uZWN0IGFuZCBhY2NlcHQgcGF0aHMgYXJlIHNlcmlhbGl6ZWRcXG4rICogYWdhaW5zdCBlYWNoIG90aGVyIGJ5IHRfY29ubl9wYXRoX2xvY2suICBTZW5kIGFuZCByZWNlaXZlIHRydXN0XFxuKyAqIHRoYXQgaXQgaXMgc2V0OiB0aGUgYWJzZW5jZSBvZiBSRFNfQ09OTl9VUCBwcm90ZWN0cyB0aG9zZSBwYXRoc1xcbisgKiBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24ndCwgYW5kIHRoZSBzd2FwIGRvbmUgaGVyZSBydW5zIHVuZGVyXFxuKyAqIFJEU19JTl9YTUlUIHNvIHRoYXQgaXQgY2Fubm90IGludGVybGVhdmUgd2l0aCBhIHNlbmRlciBhbHJlYWR5XFxuKyAqIGluc2lkZSByZHNfc2VuZF94bWl0KCkuXFxuICAqL1xcbiB2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbiB7XFxuIFxcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXFx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xcbi1cXHRzdHJ1Y3Qgc29ja2V0ICpvc29jayA9IHRjLVxcdTAwM2V0X3NvY2s7XFxuLVxcbi1cXHRpZiAoIW9zb2NrKVxcbi1cXHRcXHRnb3RvIG5ld3NvY2s7XFxuK1xcdHN0cnVjdCBzb2NrZXQgKm9zb2NrO1xcbiBcXG4gXFx0LyogTmVlZCB0byByZXNvbHZlIGEgZHVlbGxpbmcgU1lOIGJldHdlZW4gcGVlcnMuXFxuIFxcdCAqIFdlIGhhdmUgYW4gb3V0c3RhbmRpbmcgU1lOIHRvIHRoaXMgcGVlciwgd2hpY2ggbWF5XFxuIFxcdCAqIHBvdGVudGlhbGx5IGhhdmUgdHJhbnNpdGlvbmVkIHRvIHRoZSBSRFNfQ09OTl9VUCBzdGF0ZSxcXG4gXFx0ICogc28gd2UgbXVzdCBxdWllc2NlIGFueSBzZW5kIHRocmVhZHMgYmVmb3JlIHJlc2V0dGluZ1xcbi1cXHQgKiBjcF90cmFuc3BvcnRfZGF0YS4gV2UgcXVpZXNjZSB0aGVzZSB0aHJlYWRzIGJ5IHNldHRpbmdcXG4tXFx0ICogY3Bfc3RhdGUgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gUkRTX0NPTk5fVVAsIGFuZCB0aGVuXFxuLVxcdCAqIHdhaXRpbmcgZm9yIGFueSBleGlzdGluZyB0aHJlYWRzIGluIHJkc19zZW5kX3htaXQgdG9cXG4tXFx0ICogY29tcGxldGUgcmVsZWFzZV9pbl94bWl0KCkuIChTdWJzZXF1ZW50IHRocmVhZHMgZW50ZXJpbmdcXG4tXFx0ICogcmRzX3NlbmRfeG1pdCgpIHdpbGwgYmFpbCBvbiAhcmRzX2Nvbm5fdXAoKS5cXG4rXFx0ICogY3BfdHJhbnNwb3J0X2RhdGEuICBTZXR0aW5nIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlclxcbitcXHQgKiB0aGFuIFJEU19DT05OX1VQIHN0b3BzIG5ldyBzZW5kZXJzLCBhbmQgb3duaW5nIFJEU19JTl9YTUlUXFxuK1xcdCAqIGV4Y2x1ZGVzIGFueSB0aHJlYWQgYWxyZWFkeSBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpIC0gb3IgYVxcbitcXHQgKiB0ZWFyZG93biBpbiByZHNfY29ubl9zaHV0ZG93bigpLCB3aGljaCBob2xkcyB0aGUgc2FtZSBsb2NrXFxuK1xcdCAqIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zcG9ydCBzaHV0ZG93biAtIGZvciB0aGUgd2hvbGVcXG4rXFx0ICogc29ja2V0IHN3YXAgYW5kIHRoZSByZHNfc2VuZF9wYXRoX3Jlc2V0KCkgYmVsb3cuXFxuIFxcdCAqXFxuLVxcdCAqIEhvd2V2ZXIgYW4gaW5jb21pbmcgc3luLWFjayBhdCB0aGlzIHBvaW50IHdvdWxkIGVuZCB1cFxcbi1cXHQgKiBtYXJraW5nIHRoZSBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0XFxuLVxcdCAqIHJkc19zZW5kX3htaSgpIHRocmVhZHMgdGhyb3VnaCwgc28gaWRlYWxseSB3ZSB3b3VsZFxcbi1cXHQgKiBzeW5jaHJvbml6ZSBvbiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdFxcbi1cXHQgKiBkbyB0aGF0OiB3YWl0aW5nIG9uICFSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXlcXG4tXFx0ICogZW5kIHVwIGRlYWRsb2NraW5nIHdpdGggdGNwX3NlbmRtc2coKSwgYW5kIHRoZSBSRFNfSU5fWE1JVFxcbi1cXHQgKiB3b3VsZCBub3QgZ2V0IHNldC4gQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvXFxuLVxcdCAqIFJEU19DT05OX1JFU0VUVFRJTkcsIHRvIGVuc3VyZSB0aGF0IHJkc190Y3Bfc3RhdGVfY2hhbmdlXFxuLVxcdCAqIGNhbm5vdCBtYXJrIHJkc19jb25uX3BhdGhfdXAoKSBpbiB0aGUgd2luZG93IGJlZm9yZSBsb2NrX3NvY2soKVxcbitcXHQgKiBBbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwIG1hcmtpbmcgdGhlXFxuK1xcdCAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpXFxuK1xcdCAqIHRocmVhZHMgdGhyb3VnaCwgc28gaWRlYWxseSB3ZSB3b3VsZCBzeW5jaHJvbml6ZSBvblxcbitcXHQgKiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdCBkbyB0aGF0OiBhY3F1aXJpbmdcXG4rXFx0ICogUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5IGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoXFxuK1xcdCAqIHRjcF9zZW5kbXNnKCksIHdoaWNoIHRha2VzIHRoZSBzb2NrZXQgbG9jayB3aGlsZSBob2xkaW5nXFxuK1xcdCAqIFJEU19JTl9YTUlULiAgQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvXFxuK1xcdCAqIFJEU19DT05OX1JFU0VUVElORywgdG8gZW5zdXJlIHRoYXQgcmRzX3RjcF9zdGF0ZV9jaGFuZ2VcXG4rXFx0ICogY2Fubm90IG1hcmsgcmRzX2Nvbm5fcGF0aF91cCgpIGluIHRoZSB3aW5kb3cgYmVmb3JlXFxuK1xcdCAqIGxvY2tfc29jaygpLlxcbitcXHQgKlxcbitcXHQgKiBPbmx5IG1ha2UgdGhhdCB0cmFuc2l0aW9uIGlmIHRoZSBwYXRoIGlzIHN0aWxsIGNvbm5lY3RpbmdcXG4rXFx0ICogKG9yIGFscmVhZHkgcmVzZXR0aW5nIGZyb20gYW4gZWFybGllciBkdWVsKS4gIEEgcGF0aCBpbiBhbnlcXG4rXFx0ICogb3RoZXIgc3RhdGUgLSB0eXBpY2FsbHkgUkRTX0NPTk5fRElTQ09OTkVDVElORyBvclxcbitcXHQgKiBSRFNfQ09OTl9FUlJPUiB3aXRoIGEgc2h1dGRvd24gaW4gZmxpZ2h0IC0gaXMgZHJvcHBlZFxcbitcXHQgKiBpbnN0ZWFkLiAgVGhhdCBzdGlsbCByZXBsYWNlcyBpdHMgc3RhdGUsIHdpdGggUkRTX0NPTk5fRVJST1IsXFxuK1xcdCAqIGFuZCwgdW5sZXNzIGEgcGVuZGluZyBkZXN0cm95IGlzIGFib3V0IHRvIHJlYXAgdGhlIHdob2xlXFxuK1xcdCAqIGNvbm5lY3Rpb24gYW55d2F5LCBxdWV1ZXMgb25lIG1vcmUgc2h1dGRvd24gcGFzcy4gIEEgc2h1dGRvd25cXG4rXFx0ICogYWxyZWFkeSBpbiBmbGlnaHQgbGVhdmVzIHRoYXQgUkRTX0NPTk5fRVJST1IgYWxvbmUgd2hlbiBpdFxcbitcXHQgKiBmaW5pc2hlczsgdGhlIHF1ZXVlZCBwYXNzIHRoZW4gY29tcGxldGVzIHRoZSB0cmFuc2l0aW9uIHRvXFxuK1xcdCAqIFJEU19DT05OX0RPV04gYW5kIHRlYXJzIGRvd24gYW55dGhpbmcgdGhhdCBhdHRhY2hlZCB0byB0aGVcXG4rXFx0ICogcGF0aCBpbiB0aGUgbWVhbnRpbWUuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fQ09OTkVDVElORyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgUkRTX0NPTk5fUkVTRVRUSU5HKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fUkVTRVRUSU5HLFxcbitcXHRcXHRcXHRcXHQgICAgICBSRFNfQ09OTl9SRVNFVFRJTkcpKVxcbitcXHRcXHRyZHNfY29ubl9wYXRoX2Ryb3AoY3AsIDApO1xcbitcXHR3YWl0X2V2ZW50KGNwLVxcdTAwM2VjcF93YWl0cSxcXG4rXFx0XFx0ICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhSRFNfSU5fWE1JVCwgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncykpO1xcbitcXG4rXFx0LyogUmVhZCB0X3NvY2sgb25seSB3aGlsZSBvd25pbmcgUkRTX0lOX1hNSVQsIG5ldmVyIGJlZm9yZSB0aGVcXG4rXFx0ICogd2FpdDogdGhlIHRlYXJkb3duIGluIHJkc19jb25uX3NodXRkb3duKCkgcmVsZWFzZXMgdGhlIG9sZFxcbitcXHQgKiBzb2NrZXQgYW5kIGNsZWFycyB0X3NvY2ssIHNvIGEgcG9pbnRlciBzYW1wbGVkIGVhcmxpZXIgY2FuXFxuK1xcdCAqIGJlIHN0YWxlIGJ5IHRoZSB0aW1lIHdlIHdha2UgdXAuICBUaGUgdGVhcmRvd24gaG9sZHMgdGhlXFxuK1xcdCAqIHNhbWUgbG9jayB3aGlsZSBpdCBkb2VzIHNvLCBzbyB3aGF0IHdlIHJlYWQgaGVyZSBjYW5ub3RcXG4rXFx0ICogY2hhbmdlIHVuZGVyIHVzIHVudGlsIHdlIHJlbGVhc2UgaXQuXFxuK1xcdCAqL1xcbitcXHRvc29jayA9IHRjLVxcdTAwM2V0X3NvY2s7XFxuK1xcdGlmICghb3NvY2spXFxuK1xcdFxcdGdvdG8gbmV3c29jaztcXG4rXFxuK1xcdC8qIHJlc2V0IHJlY2VpdmUgc2lkZSBzdGF0ZSBmb3IgcmRzX3RjcF9kYXRhX3JlY3YoKSBmb3Igb3NvY2suXFxuK1xcdCAqXFxuK1xcdCAqIFRoZSBzeW5jIGNhbmNlbHMgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlUIHJlbHkgb24gY3Bfd3FcXG4rXFx0ICogYmVpbmcgb3JkZXJlZDogYSB0ZWFyZG93biBibG9ja2VkIG9uIHRoZSBiaXQgb2NjdXBpZXNcXG4rXFx0ICogY3Bfd3EncyBvbmx5IGV4ZWN1dGlvbiBzbG90LCBzbyBjcF9zZW5kX3cgYW5kIGNwX3JlY3ZfdyBhcmVcXG4rXFx0ICogcGVuZGluZyBhdCBtb3N0IGFuZCB0aGUgY2FuY2VscyBuZXZlciBmbHVzaC4gIE5vdGhpbmcgaGVyZVxcbitcXHQgKiBtYXkgZmx1c2ggb3Igd2FpdCBvbiBjcF93cSBpdHNlbGYuXFxuIFxcdCAqL1xcbi1cXHRhdG9taWNfc2V0KFxcdTAwMjZjcC1cXHUwMDNlY3Bfc3RhdGUsIFJEU19DT05OX1JFU0VUVElORyk7XFxuLVxcdHdhaXRfZXZlbnQoY3AtXFx1MDAzZWNwX3dhaXRxLCAhdGVzdF9iaXQoUkRTX0lOX1hNSVQsIFxcdTAwMjZjcC1cXHUwMDNlY3BfZmxhZ3MpKTtcXG4tXFx0LyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jayAgKi9cXG4gXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZjcC1cXHUwMDNlY3Bfc2VuZF93KTtcXG4gXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZjcC1cXHUwMDNlY3BfcmVjdl93KTtcXG4gXFx0bG9ja19zb2NrKG9zb2NrLVxcdTAwM2Vzayk7XFxuQEAgLTE3Miw2ICsyMTYsOSBAQCB2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIFxcdGxvY2tfc29jayhzb2NrLVxcdTAwM2Vzayk7XFxuIFxcdHJkc190Y3Bfc2V0X2NhbGxiYWNrcyhzb2NrLCBjcCk7XFxuIFxcdHJlbGVhc2Vfc29jayhzb2NrLVxcdTAwM2Vzayk7XFxuK1xcbitcXHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKTtcXG4rXFx0d2FrZV91cF9hbGwoXFx1MDAyNmNwLVxcdTAwM2VjcF93YWl0cSk7XFxuIH1cXG4gXFxuIC8qIEFkZCB0YyB0byByZHNfdGNwX3RjX2xpc3QgYW5kIHNldCB0Yy1cXHUwMDNldF9zb2NrLiBTZWUgY29tbWVudHNcXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xcbmluZGV4IGEzZGI5YjA1NzA4NGQuLjEzZmE2MGMxOTg1YmIgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmNcXG4rKysgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xcbkBAIC0yOTUsNyArMjk1LDExIEBAIGludCByZHNfdGNwX2FjY2VwdF9vbmUoc3RydWN0IHJkc190Y3BfbmV0ICpydG4pXFxuIFxcdGlmIChyc190Y3AtXFx1MDAzZXRfc29jaykge1xcbiBcXHRcXHQvKiBEdWVsbGluZyBTWU4gaGFzIGJlZW4gaGFuZGxlZCBpbiByZHNfdGNwX2FjY2VwdF9vbmUoKSAqL1xcbiBcXHRcXHRyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhuZXdfc29jaywgY3ApO1xcbi1cXHRcXHQvKiByZHNfY29ubmVjdF9wYXRoX2NvbXBsZXRlKCkgbWFya3MgUkRTX0NPTk5fVVAgKi9cXG4rXFx0XFx0LyogcmRzX2Nvbm5lY3RfcGF0aF9jb21wbGV0ZSgpIG1hcmtzIFJEU19DT05OX1VQLCBvcixcXG4rXFx0XFx0ICogaWYgYSBjb25jdXJyZW50IHNodXRkb3duIHdvbiB0aGUgZHVlbCwgZHJvcHMgdGhlXFxuK1xcdFxcdCAqIHBhdGggYWdhaW4gYW5kIHRoZSBwYXNzIHRoYXQgZHJvcCBxdWV1ZXMgcmVhcHMgdGhlXFxuK1xcdFxcdCAqIHNvY2tldCBpbnN0YWxsZWQgYWJvdmUuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRyZHNfY29ubmVjdF9wYXRoX2NvbXBsZXRlKGNwLCBSRFNfQ09OTl9SRVNFVFRJTkcpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRyZHNfdGNwX3NldF9jYWxsYmFja3MobmV3X3NvY2ssIGNwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDc6MDMuMTU5NzE4NDYzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NTAyMTQzMzk2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRFNcIixcbiAgICBcIlJEU19UQ1BcIixcbiAgICBcIlJEU19SRE1BXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJJTkZJTklCQU5EX0FERFJfVFJBTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZHNfY29ubl9zaHV0ZG93blwiLFxuICAgIFwicmRzX3NlbmRfeG1pdFwiLFxuICAgIFwicmRzX3RjcF9yZXNldF9jYWxsYmFja3NcIixcbiAgICBcInJkc190Y3BfYWNjZXB0X29uZVwiLFxuICAgIFwicmRzX2liX3JlY3ZfcmVmaWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nIG1lY2hhbmlzbXMgKHNwZWNpZmljYWxseSBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGJpdGxvY2tzLCB3YWl0cXVldWUgYmFycmllcnMsIGFuZCBzdGF0ZSB0cmFuc2l0aW9ucykgaW4gUkRTIGNvbm5lY3Rpb24gdGVhcmRvd24sIHNlbmQsIHJlY2VpdmUtcmVmaWxsLCBhbmQgVENQIHNvY2tldCBzd2FwcGluZyBwYXRocyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIG5ldHdvcmsgc29ja2V0IG9wZXJhdGlvbnMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZmUzNzY3OTBiN2M5ZGNmM2U2ZjUzMWU1NjVmMjM3N2ZjZWZiM2FlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMjI6NDc6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5pbmRleCA3YzhhYjhlOTczZTFiLi5iNmM0YmViNTBlYWYwIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9jb25uZWN0aW9uLmNcbisrKyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5AQCAtMTA2LDEwICsxMDYsMTIgQEAgc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcbiB9XG4gXG4gLypcbi0gKiBUaGlzIGlzIGNhbGxlZCBieSB0cmFuc3BvcnRzIGFzIHRoZXkncmUgYnJpbmdpbmcgZG93biBhIGNvbm5lY3Rpb24uXG4tICogSXQgY2xlYXJzIHBhcnRpYWwgbWVzc2FnZSBzdGF0ZSBzbyB0aGF0IHRoZSB0cmFuc3BvcnQgY2FuIHN0YXJ0IHNlbmRpbmdcbi0gKiBhbmQgcmVjZWl2aW5nIG92ZXIgdGhpcyBjb25uZWN0aW9uIGFnYWluIGluIHRoZSBmdXR1cmUuICBJdCBpcyB1cCB0b1xuLSAqIHRoZSB0cmFuc3BvcnQgdG8gaGF2ZSBzZXJpYWxpemVkIHRoaXMgY2FsbCB3aXRoIGl0cyBzZW5kIGFuZCByZWN2LlxuKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHJkc19jb25uX3NodXRkb3duKCkgb25jZSB0aGUgdHJhbnNwb3J0IGhhcyBicm91Z2h0XG4rICogYSBwYXRoIGRvd24uICBJdCBjbGVhcnMgcGFydGlhbCBtZXNzYWdlIHN0YXRlIHNvIHRoYXQgdGhlIHRyYW5zcG9ydFxuKyAqIGNhbiBzdGFydCBzZW5kaW5nIGFuZCByZWNlaXZpbmcgb3ZlciB0aGlzIHBhdGggYWdhaW4gaW4gdGhlIGZ1dHVyZS5cbisgKiBUaGUgY2FsbGVyIG93bnMgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBhY3Jvc3MgdGhpcyBjYWxsLFxuKyAqIHdoaWNoIGlzIHdoYXQgc2VyaWFsaXplcyBpdCBhZ2FpbnN0IHRoZSBzZW5kIGFuZCByZWNlaXZlLXJlZmlsbFxuKyAqIHBhdGhzLlxuICAqL1xuIHN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIHtcbkBAIC0xMjAsNyArMTIyLDE2IEBAIHN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIFxuIFx0cmRzX3N0YXRzX2luYyhzX2Nvbm5fcmVzZXQpO1xuIFx0cmRzX3NlbmRfcGF0aF9yZXNldChjcCk7XG4tXHRjcC1cdTAwM2VjcF9mbGFncyA9IDA7XG4rXG4rXHQvKiBDbGVhciB0aGUgYml0cyB0aGUgcmVzZXQgaXMgcmVzcG9uc2libGUgZm9yIGluZGl2aWR1YWxseTogYVxuK1x0ICogYmxhbmtldCBjcF9mbGFncyA9IDAgaXMgYSBwbGFpbiBzdG9yZSB0aGF0IGNhbiBjbG9iYmVyIGFcbitcdCAqIGNvbmN1cnJlbnQgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIG9uIHRoZSBzYW1lIHdvcmQuXG4rXHQgKiBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGFyZSBoZWxkIGFzIGxvY2tzIGJ5IHRoZVxuK1x0ICogY2FsbGVyLCByZHNfY29ubl9zaHV0ZG93bigpLCB3aGljaCByZWxlYXNlcyB0aGVtIG9uY2UgdGhlXG4rXHQgKiB0ZWFyZG93biBpcyBjb21wbGV0ZS5cbitcdCAqL1xuK1x0Y2xlYXJfYml0KFJEU19MTF9TRU5EX0ZVTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbitcdGNsZWFyX2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbiBcbiBcdC8qIERvIG5vdCBjbGVhciBuZXh0X3J4X3NlcSBoZXJlLCBlbHNlIHdlIGNhbm5vdCBkaXN0aW5ndWlzaFxuIFx0ICogcmV0cmFuc21pdHRlZCBwYWNrZXRzIGZyb20gbmV3IHBhY2tldHMsIGFuZCB3aWxsIGhhbmQgYWxsXG5AQCAtNDA2LDI4ICs0MTcsNzAgQEAgdm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRcdH1cbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNwLVx1MDAzZWNwX2NtX2xvY2spO1xuIFxuK1x0XHQvKiBRdWllc2NlIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZS1yZWZpbGwgcGF0aHMgYnlcbitcdFx0ICogYWNxdWlyaW5nIHRoZWlyIGJpdCBsb2Nrcywgbm90IG1lcmVseSB3YWl0aW5nIGZvclxuK1x0XHQgKiB0aGVtIHRvIGJlIHJlbGVhc2VkOiB3aXRoIGEgcGxhaW4gd2FpdCwgZWl0aGVyIHBhdGhcbitcdFx0ICogY2FuIHJlLXRha2UgaXRzIGxvY2sgdGhlIGluc3RhbnQgYWZ0ZXIgd2Ugc2FtcGxlIGl0XG4rXHRcdCAqIGNsZWFyIGFuZCB0aGVuIHJ1biBjb25jdXJyZW50bHkgd2l0aCB0aGUgdHJhbnNwb3J0XG4rXHRcdCAqIHNodXRkb3duIGFuZCB0aGUgcGF0aCByZXNldCBiZWxvdy4gIEhvbGRpbmcgYm90aFxuK1x0XHQgKiBsb2NrcyBhY3Jvc3MgdGhlIHRlYXJkb3duIG1ha2VzIHRoYXQgc3RydWN0dXJhbGx5XG4rXHRcdCAqIGltcG9zc2libGUuXG4rXHRcdCAqL1xuIFx0XHR3YWl0X2V2ZW50KGNwLVx1MDAzZWNwX3dhaXRxLFxuLVx0XHRcdCAgICF0ZXN0X2JpdChSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbitcdFx0XHQgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuIFx0XHR3YWl0X2V2ZW50KGNwLVx1MDAzZWNwX3dhaXRxLFxuLVx0XHRcdCAgICF0ZXN0X2JpdChSRFNfUkVDVl9SRUZJTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSk7XG4rXHRcdFx0ICAgIXRlc3RfYW5kX3NldF9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuIFxuIFx0XHRjb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNlY29ubl9wYXRoX3NodXRkb3duKGNwKTtcbiBcdFx0cmRzX2Nvbm5fcGF0aF9yZXNldChjcCk7XG4gXG4rXHRcdC8qIFJlbGVhc2UgdGhlIHR3byBsb2NrcyBhbmQgd2FrZSBhbnkgd2FpdGVyIChlLmcuXG4rXHRcdCAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkpIHRoYXQgYmxvY2tlZCBvbiB0aGVtIHdoaWxlXG4rXHRcdCAqIHdlIGhlbGQgdGhlbS4gIFRoZSB1bmxvY2sgb3JkZXJzIHRoZSB0cmFuc3BvcnQncyByaW5nXG4rXHRcdCAqIHJlLWluaXRpYWxpemF0aW9uIGFuZCB0aGUgcGF0aCByZXNldCBhYm92ZSBiZWZvcmVcbitcdFx0ICogZWl0aGVyIGJpdCBpcyBzZWVuIGNsZWFyLiAgcmRzX2Nvbm5fcGF0aF9yZXNldCgpIGxlYXZlc1xuK1x0XHQgKiBib3RoIGJpdHMgYWxvbmU6IG93bmVyc2hpcCBlbmRzIGhlcmUsIG5vdCBpbnNpZGUgdGhlXG4rXHRcdCAqIHJlc2V0LlxuK1x0XHQgKi9cbitcdFx0Y2xlYXJfYml0X3VubG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpO1xuK1x0XHRjbGVhcl9iaXRfdW5sb2NrKFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpO1xuK1x0XHR3YWtlX3VwX2FsbChcdTAwMjZjcC1cdTAwM2VjcF93YWl0cSk7XG4rXG4gXHRcdGlmICghcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9ESVNDT05ORUNUSU5HLFxuLVx0XHRcdFx0XHQgICAgICBSRFNfQ09OTl9ET1dOKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX0VSUk9SLFxuIFx0XHRcdFx0XHQgICAgICBSRFNfQ09OTl9ET1dOKSkge1xuLVx0XHRcdC8qIFRoaXMgY2FuIGhhcHBlbiAtIGVnIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiB0ZWFyaW5nXG4tXHRcdFx0ICogZG93biB0aGUgY29ubmVjdGlvbiwgYW5kIHNvbWVvbmUgdW5sb2FkcyB0aGUgcmRzIG1vZHVsZS5cbi1cdFx0XHQgKiBRdWl0ZSByZXByb2R1Y2libGUgd2l0aCBsb29wYmFjayBjb25uZWN0aW9ucy5cbi1cdFx0XHQgKiBNb3N0bHkgaGFybWxlc3MuXG4rXHRcdFx0LyogVGhlIHBhdGggd2FzIGRyb3BwZWQgYWdhaW4gd2hpbGUgd2UgdG9yZSBpdFxuK1x0XHRcdCAqIGRvd246IGJ5IGEgc29ja2V0IHN0YXRlLWNoYW5nZSBjYWxsYmFjayBpblxuK1x0XHRcdCAqIGlycSBjb250ZXh0IG9uIHJlY2VpcHQgb2YgYSBGSU4sIG9yIGJ5IGFuXG4rXHRcdFx0ICogYWNjZXB0IHRoYXQgY2xhaW1lZCB0aGUgcGF0aCBqdXN0IGJlZm9yZSBhXG4rXHRcdFx0ICogZHJvcCBwdXQgaXQgYmFjayB0byBSRFNfQ09OTl9FUlJPUiBhbmQgdGhlblxuK1x0XHRcdCAqIGluc3RhbGxlZCBhIGZyZXNoIHNvY2tldCBvbiBpdC4gIFVubGVzcyBhXG4rXHRcdFx0ICogcGVuZGluZyBkZXN0cm95IHN1cHByZXNzZWQgaXQsIHRoZSBkcm9wIGFsc29cbitcdFx0XHQgKiBxdWV1ZWQgYW5vdGhlciBzaHV0ZG93biBwYXNzLCBhbmQgdGhhdCBwYXNzXG4rXHRcdFx0ICogbXVzdCBydW4sIGJlY2F1c2UgaXQgaXMgd2hhdCB0ZWFycyBkb3duXG4rXHRcdFx0ICogd2hhdGV2ZXIgYXR0YWNoZWQgdG8gdGhlIHBhdGggYWZ0ZXIgdGhlXG4rXHRcdFx0ICogdHJhbnNwb3J0IHNodXRkb3duIGFib3ZlIHNhbXBsZWQgaXRzIHN0YXRlLlxuK1x0XHRcdCAqIENvbnN1bWluZyB0aGUgUkRTX0NPTk5fRVJST1IgaGVyZSB3b3VsZCB0dXJuXG4rXHRcdFx0ICogdGhhdCBwYXNzIGludG8gYSBuby1vcDogbGVhdmUgdGhlIHN0YXRlXG4rXHRcdFx0ICogYWxvbmUsIGFuZCBsZXQgdGhlIHBhc3MgZmluaXNoIHRoZSBqb2IuXG4gXHRcdFx0ICpcbi1cdFx0XHQgKiBOb3RlIHRoYXQgdGhpcyBhbHNvIGhhcHBlbnMgd2l0aCByZHMtdGNwIGJlY2F1c2Vcbi1cdFx0XHQgKiB3ZSBjb3VsZCBoYXZlIHRyaWdnZXJlZCByZHNfY29ubl9wYXRoX2Ryb3AgaW4gaXJxXG4tXHRcdFx0ICogbW9kZSBmcm9tIHJkc190Y3Bfc3RhdGUgY2hhbmdlIG9uIHRoZSByZWNlaXB0IG9mXG4tXHRcdFx0ICogYSBGSU4sIHRodXMgd2UgbmVlZCB0byByZWNoZWNrIGZvciBSRFNfQ09OTl9FUlJPUlxuLVx0XHRcdCAqIGhlcmUuXG4rXHRcdFx0ICogUXVpZXNjZSB0aGUgcmVjb25uZWN0IHRpbWVyIGJlZm9yZSBiYWlsaW5nXG4rXHRcdFx0ICogb3V0LCB0aG91Z2guICBXaGVuIGEgcGVuZGluZyBkZXN0cm95IGRpZFxuK1x0XHRcdCAqIHN1cHByZXNzIHRoZSBxdWV1ZSwgbm8gbGF0ZXIgcGFzcyBydW5zLCBhbmRcbitcdFx0XHQgKiByZHNfY29ubl9wYXRoX2Rlc3Ryb3koKSBpcyBhYm91dCB0byBmbHVzaFxuK1x0XHRcdCAqIGNwX2Rvd25fdyBhbmQgZnJlZSB0aGUgcGF0aDogaXQgbXVzdCBub3RcbitcdFx0XHQgKiBmaW5kIGNwX2Nvbm5fdyBzdGlsbCBhcm1lZC4gIEEgc3VjY2Vzc29yXG4rXHRcdFx0ICogcGFzcywgd2hlbiB0aGVyZSBpcyBvbmUsIHJlLWFybXMgdGhlXG4rXHRcdFx0ICogcmVjb25uZWN0IGZyb20gaXRzIG93biB0YWlsLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZjcC1cdTAwM2VjcF9jb25uX3cpO1xuK1x0XHRcdGNsZWFyX2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbitcbitcdFx0XHRpZiAocmRzX2Nvbm5fcGF0aF9zdGF0ZShjcCkgPT0gUkRTX0NPTk5fRVJST1IpXG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0LyogTm8gY3VycmVudCBjcF9zdGF0ZSB3cml0ZXIgbGVhdmVzIGFcbitcdFx0XHQgKiBESVNDT05ORUNUSU5HIHBhdGggaW4gYW55IHN0YXRlIGJ1dFxuK1x0XHRcdCAqIFJEU19DT05OX0VSUk9SOyByZXBvcnQgbG91ZGx5IGlmIG9uZSBldmVyXG4rXHRcdFx0ICogZG9lcy5cbiBcdFx0XHQgKi9cbiBcdFx0XHRyZHNfY29ubl9wYXRoX2Vycm9yKGNwLCBcIiVzOiBmYWlsZWQgdG8gdHJhbnNpdGlvbiBcIlxuIFx0XHRcdFx0XHQgICAgXCJ0byBzdGF0ZSBET1dOLCBjdXJyZW50IHN0YXRlIFwiXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZWN2LmMgYi9uZXQvcmRzL2liX3JlY3YuY1xuaW5kZXggMzU3MTI4ZDM0YTU0Ni4uYmQ2Y2IzZmZhYTU3MSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvaWJfcmVjdi5jXG4rKysgYi9uZXQvcmRzL2liX3JlY3YuY1xuQEAgLTM2MywxNSArMzYzLDE0IEBAIHN0YXRpYyBpbnQgYWNxdWlyZV9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuIFxuIHN0YXRpYyB2b2lkIHJlbGVhc2VfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbiB7XG4tXHRjbGVhcl9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCBcdTAwMjZjb25uLVx1MDAzZWNfZmxhZ3MpO1xuLVx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbitcdGNsZWFyX2JpdF91bmxvY2soUkRTX1JFQ1ZfUkVGSUxMLCBcdTAwMjZjb25uLVx1MDAzZWNfZmxhZ3MpO1xuIFxuIFx0LyogV2UgZG9uJ3QgdXNlIHdhaXRfb25fYml0KCkvd2FrZV91cF9iaXQoKSBiZWNhdXNlIG91ciB3YWtpbmcgaXMgaW4gYVxuIFx0ICogaG90IHBhdGggYW5kIGZpbmRpbmcgd2FpdGVycyBpcyB2ZXJ5IHJhcmUuICBXZSBkb24ndCB3YW50IHRvIHdhbGtcbiBcdCAqIHRoZSBzeXN0ZW0td2lkZSBoYXNoZWQgd2FpdHF1ZXVlIGJ1Y2tldHMgaW4gdGhlIGZhc3QgcGF0aCBvbmx5IHRvXG4gXHQgKiBhbG1vc3QgbmV2ZXIgZmluZCB3YWl0ZXJzLlxuIFx0ICovXG4tXHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcdTAwMjZjb25uLVx1MDAzZWNfd2FpdHEpKVxuK1x0aWYgKHdxX2hhc19zbGVlcGVyKFx1MDAyNmNvbm4tXHUwMDNlY193YWl0cSkpXG4gXHRcdHdha2VfdXBfYWxsKFx1MDAyNmNvbm4tXHUwMDNlY193YWl0cSk7XG4gfVxuIFxuQEAgLTM5Miw3ICszOTEsOSBAQCB2b2lkIHJkc19pYl9yZWN2X3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGludCBwcmVmaWxsLCBnZnBfdCBnZnApXG4gXG4gXHQvKiB0aGUgZ29hbCBoZXJlIGlzIHRvIGp1c3QgbWFrZSBzdXJlIHRoYXQgc29tZW9uZSwgc29tZXdoZXJlXG4gXHQgKiBpcyBwb3N0aW5nIGJ1ZmZlcnMuICBJZiB3ZSBjYW4ndCBnZXQgdGhlIHJlZmlsbCBsb2NrLFxuLVx0ICogbGV0IHRoZW0gZG8gdGhlaXIgdGhpbmdcbitcdCAqIGxldCB0aGVtIGRvIHRoZWlyIHRoaW5nLiAgVGhlIGhvbGRlciBtYXkgYWxzbyBiZVxuK1x0ICogcmRzX2Nvbm5fc2h1dGRvd24oKSB0ZWFyaW5nIHRoZSBwYXRoIGRvd24sIGluIHdoaWNoIGNhc2VcbitcdCAqIHRoZXJlIGlzIG5vdGhpbmcgdG8gcG9zdC5cbiBcdCAqL1xuIFx0aWYgKCFhY3F1aXJlX3JlZmlsbChjb25uKSlcbiBcdFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmNcbmluZGV4IDE1YTFiOTdmMTNlNzYuLjFhZmE5ODFlNWMwNmQgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3NlbmQuY1xuKysrIGIvbmV0L3Jkcy9zZW5kLmNcbkBAIC0xMTQsOCArMTE0LDEzIEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfaW5feG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHQgKiBob3QgcGF0aCBhbmQgZmluZGluZyB3YWl0ZXJzIGlzIHZlcnkgcmFyZS4gIFdlIGRvbid0IHdhbnQgdG8gd2Fsa1xuIFx0ICogdGhlIHN5c3RlbS13aWRlIGhhc2hlZCB3YWl0cXVldWUgYnVja2V0cyBpbiB0aGUgZmFzdCBwYXRoIG9ubHkgdG9cbiBcdCAqIGFsbW9zdCBuZXZlciBmaW5kIHdhaXRlcnMuXG4rXHQgKlxuK1x0ICogd3FfaGFzX3NsZWVwZXIoKSBzdXBwbGllcyB0aGUgZnVsbCBiYXJyaWVyIHRoYXQgb3JkZXJzIHRoZSB3YWl0XG4rXHQgKiBxdWV1ZSByZWFkIGFmdGVyIHRoZSBiaXQgY2xlYXI7IGNsZWFyX2JpdF91bmxvY2soKSBhbG9uZSBpcyBvbmx5XG4rXHQgKiBhIHJlbGVhc2UgYW5kIHdvdWxkIGxldCB0aGlzIGNoZWNrIHJlYWQgYSBzdGFsZSBlbXB0eSBxdWV1ZSxcbitcdCAqIGxvc2luZyB0aGUgd2FrZS11cC5cbiBcdCAqL1xuLVx0aWYgKHdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2Y3AtXHUwMDNlY3Bfd2FpdHEpKVxuK1x0aWYgKHdxX2hhc19zbGVlcGVyKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKSlcbiBcdFx0d2FrZV91cF9hbGwoXHUwMDI2Y3AtXHUwMDNlY3Bfd2FpdHEpO1xuIH1cbiBcbkBAIC0yMzksOCArMjQ0LDExIEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFdSSVRFX09OQ0UoY3AtXHUwMDNlY3Bfc2VuZF9nZW4sIHNlbmRfZ2VuKTtcbiBcbiBcdC8qXG4tXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gdGVzdHMgUkRTX0lOX1hNSVQsXG4tXHQgKiB3ZSBkbyB0aGUgb3Bwb3NpdGUgdG8gYXZvaWQgcmFjZXMuXG4rXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gYWNxdWlyZXNcbitcdCAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZS5cbitcdCAqIE93bmVyc2hpcCBpcyBkZWNpZGVkIGJ5IHRoZSBhdG9taWMgUk1XIG9uIHRoZSBjcF9mbGFncyB3b3JkOlxuK1x0ICogaWYgdGhlIHRlYXJkb3duIHdvbiB0aGUgYml0IHdlIGJhY2sgb2ZmIGhlcmUsIGFuZCBpZiB3ZSB3b25cbitcdCAqIGl0IHRoZSB0ZWFyZG93biB3YWl0cyB1bnRpbCB3ZSByZWxlYXNlIGl0LlxuIFx0ICovXG4gXHRpZiAoIXJkc19jb25uX3BhdGhfdXAoY3ApKSB7XG4gXHRcdHJlbGVhc2VfaW5feG1pdChjcCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3AuYyBiL25ldC9yZHMvdGNwLmNcbmluZGV4IGIyNjM2MzRhYzc1MGQuLjc3NGE3MWY4OGQzNzUgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3RjcC5jXG4rKysgYi9uZXQvcmRzL3RjcC5jXG5AQCAtMTE1LDQ2ICsxMTUsOTAgQEAgdm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gfVxuIFxuIC8qXG4tICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSBzd2l0Y2hlcyB0aGUgdG8gdGhlIG5ldyBzb2NrIGFuZFxuLSAqIHJldHVybnMgdGhlIGV4aXN0aW5nIHRjLVx1MDAzZXRfc29jay5cbisgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpIHN3aXRjaGVzIGEgcGF0aCB0byBhIG5ldyBzb2NrZXQgYW5kXG4rICogcmVsZWFzZXMgdGhlIG9sZCBvbmUgaXQgZmluZHMgaW4gdGMtXHUwMDNldF9zb2NrLCByZXNvbHZpbmcgYSBkdWVsbGluZ1xuKyAqIFNZTi5cbiAgKlxuLSAqIFRoZSBvbmx5IGZ1bmN0aW9ucyB0aGF0IHNldCB0Yy1cdTAwM2V0X3NvY2sgYXJlIHJkc190Y3Bfc2V0X2NhbGxiYWNrc1xuLSAqIGFuZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcy4gIFNlbmQgYW5kIHJlY2VpdmUgdHJ1c3QgdGhhdFxuLSAqIGl0IGlzIHNldC4gIFRoZSBhYnNlbmNlIG9mIFJEU19DT05OX1VQIGJpdCBwcm90ZWN0cyB0aG9zZSBwYXRoc1xuLSAqIGZyb20gYmVpbmcgY2FsbGVkIHdoaWxlIGl0IGlzbid0IHNldC5cbisgKiB0Yy1cdTAwM2V0X3NvY2sgaXMgc2V0IGJ5IHJkc190Y3Bfc2V0X2NhbGxiYWNrcygpIGFuZCBjbGVhcmVkIGJ5XG4rICogcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcygpLiAgRm91ciBwYXRocyB3cml0ZSBpdDogdGhlIGFjdGl2ZVxuKyAqIGNvbm5lY3QgaW4gcmRzX3RjcF9jb25uX3BhdGhfY29ubmVjdCgpLCB3aGljaCBzZXRzIGl0IGFuZCBjbGVhcnMgaXRcbisgKiBhZ2FpbiBvbiBmYWlsdXJlOyB0aGUgYWNjZXB0IHBhdGggaW4gcmRzX3RjcF9hY2NlcHRfb25lKCksIHdoaWNoXG4rICogc2V0cyBpdCBmb3IgYSBwYXRoIHdpdGggbm8gc29ja2V0IHlldDsgdGhlIHRlYXJkb3duIGluXG4rICogcmRzX3RjcF9jb25uX3BhdGhfc2h1dGRvd24oKSwgd2hpY2ggY2xlYXJzIGl0OyBhbmQgdGhlIHN3YXAgZG9uZVxuKyAqIGhlcmUsIHdoaWNoIGRvZXMgYm90aC4gIFRoZSBjb25uZWN0IGFuZCBhY2NlcHQgcGF0aHMgYXJlIHNlcmlhbGl6ZWRcbisgKiBhZ2FpbnN0IGVhY2ggb3RoZXIgYnkgdF9jb25uX3BhdGhfbG9jay4gIFNlbmQgYW5kIHJlY2VpdmUgdHJ1c3RcbisgKiB0aGF0IGl0IGlzIHNldDogdGhlIGFic2VuY2Ugb2YgUkRTX0NPTk5fVVAgcHJvdGVjdHMgdGhvc2UgcGF0aHNcbisgKiBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24ndCwgYW5kIHRoZSBzd2FwIGRvbmUgaGVyZSBydW5zIHVuZGVyXG4rICogUkRTX0lOX1hNSVQgc28gdGhhdCBpdCBjYW5ub3QgaW50ZXJsZWF2ZSB3aXRoIGEgc2VuZGVyIGFscmVhZHlcbisgKiBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpLlxuICAqL1xuIHZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0XHQgICAgIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiB7XG4gXHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLVx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xuLVx0c3RydWN0IHNvY2tldCAqb3NvY2sgPSB0Yy1cdTAwM2V0X3NvY2s7XG4tXG4tXHRpZiAoIW9zb2NrKVxuLVx0XHRnb3RvIG5ld3NvY2s7XG4rXHRzdHJ1Y3Qgc29ja2V0ICpvc29jaztcbiBcbiBcdC8qIE5lZWQgdG8gcmVzb2x2ZSBhIGR1ZWxsaW5nIFNZTiBiZXR3ZWVuIHBlZXJzLlxuIFx0ICogV2UgaGF2ZSBhbiBvdXRzdGFuZGluZyBTWU4gdG8gdGhpcyBwZWVyLCB3aGljaCBtYXlcbiBcdCAqIHBvdGVudGlhbGx5IGhhdmUgdHJhbnNpdGlvbmVkIHRvIHRoZSBSRFNfQ09OTl9VUCBzdGF0ZSxcbiBcdCAqIHNvIHdlIG11c3QgcXVpZXNjZSBhbnkgc2VuZCB0aHJlYWRzIGJlZm9yZSByZXNldHRpbmdcbi1cdCAqIGNwX3RyYW5zcG9ydF9kYXRhLiBXZSBxdWllc2NlIHRoZXNlIHRocmVhZHMgYnkgc2V0dGluZ1xuLVx0ICogY3Bfc3RhdGUgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gUkRTX0NPTk5fVVAsIGFuZCB0aGVuXG4tXHQgKiB3YWl0aW5nIGZvciBhbnkgZXhpc3RpbmcgdGhyZWFkcyBpbiByZHNfc2VuZF94bWl0IHRvXG4tXHQgKiBjb21wbGV0ZSByZWxlYXNlX2luX3htaXQoKS4gKFN1YnNlcXVlbnQgdGhyZWFkcyBlbnRlcmluZ1xuLVx0ICogcmRzX3NlbmRfeG1pdCgpIHdpbGwgYmFpbCBvbiAhcmRzX2Nvbm5fdXAoKS5cbitcdCAqIGNwX3RyYW5zcG9ydF9kYXRhLiAgU2V0dGluZyBjcF9zdGF0ZSB0byBzb21ldGhpbmcgb3RoZXJcbitcdCAqIHRoYW4gUkRTX0NPTk5fVVAgc3RvcHMgbmV3IHNlbmRlcnMsIGFuZCBvd25pbmcgUkRTX0lOX1hNSVRcbitcdCAqIGV4Y2x1ZGVzIGFueSB0aHJlYWQgYWxyZWFkeSBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpIC0gb3IgYVxuK1x0ICogdGVhcmRvd24gaW4gcmRzX2Nvbm5fc2h1dGRvd24oKSwgd2hpY2ggaG9sZHMgdGhlIHNhbWUgbG9ja1xuK1x0ICogZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNwb3J0IHNodXRkb3duIC0gZm9yIHRoZSB3aG9sZVxuK1x0ICogc29ja2V0IHN3YXAgYW5kIHRoZSByZHNfc2VuZF9wYXRoX3Jlc2V0KCkgYmVsb3cuXG4gXHQgKlxuLVx0ICogSG93ZXZlciBhbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwXG4tXHQgKiBtYXJraW5nIHRoZSBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0XG4tXHQgKiByZHNfc2VuZF94bWkoKSB0aHJlYWRzIHRocm91Z2gsIHNvIGlkZWFsbHkgd2Ugd291bGRcbi1cdCAqIHN5bmNocm9uaXplIG9uIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90XG4tXHQgKiBkbyB0aGF0OiB3YWl0aW5nIG9uICFSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXlcbi1cdCAqIGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoIHRjcF9zZW5kbXNnKCksIGFuZCB0aGUgUkRTX0lOX1hNSVRcbi1cdCAqIHdvdWxkIG5vdCBnZXQgc2V0LiBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG9cbi1cdCAqIFJEU19DT05OX1JFU0VUVFRJTkcsIHRvIGVuc3VyZSB0aGF0IHJkc190Y3Bfc3RhdGVfY2hhbmdlXG4tXHQgKiBjYW5ub3QgbWFyayByZHNfY29ubl9wYXRoX3VwKCkgaW4gdGhlIHdpbmRvdyBiZWZvcmUgbG9ja19zb2NrKClcbitcdCAqIEFuIGluY29taW5nIHN5bi1hY2sgYXQgdGhpcyBwb2ludCB3b3VsZCBlbmQgdXAgbWFya2luZyB0aGVcbitcdCAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpXG4rXHQgKiB0aHJlYWRzIHRocm91Z2gsIHNvIGlkZWFsbHkgd2Ugd291bGQgc3luY2hyb25pemUgb25cbitcdCAqIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90IGRvIHRoYXQ6IGFjcXVpcmluZ1xuK1x0ICogUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5IGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoXG4rXHQgKiB0Y3Bfc2VuZG1zZygpLCB3aGljaCB0YWtlcyB0aGUgc29ja2V0IGxvY2sgd2hpbGUgaG9sZGluZ1xuK1x0ICogUkRTX0lOX1hNSVQuICBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG9cbitcdCAqIFJEU19DT05OX1JFU0VUVElORywgdG8gZW5zdXJlIHRoYXQgcmRzX3RjcF9zdGF0ZV9jaGFuZ2VcbitcdCAqIGNhbm5vdCBtYXJrIHJkc19jb25uX3BhdGhfdXAoKSBpbiB0aGUgd2luZG93IGJlZm9yZVxuK1x0ICogbG9ja19zb2NrKCkuXG4rXHQgKlxuK1x0ICogT25seSBtYWtlIHRoYXQgdHJhbnNpdGlvbiBpZiB0aGUgcGF0aCBpcyBzdGlsbCBjb25uZWN0aW5nXG4rXHQgKiAob3IgYWxyZWFkeSByZXNldHRpbmcgZnJvbSBhbiBlYXJsaWVyIGR1ZWwpLiAgQSBwYXRoIGluIGFueVxuK1x0ICogb3RoZXIgc3RhdGUgLSB0eXBpY2FsbHkgUkRTX0NPTk5fRElTQ09OTkVDVElORyBvclxuK1x0ICogUkRTX0NPTk5fRVJST1Igd2l0aCBhIHNodXRkb3duIGluIGZsaWdodCAtIGlzIGRyb3BwZWRcbitcdCAqIGluc3RlYWQuICBUaGF0IHN0aWxsIHJlcGxhY2VzIGl0cyBzdGF0ZSwgd2l0aCBSRFNfQ09OTl9FUlJPUixcbitcdCAqIGFuZCwgdW5sZXNzIGEgcGVuZGluZyBkZXN0cm95IGlzIGFib3V0IHRvIHJlYXAgdGhlIHdob2xlXG4rXHQgKiBjb25uZWN0aW9uIGFueXdheSwgcXVldWVzIG9uZSBtb3JlIHNodXRkb3duIHBhc3MuICBBIHNodXRkb3duXG4rXHQgKiBhbHJlYWR5IGluIGZsaWdodCBsZWF2ZXMgdGhhdCBSRFNfQ09OTl9FUlJPUiBhbG9uZSB3aGVuIGl0XG4rXHQgKiBmaW5pc2hlczsgdGhlIHF1ZXVlZCBwYXNzIHRoZW4gY29tcGxldGVzIHRoZSB0cmFuc2l0aW9uIHRvXG4rXHQgKiBSRFNfQ09OTl9ET1dOIGFuZCB0ZWFycyBkb3duIGFueXRoaW5nIHRoYXQgYXR0YWNoZWQgdG8gdGhlXG4rXHQgKiBwYXRoIGluIHRoZSBtZWFudGltZS5cbitcdCAqL1xuK1x0aWYgKCFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX0NPTk5FQ1RJTkcsXG4rXHRcdFx0XHQgICAgICBSRFNfQ09OTl9SRVNFVFRJTkcpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX1JFU0VUVElORyxcbitcdFx0XHRcdCAgICAgIFJEU19DT05OX1JFU0VUVElORykpXG4rXHRcdHJkc19jb25uX3BhdGhfZHJvcChjcCwgMCk7XG4rXHR3YWl0X2V2ZW50KGNwLVx1MDAzZWNwX3dhaXRxLFxuK1x0XHQgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuK1xuK1x0LyogUmVhZCB0X3NvY2sgb25seSB3aGlsZSBvd25pbmcgUkRTX0lOX1hNSVQsIG5ldmVyIGJlZm9yZSB0aGVcbitcdCAqIHdhaXQ6IHRoZSB0ZWFyZG93biBpbiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGRcbitcdCAqIHNvY2tldCBhbmQgY2xlYXJzIHRfc29jaywgc28gYSBwb2ludGVyIHNhbXBsZWQgZWFybGllciBjYW5cbitcdCAqIGJlIHN0YWxlIGJ5IHRoZSB0aW1lIHdlIHdha2UgdXAuICBUaGUgdGVhcmRvd24gaG9sZHMgdGhlXG4rXHQgKiBzYW1lIGxvY2sgd2hpbGUgaXQgZG9lcyBzbywgc28gd2hhdCB3ZSByZWFkIGhlcmUgY2Fubm90XG4rXHQgKiBjaGFuZ2UgdW5kZXIgdXMgdW50aWwgd2UgcmVsZWFzZSBpdC5cbitcdCAqL1xuK1x0b3NvY2sgPSB0Yy1cdTAwM2V0X3NvY2s7XG4rXHRpZiAoIW9zb2NrKVxuK1x0XHRnb3RvIG5ld3NvY2s7XG4rXG4rXHQvKiByZXNldCByZWNlaXZlIHNpZGUgc3RhdGUgZm9yIHJkc190Y3BfZGF0YV9yZWN2KCkgZm9yIG9zb2NrLlxuK1x0ICpcbitcdCAqIFRoZSBzeW5jIGNhbmNlbHMgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlUIHJlbHkgb24gY3Bfd3FcbitcdCAqIGJlaW5nIG9yZGVyZWQ6IGEgdGVhcmRvd24gYmxvY2tlZCBvbiB0aGUgYml0IG9jY3VwaWVzXG4rXHQgKiBjcF93cSdzIG9ubHkgZXhlY3V0aW9uIHNsb3QsIHNvIGNwX3NlbmRfdyBhbmQgY3BfcmVjdl93IGFyZVxuK1x0ICogcGVuZGluZyBhdCBtb3N0IGFuZCB0aGUgY2FuY2VscyBuZXZlciBmbHVzaC4gIE5vdGhpbmcgaGVyZVxuK1x0ICogbWF5IGZsdXNoIG9yIHdhaXQgb24gY3Bfd3EgaXRzZWxmLlxuIFx0ICovXG4tXHRhdG9taWNfc2V0KFx1MDAyNmNwLVx1MDAzZWNwX3N0YXRlLCBSRFNfQ09OTl9SRVNFVFRJTkcpO1xuLVx0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSwgIXRlc3RfYml0KFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuLVx0LyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jayAgKi9cbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZjcC1cdTAwM2VjcF9zZW5kX3cpO1xuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmNwLVx1MDAzZWNwX3JlY3Zfdyk7XG4gXHRsb2NrX3NvY2sob3NvY2stXHUwMDNlc2spO1xuQEAgLTE3Miw2ICsyMTYsOSBAQCB2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gXHRsb2NrX3NvY2soc29jay1cdTAwM2Vzayk7XG4gXHRyZHNfdGNwX3NldF9jYWxsYmFja3Moc29jaywgY3ApO1xuIFx0cmVsZWFzZV9zb2NrKHNvY2stXHUwMDNlc2spO1xuK1xuK1x0Y2xlYXJfYml0X3VubG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpO1xuK1x0d2FrZV91cF9hbGwoXHUwMDI2Y3AtXHUwMDNlY3Bfd2FpdHEpO1xuIH1cbiBcbiAvKiBBZGQgdGMgdG8gcmRzX3RjcF90Y19saXN0IGFuZCBzZXQgdGMtXHUwMDNldF9zb2NrLiBTZWUgY29tbWVudHNcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcF9saXN0ZW4uYyBiL25ldC9yZHMvdGNwX2xpc3Rlbi5jXG5pbmRleCBhM2RiOWIwNTcwODRkLi4xM2ZhNjBjMTk4NWJiIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmNcbisrKyBiL25ldC9yZHMvdGNwX2xpc3Rlbi5jXG5AQCAtMjk1LDcgKzI5NSwxMSBAQCBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxuIFx0aWYgKHJzX3RjcC1cdTAwM2V0X3NvY2spIHtcbiBcdFx0LyogRHVlbGxpbmcgU1lOIGhhcyBiZWVuIGhhbmRsZWQgaW4gcmRzX3RjcF9hY2NlcHRfb25lKCkgKi9cbiBcdFx0cmRzX3RjcF9yZXNldF9jYWxsYmFja3MobmV3X3NvY2ssIGNwKTtcbi1cdFx0LyogcmRzX2Nvbm5lY3RfcGF0aF9jb21wbGV0ZSgpIG1hcmtzIFJEU19DT05OX1VQICovXG4rXHRcdC8qIHJkc19jb25uZWN0X3BhdGhfY29tcGxldGUoKSBtYXJrcyBSRFNfQ09OTl9VUCwgb3IsXG4rXHRcdCAqIGlmIGEgY29uY3VycmVudCBzaHV0ZG93biB3b24gdGhlIGR1ZWwsIGRyb3BzIHRoZVxuK1x0XHQgKiBwYXRoIGFnYWluIGFuZCB0aGUgcGFzcyB0aGF0IGRyb3AgcXVldWVzIHJlYXBzIHRoZVxuK1x0XHQgKiBzb2NrZXQgaW5zdGFsbGVkIGFib3ZlLlxuK1x0XHQgKi9cbiBcdFx0cmRzX2Nvbm5lY3RfcGF0aF9jb21wbGV0ZShjcCwgUkRTX0NPTk5fUkVTRVRUSU5HKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHJkc190Y3Bfc2V0X2NhbGxiYWNrcyhuZXdfc29jaywgY3ApO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDc6MDMuMTU5NzE5ODQzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEzODgwMjg4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyB3b3J0aCB0aGUgdGltZSB0byB0aHJvdyBzb21lIGZ1enppbmcgYXQgaXQuIExvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGBuZXQvcmRzL2Ag4oCTIHRoYXQgc2NyZWFtcyBSRFMsIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMuIFJpZ2h0LCBBRl9SRFMgc29ja2V0cy4gVGhpcyBpcyBhIHByZXR0eSBjcml0aWNhbCBuZXR3b3JraW5nIHByb3RvY29sLCBhbmQgaXQgcnVucyBpbiB0aG9zZSB1c3VhbCBlbnZpcm9ubWVudHMg4oCTIHN0YW5kYXJkLCBRRU1VLCBHQ0Ug4oCTIGFjY2Vzc2libGUgdGhyb3VnaCBzb2NrZXRzIG9yIGxvb3BiYWNrL1RDUC4gVGhhdCdzIGdvb2QgY292ZXJhZ2UgZm9yIGZ1enppbmcgdGFyZ2V0cy5cblxuU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggdG91Y2hlcyBgY29ubmVjdGlvbi5jYCwgYGliX3JlY3YuY2AsIGBzZW5kLmNgLCBgdGNwLmNgLCBhbmQgYHRjcF9saXN0ZW4uY2AuIEhtbSwgdGhvc2UgZmlsZSBuYW1lcyB0aGVtc2VsdmVzIGFyZSBpbnRlcmVzdGluZy4gV2UncmUgdGFsa2luZyBsb2NraW5nLCBzdGF0ZSB0cmFuc2l0aW9ucywgc3luY2hyb25pemF0aW9uIGR1cmluZyBjb25uZWN0aW9uIHNodXRkb3duLCBUQ1AgdHJhbnNwb3J0IHJlc2V0IGNhbGxiYWNrcywgcmVmaWxsIGxvY2tpbmcsIGFuZCBzZW5kIHhtaXQgZnVuY3Rpb25zLiBUaGlzIGNvdWxkIGJlIGdvbGQhIExvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgYXJlIHRoZSBraW5kIG9mIHRoaW5ncyBmdXp6aW5nIGxvdmVzIHRvIGV4cG9zZS4gU3RhdGUgdHJhbnNpdGlvbnMgYXJlIGFub3RoZXIgbGlrZWx5IHNvdXJjZSBvZiB3ZWlyZG5lc3MuIFRDUC1zcGVjaWZpYyBjaGFuZ2VzLCB0b28sIG1lYW4gbW9yZSBzdXJmYWNlIGFyZWEuIFJlZmlsbCBsb2NraW5nIGlzIGFuIGludGVyZXN0aW5nIHZlY3Rvci4gU2VuZCB4bWl0IGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHNvIGV2ZW4gdGhlIG1vc3QgYmFzaWMgZXJyb3IgaGVyZSB3b3VsZCBjYXVzZSB0cm91YmxlLlxuXG5Ob3csIGxldCdzIHB1bGwgdXAgdGhlIGZpbGVzIGFuZCBjaGVjayB0aGUgS2NvbmZpZyBmb3IgUkRTLi4uIEdvdHRhIG1ha2Ugc3VyZSBpdCdzIGVuYWJsZWQgYW5kIHdlIGhhdmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBiZWZvcmUgd2FzdGluZyB0aW1lIGZ1enppbmcgc29tZXRoaW5nIHRoYXQncyBub3QgZXZlbiBidWlsdCBpbnRvIHRoZSBrZXJuZWwuIEFmdGVyIHRoYXQsIHdlIGRpdmUgaW4gYW5kIGFzc2VzcyB0aGUgZnVuY3Rpb25zIGltcGFjdGVkIHRvIGxvb2sgYXQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgdGhlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NzcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzoxNC41NDc3NTE5NDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MzM0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJEU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvS2NvbmZpZy0yLVxcbm5ldC9yZHMvS2NvbmZpZzozOmNvbmZpZyBSRFNcXG5uZXQvcmRzL0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiVGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgUHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvcmRzL0tjb25maWctOS1cXG5uZXQvcmRzL0tjb25maWc6MTA6Y29uZmlnIFJEU19SRE1BXFxubmV0L3Jkcy9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJSRFMgb3ZlciBJbmZpbmliYW5kXFxcIlxcbi0tXFxubmV0L3Jkcy9LY29uZmlnLTE2LVxcbm5ldC9yZHMvS2NvbmZpZzoxNzpjb25maWcgUkRTX1RDUFxcbm5ldC9yZHMvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgVENQXFxcIlxcbi0tXFxubmV0L3Jkcy9LY29uZmlnLTI0LVxcbm5ldC9yZHMvS2NvbmZpZzoyNTpjb25maWcgUkRTX0RFQlVHXFxubmV0L3Jkcy9LY29uZmlnLTI2LVxcdGJvb2wgXFxcIlJEUyBkZWJ1Z2dpbmcgbWVzc2FnZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjE0LjU5MjU5MDEzNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg0OTcyNTAxMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBSRFMgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzIChSRE1BKSBvdmVyIFRDUCAoUkRTKSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgdGhlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZS4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIGdvaW5nIHRvIGNyYWNrIG9wZW4gdGhlIGBuZXQvcmRzL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgZ28tdG8gcGxhY2UgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLCByaWdodD8gSXQnbGwgbGF5IG91dCBhbGwgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIHBvc3NpYmlsaXRpZXMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBpbiB0aGVyZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgYnVpbGQgc2V0dGluZ3MgYW5kIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIEZyb20gdGhlcmUsIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggdG8gY29uZmlndXJpbmcgaXQgdG8gd29yayB3aXRoaW4gb3VyIHNwZWNpZmljIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzAyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDc6MjMuMDg5ODQyMDMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Jkcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBSRFNcXG4gICA0OlxcdFxcdHRyaXN0YXRlIFxcXCJUaGUgUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyBQcm90b2NvbFxcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBUaGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBwcm90b2NvbCBwcm92aWRlcyByZWxpYWJsZSxcXG4gICA4OlxcdFxcdCAgc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIGRhdGFncmFtcyBvdmVyIEluZmluaWJhbmQgb3IgVENQLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb25maWcgUkRTX1JETUFcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJSRFMgb3ZlciBJbmZpbmliYW5kXFxcIlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBSRFMgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EX0FERFJfVFJBTlNcXG4gIDEzOlxcdFxcdGhlbHBcXG4gIDE0OlxcdFxcdCAgQWxsb3cgUkRTIHRvIHVzZSBJbmZpbmliYW5kIGFzIGEgdHJhbnNwb3J0LlxcbiAgMTU6XFx0XFx0ICBUaGlzIHRyYW5zcG9ydCBzdXBwb3J0cyBSRE1BIG9wZXJhdGlvbnMuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBSRFNfVENQXFxuICAxODpcXHRcXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgVENQXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBSRFNcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gSVBWNiB8fCAhSVBWNlxcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBBbGxvdyBSRFMgdG8gdXNlIFRDUCBhcyBhIHRyYW5zcG9ydC5cXG4gIDIzOlxcdFxcdCAgVGhpcyB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCBSRE1BIG9wZXJhdGlvbnMuXFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBSRFNfREVCVUdcXG4gIDI2OlxcdFxcdGJvb2wgXFxcIlJEUyBkZWJ1Z2dpbmcgbWVzc2FnZXNcXFwiXFxuICAyNzpcXHRcXHRkZXBlbmRzIG9uIFJEU1xcbiAgMjg6XFx0XFx0ZGVmYXVsdCBuXFxuICAyOTpcXHRcXG4gIDMwOlxcdGNvbmZpZyBHQ09WX1BST0ZJTEVfUkRTXFxuICAzMTpcXHRcXHRib29sIFxcXCJFbmFibGUgR0NPViBwcm9maWxpbmcgb24gUkRTXFxcIlxcbiAgMzI6XFx0XFx0ZGVwZW5kcyBvbiBHQ09WX0tFUk5FTFxcbiAgMzM6XFx0XFx0aGVscFxcbiAgMzQ6XFx0XFx0ICBFbmFibGUgR0NPViBwcm9maWxpbmcgb24gUkRTIGZvciBjaGVja2luZyB3aGljaCBmdW5jdGlvbnMvbGluZXNcXG4gIDM1OlxcdFxcdCAgYXJlIGV4ZWN1dGVkLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjIzLjA4OTg5NzUxM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3NTIzODkzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgUkRTIE1ha2VmaWxlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgbmV0L3Jkc2AgZGlyZWN0b3J5LiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIHZhcmlvdXMgUkRTIGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkLCBhbmQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIHRyaWdnZXIgdGhlIGluY2x1c2lvbiAob3IgZXhjbHVzaW9uKSBvZiBzcGVjaWZpYyBzb3VyY2UgZmlsZXMuIFRoZSBNYWtlZmlsZSBpcyB0aGUgbmF0dXJhbCBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBhbmFseXNpcy4gSSdtIGxvb2tpbmcgdG8gbWFwIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFsIGxvZ2lj4oCUc3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gc2VlIHdoaWNoIHNvdXJjZSBmaWxlcyBhcmUgYnVpbHQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZsYWdzLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBkZXBlbmRpbmcgb24ga2VybmVsIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzY1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzoyNy44NDIyODk4OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yZHMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRvYmotJChDT05GSUdfUkRTKSArPSByZHMub1xcbiAgIDM6XFx0cmRzLXkgOj1cXHRhZl9yZHMubyBiaW5kLm8gY29uZy5vIGNvbm5lY3Rpb24ubyBpbmZvLm8gbWVzc2FnZS5vICAgXFxcXFxcbiAgIDQ6XFx0XFx0XFx0XFx0cmVjdi5vIHNlbmQubyBzdGF0cy5vIHN5c2N0bC5vIHRocmVhZHMubyB0cmFuc3BvcnQubyBcXFxcXFxuICAgNTpcXHRcXHRcXHRcXHRsb29wLm8gcGFnZS5vIHJkbWEub1xcbiAgIDY6XFx0XFxuICAgNzpcXHRvYmotJChDT05GSUdfUkRTX1JETUEpICs9IHJkc19yZG1hLm9cXG4gICA4OlxcdHJkc19yZG1hLXkgOj1cXHRyZG1hX3RyYW5zcG9ydC5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdFxcdGliLm8gaWJfY20ubyBpYl9yZWN2Lm8gaWJfcmluZy5vIGliX3NlbmQubyBpYl9zdGF0cy5vIFxcXFxcXG4gIDEwOlxcdFxcdFxcdFxcdGliX3N5c2N0bC5vIGliX3JkbWEubyBpYl9mcm1yLm9cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFxuICAxMzpcXHRvYmotJChDT05GSUdfUkRTX1RDUCkgKz0gcmRzX3RjcC5vXFxuICAxNDpcXHRyZHNfdGNwLXkgOj1cXHRcXHR0Y3AubyB0Y3BfY29ubmVjdC5vIHRjcF9saXN0ZW4ubyB0Y3BfcmVjdi5vIFxcXFxcXG4gIDE1OlxcdFxcdFxcdFxcdHRjcF9zZW5kLm8gdGNwX3N0YXRzLm9cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y2NmbGFncy0kKENPTkZJR19SRFNfREVCVUcpXFx0Oj1cXHQtRFJEU19ERUJVR1xcbiAgMTg6XFx0XFxuICAxOTpcXHQjIGZvciBHQ09WIGNvdmVyYWdlIHByb2ZpbGluZ1xcbiAgMjA6XFx0aWZkZWYgQ09ORklHX0dDT1ZfUFJPRklMRV9SRFNcXG4gIDIxOlxcdEdDT1ZfUFJPRklMRSA6PSB5XFxuICAyMjpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzoyNy44NDIzNTY5MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNzYyMTY1NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSRFMgTW9kdWxlIERlcGVuZGVuY2llcyBhbmQgRnVuY3Rpb24gVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFJEUyBjb2RlIGFuZCB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFuZCBob3cgdGhlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhY3Jvc3MgdGhlIG1vZHVsZXMuIEZpcnN0LCBJIHNlZSB0aGF0IGBuZXQvcmRzL2Nvbm5lY3Rpb24uY2AgYW5kIGBuZXQvcmRzL3NlbmQuY2AgYXJlIHN0cmFpZ2h0Zm9yd2FyZGx5IGJ1aWx0IHVuZGVyIGBDT05GSUdfUkRTYC4gYG5ldC9yZHMvaWJfcmVjdi5jYCBoYXMgYSBtb3JlIHNwZWNpZmljIGRlcGVuZGVuY3k7IGl0J3MgYnVpbHQgb25seSBpZiBgQ09ORklHX1JEU19SRE1BYCBpcyBlbmFibGVkLCB3aGljaCBpbXBsaWVzIHdlIGhhdmUgUkRTLCBJbmZpbmliYW5kLCBhbmQgdGhlIEluZmluaWJhbmQgYWRkcmVzcyB0cmFuc2xhdGlvbiBjb21wb25lbnRzIGFsbCBpbiBwbGF5LiBGaW5hbGx5LCBgbmV0L3Jkcy90Y3AuY2AgYW5kIGBuZXQvcmRzL3RjcF9saXN0ZW4uY2AgcmVseSBvbiBgQ09ORklHX1JEU19UQ1BgLCBtZWFuaW5nIFJEUyBtdXN0IGJlIGVuYWJsZWQgYXMgYSBwcmVyZXF1aXNpdGUuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBmdW5jdGlvbnMuIEluIGBuZXQvcmRzL2Nvbm5lY3Rpb24uY2AsIGByZHNfY29ubl9zaHV0ZG93bmAgaXMgdGhlIGltcG9ydGFudCBvbmUgaGVyZSwgYW5kIGl0J3MgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QgdG8ga25vdywgYW5kIHRoZSBjb2RlIGNvbW1lbnRzIGRvIG5vdGUgdGhhdCBpdHMgdXNlZCBhY3Jvc3MgUkRTIG1vZHVsZXMuIFdlIGFsc28gaGF2ZSBgcmRzX2Nvbm5fcGF0aF9yZXNldGAsIHdoaWNoIGlzIHN0YXRpYy4gSW4gYG5ldC9yZHMvaWJfcmVjdi5jYCwgYHJkc19pYl9yZWN2X3JlZmlsbGAgaXMgbm9uLXN0YXRpYyBhbmQgYHJlbGVhc2VfcmVmaWxsYCBpcyBzdGF0aWMuIEluIGBuZXQvcmRzL3NlbmQuY2AsIGByZHNfc2VuZF94bWl0YCBpcyBub24tc3RhdGljLCBhbmQgYHJlbGVhc2VfaW5feG1pdGAgaXMgc3RhdGljLiBGaW5hbGx5LCBpbiB0aGUgVENQIG1vZHVsZXMsIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AgYW5kIGByZHNfdGNwX2FjY2VwdF9vbmVgIGFyZSBib3RoIG5vbi1zdGF0aWMuXG5cbk5vdyBJIG5lZWQgdG8gY2hlY2sgdGhvc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgYWdhaW4uIEknbSBnb2luZyB0byByZXZpc2l0IGByZHNfY29ubl9zaHV0ZG93bmAsIGByZHNfc2VuZF94bWl0YCwgYHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzYCwgYHJkc190Y3BfYWNjZXB0X29uZWAsIGFuZCBgcmRzX2liX3JlY3ZfcmVmaWxsYCBzcGVjaWZpY2FsbHksIGFuZCB2ZXJpZnkgaWYgdGhleSBhcmUgZXhwb3J0ZWQgb3Igbm90LCBhbmQgYW55IGhlYWRlcnMgb3IgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBmdW5jdGlvbiwgaW4gb3JkZXIgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NTAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzozOC42MDQ1MjU3MDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDk0MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19jb25uX3NodXRkb3dufHJkc19zZW5kX3htaXR8cmRzX3RjcF9yZXNldF9jYWxsYmFja3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2NvbmcuYz0yMTc9dm9pZCByZHNfY29uZ19xdWV1ZV91cGRhdGVzKHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcClcXG4tLVxcbm5ldC9yZHMvY29uZy5jLTIzMC1cXHRcXHRcXHRyZHNfc3RhdHNfaW5jKHNfY29uZ191cGRhdGVfcXVldWVkKTtcXG5uZXQvcmRzL2NvbmcuYzoyMzE6XFx0XFx0XFx0LyogV2UgY2Fubm90IGlubGluZSB0aGUgY2FsbCB0byByZHNfc2VuZF94bWl0KCkgaGVyZVxcbm5ldC9yZHMvY29uZy5jLTIzMi1cXHRcXHRcXHQgKiBmb3IgdHdvIHJlYXNvbnMgKGJvdGggcGVydGFpbmluZyB0byBhIFRDUCB0cmFuc3BvcnQpOlxcbi0tXFxubmV0L3Jkcy9jb25uZWN0aW9uLmM9ODM9c3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTEwOC0vKlxcbm5ldC9yZHMvY29ubmVjdGlvbi5jOjEwOTogKiBUaGlzIGlzIGNhbGxlZCBieSByZHNfY29ubl9zaHV0ZG93bigpIG9uY2UgdGhlIHRyYW5zcG9ydCBoYXMgYnJvdWdodFxcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTExMC0gKiBhIHBhdGggZG93bi4gIEl0IGNsZWFycyBwYXJ0aWFsIG1lc3NhZ2Ugc3RhdGUgc28gdGhhdCB0aGUgdHJhbnNwb3J0XFxuLS1cXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYz0xMTY9c3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuLS1cXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0xMjktXFx0ICogUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBhcmUgaGVsZCBhcyBsb2NrcyBieSB0aGVcXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYzoxMzA6XFx0ICogY2FsbGVyLCByZHNfY29ubl9zaHV0ZG93bigpLCB3aGljaCByZWxlYXNlcyB0aGVtIG9uY2UgdGhlXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtMTMxLVxcdCAqIHRlYXJkb3duIGlzIGNvbXBsZXRlLlxcbi0tXFxubmV0L3Jkcy9jb25uZWN0aW9uLmM9MzkwPUVYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyk7XFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtMzkxLVxcbm5ldC9yZHMvY29ubmVjdGlvbi5jOjM5Mjp2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0zOTMte1xcbi0tXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDM3LVxcdFxcdC8qIFJlbGVhc2UgdGhlIHR3byBsb2NrcyBhbmQgd2FrZSBhbnkgd2FpdGVyIChlLmcuXFxubmV0L3Jkcy9jb25uZWN0aW9uLmM6NDM4OlxcdFxcdCAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkpIHRoYXQgYmxvY2tlZCBvbiB0aGVtIHdoaWxlXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDM5LVxcdFxcdCAqIHdlIGhlbGQgdGhlbS4gIFRoZSB1bmxvY2sgb3JkZXJzIHRoZSB0cmFuc3BvcnQncyByaW5nXFxuLS1cXG5uZXQvcmRzL2liX2NtLmM9MjgyPXN0YXRpYyB2b2lkIHJkc19pYl90YXNrbGV0X2ZuX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTI5OS1cXHQgICAgdGVzdF9iaXQoMCwgXFx1MDAyNmNvbm4tXFx1MDAzZWNfbWFwX3F1ZXVlZCkpKVxcbm5ldC9yZHMvaWJfY20uYzozMDA6XFx0XFx0cmRzX3NlbmRfeG1pdChcXHUwMDI2aWMtXFx1MDAzZWNvbm4tXFx1MDAzZWNfcGF0aFswXSk7XFxubmV0L3Jkcy9pYl9jbS5jLTMwMS19XFxuLS1cXG5uZXQvcmRzL2liX3JlY3YuYz0zODI9dm9pZCByZHNfaWJfcmVjdl9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBpbnQgcHJlZmlsbCwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L3Jkcy9pYl9yZWN2LmMtMzk0LVxcdCAqIGxldCB0aGVtIGRvIHRoZWlyIHRoaW5nLiAgVGhlIGhvbGRlciBtYXkgYWxzbyBiZVxcbm5ldC9yZHMvaWJfcmVjdi5jOjM5NTpcXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHRlYXJpbmcgdGhlIHBhdGggZG93biwgaW4gd2hpY2ggY2FzZVxcbm5ldC9yZHMvaWJfcmVjdi5jLTM5Ni1cXHQgKiB0aGVyZSBpcyBub3RoaW5nIHRvIHBvc3QuXFxuLS1cXG5uZXQvcmRzL2liX3NlbmQuYz0yNDU9dm9pZCByZHNfaWJfc2VuZF9jcWVfaGFuZGxlcihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfd2MgKndjKVxcbi0tXFxubmV0L3Jkcy9pYl9zZW5kLmMtMzM1LSAqXFxubmV0L3Jkcy9pYl9zZW5kLmM6MzM2OiAqIFRoZSBSRFMgc2VuZCBjb2RlIGlzIGVzc2VudGlhbGx5IHNpbmdsZS10aHJlYWRlZDsgcmRzX3NlbmRfeG1pdFxcbm5ldC9yZHMvaWJfc2VuZC5jLTMzNy0gKiBzZXRzIFJEU19JTl9YTUlUIHRvIGVuc3VyZSBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBzZW5kIHJpbmcuXFxuLS1cXG5uZXQvcmRzL2xvb3AuYz0yMzU9dm9pZCByZHNfbG9vcF9uZXRfZXhpdCh2b2lkKVxcbi0tXFxubmV0L3Jkcy9sb29wLmMtMjQxLSAqIFRoaXMgaXMgbWlzc2luZyAueG1pdF8qIGJlY2F1c2UgbG9vcCBkb2Vzbid0IGdvIHRocm91Z2ggZ2VuZXJpY1xcbm5ldC9yZHMvbG9vcC5jOjI0MjogKiByZHNfc2VuZF94bWl0KCkgYW5kIGRvZXNuJ3QgY2FsbCByZHNfcmVjdl9pbmNvbWluZygpLiAgLmxpc3Rlbl9zdG9wIGFuZFxcbm5ldC9yZHMvbG9vcC5jLTI0My0gKiAubGFkZHJfY2hlY2sgYXJlIG1pc3NpbmcgYmVjYXVzZSB0cmFuc3BvcnQuYyBkb2Vzbid0IGl0ZXJhdGUgb3Zlclxcbi0tXFxubmV0L3Jkcy9yZHMuaD01NDA9c3RydWN0IHJkc190cmFuc3BvcnQge1xcbi0tXFxubmV0L3Jkcy9yZHMuaC01ODAtXFx0LypcXG5uZXQvcmRzL3Jkcy5oOjU4MTpcXHQgKiAueG1pdCBpcyBjYWxsZWQgYnkgcmRzX3NlbmRfeG1pdCgpIHRvIHRlbGwgdGhlIHRyYW5zcG9ydCB0byBzZW5kXFxubmV0L3Jkcy9yZHMuaC01ODItXFx0ICogcGFydCBvZiBhIG1lc3NhZ2UuICBUaGUgY2FsbGVyIHNlcmlhbGl6ZXMgb24gdGhlIHNlbmRfc2VtIHNvIHRoaXNcXG4tLVxcbm5ldC9yZHMvcmRzLmg9ODE1PXN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9yZHMvcmRzLmgtODE5LVxcdFxcdFxcdFxcdFxcdFxcdHU4IHRvcywgZ2ZwX3QgZ2ZwLCBpbnQgZGV2X2lmKTtcXG5uZXQvcmRzL3Jkcy5oOjgyMDp2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aCk7XFxubmV0L3Jkcy9yZHMuaC04MjEtdm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTk1Nz12b2lkIHJkc19zZW5kX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNvbm4pO1xcbm5ldC9yZHMvcmRzLmg6OTU4OmludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XFxubmV0L3Jkcy9yZHMuaC05NTktc3RydWN0IHNvY2thZGRyX2luO1xcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNDQtXFxubmV0L3Jkcy9zZW5kLmM6NDU6LyogV2hlbiB0cmFuc21pdHRpbmcgbWVzc2FnZXMgaW4gcmRzX3NlbmRfeG1pdCwgd2UgbmVlZCB0byBlbWVyZ2UgZnJvbVxcbm5ldC9yZHMvc2VuZC5jLTQ2LSAqIHRpbWUgdG8gdGltZSBhbmQgYnJpZWZseSByZWxlYXNlIHRoZSBDUFUuIE90aGVyd2lzZSB0aGUgc29mdGxvY2sgd2F0Y2hkb2dcXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTU5PXN0YXRpYyB2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpO1xcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNjItICogUmVzZXQgdGhlIHNlbmQgc3RhdGUuICBDYWxsZXJzIG11c3QgZW5zdXJlIHRoYXQgdGhpcyBkb2Vzbid0IHJhY2Ugd2l0aFxcbm5ldC9yZHMvc2VuZC5jOjYzOiAqIHJkc19zZW5kX3htaXQoKS5cXG5uZXQvcmRzL3NlbmQuYy02NC0gKi9cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTEzMz1zdGF0aWMgYm9vbCByZHNfbXByZHNfY3AwX2NhdGNodXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtMTkxLSAqL1xcbm5ldC9yZHMvc2VuZC5jOjE5MjppbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy9zZW5kLmMtMTkzLXtcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTI0Ni1cXHQvKlxcbm5ldC9yZHMvc2VuZC5jOjI0NzpcXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gYWNxdWlyZXNcXG5uZXQvcmRzL3NlbmQuYy0yNDgtXFx0ICogUkRTX0lOX1hNSVQ7IHdlIHRha2UgdGhlIGxvY2sgZmlyc3QgYW5kIHRoZW4gY2hlY2sgdGhlIHN0YXRlLlxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNTU3LX1cXG5uZXQvcmRzL3NlbmQuYzo1NTg6RVhQT1JUX1NZTUJPTF9HUEwocmRzX3NlbmRfeG1pdCk7XFxubmV0L3Jkcy9zZW5kLmMtNTU5LVxcbi0tXFxubmV0L3Jkcy9zZW5kLmM9NjkyPXN0YXRpYyB2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpXFxuLS1cXG5uZXQvcmRzL3NlbmQuYy03NjctICogbWVzc2FnZXMgdXAgdG8sIGFuZCBpbmNsdWRpbmcsIHRoZSBnaXZlbiBzZXF1ZW5jZSBudW1iZXIuICBNZXNzYWdlcyBhcmVcXG5uZXQvcmRzL3NlbmQuYzo3Njg6ICogbW92ZWQgdG8gdGhlIHJldHJhbnMgcXVldWUgd2hlbiByZHNfc2VuZF94bWl0IHBpY2tzIHRoZW0gb2ZmIHRoZSBzZW5kXFxubmV0L3Jkcy9zZW5kLmMtNzY5LSAqIHF1ZXVlLiBUaGlzIG1lYW5zIHRoYXQgaW4gdGhlIFRDUCBjYXNlLCB0aGUgbWVzc2FnZSBtYXkgbm90IGhhdmUgYmVlblxcbi0tXFxubmV0L3Jkcy9zZW5kLmM9MTE1ND1pbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXFxuLS1cXG5uZXQvcmRzL3NlbmQuYy0xNDUxLVxcbm5ldC9yZHMvc2VuZC5jOjE0NTI6XFx0cmV0ID0gcmRzX3NlbmRfeG1pdChjcGF0aCk7XFxubmV0L3Jkcy9zZW5kLmMtMTQ1My1cXHRpZiAocmV0ID09IC1FTk9NRU0gfHwgcmV0ID09IC1FQUdBSU4pIHtcXG4tLVxcbm5ldC9yZHMvdGNwLmM9OTY9dm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvcmRzL3RjcC5jLTExNy0vKlxcbm5ldC9yZHMvdGNwLmM6MTE4OiAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgYSBwYXRoIHRvIGEgbmV3IHNvY2tldCBhbmRcXG5uZXQvcmRzL3RjcC5jLTExOS0gKiByZWxlYXNlcyB0aGUgb2xkIG9uZSBpdCBmaW5kcyBpbiB0Yy1cXHUwMDNldF9zb2NrLCByZXNvbHZpbmcgYSBkdWVsbGluZ1xcbi0tXFxubmV0L3Jkcy90Y3AuYy0xMzItICogUkRTX0lOX1hNSVQgc28gdGhhdCBpdCBjYW5ub3QgaW50ZXJsZWF2ZSB3aXRoIGEgc2VuZGVyIGFscmVhZHlcXG5uZXQvcmRzL3RjcC5jOjEzMzogKiBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpLlxcbm5ldC9yZHMvdGNwLmMtMTM0LSAqL1xcbm5ldC9yZHMvdGNwLmM6MTM1OnZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQvcmRzL3RjcC5jLTEzNi1cXHRcXHRcXHQgICAgIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG4tLVxcbm5ldC9yZHMvdGNwLmMtMTQ2LVxcdCAqIHRoYW4gUkRTX0NPTk5fVVAgc3RvcHMgbmV3IHNlbmRlcnMsIGFuZCBvd25pbmcgUkRTX0lOX1hNSVRcXG5uZXQvcmRzL3RjcC5jOjE0NzpcXHQgKiBleGNsdWRlcyBhbnkgdGhyZWFkIGFscmVhZHkgaW5zaWRlIHJkc19zZW5kX3htaXQoKSAtIG9yIGFcXG5uZXQvcmRzL3RjcC5jOjE0ODpcXHQgKiB0ZWFyZG93biBpbiByZHNfY29ubl9zaHV0ZG93bigpLCB3aGljaCBob2xkcyB0aGUgc2FtZSBsb2NrXFxubmV0L3Jkcy90Y3AuYy0xNDktXFx0ICogZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNwb3J0IHNodXRkb3duIC0gZm9yIHRoZSB3aG9sZVxcbi0tXFxubmV0L3Jkcy90Y3AuYy0xNTItXFx0ICogQW4gaW5jb21pbmcgc3luLWFjayBhdCB0aGlzIHBvaW50IHdvdWxkIGVuZCB1cCBtYXJraW5nIHRoZVxcbm5ldC9yZHMvdGNwLmM6MTUzOlxcdCAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpXFxubmV0L3Jkcy90Y3AuYy0xNTQtXFx0ICogdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkIHN5bmNocm9uaXplIG9uXFxuLS1cXG5uZXQvcmRzL3RjcC5jLTE4My1cXHQvKiBSZWFkIHRfc29jayBvbmx5IHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVCwgbmV2ZXIgYmVmb3JlIHRoZVxcbm5ldC9yZHMvdGNwLmM6MTg0OlxcdCAqIHdhaXQ6IHRoZSB0ZWFyZG93biBpbiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGRcXG5uZXQvcmRzL3RjcC5jLTE4NS1cXHQgKiBzb2NrZXQgYW5kIGNsZWFycyB0X3NvY2ssIHNvIGEgcG9pbnRlciBzYW1wbGVkIGVhcmxpZXIgY2FuXFxuLS1cXG5uZXQvcmRzL3RjcC5jLTIyNC0vKiBBZGQgdGMgdG8gcmRzX3RjcF90Y19saXN0IGFuZCBzZXQgdGMtXFx1MDAzZXRfc29jay4gU2VlIGNvbW1lbnRzXFxubmV0L3Jkcy90Y3AuYzoyMjU6ICogYWJvdmUgcmRzX3RjcF9yZXNldF9jYWxsYmFja3MgZm9yIG5vdGVzIGFib3V0IHN5bmNocm9uaXphdGlvblxcbm5ldC9yZHMvdGNwLmMtMjI2LSAqIHdpdGggZGF0YSBwYXRoXFxuLS1cXG5uZXQvcmRzL3RjcC5oPTc0PXZvaWQgcmRzX3RjcF9zZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XFxubmV0L3Jkcy90Y3AuaDo3NTp2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XFxubmV0L3Jkcy90Y3AuaC03Ni12b2lkIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jPTE1Mj1pbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMjk2LVxcdFxcdC8qIER1ZWxsaW5nIFNZTiBoYXMgYmVlbiBoYW5kbGVkIGluIHJkc190Y3BfYWNjZXB0X29uZSgpICovXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM6Mjk3OlxcdFxcdHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKG5ld19zb2NrLCBjcCk7XFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMjk4LVxcdFxcdC8qIHJkc19jb25uZWN0X3BhdGhfY29tcGxldGUoKSBtYXJrcyBSRFNfQ09OTl9VUCwgb3IsXFxuLS1cXG5uZXQvcmRzL3RocmVhZHMuYz0xOTE9dm9pZCByZHNfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3Jkcy90aHJlYWRzLmMtMTk5LVxcdFxcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKTtcXG5uZXQvcmRzL3RocmVhZHMuYzoyMDA6XFx0XFx0cmV0ID0gcmRzX3NlbmRfeG1pdChjcCk7XFxubmV0L3Jkcy90aHJlYWRzLmMtMjAxLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubmV0L3Jkcy90aHJlYWRzLmM9MjQzPXZvaWQgcmRzX3NodXRkb3duX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvcmRzL3RocmVhZHMuYy0yNDgtXFxubmV0L3Jkcy90aHJlYWRzLmM6MjQ5OlxcdHJkc19jb25uX3NodXRkb3duKGNwKTtcXG5uZXQvcmRzL3RocmVhZHMuYy0yNTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzozOC42NTI2MjcyMTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTQ1MDA3NzU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSRFMgUHJvdG9jb2wgSW52ZXN0aWdhdGlvbjogQ29uZmlncyBhbmQgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyAoUkRTKSBwcm90b2NvbC4gU3BlY2lmaWNhbGx5LCBgUkRTYCBpdHNlbGYgZGVwZW5kcyBvbiBgSU5FVGAsIHdoaWNoIGlzIHN0YW5kYXJkLCBidXQgdGhlIGtleSBvbmVzLCBgUkRTX1RDUGAgYW5kIGBSRFNfUkRNQWAsIHJlcXVpcmUgZGVlcGVyIGV4YW1pbmF0aW9uLiBgUkRTX1RDUGAgcmVsaWVzIG9uIGBSRFNgIGFuZCBlaXRoZXIgYElQVjZgIG9yIGl0cyBuZWdhdGlvbiwgd2hpY2ggaXMgZXhwZWN0ZWQuIGBSRFNfUkRNQWAgaXMgbW9yZSBpbnRlcmVzdGluZywgYXMgaXQgZGVwZW5kcyBvbiBgUkRTYCwgYElORklOSUJBTkRgLCBhbmQgYElORklOSUJBTkRfQUREUl9UUkFOU2AuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBTZWVtcyBsaWtlIFwiUkRTXCIsIFwiUkRTX1RDUFwiLCBhbmQgXCJSRFNfUkRNQVwiIGFyZSB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIsIGFsb25nIHdpdGggXCJJTkZJTklCQU5EXCIgYW5kIFwiSU5GSU5JQkFORF9BRERSX1RSQU5TXCIgaWYgUkRNQSBpcyBlbmFibGVkLlxuXG5OZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZvY3VzIHN5bWJvbHMuIEkndmUgaWRlbnRpZmllZCBgcmRzX2Nvbm5fc2h1dGRvd25gLCBgcmRzX3NlbmRfeG1pdGAsIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AsIGByZHNfaWJfcmVjdl9yZWZpbGxgLCBhbmQgYHJkc190Y3BfYWNjZXB0X29uZWAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJIHNob3VsZCBjb25jZW50cmF0ZSBvbiBmb3IgYW55IGFuYWx5c2lzLlxuXG5UaGUgbW9zdCBpbXBvcnRhbnQgcGFydCBpcyB0aGUgd29ydGhpbmVzcyBvZiB0aGlzIGFyZWEgZm9yIGZ1enppbmcuIEFic29sdXRlbHksIHRoaXMgaXMgY29yZSBSRFMgbmV0d29ya2luZyBjb2RlLiBJdCBoYW5kbGVzIGxvY2tzLCBzdGF0ZSBtYWNoaW5lcywgdGhlIFNZTnMsIHRoZSBzb2NrZXQgc3dhcHMsIGFuZCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGJvdGggdGVhcmRvd24gYW5kIGRhdGEgdHJhbnNmZXIuIEFuZCwgaW1wb3J0YW50bHksIHRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0UsIGJ5IGV4cGxvaXRpbmcgdGhlIHNvY2tldCBvcGVyYXRpb25zIG9uIEFGX1JEUyBzb2NrZXRzIGFjcm9zcyB0aGUgZGlmZmVyZW50IHRyYW5zcG9ydHMgKFRDUC9sb29wYmFjay9SRE1BKS5cblxuRmluYWxseSwgSSB3aWxsIGNvbGxhdGUgYWxsIG9mIHRoaXM6IHRoZSBjb25maWdzLCB0aGUgc3ltYm9scywgYW5kIHRoZSByYXRpb25hbGUgZm9yIHRoZSBuZXh0IHN0ZXAsIHdoaWNoIGlzIGNhbGxpbmcgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB3aXRoIHRoZXNlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk0MSwiT3V0cHV0VG9rZW5zIjoxODAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDc6NDguMTAyNzA3Mjg1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg0NDE4MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJEU1wiLFxuICAgIFwiUkRTX1RDUFwiLFxuICAgIFwiUkRTX1JETUFcIixcbiAgICBcIklORklOSUJBTkRcIixcbiAgICBcIklORklOSUJBTkRfQUREUl9UUkFOU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJkc19jb25uX3NodXRkb3duXCIsXG4gICAgXCJyZHNfc2VuZF94bWl0XCIsXG4gICAgXCJyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc1wiLFxuICAgIFwicmRzX3RjcF9hY2NlcHRfb25lXCIsXG4gICAgXCJyZHNfaWJfcmVjdl9yZWZpbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgbWVjaGFuaXNtcyAoc3BlY2lmaWNhbGx5IFJEU19JTl9YTUlUIGFuZCBSRFNfUkVDVl9SRUZJTEwgYml0bG9ja3MsIHdhaXRxdWV1ZSBiYXJyaWVycywgYW5kIHN0YXRlIHRyYW5zaXRpb25zKSBpbiBSRFMgY29ubmVjdGlvbiB0ZWFyZG93biwgc2VuZCwgcmVjZWl2ZS1yZWZpbGwsIGFuZCBUQ1Agc29ja2V0IHN3YXBwaW5nIHBhdGhzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbmV0d29yayBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfVENQXCIsXG4gICAgXCJSRFNfUkRNQVwiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiSU5GSU5JQkFORF9BRERSX1RSQU5TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX2Nvbm5fc2h1dGRvd25cIixcbiAgICBcInJkc19zZW5kX3htaXRcIixcbiAgICBcInJkc190Y3BfcmVzZXRfY2FsbGJhY2tzXCIsXG4gICAgXCJyZHNfdGNwX2FjY2VwdF9vbmVcIixcbiAgICBcInJkc19pYl9yZWN2X3JlZmlsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBtZWNoYW5pc21zIChzcGVjaWZpY2FsbHkgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBiaXRsb2Nrcywgd2FpdHF1ZXVlIGJhcnJpZXJzLCBhbmQgc3RhdGUgdHJhbnNpdGlvbnMpIGluIFJEUyBjb25uZWN0aW9uIHRlYXJkb3duLCBzZW5kLCByZWNlaXZlLXJlZmlsbCwgYW5kIFRDUCBzb2NrZXQgc3dhcHBpbmcgcGF0aHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBuZXR3b3JrIHNvY2tldCBvcGVyYXRpb25zIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDc6NDguMTgxMTU2ODMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgyODM1ODE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjQ4LjE4MjQ1NTUyMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwODI3MDU1Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVzb2x2ZXMgY29uY3VycmVuY3ksIHJhY2UgY29uZGl0aW9uLCBhbmQgc3RhdGUtbWFjaGluZSBzeW5jaHJvbml6YXRpb24gYnVncyBpbiB0aGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBzdWJzeXN0ZW0gZHVyaW5nIGNvbm5lY3Rpb24gdGVhcmRvd24sIHJlc2V0LCBhbmQgZHVlbGxpbmcgU1lOIHJlc29sdXRpb24gKHNwZWNpZmljYWxseSBsb2NraW5nIGFuZCBiaXQtbWFuaXB1bGF0aW9uIG9mIFJEU19JTl9YTUlULCBSRFNfUkVDVl9SRUZJTEwsIGFuZCBSRFNfQ09OTl8qIHN0YXRlIHRyYW5zaXRpb25zKS5cXG5cXG4tIE5vIG5ldyBoZWFwL3N0YWNrIGFsbG9jYXRpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYWRkZWQgb3IgbW9kaWZpZWQuXFxuLSBObyBrZXJuZWwtdG8tdXNlciBjb3B5IG9wZXJhdGlvbnMgKGUuZy4sIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmssIGlvY3RsLCBnZXRzb2Nrb3B0KSBvciB1c2VyLWZhY2luZyBzdHJ1Y3RzIGFyZSB0b3VjaGVkLlxcbi0gTm8gYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja3MsIG9yIHBheWxvYWQgcGFyc2luZyByb3V0aW5lcyBhcmUgYWx0ZXJlZCB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuLSBBbnkgY29uY3VycmVuY3kgYnVncywgdXNlLWFmdGVyLWZyZWUsIGRlYWRsb2Nrcywgb3IgbG9jayBvcmRlcmluZyBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIHRoZXNlIGNoYW5nZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMsIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGZlMzc2NzkwYjdjOWRjZjNlNmY1MzFlNTY1ZjIzNzdmY2VmYjNhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDI4IDIyOjQ3OjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9jb25uZWN0aW9uLmMgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uY1xuaW5kZXggN2M4YWI4ZTk3M2UxYi4uYjZjNGJlYjUwZWFmMCAxMDA2NDRcbi0tLSBhL25ldC9yZHMvY29ubmVjdGlvbi5jXG4rKysgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uY1xuQEAgLTEwNiwxMCArMTA2LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXG4gfVxuIFxuIC8qXG4tICogVGhpcyBpcyBjYWxsZWQgYnkgdHJhbnNwb3J0cyBhcyB0aGV5J3JlIGJyaW5naW5nIGRvd24gYSBjb25uZWN0aW9uLlxuLSAqIEl0IGNsZWFycyBwYXJ0aWFsIG1lc3NhZ2Ugc3RhdGUgc28gdGhhdCB0aGUgdHJhbnNwb3J0IGNhbiBzdGFydCBzZW5kaW5nXG4tICogYW5kIHJlY2VpdmluZyBvdmVyIHRoaXMgY29ubmVjdGlvbiBhZ2FpbiBpbiB0aGUgZnV0dXJlLiAgSXQgaXMgdXAgdG9cbi0gKiB0aGUgdHJhbnNwb3J0IHRvIGhhdmUgc2VyaWFsaXplZCB0aGlzIGNhbGwgd2l0aCBpdHMgc2VuZCBhbmQgcmVjdi5cbisgKiBUaGlzIGlzIGNhbGxlZCBieSByZHNfY29ubl9zaHV0ZG93bigpIG9uY2UgdGhlIHRyYW5zcG9ydCBoYXMgYnJvdWdodFxuKyAqIGEgcGF0aCBkb3duLiAgSXQgY2xlYXJzIHBhcnRpYWwgbWVzc2FnZSBzdGF0ZSBzbyB0aGF0IHRoZSB0cmFuc3BvcnRcbisgKiBjYW4gc3RhcnQgc2VuZGluZyBhbmQgcmVjZWl2aW5nIG92ZXIgdGhpcyBwYXRoIGFnYWluIGluIHRoZSBmdXR1cmUuXG4rICogVGhlIGNhbGxlciBvd25zIFJEU19JTl9YTUlUIGFuZCBSRFNfUkVDVl9SRUZJTEwgYWNyb3NzIHRoaXMgY2FsbCxcbisgKiB3aGljaCBpcyB3aGF0IHNlcmlhbGl6ZXMgaXQgYWdhaW5zdCB0aGUgc2VuZCBhbmQgcmVjZWl2ZS1yZWZpbGxcbisgKiBwYXRocy5cbiAgKi9cbiBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiB7XG5AQCAtMTIwLDcgKzEyMiwxNiBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcbiBcdHJkc19zdGF0c19pbmMoc19jb25uX3Jlc2V0KTtcbiBcdHJkc19zZW5kX3BhdGhfcmVzZXQoY3ApO1xuLVx0Y3AtXHUwMDNlY3BfZmxhZ3MgPSAwO1xuK1xuK1x0LyogQ2xlYXIgdGhlIGJpdHMgdGhlIHJlc2V0IGlzIHJlc3BvbnNpYmxlIGZvciBpbmRpdmlkdWFsbHk6IGFcbitcdCAqIGJsYW5rZXQgY3BfZmxhZ3MgPSAwIGlzIGEgcGxhaW4gc3RvcmUgdGhhdCBjYW4gY2xvYmJlciBhXG4rXHQgKiBjb25jdXJyZW50IGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBvbiB0aGUgc2FtZSB3b3JkLlxuK1x0ICogUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBhcmUgaGVsZCBhcyBsb2NrcyBieSB0aGVcbitcdCAqIGNhbGxlciwgcmRzX2Nvbm5fc2h1dGRvd24oKSwgd2hpY2ggcmVsZWFzZXMgdGhlbSBvbmNlIHRoZVxuK1x0ICogdGVhcmRvd24gaXMgY29tcGxldGUuXG4rXHQgKi9cbitcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4rXHRjbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4gXG4gXHQvKiBEbyBub3QgY2xlYXIgbmV4dF9yeF9zZXEgaGVyZSwgZWxzZSB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2hcbiBcdCAqIHJldHJhbnNtaXR0ZWQgcGFja2V0cyBmcm9tIG5ldyBwYWNrZXRzLCBhbmQgd2lsbCBoYW5kIGFsbFxuQEAgLTQwNiwyOCArNDE3LDcwIEBAIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIFx0XHR9XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZjcC1cdTAwM2VjcF9jbV9sb2NrKTtcbiBcbitcdFx0LyogUXVpZXNjZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUtcmVmaWxsIHBhdGhzIGJ5XG4rXHRcdCAqIGFjcXVpcmluZyB0aGVpciBiaXQgbG9ja3MsIG5vdCBtZXJlbHkgd2FpdGluZyBmb3JcbitcdFx0ICogdGhlbSB0byBiZSByZWxlYXNlZDogd2l0aCBhIHBsYWluIHdhaXQsIGVpdGhlciBwYXRoXG4rXHRcdCAqIGNhbiByZS10YWtlIGl0cyBsb2NrIHRoZSBpbnN0YW50IGFmdGVyIHdlIHNhbXBsZSBpdFxuK1x0XHQgKiBjbGVhciBhbmQgdGhlbiBydW4gY29uY3VycmVudGx5IHdpdGggdGhlIHRyYW5zcG9ydFxuK1x0XHQgKiBzaHV0ZG93biBhbmQgdGhlIHBhdGggcmVzZXQgYmVsb3cuICBIb2xkaW5nIGJvdGhcbitcdFx0ICogbG9ja3MgYWNyb3NzIHRoZSB0ZWFyZG93biBtYWtlcyB0aGF0IHN0cnVjdHVyYWxseVxuK1x0XHQgKiBpbXBvc3NpYmxlLlxuK1x0XHQgKi9cbiBcdFx0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbi1cdFx0XHQgICAhdGVzdF9iaXQoUkRTX0lOX1hNSVQsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSk7XG4rXHRcdFx0ICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiBcdFx0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbi1cdFx0XHQgICAhdGVzdF9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuK1x0XHRcdCAgICF0ZXN0X2FuZF9zZXRfYml0KFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiBcbiBcdFx0Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZWNvbm5fcGF0aF9zaHV0ZG93bihjcCk7XG4gXHRcdHJkc19jb25uX3BhdGhfcmVzZXQoY3ApO1xuIFxuK1x0XHQvKiBSZWxlYXNlIHRoZSB0d28gbG9ja3MgYW5kIHdha2UgYW55IHdhaXRlciAoZS5nLlxuK1x0XHQgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpKSB0aGF0IGJsb2NrZWQgb24gdGhlbSB3aGlsZVxuK1x0XHQgKiB3ZSBoZWxkIHRoZW0uICBUaGUgdW5sb2NrIG9yZGVycyB0aGUgdHJhbnNwb3J0J3MgcmluZ1xuK1x0XHQgKiByZS1pbml0aWFsaXphdGlvbiBhbmQgdGhlIHBhdGggcmVzZXQgYWJvdmUgYmVmb3JlXG4rXHRcdCAqIGVpdGhlciBiaXQgaXMgc2VlbiBjbGVhci4gIHJkc19jb25uX3BhdGhfcmVzZXQoKSBsZWF2ZXNcbitcdFx0ICogYm90aCBiaXRzIGFsb25lOiBvd25lcnNoaXAgZW5kcyBoZXJlLCBub3QgaW5zaWRlIHRoZVxuK1x0XHQgKiByZXNldC5cbitcdFx0ICovXG4rXHRcdGNsZWFyX2JpdF91bmxvY2soUkRTX0lOX1hNSVQsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbitcdFx0Y2xlYXJfYml0X3VubG9jayhSRFNfUkVDVl9SRUZJTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbitcdFx0d2FrZV91cF9hbGwoXHUwMDI2Y3AtXHUwMDNlY3Bfd2FpdHEpO1xuK1xuIFx0XHRpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRElTQ09OTkVDVElORyxcbi1cdFx0XHRcdFx0ICAgICAgUkRTX0NPTk5fRE9XTikgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9FUlJPUixcbiBcdFx0XHRcdFx0ICAgICAgUkRTX0NPTk5fRE9XTikpIHtcbi1cdFx0XHQvKiBUaGlzIGNhbiBoYXBwZW4gLSBlZyB3aGVuIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgdGVhcmluZ1xuLVx0XHRcdCAqIGRvd24gdGhlIGNvbm5lY3Rpb24sIGFuZCBzb21lb25lIHVubG9hZHMgdGhlIHJkcyBtb2R1bGUuXG4tXHRcdFx0ICogUXVpdGUgcmVwcm9kdWNpYmxlIHdpdGggbG9vcGJhY2sgY29ubmVjdGlvbnMuXG4tXHRcdFx0ICogTW9zdGx5IGhhcm1sZXNzLlxuK1x0XHRcdC8qIFRoZSBwYXRoIHdhcyBkcm9wcGVkIGFnYWluIHdoaWxlIHdlIHRvcmUgaXRcbitcdFx0XHQgKiBkb3duOiBieSBhIHNvY2tldCBzdGF0ZS1jaGFuZ2UgY2FsbGJhY2sgaW5cbitcdFx0XHQgKiBpcnEgY29udGV4dCBvbiByZWNlaXB0IG9mIGEgRklOLCBvciBieSBhblxuK1x0XHRcdCAqIGFjY2VwdCB0aGF0IGNsYWltZWQgdGhlIHBhdGgganVzdCBiZWZvcmUgYVxuK1x0XHRcdCAqIGRyb3AgcHV0IGl0IGJhY2sgdG8gUkRTX0NPTk5fRVJST1IgYW5kIHRoZW5cbitcdFx0XHQgKiBpbnN0YWxsZWQgYSBmcmVzaCBzb2NrZXQgb24gaXQuICBVbmxlc3MgYVxuK1x0XHRcdCAqIHBlbmRpbmcgZGVzdHJveSBzdXBwcmVzc2VkIGl0LCB0aGUgZHJvcCBhbHNvXG4rXHRcdFx0ICogcXVldWVkIGFub3RoZXIgc2h1dGRvd24gcGFzcywgYW5kIHRoYXQgcGFzc1xuK1x0XHRcdCAqIG11c3QgcnVuLCBiZWNhdXNlIGl0IGlzIHdoYXQgdGVhcnMgZG93blxuK1x0XHRcdCAqIHdoYXRldmVyIGF0dGFjaGVkIHRvIHRoZSBwYXRoIGFmdGVyIHRoZVxuK1x0XHRcdCAqIHRyYW5zcG9ydCBzaHV0ZG93biBhYm92ZSBzYW1wbGVkIGl0cyBzdGF0ZS5cbitcdFx0XHQgKiBDb25zdW1pbmcgdGhlIFJEU19DT05OX0VSUk9SIGhlcmUgd291bGQgdHVyblxuK1x0XHRcdCAqIHRoYXQgcGFzcyBpbnRvIGEgbm8tb3A6IGxlYXZlIHRoZSBzdGF0ZVxuK1x0XHRcdCAqIGFsb25lLCBhbmQgbGV0IHRoZSBwYXNzIGZpbmlzaCB0aGUgam9iLlxuIFx0XHRcdCAqXG4tXHRcdFx0ICogTm90ZSB0aGF0IHRoaXMgYWxzbyBoYXBwZW5zIHdpdGggcmRzLXRjcCBiZWNhdXNlXG4tXHRcdFx0ICogd2UgY291bGQgaGF2ZSB0cmlnZ2VyZWQgcmRzX2Nvbm5fcGF0aF9kcm9wIGluIGlycVxuLVx0XHRcdCAqIG1vZGUgZnJvbSByZHNfdGNwX3N0YXRlIGNoYW5nZSBvbiB0aGUgcmVjZWlwdCBvZlxuLVx0XHRcdCAqIGEgRklOLCB0aHVzIHdlIG5lZWQgdG8gcmVjaGVjayBmb3IgUkRTX0NPTk5fRVJST1Jcbi1cdFx0XHQgKiBoZXJlLlxuK1x0XHRcdCAqIFF1aWVzY2UgdGhlIHJlY29ubmVjdCB0aW1lciBiZWZvcmUgYmFpbGluZ1xuK1x0XHRcdCAqIG91dCwgdGhvdWdoLiAgV2hlbiBhIHBlbmRpbmcgZGVzdHJveSBkaWRcbitcdFx0XHQgKiBzdXBwcmVzcyB0aGUgcXVldWUsIG5vIGxhdGVyIHBhc3MgcnVucywgYW5kXG4rXHRcdFx0ICogcmRzX2Nvbm5fcGF0aF9kZXN0cm95KCkgaXMgYWJvdXQgdG8gZmx1c2hcbitcdFx0XHQgKiBjcF9kb3duX3cgYW5kIGZyZWUgdGhlIHBhdGg6IGl0IG11c3Qgbm90XG4rXHRcdFx0ICogZmluZCBjcF9jb25uX3cgc3RpbGwgYXJtZWQuICBBIHN1Y2Nlc3NvclxuK1x0XHRcdCAqIHBhc3MsIHdoZW4gdGhlcmUgaXMgb25lLCByZS1hcm1zIHRoZVxuK1x0XHRcdCAqIHJlY29ubmVjdCBmcm9tIGl0cyBvd24gdGFpbC5cbitcdFx0XHQgKi9cbitcdFx0XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2Y3AtXHUwMDNlY3BfY29ubl93KTtcbitcdFx0XHRjbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4rXG4rXHRcdFx0aWYgKHJkc19jb25uX3BhdGhfc3RhdGUoY3ApID09IFJEU19DT05OX0VSUk9SKVxuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdC8qIE5vIGN1cnJlbnQgY3Bfc3RhdGUgd3JpdGVyIGxlYXZlcyBhXG4rXHRcdFx0ICogRElTQ09OTkVDVElORyBwYXRoIGluIGFueSBzdGF0ZSBidXRcbitcdFx0XHQgKiBSRFNfQ09OTl9FUlJPUjsgcmVwb3J0IGxvdWRseSBpZiBvbmUgZXZlclxuK1x0XHRcdCAqIGRvZXMuXG4gXHRcdFx0ICovXG4gXHRcdFx0cmRzX2Nvbm5fcGF0aF9lcnJvcihjcCwgXCIlczogZmFpbGVkIHRvIHRyYW5zaXRpb24gXCJcbiBcdFx0XHRcdFx0ICAgIFwidG8gc3RhdGUgRE9XTiwgY3VycmVudCBzdGF0ZSBcIlxuZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfcmVjdi5jIGIvbmV0L3Jkcy9pYl9yZWN2LmNcbmluZGV4IDM1NzEyOGQzNGE1NDYuLmJkNmNiM2ZmYWE1NzEgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL2liX3JlY3YuY1xuKysrIGIvbmV0L3Jkcy9pYl9yZWN2LmNcbkBAIC0zNjMsMTUgKzM2MywxNCBAQCBzdGF0aWMgaW50IGFjcXVpcmVfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbiBcbiBzdGF0aWMgdm9pZCByZWxlYXNlX3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4ge1xuLVx0Y2xlYXJfYml0KFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y29ubi1cdTAwM2VjX2ZsYWdzKTtcbi1cdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XG4rXHRjbGVhcl9iaXRfdW5sb2NrKFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y29ubi1cdTAwM2VjX2ZsYWdzKTtcbiBcbiBcdC8qIFdlIGRvbid0IHVzZSB3YWl0X29uX2JpdCgpL3dha2VfdXBfYml0KCkgYmVjYXVzZSBvdXIgd2FraW5nIGlzIGluIGFcbiBcdCAqIGhvdCBwYXRoIGFuZCBmaW5kaW5nIHdhaXRlcnMgaXMgdmVyeSByYXJlLiAgV2UgZG9uJ3Qgd2FudCB0byB3YWxrXG4gXHQgKiB0aGUgc3lzdGVtLXdpZGUgaGFzaGVkIHdhaXRxdWV1ZSBidWNrZXRzIGluIHRoZSBmYXN0IHBhdGggb25seSB0b1xuIFx0ICogYWxtb3N0IG5ldmVyIGZpbmQgd2FpdGVycy5cbiBcdCAqL1xuLVx0aWYgKHdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2Y29ubi1cdTAwM2VjX3dhaXRxKSlcbitcdGlmICh3cV9oYXNfc2xlZXBlcihcdTAwMjZjb25uLVx1MDAzZWNfd2FpdHEpKVxuIFx0XHR3YWtlX3VwX2FsbChcdTAwMjZjb25uLVx1MDAzZWNfd2FpdHEpO1xuIH1cbiBcbkBAIC0zOTIsNyArMzkxLDkgQEAgdm9pZCByZHNfaWJfcmVjdl9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBpbnQgcHJlZmlsbCwgZ2ZwX3QgZ2ZwKVxuIFxuIFx0LyogdGhlIGdvYWwgaGVyZSBpcyB0byBqdXN0IG1ha2Ugc3VyZSB0aGF0IHNvbWVvbmUsIHNvbWV3aGVyZVxuIFx0ICogaXMgcG9zdGluZyBidWZmZXJzLiAgSWYgd2UgY2FuJ3QgZ2V0IHRoZSByZWZpbGwgbG9jayxcbi1cdCAqIGxldCB0aGVtIGRvIHRoZWlyIHRoaW5nXG4rXHQgKiBsZXQgdGhlbSBkbyB0aGVpciB0aGluZy4gIFRoZSBob2xkZXIgbWF5IGFsc28gYmVcbitcdCAqIHJkc19jb25uX3NodXRkb3duKCkgdGVhcmluZyB0aGUgcGF0aCBkb3duLCBpbiB3aGljaCBjYXNlXG4rXHQgKiB0aGVyZSBpcyBub3RoaW5nIHRvIHBvc3QuXG4gXHQgKi9cbiBcdGlmICghYWNxdWlyZV9yZWZpbGwoY29ubikpXG4gXHRcdHJldHVybjtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jXG5pbmRleCAxNWExYjk3ZjEzZTc2Li4xYWZhOTgxZTVjMDZkIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcbisrKyBiL25ldC9yZHMvc2VuZC5jXG5AQCAtMTE0LDggKzExNCwxMyBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX2luX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIFx0ICogaG90IHBhdGggYW5kIGZpbmRpbmcgd2FpdGVycyBpcyB2ZXJ5IHJhcmUuICBXZSBkb24ndCB3YW50IHRvIHdhbGtcbiBcdCAqIHRoZSBzeXN0ZW0td2lkZSBoYXNoZWQgd2FpdHF1ZXVlIGJ1Y2tldHMgaW4gdGhlIGZhc3QgcGF0aCBvbmx5IHRvXG4gXHQgKiBhbG1vc3QgbmV2ZXIgZmluZCB3YWl0ZXJzLlxuK1x0ICpcbitcdCAqIHdxX2hhc19zbGVlcGVyKCkgc3VwcGxpZXMgdGhlIGZ1bGwgYmFycmllciB0aGF0IG9yZGVycyB0aGUgd2FpdFxuK1x0ICogcXVldWUgcmVhZCBhZnRlciB0aGUgYml0IGNsZWFyOyBjbGVhcl9iaXRfdW5sb2NrKCkgYWxvbmUgaXMgb25seVxuK1x0ICogYSByZWxlYXNlIGFuZCB3b3VsZCBsZXQgdGhpcyBjaGVjayByZWFkIGEgc3RhbGUgZW1wdHkgcXVldWUsXG4rXHQgKiBsb3NpbmcgdGhlIHdha2UtdXAuXG4gXHQgKi9cbi1cdGlmICh3YWl0cXVldWVfYWN0aXZlKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKSlcbitcdGlmICh3cV9oYXNfc2xlZXBlcihcdTAwMjZjcC1cdTAwM2VjcF93YWl0cSkpXG4gXHRcdHdha2VfdXBfYWxsKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKTtcbiB9XG4gXG5AQCAtMjM5LDggKzI0NCwxMSBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRXUklURV9PTkNFKGNwLVx1MDAzZWNwX3NlbmRfZ2VuLCBzZW5kX2dlbik7XG4gXG4gXHQvKlxuLVx0ICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIHRlc3RzIFJEU19JTl9YTUlULFxuLVx0ICogd2UgZG8gdGhlIG9wcG9zaXRlIHRvIGF2b2lkIHJhY2VzLlxuK1x0ICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIGFjcXVpcmVzXG4rXHQgKiBSRFNfSU5fWE1JVDsgd2UgdGFrZSB0aGUgbG9jayBmaXJzdCBhbmQgdGhlbiBjaGVjayB0aGUgc3RhdGUuXG4rXHQgKiBPd25lcnNoaXAgaXMgZGVjaWRlZCBieSB0aGUgYXRvbWljIFJNVyBvbiB0aGUgY3BfZmxhZ3Mgd29yZDpcbitcdCAqIGlmIHRoZSB0ZWFyZG93biB3b24gdGhlIGJpdCB3ZSBiYWNrIG9mZiBoZXJlLCBhbmQgaWYgd2Ugd29uXG4rXHQgKiBpdCB0aGUgdGVhcmRvd24gd2FpdHMgdW50aWwgd2UgcmVsZWFzZSBpdC5cbiBcdCAqL1xuIFx0aWYgKCFyZHNfY29ubl9wYXRoX3VwKGNwKSkge1xuIFx0XHRyZWxlYXNlX2luX3htaXQoY3ApO1xuZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwLmMgYi9uZXQvcmRzL3RjcC5jXG5pbmRleCBiMjYzNjM0YWM3NTBkLi43NzRhNzFmODhkMzc1IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy90Y3AuY1xuKysrIGIvbmV0L3Jkcy90Y3AuY1xuQEAgLTExNSw0NiArMTE1LDkwIEBAIHZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIH1cbiBcbiAvKlxuLSAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgdGhlIHRvIHRoZSBuZXcgc29jayBhbmRcbi0gKiByZXR1cm5zIHRoZSBleGlzdGluZyB0Yy1cdTAwM2V0X3NvY2suXG4rICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSBzd2l0Y2hlcyBhIHBhdGggdG8gYSBuZXcgc29ja2V0IGFuZFxuKyAqIHJlbGVhc2VzIHRoZSBvbGQgb25lIGl0IGZpbmRzIGluIHRjLVx1MDAzZXRfc29jaywgcmVzb2x2aW5nIGEgZHVlbGxpbmdcbisgKiBTWU4uXG4gICpcbi0gKiBUaGUgb25seSBmdW5jdGlvbnMgdGhhdCBzZXQgdGMtXHUwMDNldF9zb2NrIGFyZSByZHNfdGNwX3NldF9jYWxsYmFja3Ncbi0gKiBhbmQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3MuICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXRcbi0gKiBpdCBpcyBzZXQuICBUaGUgYWJzZW5jZSBvZiBSRFNfQ09OTl9VUCBiaXQgcHJvdGVjdHMgdGhvc2UgcGF0aHNcbi0gKiBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24ndCBzZXQuXG4rICogdGMtXHUwMDNldF9zb2NrIGlzIHNldCBieSByZHNfdGNwX3NldF9jYWxsYmFja3MoKSBhbmQgY2xlYXJlZCBieVxuKyAqIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3MoKS4gIEZvdXIgcGF0aHMgd3JpdGUgaXQ6IHRoZSBhY3RpdmVcbisgKiBjb25uZWN0IGluIHJkc190Y3BfY29ubl9wYXRoX2Nvbm5lY3QoKSwgd2hpY2ggc2V0cyBpdCBhbmQgY2xlYXJzIGl0XG4rICogYWdhaW4gb24gZmFpbHVyZTsgdGhlIGFjY2VwdCBwYXRoIGluIHJkc190Y3BfYWNjZXB0X29uZSgpLCB3aGljaFxuKyAqIHNldHMgaXQgZm9yIGEgcGF0aCB3aXRoIG5vIHNvY2tldCB5ZXQ7IHRoZSB0ZWFyZG93biBpblxuKyAqIHJkc190Y3BfY29ubl9wYXRoX3NodXRkb3duKCksIHdoaWNoIGNsZWFycyBpdDsgYW5kIHRoZSBzd2FwIGRvbmVcbisgKiBoZXJlLCB3aGljaCBkb2VzIGJvdGguICBUaGUgY29ubmVjdCBhbmQgYWNjZXB0IHBhdGhzIGFyZSBzZXJpYWxpemVkXG4rICogYWdhaW5zdCBlYWNoIG90aGVyIGJ5IHRfY29ubl9wYXRoX2xvY2suICBTZW5kIGFuZCByZWNlaXZlIHRydXN0XG4rICogdGhhdCBpdCBpcyBzZXQ6IHRoZSBhYnNlbmNlIG9mIFJEU19DT05OX1VQIHByb3RlY3RzIHRob3NlIHBhdGhzXG4rICogZnJvbSBiZWluZyBjYWxsZWQgd2hpbGUgaXQgaXNuJ3QsIGFuZCB0aGUgc3dhcCBkb25lIGhlcmUgcnVucyB1bmRlclxuKyAqIFJEU19JTl9YTUlUIHNvIHRoYXQgaXQgY2Fubm90IGludGVybGVhdmUgd2l0aCBhIHNlbmRlciBhbHJlYWR5XG4rICogaW5zaWRlIHJkc19zZW5kX3htaXQoKS5cbiAgKi9cbiB2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gXHRcdFx0ICAgICBzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4ge1xuIFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjcC1cdTAwM2VjcF90cmFuc3BvcnRfZGF0YTtcbi1cdHN0cnVjdCBzb2NrZXQgKm9zb2NrID0gdGMtXHUwMDNldF9zb2NrO1xuLVxuLVx0aWYgKCFvc29jaylcbi1cdFx0Z290byBuZXdzb2NrO1xuK1x0c3RydWN0IHNvY2tldCAqb3NvY2s7XG4gXG4gXHQvKiBOZWVkIHRvIHJlc29sdmUgYSBkdWVsbGluZyBTWU4gYmV0d2VlbiBwZWVycy5cbiBcdCAqIFdlIGhhdmUgYW4gb3V0c3RhbmRpbmcgU1lOIHRvIHRoaXMgcGVlciwgd2hpY2ggbWF5XG4gXHQgKiBwb3RlbnRpYWxseSBoYXZlIHRyYW5zaXRpb25lZCB0byB0aGUgUkRTX0NPTk5fVVAgc3RhdGUsXG4gXHQgKiBzbyB3ZSBtdXN0IHF1aWVzY2UgYW55IHNlbmQgdGhyZWFkcyBiZWZvcmUgcmVzZXR0aW5nXG4tXHQgKiBjcF90cmFuc3BvcnRfZGF0YS4gV2UgcXVpZXNjZSB0aGVzZSB0aHJlYWRzIGJ5IHNldHRpbmdcbi1cdCAqIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFJEU19DT05OX1VQLCBhbmQgdGhlblxuLVx0ICogd2FpdGluZyBmb3IgYW55IGV4aXN0aW5nIHRocmVhZHMgaW4gcmRzX3NlbmRfeG1pdCB0b1xuLVx0ICogY29tcGxldGUgcmVsZWFzZV9pbl94bWl0KCkuIChTdWJzZXF1ZW50IHRocmVhZHMgZW50ZXJpbmdcbi1cdCAqIHJkc19zZW5kX3htaXQoKSB3aWxsIGJhaWwgb24gIXJkc19jb25uX3VwKCkuXG4rXHQgKiBjcF90cmFuc3BvcnRfZGF0YS4gIFNldHRpbmcgY3Bfc3RhdGUgdG8gc29tZXRoaW5nIG90aGVyXG4rXHQgKiB0aGFuIFJEU19DT05OX1VQIHN0b3BzIG5ldyBzZW5kZXJzLCBhbmQgb3duaW5nIFJEU19JTl9YTUlUXG4rXHQgKiBleGNsdWRlcyBhbnkgdGhyZWFkIGFscmVhZHkgaW5zaWRlIHJkc19zZW5kX3htaXQoKSAtIG9yIGFcbitcdCAqIHRlYXJkb3duIGluIHJkc19jb25uX3NodXRkb3duKCksIHdoaWNoIGhvbGRzIHRoZSBzYW1lIGxvY2tcbitcdCAqIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zcG9ydCBzaHV0ZG93biAtIGZvciB0aGUgd2hvbGVcbitcdCAqIHNvY2tldCBzd2FwIGFuZCB0aGUgcmRzX3NlbmRfcGF0aF9yZXNldCgpIGJlbG93LlxuIFx0ICpcbi1cdCAqIEhvd2V2ZXIgYW4gaW5jb21pbmcgc3luLWFjayBhdCB0aGlzIHBvaW50IHdvdWxkIGVuZCB1cFxuLVx0ICogbWFya2luZyB0aGUgY29ubiBhcyBSRFNfQ09OTl9VUCwgYW5kIHdvdWxkIGFnYWluIHBlcm1pdFxuLVx0ICogcmRzX3NlbmRfeG1pKCkgdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkXG4tXHQgKiBzeW5jaHJvbml6ZSBvbiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdFxuLVx0ICogZG8gdGhhdDogd2FpdGluZyBvbiAhUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5XG4tXHQgKiBlbmQgdXAgZGVhZGxvY2tpbmcgd2l0aCB0Y3Bfc2VuZG1zZygpLCBhbmQgdGhlIFJEU19JTl9YTUlUXG4tXHQgKiB3b3VsZCBub3QgZ2V0IHNldC4gQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvXG4tXHQgKiBSRFNfQ09OTl9SRVNFVFRUSU5HLCB0byBlbnN1cmUgdGhhdCByZHNfdGNwX3N0YXRlX2NoYW5nZVxuLVx0ICogY2Fubm90IG1hcmsgcmRzX2Nvbm5fcGF0aF91cCgpIGluIHRoZSB3aW5kb3cgYmVmb3JlIGxvY2tfc29jaygpXG4rXHQgKiBBbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwIG1hcmtpbmcgdGhlXG4rXHQgKiBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0IHJkc19zZW5kX3htaXQoKVxuK1x0ICogdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkIHN5bmNocm9uaXplIG9uXG4rXHQgKiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdCBkbyB0aGF0OiBhY3F1aXJpbmdcbitcdCAqIFJEU19JTl9YTUlUIGFmdGVyIGxvY2tfc29jaygpIG1heSBlbmQgdXAgZGVhZGxvY2tpbmcgd2l0aFxuK1x0ICogdGNwX3NlbmRtc2coKSwgd2hpY2ggdGFrZXMgdGhlIHNvY2tldCBsb2NrIHdoaWxlIGhvbGRpbmdcbitcdCAqIFJEU19JTl9YTUlULiAgQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvXG4rXHQgKiBSRFNfQ09OTl9SRVNFVFRJTkcsIHRvIGVuc3VyZSB0aGF0IHJkc190Y3Bfc3RhdGVfY2hhbmdlXG4rXHQgKiBjYW5ub3QgbWFyayByZHNfY29ubl9wYXRoX3VwKCkgaW4gdGhlIHdpbmRvdyBiZWZvcmVcbitcdCAqIGxvY2tfc29jaygpLlxuK1x0ICpcbitcdCAqIE9ubHkgbWFrZSB0aGF0IHRyYW5zaXRpb24gaWYgdGhlIHBhdGggaXMgc3RpbGwgY29ubmVjdGluZ1xuK1x0ICogKG9yIGFscmVhZHkgcmVzZXR0aW5nIGZyb20gYW4gZWFybGllciBkdWVsKS4gIEEgcGF0aCBpbiBhbnlcbitcdCAqIG90aGVyIHN0YXRlIC0gdHlwaWNhbGx5IFJEU19DT05OX0RJU0NPTk5FQ1RJTkcgb3JcbitcdCAqIFJEU19DT05OX0VSUk9SIHdpdGggYSBzaHV0ZG93biBpbiBmbGlnaHQgLSBpcyBkcm9wcGVkXG4rXHQgKiBpbnN0ZWFkLiAgVGhhdCBzdGlsbCByZXBsYWNlcyBpdHMgc3RhdGUsIHdpdGggUkRTX0NPTk5fRVJST1IsXG4rXHQgKiBhbmQsIHVubGVzcyBhIHBlbmRpbmcgZGVzdHJveSBpcyBhYm91dCB0byByZWFwIHRoZSB3aG9sZVxuK1x0ICogY29ubmVjdGlvbiBhbnl3YXksIHF1ZXVlcyBvbmUgbW9yZSBzaHV0ZG93biBwYXNzLiAgQSBzaHV0ZG93blxuK1x0ICogYWxyZWFkeSBpbiBmbGlnaHQgbGVhdmVzIHRoYXQgUkRTX0NPTk5fRVJST1IgYWxvbmUgd2hlbiBpdFxuK1x0ICogZmluaXNoZXM7IHRoZSBxdWV1ZWQgcGFzcyB0aGVuIGNvbXBsZXRlcyB0aGUgdHJhbnNpdGlvbiB0b1xuK1x0ICogUkRTX0NPTk5fRE9XTiBhbmQgdGVhcnMgZG93biBhbnl0aGluZyB0aGF0IGF0dGFjaGVkIHRvIHRoZVxuK1x0ICogcGF0aCBpbiB0aGUgbWVhbnRpbWUuXG4rXHQgKi9cbitcdGlmICghcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9DT05ORUNUSU5HLFxuK1x0XHRcdFx0ICAgICAgUkRTX0NPTk5fUkVTRVRUSU5HKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9SRVNFVFRJTkcsXG4rXHRcdFx0XHQgICAgICBSRFNfQ09OTl9SRVNFVFRJTkcpKVxuK1x0XHRyZHNfY29ubl9wYXRoX2Ryb3AoY3AsIDApO1xuK1x0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbitcdFx0ICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbitcbitcdC8qIFJlYWQgdF9zb2NrIG9ubHkgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlULCBuZXZlciBiZWZvcmUgdGhlXG4rXHQgKiB3YWl0OiB0aGUgdGVhcmRvd24gaW4gcmRzX2Nvbm5fc2h1dGRvd24oKSByZWxlYXNlcyB0aGUgb2xkXG4rXHQgKiBzb2NrZXQgYW5kIGNsZWFycyB0X3NvY2ssIHNvIGEgcG9pbnRlciBzYW1wbGVkIGVhcmxpZXIgY2FuXG4rXHQgKiBiZSBzdGFsZSBieSB0aGUgdGltZSB3ZSB3YWtlIHVwLiAgVGhlIHRlYXJkb3duIGhvbGRzIHRoZVxuK1x0ICogc2FtZSBsb2NrIHdoaWxlIGl0IGRvZXMgc28sIHNvIHdoYXQgd2UgcmVhZCBoZXJlIGNhbm5vdFxuK1x0ICogY2hhbmdlIHVuZGVyIHVzIHVudGlsIHdlIHJlbGVhc2UgaXQuXG4rXHQgKi9cbitcdG9zb2NrID0gdGMtXHUwMDNldF9zb2NrO1xuK1x0aWYgKCFvc29jaylcbitcdFx0Z290byBuZXdzb2NrO1xuK1xuK1x0LyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jay5cbitcdCAqXG4rXHQgKiBUaGUgc3luYyBjYW5jZWxzIHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVCByZWx5IG9uIGNwX3dxXG4rXHQgKiBiZWluZyBvcmRlcmVkOiBhIHRlYXJkb3duIGJsb2NrZWQgb24gdGhlIGJpdCBvY2N1cGllc1xuK1x0ICogY3Bfd3EncyBvbmx5IGV4ZWN1dGlvbiBzbG90LCBzbyBjcF9zZW5kX3cgYW5kIGNwX3JlY3ZfdyBhcmVcbitcdCAqIHBlbmRpbmcgYXQgbW9zdCBhbmQgdGhlIGNhbmNlbHMgbmV2ZXIgZmx1c2guICBOb3RoaW5nIGhlcmVcbitcdCAqIG1heSBmbHVzaCBvciB3YWl0IG9uIGNwX3dxIGl0c2VsZi5cbiBcdCAqL1xuLVx0YXRvbWljX3NldChcdTAwMjZjcC1cdTAwM2VjcF9zdGF0ZSwgUkRTX0NPTk5fUkVTRVRUSU5HKTtcbi1cdHdhaXRfZXZlbnQoY3AtXHUwMDNlY3Bfd2FpdHEsICF0ZXN0X2JpdChSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbi1cdC8qIHJlc2V0IHJlY2VpdmUgc2lkZSBzdGF0ZSBmb3IgcmRzX3RjcF9kYXRhX3JlY3YoKSBmb3Igb3NvY2sgICovXG4gXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2Y3AtXHUwMDNlY3Bfc2VuZF93KTtcbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZjcC1cdTAwM2VjcF9yZWN2X3cpO1xuIFx0bG9ja19zb2NrKG9zb2NrLVx1MDAzZXNrKTtcbkBAIC0xNzIsNiArMjE2LDkgQEAgdm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0bG9ja19zb2NrKHNvY2stXHUwMDNlc2spO1xuIFx0cmRzX3RjcF9zZXRfY2FsbGJhY2tzKHNvY2ssIGNwKTtcbiBcdHJlbGVhc2Vfc29jayhzb2NrLVx1MDAzZXNrKTtcbitcbitcdGNsZWFyX2JpdF91bmxvY2soUkRTX0lOX1hNSVQsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbitcdHdha2VfdXBfYWxsKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKTtcbiB9XG4gXG4gLyogQWRkIHRjIHRvIHJkc190Y3BfdGNfbGlzdCBhbmQgc2V0IHRjLVx1MDAzZXRfc29jay4gU2VlIGNvbW1lbnRzXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xuaW5kZXggYTNkYjliMDU3MDg0ZC4uMTNmYTYwYzE5ODViYiAxMDA2NDRcbi0tLSBhL25ldC9yZHMvdGNwX2xpc3Rlbi5jXG4rKysgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xuQEAgLTI5NSw3ICsyOTUsMTEgQEAgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bilcbiBcdGlmIChyc190Y3AtXHUwMDNldF9zb2NrKSB7XG4gXHRcdC8qIER1ZWxsaW5nIFNZTiBoYXMgYmVlbiBoYW5kbGVkIGluIHJkc190Y3BfYWNjZXB0X29uZSgpICovXG4gXHRcdHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKG5ld19zb2NrLCBjcCk7XG4tXHRcdC8qIHJkc19jb25uZWN0X3BhdGhfY29tcGxldGUoKSBtYXJrcyBSRFNfQ09OTl9VUCAqL1xuK1x0XHQvKiByZHNfY29ubmVjdF9wYXRoX2NvbXBsZXRlKCkgbWFya3MgUkRTX0NPTk5fVVAsIG9yLFxuK1x0XHQgKiBpZiBhIGNvbmN1cnJlbnQgc2h1dGRvd24gd29uIHRoZSBkdWVsLCBkcm9wcyB0aGVcbitcdFx0ICogcGF0aCBhZ2FpbiBhbmQgdGhlIHBhc3MgdGhhdCBkcm9wIHF1ZXVlcyByZWFwcyB0aGVcbitcdFx0ICogc29ja2V0IGluc3RhbGxlZCBhYm92ZS5cbitcdFx0ICovXG4gXHRcdHJkc19jb25uZWN0X3BhdGhfY29tcGxldGUoY3AsIFJEU19DT05OX1JFU0VUVElORyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRyZHNfdGNwX3NldF9jYWxsYmFja3MobmV3X3NvY2ssIGNwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjQ4LjE4MjQ2MDA2MloiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDgyNzAzMDgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogUkRTIENvbm5lY3Rpb24gTGlmZWN5Y2xlIFN5bmNocm9uaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIHByaW1hcmlseSBhIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3kgZml4IHdpdGhpbiB0aGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBjb25uZWN0aW9uIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBJJ20gc2VlaW5nIGNoYW5nZXMgYWNyb3NzIHNldmVyYWwgZmlsZXM6IGBjb25uZWN0aW9uLmNgLCBgaWJfcmVjdi5jYCwgYHNlbmQuY2AsIGB0Y3AuY2AsIGFuZCBgdGNwX2xpc3Rlbi5jYC4gTXkgZXhwZXJ0IGV5ZSBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgbW9kaWZpY2F0aW9ucyBpbnZvbHZpbmcgYXRvbWljIG9wZXJhdGlvbnMsIGJpdGxvY2tzLCBhbmQgd2FpdHF1ZXVlcywgd2hpY2ggc2NyZWFtIFwicmFjZSBjb25kaXRpb24gZml4LlwiXG5cblNwZWNpZmljYWxseSwgbGV0J3MgYnJlYWsgaXQgZG93bjpcblxuKiAgIGBjb25uZWN0aW9uLmNgOiBUaGUgcGF0Y2ggZWxlZ2FudGx5IHRyYW5zaXRpb25zIGZyb20gc2ltcGxlIGZsYWcgY2xlYXJzIHRvIHVzaW5nIGBjbGVhcl9iaXRgIHdpdGggYGNsZWFyX2JpdF91bmxvY2tgIHdpdGhpbiB0aGUgYHJkc19jb25uX3BhdGhfcmVzZXQoKWAgYW5kIGByZHNfY29ubl9zaHV0ZG93bigpYCBmdW5jdGlvbnMuIFRoaXMgaW5kaWNhdGVzIGEgY29uc2Npb3VzIGVmZm9ydCB0byBhdm9pZCBjbG9iYmVyaW5nIGNvbmN1cnJlbnQgYXRvbWljIG9wZXJhdGlvbnMgb24gdGhlIGBjcF9mbGFnc2AgZmllbGQsIGNydWNpYWwgaW4gYW55IGNvbmN1cnJlbnQgc3lzdGVtLiBUaGUgdXNlIG9mIGB0ZXN0X2FuZF9zZXRfYml0X2xvY2tgIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgZHVyaW5nIHNodXRkb3duIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSBkaXNjb25uZWN0aW9uIHByb2Nlc3MuIFRoZSBzdGF0ZSB0cmFuc2l0aW9uIGFuZCBoYW5kbGluZyBvZiBkZWxheWVkIHdvcmsgc2VlbSBsaWtlIGEgdHlwaWNhbCBidWcgZml4IGR1cmluZyBjb25uZWN0aW9uIHRlYXJkb3duLlxuKiAgIGBpYl9yZWN2LmNgIGFuZCBgc2VuZC5jYDogVGhlIHJlcGxhY2VtZW50IG9mIGBjbGVhcl9iaXRgICsgYHNtcF9tYl9fYWZ0ZXJfYXRvbWljKClgIGFuZCBgd2FpdHF1ZXVlX2FjdGl2ZSgpYCB3aXRoIGBjbGVhcl9iaXRfdW5sb2NrKClgIGFuZCBgd3FfaGFzX3NsZWVwZXIoKWAgaW4gYHJlbGVhc2VfcmVmaWxsKClgIGFuZCBgcmVsZWFzZV9pbl94bWl0KClgIHJlc3BlY3RpdmVseSBpcyBhIGNsYXNzaWMgb3B0aW1pemF0aW9uIGFuZCBzaW1wbGlmaWNhdGlvbiwgd2hpbGUgbWFpbnRhaW5pbmcgc3luY2hyb25pemF0aW9uIGNvcnJlY3RuZXNzLCB0byBjaGVjayBpZiBhIHRhc2sgaXMgd2FpdGluZyBvbiB0aGF0IHF1ZXVlLlxuKiAgIGB0Y3AuY2A6IFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHRlc3RfYW5kX3NldF9iaXRfbG9ja2AgaW4gYHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKClgIGJlZm9yZSBhY2Nlc3NpbmcgYHRjLVx1MDAzZXRfc29ja2Agc3VnZ2VzdHMgYSBjcml0aWNhbCBmaXggZm9yIHNvY2tldCBzd2FwcGluZyBhZ2FpbnN0IHNlbmRlcnMgYW5kIHRlYXJkb3duIGluIGEgbXVsdGktdGhyZWFkZWQgb3IgaW50ZXJydXB0LWRyaXZlbiBjb250ZXh0LiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBzb2NrZXQgc3RhdGUgaXMgdmFsaWQgd2hlbiBiZWluZyB1c2VkLCBhbmQgYXZvaWRzIG90aGVyIHJhY2VzIG9uIGl0LlxuKiAgIGB0Y3BfbGlzdGVuLmNgOiBUaGUgY29tbWVudCB1cGRhdGUgaXMgaW5zaWduaWZpY2FudC5cblxuTm93LCBsZXQncyBtZXRob2RpY2FsbHkgYWRkcmVzcyB0aGUgcG90ZW50aWFsIHJpc2tzLiBNeSBwcmltYXJ5IGZvY3VzIGlzIGFsd2F5cyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgKEtNU0FOKSBvciBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZXMgKEtBU0FOLCBMT0NLREVQLCBldGMuKS5cblxuMS4gICoqVXNlciBTcGFjZSBJbnRlcmFjdGlvbjoqKiBUaGlzIHBhdGNoICpkb2Vzbid0KiB0b3VjaCBhbnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHZpYSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgb3Igc29ja2V0IG9wdGlvbnMuIFNvLCBubyBjb25jZXJucyB0aGVyZS5cbjIuICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzOioqIFRoZSBwYXRjaCBpc24ndCBpbnRyb2R1Y2luZyBuZXcgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGRlcGVuZGVudCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gRXZlcnl0aGluZyBJIHNlZSBpcyB3b3JraW5nIHdpdGggYXRvbWljIGZsYWdzIG9yIHByZS1leGlzdGluZyBmaWVsZHMgd2l0aGluIGByZHNfY29ubmVjdGlvbmAsIGByZHNfY29ubl9wYXRoYCwgb3IgYHJkc190Y3BfY29ubmVjdGlvbmAgb2JqZWN0cyB0aGF0IGFyZSBhc3N1bWVkIHRvIGJlIHByb3Blcmx5IGluaXRpYWxpemVkLlxuMy4gICoqRGF0YSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb246KiogSSdtIG5vdCBzZWVpbmcgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBvciBhbnkgY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWQgdG8gc3Vic2VxdWVudCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cbjQuICAqKkJvdW5kcy9MZW5ndGggQ2hlY2tzOioqIFRoZSBwYXRjaCBkb2Vzbid0IG1vZGlmeSBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgcG90ZW50aWFsbHkgaW50cm9kdWNlIGJ1ZmZlciBvdmVycnVucy5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBwcmltYXJpbHkgYWRkcmVzc2VzICpjb25jdXJyZW5jeSBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlcyosIHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIG9yIHBvdGVudGlhbCBzdGF0ZSBtYWNoaW5lIGRlc3luY2hyb25pemF0aW9uLiBUaGVzZSBhcmUgdGhlIGtpbmRzIG9mIGlzc3VlcyBkZXRlY3RlZCBieSB0b29scyBsaWtlIEtBU0FOLCBMT0NLREVQLCBhbmQgcG90ZW50aWFsbHkgZnVuY3Rpb25hbCB0ZXN0aW5nLiBJdCBpcyAqbm90KiByZWxhdGVkIHRvIEtNU0FOIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBXZSdyZSBsb29raW5nIGF0IHByb3RlY3RpbmcgYWdhaW5zdCBkYXRhIHJhY2VzIG9uIHNoYXJlZCBzdGF0ZS5cblxuVGhlIEtNU0FOIGRvY3VtZW50YXRpb24gaXMgY2xlYXI6IFwiVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cIiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMgYW5kIG15IGFuYWx5c2lzLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLiBJJ20gY29tZm9ydGFibGUgaW4gc2F5aW5nIHRoaXMgcGF0Y2ggaXMgYSBnb29kIHRoaW5nOyB0aGUgc3luY2hyb25pemF0aW9uIGZpeGVzIGFyZSBjbGVhcmx5IGJlbmVmaWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NzQsIk91dHB1dFRva2VucyI6MjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjU5LjAwOTQ5NDAxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVzb2x2ZXMgY29uY3VycmVuY3ksIHJhY2UgY29uZGl0aW9uLCBhbmQgc3RhdGUtbWFjaGluZSBzeW5jaHJvbml6YXRpb24gYnVncyBpbiB0aGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBzdWJzeXN0ZW0gZHVyaW5nIGNvbm5lY3Rpb24gdGVhcmRvd24sIHJlc2V0LCBhbmQgZHVlbGxpbmcgU1lOIHJlc29sdXRpb24gKHNwZWNpZmljYWxseSBsb2NraW5nIGFuZCBiaXQtbWFuaXB1bGF0aW9uIG9mIFJEU19JTl9YTUlULCBSRFNfUkVDVl9SRUZJTEwsIGFuZCBSRFNfQ09OTl8qIHN0YXRlIHRyYW5zaXRpb25zKS5cXG5cXG4tIE5vIG5ldyBoZWFwL3N0YWNrIGFsbG9jYXRpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYWRkZWQgb3IgbW9kaWZpZWQuXFxuLSBObyBrZXJuZWwtdG8tdXNlciBjb3B5IG9wZXJhdGlvbnMgKGUuZy4sIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmssIGlvY3RsLCBnZXRzb2Nrb3B0KSBvciB1c2VyLWZhY2luZyBzdHJ1Y3RzIGFyZSB0b3VjaGVkLlxcbi0gTm8gYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja3MsIG9yIHBheWxvYWQgcGFyc2luZyByb3V0aW5lcyBhcmUgYWx0ZXJlZCB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuLSBBbnkgY29uY3VycmVuY3kgYnVncywgdXNlLWFmdGVyLWZyZWUsIGRlYWRsb2Nrcywgb3IgbG9jayBvcmRlcmluZyBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIHRoZXNlIGNoYW5nZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMsIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlc29sdmVzIGNvbmN1cnJlbmN5LCByYWNlIGNvbmRpdGlvbiwgYW5kIHN0YXRlLW1hY2hpbmUgc3luY2hyb25pemF0aW9uIGJ1Z3MgaW4gdGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgc3Vic3lzdGVtIGR1cmluZyBjb25uZWN0aW9uIHRlYXJkb3duLCByZXNldCwgYW5kIGR1ZWxsaW5nIFNZTiByZXNvbHV0aW9uIChzcGVjaWZpY2FsbHkgbG9ja2luZyBhbmQgYml0LW1hbmlwdWxhdGlvbiBvZiBSRFNfSU5fWE1JVCwgUkRTX1JFQ1ZfUkVGSUxMLCBhbmQgUkRTX0NPTk5fKiBzdGF0ZSB0cmFuc2l0aW9ucykuXFxuXFxuLSBObyBuZXcgaGVhcC9zdGFjayBhbGxvY2F0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGFkZGVkIG9yIG1vZGlmaWVkLlxcbi0gTm8ga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zIChlLmcuLCBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rLCBpb2N0bCwgZ2V0c29ja29wdCkgb3IgdXNlci1mYWNpbmcgc3RydWN0cyBhcmUgdG91Y2hlZC5cXG4tIE5vIGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tzLCBvciBwYXlsb2FkIHBhcnNpbmcgcm91dGluZXMgYXJlIGFsdGVyZWQgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Llxcbi0gQW55IGNvbmN1cnJlbmN5IGJ1Z3MsIHVzZS1hZnRlci1mcmVlLCBkZWFkbG9ja3MsIG9yIGxvY2sgb3JkZXJpbmcgaXNzdWVzIHRoYXQgY291bGQgYXJpc2UgZnJvbSB0aGVzZSBjaGFuZ2VzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ll6n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-28 22:45:50 +0000 UTC FinishedAt: 2026-08-28 22:48:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4e15e89faac9f308baeb01f46c13a051814d2449", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_TCP", "RDS_RDMA", "INFINIBAND", "INFINIBAND_ADDR_TRANS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "4e15e89faac9f308baeb01f46c13a051814d2449", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "RDS", "RDS_TCP", "RDS_RDMA", "INFINIBAND", "INFINIBAND_ADDR_TRANS" ], "series_id": "f00fbdba-93f0-4a7f-817c-8a6edbed661c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rds_conn_shutdown", "rds_send_xmit", "rds_tcp_reset_callbacks", "rds_tcp_accept_one", "rds_ib_recv_refill" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDssCiAgICAmIzM0O1JEU19SRE1BJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORF9BRERSX1RSQU5TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmRzX2Nvbm5fc2h1dGRvd24mIzM0OywKICAgICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX2FjY2VwdF9vbmUmIzM0OywKICAgICYjMzQ7cmRzX2liX3JlY3ZfcmVmaWxsJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlc29sdmVzIGNvbmN1cnJlbmN5LCByYWNlIGNvbmRpdGlvbiwgYW5kIHN0YXRlLW1hY2hpbmUgc3luY2hyb25pemF0aW9uIGJ1Z3MgaW4gdGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgc3Vic3lzdGVtIGR1cmluZyBjb25uZWN0aW9uIHRlYXJkb3duLCByZXNldCwgYW5kIGR1ZWxsaW5nIFNZTiByZXNvbHV0aW9uIChzcGVjaWZpY2FsbHkgbG9ja2luZyBhbmQgYml0LW1hbmlwdWxhdGlvbiBvZiBSRFNfSU5fWE1JVCwgUkRTX1JFQ1ZfUkVGSUxMLCBhbmQgUkRTX0NPTk5fKiBzdGF0ZSB0cmFuc2l0aW9ucykuXG5cbi0gTm8gbmV3IGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhZGRlZCBvciBtb2RpZmllZC5cbi0gTm8ga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zIChlLmcuLCBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rLCBpb2N0bCwgZ2V0c29ja29wdCkgb3IgdXNlci1mYWNpbmcgc3RydWN0cyBhcmUgdG91Y2hlZC5cbi0gTm8gYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja3MsIG9yIHBheWxvYWQgcGFyc2luZyByb3V0aW5lcyBhcmUgYWx0ZXJlZCB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4tIEFueSBjb25jdXJyZW5jeSBidWdzLCB1c2UtYWZ0ZXItZnJlZSwgZGVhZGxvY2tzLCBvciBsb2NrIG9yZGVyaW5nIGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gdGhlc2UgY2hhbmdlcyBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcywgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBtZWNoYW5pc21zIChzcGVjaWZpY2FsbHkgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBiaXRsb2Nrcywgd2FpdHF1ZXVlIGJhcnJpZXJzLCBhbmQgc3RhdGUgdHJhbnNpdGlvbnMpIGluIFJEUyBjb25uZWN0aW9uIHRlYXJkb3duLCBzZW5kLCByZWNlaXZlLXJlZmlsbCwgYW5kIFRDUCBzb2NrZXQgc3dhcHBpbmcgcGF0aHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBuZXR3b3JrIHNvY2tldCBvcGVyYXRpb25zIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRmZTM3Njc5MGI3YzlkY2YzZTZmNTMxZTU2NWYyMzc3ZmNlZmIzYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAyMjo0NzowMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5pbmRleCA3YzhhYjhlOTczZTFiLi5iNmM0YmViNTBlYWYwIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9jb25uZWN0aW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5AQCAtMTA2LDEwICYjNDM7MTA2LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXG4gfVxuIFxuIC8qXG4tICogVGhpcyBpcyBjYWxsZWQgYnkgdHJhbnNwb3J0cyBhcyB0aGV5JiMzOTtyZSBicmluZ2luZyBkb3duIGEgY29ubmVjdGlvbi5cbi0gKiBJdCBjbGVhcnMgcGFydGlhbCBtZXNzYWdlIHN0YXRlIHNvIHRoYXQgdGhlIHRyYW5zcG9ydCBjYW4gc3RhcnQgc2VuZGluZ1xuLSAqIGFuZCByZWNlaXZpbmcgb3ZlciB0aGlzIGNvbm5lY3Rpb24gYWdhaW4gaW4gdGhlIGZ1dHVyZS4gIEl0IGlzIHVwIHRvXG4tICogdGhlIHRyYW5zcG9ydCB0byBoYXZlIHNlcmlhbGl6ZWQgdGhpcyBjYWxsIHdpdGggaXRzIHNlbmQgYW5kIHJlY3YuXG4mIzQzOyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHJkc19jb25uX3NodXRkb3duKCkgb25jZSB0aGUgdHJhbnNwb3J0IGhhcyBicm91Z2h0XG4mIzQzOyAqIGEgcGF0aCBkb3duLiAgSXQgY2xlYXJzIHBhcnRpYWwgbWVzc2FnZSBzdGF0ZSBzbyB0aGF0IHRoZSB0cmFuc3BvcnRcbiYjNDM7ICogY2FuIHN0YXJ0IHNlbmRpbmcgYW5kIHJlY2VpdmluZyBvdmVyIHRoaXMgcGF0aCBhZ2FpbiBpbiB0aGUgZnV0dXJlLlxuJiM0MzsgKiBUaGUgY2FsbGVyIG93bnMgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBhY3Jvc3MgdGhpcyBjYWxsLFxuJiM0MzsgKiB3aGljaCBpcyB3aGF0IHNlcmlhbGl6ZXMgaXQgYWdhaW5zdCB0aGUgc2VuZCBhbmQgcmVjZWl2ZS1yZWZpbGxcbiYjNDM7ICogcGF0aHMuXG4gICovXG4gc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4ge1xuQEAgLTEyMCw3ICYjNDM7MTIyLDE2IEBAIHN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIFxuIFx0cmRzX3N0YXRzX2luYyhzX2Nvbm5fcmVzZXQpO1xuIFx0cmRzX3NlbmRfcGF0aF9yZXNldChjcCk7XG4tXHRjcC1cdTAwM2VjcF9mbGFncyA9IDA7XG4mIzQzO1xuJiM0MztcdC8qIENsZWFyIHRoZSBiaXRzIHRoZSByZXNldCBpcyByZXNwb25zaWJsZSBmb3IgaW5kaXZpZHVhbGx5OiBhXG4mIzQzO1x0ICogYmxhbmtldCBjcF9mbGFncyA9IDAgaXMgYSBwbGFpbiBzdG9yZSB0aGF0IGNhbiBjbG9iYmVyIGFcbiYjNDM7XHQgKiBjb25jdXJyZW50IGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBvbiB0aGUgc2FtZSB3b3JkLlxuJiM0MztcdCAqIFJEU19JTl9YTUlUIGFuZCBSRFNfUkVDVl9SRUZJTEwgYXJlIGhlbGQgYXMgbG9ja3MgYnkgdGhlXG4mIzQzO1x0ICogY2FsbGVyLCByZHNfY29ubl9zaHV0ZG93bigpLCB3aGljaCByZWxlYXNlcyB0aGVtIG9uY2UgdGhlXG4mIzQzO1x0ICogdGVhcmRvd24gaXMgY29tcGxldGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y2xlYXJfYml0KFJEU19MTF9TRU5EX0ZVTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbiYjNDM7XHRjbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4gXG4gXHQvKiBEbyBub3QgY2xlYXIgbmV4dF9yeF9zZXEgaGVyZSwgZWxzZSB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2hcbiBcdCAqIHJldHJhbnNtaXR0ZWQgcGFja2V0cyBmcm9tIG5ldyBwYWNrZXRzLCBhbmQgd2lsbCBoYW5kIGFsbFxuQEAgLTQwNiwyOCAmIzQzOzQxNyw3MCBAQCB2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFx0fVxuIFx0XHRtdXRleF91bmxvY2soXHUwMDI2Y3AtXHUwMDNlY3BfY21fbG9jayk7XG4gXG4mIzQzO1x0XHQvKiBRdWllc2NlIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZS1yZWZpbGwgcGF0aHMgYnlcbiYjNDM7XHRcdCAqIGFjcXVpcmluZyB0aGVpciBiaXQgbG9ja3MsIG5vdCBtZXJlbHkgd2FpdGluZyBmb3JcbiYjNDM7XHRcdCAqIHRoZW0gdG8gYmUgcmVsZWFzZWQ6IHdpdGggYSBwbGFpbiB3YWl0LCBlaXRoZXIgcGF0aFxuJiM0MztcdFx0ICogY2FuIHJlLXRha2UgaXRzIGxvY2sgdGhlIGluc3RhbnQgYWZ0ZXIgd2Ugc2FtcGxlIGl0XG4mIzQzO1x0XHQgKiBjbGVhciBhbmQgdGhlbiBydW4gY29uY3VycmVudGx5IHdpdGggdGhlIHRyYW5zcG9ydFxuJiM0MztcdFx0ICogc2h1dGRvd24gYW5kIHRoZSBwYXRoIHJlc2V0IGJlbG93LiAgSG9sZGluZyBib3RoXG4mIzQzO1x0XHQgKiBsb2NrcyBhY3Jvc3MgdGhlIHRlYXJkb3duIG1ha2VzIHRoYXQgc3RydWN0dXJhbGx5XG4mIzQzO1x0XHQgKiBpbXBvc3NpYmxlLlxuJiM0MztcdFx0ICovXG4gXHRcdHdhaXRfZXZlbnQoY3AtXHUwMDNlY3Bfd2FpdHEsXG4tXHRcdFx0ICAgIXRlc3RfYml0KFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuJiM0MztcdFx0XHQgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuIFx0XHR3YWl0X2V2ZW50KGNwLVx1MDAzZWNwX3dhaXRxLFxuLVx0XHRcdCAgICF0ZXN0X2JpdChSRFNfUkVDVl9SRUZJTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSk7XG4mIzQzO1x0XHRcdCAgICF0ZXN0X2FuZF9zZXRfYml0KFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiBcbiBcdFx0Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZWNvbm5fcGF0aF9zaHV0ZG93bihjcCk7XG4gXHRcdHJkc19jb25uX3BhdGhfcmVzZXQoY3ApO1xuIFxuJiM0MztcdFx0LyogUmVsZWFzZSB0aGUgdHdvIGxvY2tzIGFuZCB3YWtlIGFueSB3YWl0ZXIgKGUuZy5cbiYjNDM7XHRcdCAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkpIHRoYXQgYmxvY2tlZCBvbiB0aGVtIHdoaWxlXG4mIzQzO1x0XHQgKiB3ZSBoZWxkIHRoZW0uICBUaGUgdW5sb2NrIG9yZGVycyB0aGUgdHJhbnNwb3J0JiMzOTtzIHJpbmdcbiYjNDM7XHRcdCAqIHJlLWluaXRpYWxpemF0aW9uIGFuZCB0aGUgcGF0aCByZXNldCBhYm92ZSBiZWZvcmVcbiYjNDM7XHRcdCAqIGVpdGhlciBiaXQgaXMgc2VlbiBjbGVhci4gIHJkc19jb25uX3BhdGhfcmVzZXQoKSBsZWF2ZXNcbiYjNDM7XHRcdCAqIGJvdGggYml0cyBhbG9uZTogb3duZXJzaGlwIGVuZHMgaGVyZSwgbm90IGluc2lkZSB0aGVcbiYjNDM7XHRcdCAqIHJlc2V0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4mIzQzO1x0XHRjbGVhcl9iaXRfdW5sb2NrKFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpO1xuJiM0MztcdFx0d2FrZV91cF9hbGwoXHUwMDI2Y3AtXHUwMDNlY3Bfd2FpdHEpO1xuJiM0MztcbiBcdFx0aWYgKCFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX0RJU0NPTk5FQ1RJTkcsXG4tXHRcdFx0XHRcdCAgICAgIFJEU19DT05OX0RPV04pIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRVJST1IsXG4gXHRcdFx0XHRcdCAgICAgIFJEU19DT05OX0RPV04pKSB7XG4tXHRcdFx0LyogVGhpcyBjYW4gaGFwcGVuIC0gZWcgd2hlbiB3ZSYjMzk7cmUgaW4gdGhlIG1pZGRsZSBvZiB0ZWFyaW5nXG4tXHRcdFx0ICogZG93biB0aGUgY29ubmVjdGlvbiwgYW5kIHNvbWVvbmUgdW5sb2FkcyB0aGUgcmRzIG1vZHVsZS5cbi1cdFx0XHQgKiBRdWl0ZSByZXByb2R1Y2libGUgd2l0aCBsb29wYmFjayBjb25uZWN0aW9ucy5cbi1cdFx0XHQgKiBNb3N0bHkgaGFybWxlc3MuXG4mIzQzO1x0XHRcdC8qIFRoZSBwYXRoIHdhcyBkcm9wcGVkIGFnYWluIHdoaWxlIHdlIHRvcmUgaXRcbiYjNDM7XHRcdFx0ICogZG93bjogYnkgYSBzb2NrZXQgc3RhdGUtY2hhbmdlIGNhbGxiYWNrIGluXG4mIzQzO1x0XHRcdCAqIGlycSBjb250ZXh0IG9uIHJlY2VpcHQgb2YgYSBGSU4sIG9yIGJ5IGFuXG4mIzQzO1x0XHRcdCAqIGFjY2VwdCB0aGF0IGNsYWltZWQgdGhlIHBhdGgganVzdCBiZWZvcmUgYVxuJiM0MztcdFx0XHQgKiBkcm9wIHB1dCBpdCBiYWNrIHRvIFJEU19DT05OX0VSUk9SIGFuZCB0aGVuXG4mIzQzO1x0XHRcdCAqIGluc3RhbGxlZCBhIGZyZXNoIHNvY2tldCBvbiBpdC4gIFVubGVzcyBhXG4mIzQzO1x0XHRcdCAqIHBlbmRpbmcgZGVzdHJveSBzdXBwcmVzc2VkIGl0LCB0aGUgZHJvcCBhbHNvXG4mIzQzO1x0XHRcdCAqIHF1ZXVlZCBhbm90aGVyIHNodXRkb3duIHBhc3MsIGFuZCB0aGF0IHBhc3NcbiYjNDM7XHRcdFx0ICogbXVzdCBydW4sIGJlY2F1c2UgaXQgaXMgd2hhdCB0ZWFycyBkb3duXG4mIzQzO1x0XHRcdCAqIHdoYXRldmVyIGF0dGFjaGVkIHRvIHRoZSBwYXRoIGFmdGVyIHRoZVxuJiM0MztcdFx0XHQgKiB0cmFuc3BvcnQgc2h1dGRvd24gYWJvdmUgc2FtcGxlZCBpdHMgc3RhdGUuXG4mIzQzO1x0XHRcdCAqIENvbnN1bWluZyB0aGUgUkRTX0NPTk5fRVJST1IgaGVyZSB3b3VsZCB0dXJuXG4mIzQzO1x0XHRcdCAqIHRoYXQgcGFzcyBpbnRvIGEgbm8tb3A6IGxlYXZlIHRoZSBzdGF0ZVxuJiM0MztcdFx0XHQgKiBhbG9uZSwgYW5kIGxldCB0aGUgcGFzcyBmaW5pc2ggdGhlIGpvYi5cbiBcdFx0XHQgKlxuLVx0XHRcdCAqIE5vdGUgdGhhdCB0aGlzIGFsc28gaGFwcGVucyB3aXRoIHJkcy10Y3AgYmVjYXVzZVxuLVx0XHRcdCAqIHdlIGNvdWxkIGhhdmUgdHJpZ2dlcmVkIHJkc19jb25uX3BhdGhfZHJvcCBpbiBpcnFcbi1cdFx0XHQgKiBtb2RlIGZyb20gcmRzX3RjcF9zdGF0ZSBjaGFuZ2Ugb24gdGhlIHJlY2VpcHQgb2Zcbi1cdFx0XHQgKiBhIEZJTiwgdGh1cyB3ZSBuZWVkIHRvIHJlY2hlY2sgZm9yIFJEU19DT05OX0VSUk9SXG4tXHRcdFx0ICogaGVyZS5cbiYjNDM7XHRcdFx0ICogUXVpZXNjZSB0aGUgcmVjb25uZWN0IHRpbWVyIGJlZm9yZSBiYWlsaW5nXG4mIzQzO1x0XHRcdCAqIG91dCwgdGhvdWdoLiAgV2hlbiBhIHBlbmRpbmcgZGVzdHJveSBkaWRcbiYjNDM7XHRcdFx0ICogc3VwcHJlc3MgdGhlIHF1ZXVlLCBubyBsYXRlciBwYXNzIHJ1bnMsIGFuZFxuJiM0MztcdFx0XHQgKiByZHNfY29ubl9wYXRoX2Rlc3Ryb3koKSBpcyBhYm91dCB0byBmbHVzaFxuJiM0MztcdFx0XHQgKiBjcF9kb3duX3cgYW5kIGZyZWUgdGhlIHBhdGg6IGl0IG11c3Qgbm90XG4mIzQzO1x0XHRcdCAqIGZpbmQgY3BfY29ubl93IHN0aWxsIGFybWVkLiAgQSBzdWNjZXNzb3JcbiYjNDM7XHRcdFx0ICogcGFzcywgd2hlbiB0aGVyZSBpcyBvbmUsIHJlLWFybXMgdGhlXG4mIzQzO1x0XHRcdCAqIHJlY29ubmVjdCBmcm9tIGl0cyBvd24gdGFpbC5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZjcC1cdTAwM2VjcF9jb25uX3cpO1xuJiM0MztcdFx0XHRjbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAocmRzX2Nvbm5fcGF0aF9zdGF0ZShjcCkgPT0gUkRTX0NPTk5fRVJST1IpXG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0XHQvKiBObyBjdXJyZW50IGNwX3N0YXRlIHdyaXRlciBsZWF2ZXMgYVxuJiM0MztcdFx0XHQgKiBESVNDT05ORUNUSU5HIHBhdGggaW4gYW55IHN0YXRlIGJ1dFxuJiM0MztcdFx0XHQgKiBSRFNfQ09OTl9FUlJPUjsgcmVwb3J0IGxvdWRseSBpZiBvbmUgZXZlclxuJiM0MztcdFx0XHQgKiBkb2VzLlxuIFx0XHRcdCAqL1xuIFx0XHRcdHJkc19jb25uX3BhdGhfZXJyb3IoY3AsIFwmIzM0OyVzOiBmYWlsZWQgdG8gdHJhbnNpdGlvbiBcJiMzNDtcbiBcdFx0XHRcdFx0ICAgIFwmIzM0O3RvIHN0YXRlIERPV04sIGN1cnJlbnQgc3RhdGUgXCYjMzQ7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZWN2LmMgYi9uZXQvcmRzL2liX3JlY3YuY1xuaW5kZXggMzU3MTI4ZDM0YTU0Ni4uYmQ2Y2IzZmZhYTU3MSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvaWJfcmVjdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL2liX3JlY3YuY1xuQEAgLTM2MywxNSAmIzQzOzM2MywxNCBAQCBzdGF0aWMgaW50IGFjcXVpcmVfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbiBcbiBzdGF0aWMgdm9pZCByZWxlYXNlX3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4ge1xuLVx0Y2xlYXJfYml0KFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y29ubi1cdTAwM2VjX2ZsYWdzKTtcbi1cdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XG4mIzQzO1x0Y2xlYXJfYml0X3VubG9jayhSRFNfUkVDVl9SRUZJTEwsIFx1MDAyNmNvbm4tXHUwMDNlY19mbGFncyk7XG4gXG4gXHQvKiBXZSBkb24mIzM5O3QgdXNlIHdhaXRfb25fYml0KCkvd2FrZV91cF9iaXQoKSBiZWNhdXNlIG91ciB3YWtpbmcgaXMgaW4gYVxuIFx0ICogaG90IHBhdGggYW5kIGZpbmRpbmcgd2FpdGVycyBpcyB2ZXJ5IHJhcmUuICBXZSBkb24mIzM5O3Qgd2FudCB0byB3YWxrXG4gXHQgKiB0aGUgc3lzdGVtLXdpZGUgaGFzaGVkIHdhaXRxdWV1ZSBidWNrZXRzIGluIHRoZSBmYXN0IHBhdGggb25seSB0b1xuIFx0ICogYWxtb3N0IG5ldmVyIGZpbmQgd2FpdGVycy5cbiBcdCAqL1xuLVx0aWYgKHdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2Y29ubi1cdTAwM2VjX3dhaXRxKSlcbiYjNDM7XHRpZiAod3FfaGFzX3NsZWVwZXIoXHUwMDI2Y29ubi1cdTAwM2VjX3dhaXRxKSlcbiBcdFx0d2FrZV91cF9hbGwoXHUwMDI2Y29ubi1cdTAwM2VjX3dhaXRxKTtcbiB9XG4gXG5AQCAtMzkyLDcgJiM0MzszOTEsOSBAQCB2b2lkIHJkc19pYl9yZWN2X3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGludCBwcmVmaWxsLCBnZnBfdCBnZnApXG4gXG4gXHQvKiB0aGUgZ29hbCBoZXJlIGlzIHRvIGp1c3QgbWFrZSBzdXJlIHRoYXQgc29tZW9uZSwgc29tZXdoZXJlXG4gXHQgKiBpcyBwb3N0aW5nIGJ1ZmZlcnMuICBJZiB3ZSBjYW4mIzM5O3QgZ2V0IHRoZSByZWZpbGwgbG9jayxcbi1cdCAqIGxldCB0aGVtIGRvIHRoZWlyIHRoaW5nXG4mIzQzO1x0ICogbGV0IHRoZW0gZG8gdGhlaXIgdGhpbmcuICBUaGUgaG9sZGVyIG1heSBhbHNvIGJlXG4mIzQzO1x0ICogcmRzX2Nvbm5fc2h1dGRvd24oKSB0ZWFyaW5nIHRoZSBwYXRoIGRvd24sIGluIHdoaWNoIGNhc2VcbiYjNDM7XHQgKiB0aGVyZSBpcyBub3RoaW5nIHRvIHBvc3QuXG4gXHQgKi9cbiBcdGlmICghYWNxdWlyZV9yZWZpbGwoY29ubikpXG4gXHRcdHJldHVybjtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jXG5pbmRleCAxNWExYjk3ZjEzZTc2Li4xYWZhOTgxZTVjMDZkIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvc2VuZC5jXG5AQCAtMTE0LDggJiM0MzsxMTQsMTMgQEAgc3RhdGljIHZvaWQgcmVsZWFzZV9pbl94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdCAqIGhvdCBwYXRoIGFuZCBmaW5kaW5nIHdhaXRlcnMgaXMgdmVyeSByYXJlLiAgV2UgZG9uJiMzOTt0IHdhbnQgdG8gd2Fsa1xuIFx0ICogdGhlIHN5c3RlbS13aWRlIGhhc2hlZCB3YWl0cXVldWUgYnVja2V0cyBpbiB0aGUgZmFzdCBwYXRoIG9ubHkgdG9cbiBcdCAqIGFsbW9zdCBuZXZlciBmaW5kIHdhaXRlcnMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiB3cV9oYXNfc2xlZXBlcigpIHN1cHBsaWVzIHRoZSBmdWxsIGJhcnJpZXIgdGhhdCBvcmRlcnMgdGhlIHdhaXRcbiYjNDM7XHQgKiBxdWV1ZSByZWFkIGFmdGVyIHRoZSBiaXQgY2xlYXI7IGNsZWFyX2JpdF91bmxvY2soKSBhbG9uZSBpcyBvbmx5XG4mIzQzO1x0ICogYSByZWxlYXNlIGFuZCB3b3VsZCBsZXQgdGhpcyBjaGVjayByZWFkIGEgc3RhbGUgZW1wdHkgcXVldWUsXG4mIzQzO1x0ICogbG9zaW5nIHRoZSB3YWtlLXVwLlxuIFx0ICovXG4tXHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcdTAwMjZjcC1cdTAwM2VjcF93YWl0cSkpXG4mIzQzO1x0aWYgKHdxX2hhc19zbGVlcGVyKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKSlcbiBcdFx0d2FrZV91cF9hbGwoXHUwMDI2Y3AtXHUwMDNlY3Bfd2FpdHEpO1xuIH1cbiBcbkBAIC0yMzksOCAmIzQzOzI0NCwxMSBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRXUklURV9PTkNFKGNwLVx1MDAzZWNwX3NlbmRfZ2VuLCBzZW5kX2dlbik7XG4gXG4gXHQvKlxuLVx0ICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIHRlc3RzIFJEU19JTl9YTUlULFxuLVx0ICogd2UgZG8gdGhlIG9wcG9zaXRlIHRvIGF2b2lkIHJhY2VzLlxuJiM0MztcdCAqIHJkc19jb25uX3NodXRkb3duKCkgc2V0cyB0aGUgY29ubiBzdGF0ZSBhbmQgdGhlbiBhY3F1aXJlc1xuJiM0MztcdCAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZS5cbiYjNDM7XHQgKiBPd25lcnNoaXAgaXMgZGVjaWRlZCBieSB0aGUgYXRvbWljIFJNVyBvbiB0aGUgY3BfZmxhZ3Mgd29yZDpcbiYjNDM7XHQgKiBpZiB0aGUgdGVhcmRvd24gd29uIHRoZSBiaXQgd2UgYmFjayBvZmYgaGVyZSwgYW5kIGlmIHdlIHdvblxuJiM0MztcdCAqIGl0IHRoZSB0ZWFyZG93biB3YWl0cyB1bnRpbCB3ZSByZWxlYXNlIGl0LlxuIFx0ICovXG4gXHRpZiAoIXJkc19jb25uX3BhdGhfdXAoY3ApKSB7XG4gXHRcdHJlbGVhc2VfaW5feG1pdChjcCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3AuYyBiL25ldC9yZHMvdGNwLmNcbmluZGV4IGIyNjM2MzRhYzc1MGQuLjc3NGE3MWY4OGQzNzUgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3RjcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcC5jXG5AQCAtMTE1LDQ2ICYjNDM7MTE1LDkwIEBAIHZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIH1cbiBcbiAvKlxuLSAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgdGhlIHRvIHRoZSBuZXcgc29jayBhbmRcbi0gKiByZXR1cm5zIHRoZSBleGlzdGluZyB0Yy1cdTAwM2V0X3NvY2suXG4mIzQzOyAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgYSBwYXRoIHRvIGEgbmV3IHNvY2tldCBhbmRcbiYjNDM7ICogcmVsZWFzZXMgdGhlIG9sZCBvbmUgaXQgZmluZHMgaW4gdGMtXHUwMDNldF9zb2NrLCByZXNvbHZpbmcgYSBkdWVsbGluZ1xuJiM0MzsgKiBTWU4uXG4gICpcbi0gKiBUaGUgb25seSBmdW5jdGlvbnMgdGhhdCBzZXQgdGMtXHUwMDNldF9zb2NrIGFyZSByZHNfdGNwX3NldF9jYWxsYmFja3Ncbi0gKiBhbmQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3MuICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXRcbi0gKiBpdCBpcyBzZXQuICBUaGUgYWJzZW5jZSBvZiBSRFNfQ09OTl9VUCBiaXQgcHJvdGVjdHMgdGhvc2UgcGF0aHNcbi0gKiBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24mIzM5O3Qgc2V0LlxuJiM0MzsgKiB0Yy1cdTAwM2V0X3NvY2sgaXMgc2V0IGJ5IHJkc190Y3Bfc2V0X2NhbGxiYWNrcygpIGFuZCBjbGVhcmVkIGJ5XG4mIzQzOyAqIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3MoKS4gIEZvdXIgcGF0aHMgd3JpdGUgaXQ6IHRoZSBhY3RpdmVcbiYjNDM7ICogY29ubmVjdCBpbiByZHNfdGNwX2Nvbm5fcGF0aF9jb25uZWN0KCksIHdoaWNoIHNldHMgaXQgYW5kIGNsZWFycyBpdFxuJiM0MzsgKiBhZ2FpbiBvbiBmYWlsdXJlOyB0aGUgYWNjZXB0IHBhdGggaW4gcmRzX3RjcF9hY2NlcHRfb25lKCksIHdoaWNoXG4mIzQzOyAqIHNldHMgaXQgZm9yIGEgcGF0aCB3aXRoIG5vIHNvY2tldCB5ZXQ7IHRoZSB0ZWFyZG93biBpblxuJiM0MzsgKiByZHNfdGNwX2Nvbm5fcGF0aF9zaHV0ZG93bigpLCB3aGljaCBjbGVhcnMgaXQ7IGFuZCB0aGUgc3dhcCBkb25lXG4mIzQzOyAqIGhlcmUsIHdoaWNoIGRvZXMgYm90aC4gIFRoZSBjb25uZWN0IGFuZCBhY2NlcHQgcGF0aHMgYXJlIHNlcmlhbGl6ZWRcbiYjNDM7ICogYWdhaW5zdCBlYWNoIG90aGVyIGJ5IHRfY29ubl9wYXRoX2xvY2suICBTZW5kIGFuZCByZWNlaXZlIHRydXN0XG4mIzQzOyAqIHRoYXQgaXQgaXMgc2V0OiB0aGUgYWJzZW5jZSBvZiBSRFNfQ09OTl9VUCBwcm90ZWN0cyB0aG9zZSBwYXRoc1xuJiM0MzsgKiBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24mIzM5O3QsIGFuZCB0aGUgc3dhcCBkb25lIGhlcmUgcnVucyB1bmRlclxuJiM0MzsgKiBSRFNfSU5fWE1JVCBzbyB0aGF0IGl0IGNhbm5vdCBpbnRlcmxlYXZlIHdpdGggYSBzZW5kZXIgYWxyZWFkeVxuJiM0MzsgKiBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpLlxuICAqL1xuIHZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0XHQgICAgIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiB7XG4gXHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLVx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xuLVx0c3RydWN0IHNvY2tldCAqb3NvY2sgPSB0Yy1cdTAwM2V0X3NvY2s7XG4tXG4tXHRpZiAoIW9zb2NrKVxuLVx0XHRnb3RvIG5ld3NvY2s7XG4mIzQzO1x0c3RydWN0IHNvY2tldCAqb3NvY2s7XG4gXG4gXHQvKiBOZWVkIHRvIHJlc29sdmUgYSBkdWVsbGluZyBTWU4gYmV0d2VlbiBwZWVycy5cbiBcdCAqIFdlIGhhdmUgYW4gb3V0c3RhbmRpbmcgU1lOIHRvIHRoaXMgcGVlciwgd2hpY2ggbWF5XG4gXHQgKiBwb3RlbnRpYWxseSBoYXZlIHRyYW5zaXRpb25lZCB0byB0aGUgUkRTX0NPTk5fVVAgc3RhdGUsXG4gXHQgKiBzbyB3ZSBtdXN0IHF1aWVzY2UgYW55IHNlbmQgdGhyZWFkcyBiZWZvcmUgcmVzZXR0aW5nXG4tXHQgKiBjcF90cmFuc3BvcnRfZGF0YS4gV2UgcXVpZXNjZSB0aGVzZSB0aHJlYWRzIGJ5IHNldHRpbmdcbi1cdCAqIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFJEU19DT05OX1VQLCBhbmQgdGhlblxuLVx0ICogd2FpdGluZyBmb3IgYW55IGV4aXN0aW5nIHRocmVhZHMgaW4gcmRzX3NlbmRfeG1pdCB0b1xuLVx0ICogY29tcGxldGUgcmVsZWFzZV9pbl94bWl0KCkuIChTdWJzZXF1ZW50IHRocmVhZHMgZW50ZXJpbmdcbi1cdCAqIHJkc19zZW5kX3htaXQoKSB3aWxsIGJhaWwgb24gIXJkc19jb25uX3VwKCkuXG4mIzQzO1x0ICogY3BfdHJhbnNwb3J0X2RhdGEuICBTZXR0aW5nIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlclxuJiM0MztcdCAqIHRoYW4gUkRTX0NPTk5fVVAgc3RvcHMgbmV3IHNlbmRlcnMsIGFuZCBvd25pbmcgUkRTX0lOX1hNSVRcbiYjNDM7XHQgKiBleGNsdWRlcyBhbnkgdGhyZWFkIGFscmVhZHkgaW5zaWRlIHJkc19zZW5kX3htaXQoKSAtIG9yIGFcbiYjNDM7XHQgKiB0ZWFyZG93biBpbiByZHNfY29ubl9zaHV0ZG93bigpLCB3aGljaCBob2xkcyB0aGUgc2FtZSBsb2NrXG4mIzQzO1x0ICogZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNwb3J0IHNodXRkb3duIC0gZm9yIHRoZSB3aG9sZVxuJiM0MztcdCAqIHNvY2tldCBzd2FwIGFuZCB0aGUgcmRzX3NlbmRfcGF0aF9yZXNldCgpIGJlbG93LlxuIFx0ICpcbi1cdCAqIEhvd2V2ZXIgYW4gaW5jb21pbmcgc3luLWFjayBhdCB0aGlzIHBvaW50IHdvdWxkIGVuZCB1cFxuLVx0ICogbWFya2luZyB0aGUgY29ubiBhcyBSRFNfQ09OTl9VUCwgYW5kIHdvdWxkIGFnYWluIHBlcm1pdFxuLVx0ICogcmRzX3NlbmRfeG1pKCkgdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkXG4tXHQgKiBzeW5jaHJvbml6ZSBvbiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdFxuLVx0ICogZG8gdGhhdDogd2FpdGluZyBvbiAhUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5XG4tXHQgKiBlbmQgdXAgZGVhZGxvY2tpbmcgd2l0aCB0Y3Bfc2VuZG1zZygpLCBhbmQgdGhlIFJEU19JTl9YTUlUXG4tXHQgKiB3b3VsZCBub3QgZ2V0IHNldC4gQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvXG4tXHQgKiBSRFNfQ09OTl9SRVNFVFRUSU5HLCB0byBlbnN1cmUgdGhhdCByZHNfdGNwX3N0YXRlX2NoYW5nZVxuLVx0ICogY2Fubm90IG1hcmsgcmRzX2Nvbm5fcGF0aF91cCgpIGluIHRoZSB3aW5kb3cgYmVmb3JlIGxvY2tfc29jaygpXG4mIzQzO1x0ICogQW4gaW5jb21pbmcgc3luLWFjayBhdCB0aGlzIHBvaW50IHdvdWxkIGVuZCB1cCBtYXJraW5nIHRoZVxuJiM0MztcdCAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpXG4mIzQzO1x0ICogdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkIHN5bmNocm9uaXplIG9uXG4mIzQzO1x0ICogUkRTX0NPTk5fVVAgYWZ0ZXIgbG9ja19zb2NrKCksIGJ1dCBjYW5ub3QgZG8gdGhhdDogYWNxdWlyaW5nXG4mIzQzO1x0ICogUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5IGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoXG4mIzQzO1x0ICogdGNwX3NlbmRtc2coKSwgd2hpY2ggdGFrZXMgdGhlIHNvY2tldCBsb2NrIHdoaWxlIGhvbGRpbmdcbiYjNDM7XHQgKiBSRFNfSU5fWE1JVC4gIEFzIGEgcmVzdWx0LCB3ZSBzZXQgY19zdGF0ZSB0b1xuJiM0MztcdCAqIFJEU19DT05OX1JFU0VUVElORywgdG8gZW5zdXJlIHRoYXQgcmRzX3RjcF9zdGF0ZV9jaGFuZ2VcbiYjNDM7XHQgKiBjYW5ub3QgbWFyayByZHNfY29ubl9wYXRoX3VwKCkgaW4gdGhlIHdpbmRvdyBiZWZvcmVcbiYjNDM7XHQgKiBsb2NrX3NvY2soKS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIE9ubHkgbWFrZSB0aGF0IHRyYW5zaXRpb24gaWYgdGhlIHBhdGggaXMgc3RpbGwgY29ubmVjdGluZ1xuJiM0MztcdCAqIChvciBhbHJlYWR5IHJlc2V0dGluZyBmcm9tIGFuIGVhcmxpZXIgZHVlbCkuICBBIHBhdGggaW4gYW55XG4mIzQzO1x0ICogb3RoZXIgc3RhdGUgLSB0eXBpY2FsbHkgUkRTX0NPTk5fRElTQ09OTkVDVElORyBvclxuJiM0MztcdCAqIFJEU19DT05OX0VSUk9SIHdpdGggYSBzaHV0ZG93biBpbiBmbGlnaHQgLSBpcyBkcm9wcGVkXG4mIzQzO1x0ICogaW5zdGVhZC4gIFRoYXQgc3RpbGwgcmVwbGFjZXMgaXRzIHN0YXRlLCB3aXRoIFJEU19DT05OX0VSUk9SLFxuJiM0MztcdCAqIGFuZCwgdW5sZXNzIGEgcGVuZGluZyBkZXN0cm95IGlzIGFib3V0IHRvIHJlYXAgdGhlIHdob2xlXG4mIzQzO1x0ICogY29ubmVjdGlvbiBhbnl3YXksIHF1ZXVlcyBvbmUgbW9yZSBzaHV0ZG93biBwYXNzLiAgQSBzaHV0ZG93blxuJiM0MztcdCAqIGFscmVhZHkgaW4gZmxpZ2h0IGxlYXZlcyB0aGF0IFJEU19DT05OX0VSUk9SIGFsb25lIHdoZW4gaXRcbiYjNDM7XHQgKiBmaW5pc2hlczsgdGhlIHF1ZXVlZCBwYXNzIHRoZW4gY29tcGxldGVzIHRoZSB0cmFuc2l0aW9uIHRvXG4mIzQzO1x0ICogUkRTX0NPTk5fRE9XTiBhbmQgdGVhcnMgZG93biBhbnl0aGluZyB0aGF0IGF0dGFjaGVkIHRvIHRoZVxuJiM0MztcdCAqIHBhdGggaW4gdGhlIG1lYW50aW1lLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9DT05ORUNUSU5HLFxuJiM0MztcdFx0XHRcdCAgICAgIFJEU19DT05OX1JFU0VUVElORykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX1JFU0VUVElORyxcbiYjNDM7XHRcdFx0XHQgICAgICBSRFNfQ09OTl9SRVNFVFRJTkcpKVxuJiM0MztcdFx0cmRzX2Nvbm5fcGF0aF9kcm9wKGNwLCAwKTtcbiYjNDM7XHR3YWl0X2V2ZW50KGNwLVx1MDAzZWNwX3dhaXRxLFxuJiM0MztcdFx0ICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiYjNDM7XG4mIzQzO1x0LyogUmVhZCB0X3NvY2sgb25seSB3aGlsZSBvd25pbmcgUkRTX0lOX1hNSVQsIG5ldmVyIGJlZm9yZSB0aGVcbiYjNDM7XHQgKiB3YWl0OiB0aGUgdGVhcmRvd24gaW4gcmRzX2Nvbm5fc2h1dGRvd24oKSByZWxlYXNlcyB0aGUgb2xkXG4mIzQzO1x0ICogc29ja2V0IGFuZCBjbGVhcnMgdF9zb2NrLCBzbyBhIHBvaW50ZXIgc2FtcGxlZCBlYXJsaWVyIGNhblxuJiM0MztcdCAqIGJlIHN0YWxlIGJ5IHRoZSB0aW1lIHdlIHdha2UgdXAuICBUaGUgdGVhcmRvd24gaG9sZHMgdGhlXG4mIzQzO1x0ICogc2FtZSBsb2NrIHdoaWxlIGl0IGRvZXMgc28sIHNvIHdoYXQgd2UgcmVhZCBoZXJlIGNhbm5vdFxuJiM0MztcdCAqIGNoYW5nZSB1bmRlciB1cyB1bnRpbCB3ZSByZWxlYXNlIGl0LlxuJiM0MztcdCAqL1xuJiM0MztcdG9zb2NrID0gdGMtXHUwMDNldF9zb2NrO1xuJiM0MztcdGlmICghb3NvY2spXG4mIzQzO1x0XHRnb3RvIG5ld3NvY2s7XG4mIzQzO1xuJiM0MztcdC8qIHJlc2V0IHJlY2VpdmUgc2lkZSBzdGF0ZSBmb3IgcmRzX3RjcF9kYXRhX3JlY3YoKSBmb3Igb3NvY2suXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgc3luYyBjYW5jZWxzIHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVCByZWx5IG9uIGNwX3dxXG4mIzQzO1x0ICogYmVpbmcgb3JkZXJlZDogYSB0ZWFyZG93biBibG9ja2VkIG9uIHRoZSBiaXQgb2NjdXBpZXNcbiYjNDM7XHQgKiBjcF93cSYjMzk7cyBvbmx5IGV4ZWN1dGlvbiBzbG90LCBzbyBjcF9zZW5kX3cgYW5kIGNwX3JlY3ZfdyBhcmVcbiYjNDM7XHQgKiBwZW5kaW5nIGF0IG1vc3QgYW5kIHRoZSBjYW5jZWxzIG5ldmVyIGZsdXNoLiAgTm90aGluZyBoZXJlXG4mIzQzO1x0ICogbWF5IGZsdXNoIG9yIHdhaXQgb24gY3Bfd3EgaXRzZWxmLlxuIFx0ICovXG4tXHRhdG9taWNfc2V0KFx1MDAyNmNwLVx1MDAzZWNwX3N0YXRlLCBSRFNfQ09OTl9SRVNFVFRJTkcpO1xuLVx0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSwgIXRlc3RfYml0KFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuLVx0LyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jayAgKi9cbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZjcC1cdTAwM2VjcF9zZW5kX3cpO1xuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmNwLVx1MDAzZWNwX3JlY3Zfdyk7XG4gXHRsb2NrX3NvY2sob3NvY2stXHUwMDNlc2spO1xuQEAgLTE3Miw2ICYjNDM7MjE2LDkgQEAgdm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0bG9ja19zb2NrKHNvY2stXHUwMDNlc2spO1xuIFx0cmRzX3RjcF9zZXRfY2FsbGJhY2tzKHNvY2ssIGNwKTtcbiBcdHJlbGVhc2Vfc29jayhzb2NrLVx1MDAzZXNrKTtcbiYjNDM7XG4mIzQzO1x0Y2xlYXJfYml0X3VubG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpO1xuJiM0MztcdHdha2VfdXBfYWxsKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKTtcbiB9XG4gXG4gLyogQWRkIHRjIHRvIHJkc190Y3BfdGNfbGlzdCBhbmQgc2V0IHRjLVx1MDAzZXRfc29jay4gU2VlIGNvbW1lbnRzXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xuaW5kZXggYTNkYjliMDU3MDg0ZC4uMTNmYTYwYzE5ODViYiAxMDA2NDRcbi0tLSBhL25ldC9yZHMvdGNwX2xpc3Rlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xuQEAgLTI5NSw3ICYjNDM7Mjk1LDExIEBAIGludCByZHNfdGNwX2FjY2VwdF9vbmUoc3RydWN0IHJkc190Y3BfbmV0ICpydG4pXG4gXHRpZiAocnNfdGNwLVx1MDAzZXRfc29jaykge1xuIFx0XHQvKiBEdWVsbGluZyBTWU4gaGFzIGJlZW4gaGFuZGxlZCBpbiByZHNfdGNwX2FjY2VwdF9vbmUoKSAqL1xuIFx0XHRyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhuZXdfc29jaywgY3ApO1xuLVx0XHQvKiByZHNfY29ubmVjdF9wYXRoX2NvbXBsZXRlKCkgbWFya3MgUkRTX0NPTk5fVVAgKi9cbiYjNDM7XHRcdC8qIHJkc19jb25uZWN0X3BhdGhfY29tcGxldGUoKSBtYXJrcyBSRFNfQ09OTl9VUCwgb3IsXG4mIzQzO1x0XHQgKiBpZiBhIGNvbmN1cnJlbnQgc2h1dGRvd24gd29uIHRoZSBkdWVsLCBkcm9wcyB0aGVcbiYjNDM7XHRcdCAqIHBhdGggYWdhaW4gYW5kIHRoZSBwYXNzIHRoYXQgZHJvcCBxdWV1ZXMgcmVhcHMgdGhlXG4mIzQzO1x0XHQgKiBzb2NrZXQgaW5zdGFsbGVkIGFib3ZlLlxuJiM0MztcdFx0ICovXG4gXHRcdHJkc19jb25uZWN0X3BhdGhfY29tcGxldGUoY3AsIFJEU19DT05OX1JFU0VUVElORyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRyZHNfdGNwX3NldF9jYWxsYmFja3MobmV3X3NvY2ssIGNwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSRFMmIzM0OywKICAgICYjMzQ7UkRTX1RDUCYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jkc19jb25uX3NodXRkb3duJiMzNDssCiAgICAmIzM0O3Jkc19zZW5kX3htaXQmIzM0OywKICAgICYjMzQ7cmRzX3RjcF9yZXNldF9jYWxsYmFja3MmIzM0OywKICAgICYjMzQ7cmRzX3RjcF9hY2NlcHRfb25lJiMzNDssCiAgICAmIzM0O3Jkc19pYl9yZWN2X3JlZmlsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgbWVjaGFuaXNtcyAoc3BlY2lmaWNhbGx5IFJEU19JTl9YTUlUIGFuZCBSRFNfUkVDVl9SRUZJTEwgYml0bG9ja3MsIHdhaXRxdWV1ZSBiYXJyaWVycywgYW5kIHN0YXRlIHRyYW5zaXRpb25zKSBpbiBSRFMgY29ubmVjdGlvbiB0ZWFyZG93biwgc2VuZCwgcmVjZWl2ZS1yZWZpbGwsIGFuZCBUQ1Agc29ja2V0IHN3YXBwaW5nIHBhdGhzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbmV0d29yayBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZmUzNzY3OTBiN2M5ZGNmM2U2ZjUzMWU1NjVmMjM3N2ZjZWZiM2FlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjggMjI6NDc6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCmluZGV4IDdjOGFiOGU5NzNlMWIuLmI2YzRiZWI1MGVhZjAgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvY29ubmVjdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCkBAIC0xMDYsMTAgJiM0MzsxMDYsMTIgQEAgc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwKIH0KIAogLyoKLSAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRyYW5zcG9ydHMgYXMgdGhleSYjMzk7cmUgYnJpbmdpbmcgZG93biBhIGNvbm5lY3Rpb24uCi0gKiBJdCBjbGVhcnMgcGFydGlhbCBtZXNzYWdlIHN0YXRlIHNvIHRoYXQgdGhlIHRyYW5zcG9ydCBjYW4gc3RhcnQgc2VuZGluZwotICogYW5kIHJlY2VpdmluZyBvdmVyIHRoaXMgY29ubmVjdGlvbiBhZ2FpbiBpbiB0aGUgZnV0dXJlLiAgSXQgaXMgdXAgdG8KLSAqIHRoZSB0cmFuc3BvcnQgdG8gaGF2ZSBzZXJpYWxpemVkIHRoaXMgY2FsbCB3aXRoIGl0cyBzZW5kIGFuZCByZWN2LgomIzQzOyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHJkc19jb25uX3NodXRkb3duKCkgb25jZSB0aGUgdHJhbnNwb3J0IGhhcyBicm91Z2h0CiYjNDM7ICogYSBwYXRoIGRvd24uICBJdCBjbGVhcnMgcGFydGlhbCBtZXNzYWdlIHN0YXRlIHNvIHRoYXQgdGhlIHRyYW5zcG9ydAomIzQzOyAqIGNhbiBzdGFydCBzZW5kaW5nIGFuZCByZWNlaXZpbmcgb3ZlciB0aGlzIHBhdGggYWdhaW4gaW4gdGhlIGZ1dHVyZS4KJiM0MzsgKiBUaGUgY2FsbGVyIG93bnMgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBhY3Jvc3MgdGhpcyBjYWxsLAomIzQzOyAqIHdoaWNoIGlzIHdoYXQgc2VyaWFsaXplcyBpdCBhZ2FpbnN0IHRoZSBzZW5kIGFuZCByZWNlaXZlLXJlZmlsbAomIzQzOyAqIHBhdGhzLgogICovCiBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKIHsKQEAgLTEyMCw3ICYjNDM7MTIyLDE2IEBAIHN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogCiAJcmRzX3N0YXRzX2luYyhzX2Nvbm5fcmVzZXQpOwogCXJkc19zZW5kX3BhdGhfcmVzZXQoY3ApOwotCWNwLSZndDtjcF9mbGFncyA9IDA7CiYjNDM7CiYjNDM7CS8qIENsZWFyIHRoZSBiaXRzIHRoZSByZXNldCBpcyByZXNwb25zaWJsZSBmb3IgaW5kaXZpZHVhbGx5OiBhCiYjNDM7CSAqIGJsYW5rZXQgY3BfZmxhZ3MgPSAwIGlzIGEgcGxhaW4gc3RvcmUgdGhhdCBjYW4gY2xvYmJlciBhCiYjNDM7CSAqIGNvbmN1cnJlbnQgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIG9uIHRoZSBzYW1lIHdvcmQuCiYjNDM7CSAqIFJEU19JTl9YTUlUIGFuZCBSRFNfUkVDVl9SRUZJTEwgYXJlIGhlbGQgYXMgbG9ja3MgYnkgdGhlCiYjNDM7CSAqIGNhbGxlciwgcmRzX2Nvbm5fc2h1dGRvd24oKSwgd2hpY2ggcmVsZWFzZXMgdGhlbSBvbmNlIHRoZQomIzQzOwkgKiB0ZWFyZG93biBpcyBjb21wbGV0ZS4KJiM0MzsJICovCiYjNDM7CWNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CWNsZWFyX2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKTsKIAogCS8qIERvIG5vdCBjbGVhciBuZXh0X3J4X3NlcSBoZXJlLCBlbHNlIHdlIGNhbm5vdCBkaXN0aW5ndWlzaAogCSAqIHJldHJhbnNtaXR0ZWQgcGFja2V0cyBmcm9tIG5ldyBwYWNrZXRzLCBhbmQgd2lsbCBoYW5kIGFsbApAQCAtNDA2LDI4ICYjNDM7NDE3LDcwIEBAIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogCQl9CiAJCW11dGV4X3VubG9jaygmYW1wO2NwLSZndDtjcF9jbV9sb2NrKTsKIAomIzQzOwkJLyogUXVpZXNjZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUtcmVmaWxsIHBhdGhzIGJ5CiYjNDM7CQkgKiBhY3F1aXJpbmcgdGhlaXIgYml0IGxvY2tzLCBub3QgbWVyZWx5IHdhaXRpbmcgZm9yCiYjNDM7CQkgKiB0aGVtIHRvIGJlIHJlbGVhc2VkOiB3aXRoIGEgcGxhaW4gd2FpdCwgZWl0aGVyIHBhdGgKJiM0MzsJCSAqIGNhbiByZS10YWtlIGl0cyBsb2NrIHRoZSBpbnN0YW50IGFmdGVyIHdlIHNhbXBsZSBpdAomIzQzOwkJICogY2xlYXIgYW5kIHRoZW4gcnVuIGNvbmN1cnJlbnRseSB3aXRoIHRoZSB0cmFuc3BvcnQKJiM0MzsJCSAqIHNodXRkb3duIGFuZCB0aGUgcGF0aCByZXNldCBiZWxvdy4gIEhvbGRpbmcgYm90aAomIzQzOwkJICogbG9ja3MgYWNyb3NzIHRoZSB0ZWFyZG93biBtYWtlcyB0aGF0IHN0cnVjdHVyYWxseQomIzQzOwkJICogaW1wb3NzaWJsZS4KJiM0MzsJCSAqLwogCQl3YWl0X2V2ZW50KGNwLSZndDtjcF93YWl0cSwKLQkJCSAgICF0ZXN0X2JpdChSRFNfSU5fWE1JVCwgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpKTsKJiM0MzsJCQkgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwogCQl3YWl0X2V2ZW50KGNwLSZndDtjcF93YWl0cSwKLQkJCSAgICF0ZXN0X2JpdChSRFNfUkVDVl9SRUZJTEwsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7CiYjNDM7CQkJICAgIXRlc3RfYW5kX3NldF9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwogCiAJCWNvbm4tJmd0O2NfdHJhbnMtJmd0O2Nvbm5fcGF0aF9zaHV0ZG93bihjcCk7CiAJCXJkc19jb25uX3BhdGhfcmVzZXQoY3ApOwogCiYjNDM7CQkvKiBSZWxlYXNlIHRoZSB0d28gbG9ja3MgYW5kIHdha2UgYW55IHdhaXRlciAoZS5nLgomIzQzOwkJICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSkgdGhhdCBibG9ja2VkIG9uIHRoZW0gd2hpbGUKJiM0MzsJCSAqIHdlIGhlbGQgdGhlbS4gIFRoZSB1bmxvY2sgb3JkZXJzIHRoZSB0cmFuc3BvcnQmIzM5O3MgcmluZwomIzQzOwkJICogcmUtaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBwYXRoIHJlc2V0IGFib3ZlIGJlZm9yZQomIzQzOwkJICogZWl0aGVyIGJpdCBpcyBzZWVuIGNsZWFyLiAgcmRzX2Nvbm5fcGF0aF9yZXNldCgpIGxlYXZlcwomIzQzOwkJICogYm90aCBiaXRzIGFsb25lOiBvd25lcnNoaXAgZW5kcyBoZXJlLCBub3QgaW5zaWRlIHRoZQomIzQzOwkJICogcmVzZXQuCiYjNDM7CQkgKi8KJiM0MzsJCWNsZWFyX2JpdF91bmxvY2soUkRTX0lOX1hNSVQsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKTsKJiM0MzsJCWNsZWFyX2JpdF91bmxvY2soUkRTX1JFQ1ZfUkVGSUxMLCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CQl3YWtlX3VwX2FsbCgmYW1wO2NwLSZndDtjcF93YWl0cSk7CiYjNDM7CiAJCWlmICghcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9ESVNDT05ORUNUSU5HLAotCQkJCQkgICAgICBSRFNfQ09OTl9ET1dOKSAmYW1wOyZhbXA7Ci0JCSAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9FUlJPUiwKIAkJCQkJICAgICAgUkRTX0NPTk5fRE9XTikpIHsKLQkJCS8qIFRoaXMgY2FuIGhhcHBlbiAtIGVnIHdoZW4gd2UmIzM5O3JlIGluIHRoZSBtaWRkbGUgb2YgdGVhcmluZwotCQkJICogZG93biB0aGUgY29ubmVjdGlvbiwgYW5kIHNvbWVvbmUgdW5sb2FkcyB0aGUgcmRzIG1vZHVsZS4KLQkJCSAqIFF1aXRlIHJlcHJvZHVjaWJsZSB3aXRoIGxvb3BiYWNrIGNvbm5lY3Rpb25zLgotCQkJICogTW9zdGx5IGhhcm1sZXNzLgomIzQzOwkJCS8qIFRoZSBwYXRoIHdhcyBkcm9wcGVkIGFnYWluIHdoaWxlIHdlIHRvcmUgaXQKJiM0MzsJCQkgKiBkb3duOiBieSBhIHNvY2tldCBzdGF0ZS1jaGFuZ2UgY2FsbGJhY2sgaW4KJiM0MzsJCQkgKiBpcnEgY29udGV4dCBvbiByZWNlaXB0IG9mIGEgRklOLCBvciBieSBhbgomIzQzOwkJCSAqIGFjY2VwdCB0aGF0IGNsYWltZWQgdGhlIHBhdGgganVzdCBiZWZvcmUgYQomIzQzOwkJCSAqIGRyb3AgcHV0IGl0IGJhY2sgdG8gUkRTX0NPTk5fRVJST1IgYW5kIHRoZW4KJiM0MzsJCQkgKiBpbnN0YWxsZWQgYSBmcmVzaCBzb2NrZXQgb24gaXQuICBVbmxlc3MgYQomIzQzOwkJCSAqIHBlbmRpbmcgZGVzdHJveSBzdXBwcmVzc2VkIGl0LCB0aGUgZHJvcCBhbHNvCiYjNDM7CQkJICogcXVldWVkIGFub3RoZXIgc2h1dGRvd24gcGFzcywgYW5kIHRoYXQgcGFzcwomIzQzOwkJCSAqIG11c3QgcnVuLCBiZWNhdXNlIGl0IGlzIHdoYXQgdGVhcnMgZG93bgomIzQzOwkJCSAqIHdoYXRldmVyIGF0dGFjaGVkIHRvIHRoZSBwYXRoIGFmdGVyIHRoZQomIzQzOwkJCSAqIHRyYW5zcG9ydCBzaHV0ZG93biBhYm92ZSBzYW1wbGVkIGl0cyBzdGF0ZS4KJiM0MzsJCQkgKiBDb25zdW1pbmcgdGhlIFJEU19DT05OX0VSUk9SIGhlcmUgd291bGQgdHVybgomIzQzOwkJCSAqIHRoYXQgcGFzcyBpbnRvIGEgbm8tb3A6IGxlYXZlIHRoZSBzdGF0ZQomIzQzOwkJCSAqIGFsb25lLCBhbmQgbGV0IHRoZSBwYXNzIGZpbmlzaCB0aGUgam9iLgogCQkJICoKLQkJCSAqIE5vdGUgdGhhdCB0aGlzIGFsc28gaGFwcGVucyB3aXRoIHJkcy10Y3AgYmVjYXVzZQotCQkJICogd2UgY291bGQgaGF2ZSB0cmlnZ2VyZWQgcmRzX2Nvbm5fcGF0aF9kcm9wIGluIGlycQotCQkJICogbW9kZSBmcm9tIHJkc190Y3Bfc3RhdGUgY2hhbmdlIG9uIHRoZSByZWNlaXB0IG9mCi0JCQkgKiBhIEZJTiwgdGh1cyB3ZSBuZWVkIHRvIHJlY2hlY2sgZm9yIFJEU19DT05OX0VSUk9SCi0JCQkgKiBoZXJlLgomIzQzOwkJCSAqIFF1aWVzY2UgdGhlIHJlY29ubmVjdCB0aW1lciBiZWZvcmUgYmFpbGluZwomIzQzOwkJCSAqIG91dCwgdGhvdWdoLiAgV2hlbiBhIHBlbmRpbmcgZGVzdHJveSBkaWQKJiM0MzsJCQkgKiBzdXBwcmVzcyB0aGUgcXVldWUsIG5vIGxhdGVyIHBhc3MgcnVucywgYW5kCiYjNDM7CQkJICogcmRzX2Nvbm5fcGF0aF9kZXN0cm95KCkgaXMgYWJvdXQgdG8gZmx1c2gKJiM0MzsJCQkgKiBjcF9kb3duX3cgYW5kIGZyZWUgdGhlIHBhdGg6IGl0IG11c3Qgbm90CiYjNDM7CQkJICogZmluZCBjcF9jb25uX3cgc3RpbGwgYXJtZWQuICBBIHN1Y2Nlc3NvcgomIzQzOwkJCSAqIHBhc3MsIHdoZW4gdGhlcmUgaXMgb25lLCByZS1hcm1zIHRoZQomIzQzOwkJCSAqIHJlY29ubmVjdCBmcm9tIGl0cyBvd24gdGFpbC4KJiM0MzsJCQkgKi8KJiM0MzsJCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3BfY29ubl93KTsKJiM0MzsJCQljbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CiYjNDM7CQkJaWYgKHJkc19jb25uX3BhdGhfc3RhdGUoY3ApID09IFJEU19DT05OX0VSUk9SKQomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJLyogTm8gY3VycmVudCBjcF9zdGF0ZSB3cml0ZXIgbGVhdmVzIGEKJiM0MzsJCQkgKiBESVNDT05ORUNUSU5HIHBhdGggaW4gYW55IHN0YXRlIGJ1dAomIzQzOwkJCSAqIFJEU19DT05OX0VSUk9SOyByZXBvcnQgbG91ZGx5IGlmIG9uZSBldmVyCiYjNDM7CQkJICogZG9lcy4KIAkJCSAqLwogCQkJcmRzX2Nvbm5fcGF0aF9lcnJvcihjcCwgJiMzNDslczogZmFpbGVkIHRvIHRyYW5zaXRpb24gJiMzNDsKIAkJCQkJICAgICYjMzQ7dG8gc3RhdGUgRE9XTiwgY3VycmVudCBzdGF0ZSAmIzM0OwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZWN2LmMgYi9uZXQvcmRzL2liX3JlY3YuYwppbmRleCAzNTcxMjhkMzRhNTQ2Li5iZDZjYjNmZmFhNTcxIDEwMDY0NAotLS0gYS9uZXQvcmRzL2liX3JlY3YuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL2liX3JlY3YuYwpAQCAtMzYzLDE1ICYjNDM7MzYzLDE0IEBAIHN0YXRpYyBpbnQgYWNxdWlyZV9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQogCiBzdGF0aWMgdm9pZCByZWxlYXNlX3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiB7Ci0JY2xlYXJfYml0KFJEU19SRUNWX1JFRklMTCwgJmFtcDtjb25uLSZndDtjX2ZsYWdzKTsKLQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwomIzQzOwljbGVhcl9iaXRfdW5sb2NrKFJEU19SRUNWX1JFRklMTCwgJmFtcDtjb25uLSZndDtjX2ZsYWdzKTsKIAogCS8qIFdlIGRvbiYjMzk7dCB1c2Ugd2FpdF9vbl9iaXQoKS93YWtlX3VwX2JpdCgpIGJlY2F1c2Ugb3VyIHdha2luZyBpcyBpbiBhCiAJICogaG90IHBhdGggYW5kIGZpbmRpbmcgd2FpdGVycyBpcyB2ZXJ5IHJhcmUuICBXZSBkb24mIzM5O3Qgd2FudCB0byB3YWxrCiAJICogdGhlIHN5c3RlbS13aWRlIGhhc2hlZCB3YWl0cXVldWUgYnVja2V0cyBpbiB0aGUgZmFzdCBwYXRoIG9ubHkgdG8KIAkgKiBhbG1vc3QgbmV2ZXIgZmluZCB3YWl0ZXJzLgogCSAqLwotCWlmICh3YWl0cXVldWVfYWN0aXZlKCZhbXA7Y29ubi0mZ3Q7Y193YWl0cSkpCiYjNDM7CWlmICh3cV9oYXNfc2xlZXBlcigmYW1wO2Nvbm4tJmd0O2Nfd2FpdHEpKQogCQl3YWtlX3VwX2FsbCgmYW1wO2Nvbm4tJmd0O2Nfd2FpdHEpOwogfQogCkBAIC0zOTIsNyAmIzQzOzM5MSw5IEBAIHZvaWQgcmRzX2liX3JlY3ZfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgaW50IHByZWZpbGwsIGdmcF90IGdmcCkKIAogCS8qIHRoZSBnb2FsIGhlcmUgaXMgdG8ganVzdCBtYWtlIHN1cmUgdGhhdCBzb21lb25lLCBzb21ld2hlcmUKIAkgKiBpcyBwb3N0aW5nIGJ1ZmZlcnMuICBJZiB3ZSBjYW4mIzM5O3QgZ2V0IHRoZSByZWZpbGwgbG9jaywKLQkgKiBsZXQgdGhlbSBkbyB0aGVpciB0aGluZwomIzQzOwkgKiBsZXQgdGhlbSBkbyB0aGVpciB0aGluZy4gIFRoZSBob2xkZXIgbWF5IGFsc28gYmUKJiM0MzsJICogcmRzX2Nvbm5fc2h1dGRvd24oKSB0ZWFyaW5nIHRoZSBwYXRoIGRvd24sIGluIHdoaWNoIGNhc2UKJiM0MzsJICogdGhlcmUgaXMgbm90aGluZyB0byBwb3N0LgogCSAqLwogCWlmICghYWNxdWlyZV9yZWZpbGwoY29ubikpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmMKaW5kZXggMTVhMWI5N2YxM2U3Ni4uMWFmYTk4MWU1YzA2ZCAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9zZW5kLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9zZW5kLmMKQEAgLTExNCw4ICYjNDM7MTE0LDEzIEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfaW5feG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJICogaG90IHBhdGggYW5kIGZpbmRpbmcgd2FpdGVycyBpcyB2ZXJ5IHJhcmUuICBXZSBkb24mIzM5O3Qgd2FudCB0byB3YWxrCiAJICogdGhlIHN5c3RlbS13aWRlIGhhc2hlZCB3YWl0cXVldWUgYnVja2V0cyBpbiB0aGUgZmFzdCBwYXRoIG9ubHkgdG8KIAkgKiBhbG1vc3QgbmV2ZXIgZmluZCB3YWl0ZXJzLgomIzQzOwkgKgomIzQzOwkgKiB3cV9oYXNfc2xlZXBlcigpIHN1cHBsaWVzIHRoZSBmdWxsIGJhcnJpZXIgdGhhdCBvcmRlcnMgdGhlIHdhaXQKJiM0MzsJICogcXVldWUgcmVhZCBhZnRlciB0aGUgYml0IGNsZWFyOyBjbGVhcl9iaXRfdW5sb2NrKCkgYWxvbmUgaXMgb25seQomIzQzOwkgKiBhIHJlbGVhc2UgYW5kIHdvdWxkIGxldCB0aGlzIGNoZWNrIHJlYWQgYSBzdGFsZSBlbXB0eSBxdWV1ZSwKJiM0MzsJICogbG9zaW5nIHRoZSB3YWtlLXVwLgogCSAqLwotCWlmICh3YWl0cXVldWVfYWN0aXZlKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKSkKJiM0MzsJaWYgKHdxX2hhc19zbGVlcGVyKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKSkKIAkJd2FrZV91cF9hbGwoJmFtcDtjcC0mZ3Q7Y3Bfd2FpdHEpOwogfQogCkBAIC0yMzksOCAmIzQzOzI0NCwxMSBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJV1JJVEVfT05DRShjcC0mZ3Q7Y3Bfc2VuZF9nZW4sIHNlbmRfZ2VuKTsKIAogCS8qCi0JICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIHRlc3RzIFJEU19JTl9YTUlULAotCSAqIHdlIGRvIHRoZSBvcHBvc2l0ZSB0byBhdm9pZCByYWNlcy4KJiM0MzsJICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIGFjcXVpcmVzCiYjNDM7CSAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZS4KJiM0MzsJICogT3duZXJzaGlwIGlzIGRlY2lkZWQgYnkgdGhlIGF0b21pYyBSTVcgb24gdGhlIGNwX2ZsYWdzIHdvcmQ6CiYjNDM7CSAqIGlmIHRoZSB0ZWFyZG93biB3b24gdGhlIGJpdCB3ZSBiYWNrIG9mZiBoZXJlLCBhbmQgaWYgd2Ugd29uCiYjNDM7CSAqIGl0IHRoZSB0ZWFyZG93biB3YWl0cyB1bnRpbCB3ZSByZWxlYXNlIGl0LgogCSAqLwogCWlmICghcmRzX2Nvbm5fcGF0aF91cChjcCkpIHsKIAkJcmVsZWFzZV9pbl94bWl0KGNwKTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwLmMgYi9uZXQvcmRzL3RjcC5jCmluZGV4IGIyNjM2MzRhYzc1MGQuLjc3NGE3MWY4OGQzNzUgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy90Y3AuYwpAQCAtMTE1LDQ2ICYjNDM7MTE1LDkwIEBAIHZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogfQogCiAvKgotICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSBzd2l0Y2hlcyB0aGUgdG8gdGhlIG5ldyBzb2NrIGFuZAotICogcmV0dXJucyB0aGUgZXhpc3RpbmcgdGMtJmd0O3Rfc29jay4KJiM0MzsgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpIHN3aXRjaGVzIGEgcGF0aCB0byBhIG5ldyBzb2NrZXQgYW5kCiYjNDM7ICogcmVsZWFzZXMgdGhlIG9sZCBvbmUgaXQgZmluZHMgaW4gdGMtJmd0O3Rfc29jaywgcmVzb2x2aW5nIGEgZHVlbGxpbmcKJiM0MzsgKiBTWU4uCiAgKgotICogVGhlIG9ubHkgZnVuY3Rpb25zIHRoYXQgc2V0IHRjLSZndDt0X3NvY2sgYXJlIHJkc190Y3Bfc2V0X2NhbGxiYWNrcwotICogYW5kIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzLiAgU2VuZCBhbmQgcmVjZWl2ZSB0cnVzdCB0aGF0Ci0gKiBpdCBpcyBzZXQuICBUaGUgYWJzZW5jZSBvZiBSRFNfQ09OTl9VUCBiaXQgcHJvdGVjdHMgdGhvc2UgcGF0aHMKLSAqIGZyb20gYmVpbmcgY2FsbGVkIHdoaWxlIGl0IGlzbiYjMzk7dCBzZXQuCiYjNDM7ICogdGMtJmd0O3Rfc29jayBpcyBzZXQgYnkgcmRzX3RjcF9zZXRfY2FsbGJhY2tzKCkgYW5kIGNsZWFyZWQgYnkKJiM0MzsgKiByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKCkuICBGb3VyIHBhdGhzIHdyaXRlIGl0OiB0aGUgYWN0aXZlCiYjNDM7ICogY29ubmVjdCBpbiByZHNfdGNwX2Nvbm5fcGF0aF9jb25uZWN0KCksIHdoaWNoIHNldHMgaXQgYW5kIGNsZWFycyBpdAomIzQzOyAqIGFnYWluIG9uIGZhaWx1cmU7IHRoZSBhY2NlcHQgcGF0aCBpbiByZHNfdGNwX2FjY2VwdF9vbmUoKSwgd2hpY2gKJiM0MzsgKiBzZXRzIGl0IGZvciBhIHBhdGggd2l0aCBubyBzb2NrZXQgeWV0OyB0aGUgdGVhcmRvd24gaW4KJiM0MzsgKiByZHNfdGNwX2Nvbm5fcGF0aF9zaHV0ZG93bigpLCB3aGljaCBjbGVhcnMgaXQ7IGFuZCB0aGUgc3dhcCBkb25lCiYjNDM7ICogaGVyZSwgd2hpY2ggZG9lcyBib3RoLiAgVGhlIGNvbm5lY3QgYW5kIGFjY2VwdCBwYXRocyBhcmUgc2VyaWFsaXplZAomIzQzOyAqIGFnYWluc3QgZWFjaCBvdGhlciBieSB0X2Nvbm5fcGF0aF9sb2NrLiAgU2VuZCBhbmQgcmVjZWl2ZSB0cnVzdAomIzQzOyAqIHRoYXQgaXQgaXMgc2V0OiB0aGUgYWJzZW5jZSBvZiBSRFNfQ09OTl9VUCBwcm90ZWN0cyB0aG9zZSBwYXRocwomIzQzOyAqIGZyb20gYmVpbmcgY2FsbGVkIHdoaWxlIGl0IGlzbiYjMzk7dCwgYW5kIHRoZSBzd2FwIGRvbmUgaGVyZSBydW5zIHVuZGVyCiYjNDM7ICogUkRTX0lOX1hNSVQgc28gdGhhdCBpdCBjYW5ub3QgaW50ZXJsZWF2ZSB3aXRoIGEgc2VuZGVyIGFscmVhZHkKJiM0MzsgKiBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpLgogICovCiB2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkgICAgIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKIHsKIAlzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLSZndDtjcF90cmFuc3BvcnRfZGF0YTsKLQlzdHJ1Y3Qgc29ja2V0ICpvc29jayA9IHRjLSZndDt0X3NvY2s7Ci0KLQlpZiAoIW9zb2NrKQotCQlnb3RvIG5ld3NvY2s7CiYjNDM7CXN0cnVjdCBzb2NrZXQgKm9zb2NrOwogCiAJLyogTmVlZCB0byByZXNvbHZlIGEgZHVlbGxpbmcgU1lOIGJldHdlZW4gcGVlcnMuCiAJICogV2UgaGF2ZSBhbiBvdXRzdGFuZGluZyBTWU4gdG8gdGhpcyBwZWVyLCB3aGljaCBtYXkKIAkgKiBwb3RlbnRpYWxseSBoYXZlIHRyYW5zaXRpb25lZCB0byB0aGUgUkRTX0NPTk5fVVAgc3RhdGUsCiAJICogc28gd2UgbXVzdCBxdWllc2NlIGFueSBzZW5kIHRocmVhZHMgYmVmb3JlIHJlc2V0dGluZwotCSAqIGNwX3RyYW5zcG9ydF9kYXRhLiBXZSBxdWllc2NlIHRoZXNlIHRocmVhZHMgYnkgc2V0dGluZwotCSAqIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFJEU19DT05OX1VQLCBhbmQgdGhlbgotCSAqIHdhaXRpbmcgZm9yIGFueSBleGlzdGluZyB0aHJlYWRzIGluIHJkc19zZW5kX3htaXQgdG8KLQkgKiBjb21wbGV0ZSByZWxlYXNlX2luX3htaXQoKS4gKFN1YnNlcXVlbnQgdGhyZWFkcyBlbnRlcmluZwotCSAqIHJkc19zZW5kX3htaXQoKSB3aWxsIGJhaWwgb24gIXJkc19jb25uX3VwKCkuCiYjNDM7CSAqIGNwX3RyYW5zcG9ydF9kYXRhLiAgU2V0dGluZyBjcF9zdGF0ZSB0byBzb21ldGhpbmcgb3RoZXIKJiM0MzsJICogdGhhbiBSRFNfQ09OTl9VUCBzdG9wcyBuZXcgc2VuZGVycywgYW5kIG93bmluZyBSRFNfSU5fWE1JVAomIzQzOwkgKiBleGNsdWRlcyBhbnkgdGhyZWFkIGFscmVhZHkgaW5zaWRlIHJkc19zZW5kX3htaXQoKSAtIG9yIGEKJiM0MzsJICogdGVhcmRvd24gaW4gcmRzX2Nvbm5fc2h1dGRvd24oKSwgd2hpY2ggaG9sZHMgdGhlIHNhbWUgbG9jawomIzQzOwkgKiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB0cmFuc3BvcnQgc2h1dGRvd24gLSBmb3IgdGhlIHdob2xlCiYjNDM7CSAqIHNvY2tldCBzd2FwIGFuZCB0aGUgcmRzX3NlbmRfcGF0aF9yZXNldCgpIGJlbG93LgogCSAqCi0JICogSG93ZXZlciBhbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwCi0JICogbWFya2luZyB0aGUgY29ubiBhcyBSRFNfQ09OTl9VUCwgYW5kIHdvdWxkIGFnYWluIHBlcm1pdAotCSAqIHJkc19zZW5kX3htaSgpIHRocmVhZHMgdGhyb3VnaCwgc28gaWRlYWxseSB3ZSB3b3VsZAotCSAqIHN5bmNocm9uaXplIG9uIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90Ci0JICogZG8gdGhhdDogd2FpdGluZyBvbiAhUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5Ci0JICogZW5kIHVwIGRlYWRsb2NraW5nIHdpdGggdGNwX3NlbmRtc2coKSwgYW5kIHRoZSBSRFNfSU5fWE1JVAotCSAqIHdvdWxkIG5vdCBnZXQgc2V0LiBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG8KLQkgKiBSRFNfQ09OTl9SRVNFVFRUSU5HLCB0byBlbnN1cmUgdGhhdCByZHNfdGNwX3N0YXRlX2NoYW5nZQotCSAqIGNhbm5vdCBtYXJrIHJkc19jb25uX3BhdGhfdXAoKSBpbiB0aGUgd2luZG93IGJlZm9yZSBsb2NrX3NvY2soKQomIzQzOwkgKiBBbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwIG1hcmtpbmcgdGhlCiYjNDM7CSAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpCiYjNDM7CSAqIHRocmVhZHMgdGhyb3VnaCwgc28gaWRlYWxseSB3ZSB3b3VsZCBzeW5jaHJvbml6ZSBvbgomIzQzOwkgKiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdCBkbyB0aGF0OiBhY3F1aXJpbmcKJiM0MzsJICogUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5IGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoCiYjNDM7CSAqIHRjcF9zZW5kbXNnKCksIHdoaWNoIHRha2VzIHRoZSBzb2NrZXQgbG9jayB3aGlsZSBob2xkaW5nCiYjNDM7CSAqIFJEU19JTl9YTUlULiAgQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvCiYjNDM7CSAqIFJEU19DT05OX1JFU0VUVElORywgdG8gZW5zdXJlIHRoYXQgcmRzX3RjcF9zdGF0ZV9jaGFuZ2UKJiM0MzsJICogY2Fubm90IG1hcmsgcmRzX2Nvbm5fcGF0aF91cCgpIGluIHRoZSB3aW5kb3cgYmVmb3JlCiYjNDM7CSAqIGxvY2tfc29jaygpLgomIzQzOwkgKgomIzQzOwkgKiBPbmx5IG1ha2UgdGhhdCB0cmFuc2l0aW9uIGlmIHRoZSBwYXRoIGlzIHN0aWxsIGNvbm5lY3RpbmcKJiM0MzsJICogKG9yIGFscmVhZHkgcmVzZXR0aW5nIGZyb20gYW4gZWFybGllciBkdWVsKS4gIEEgcGF0aCBpbiBhbnkKJiM0MzsJICogb3RoZXIgc3RhdGUgLSB0eXBpY2FsbHkgUkRTX0NPTk5fRElTQ09OTkVDVElORyBvcgomIzQzOwkgKiBSRFNfQ09OTl9FUlJPUiB3aXRoIGEgc2h1dGRvd24gaW4gZmxpZ2h0IC0gaXMgZHJvcHBlZAomIzQzOwkgKiBpbnN0ZWFkLiAgVGhhdCBzdGlsbCByZXBsYWNlcyBpdHMgc3RhdGUsIHdpdGggUkRTX0NPTk5fRVJST1IsCiYjNDM7CSAqIGFuZCwgdW5sZXNzIGEgcGVuZGluZyBkZXN0cm95IGlzIGFib3V0IHRvIHJlYXAgdGhlIHdob2xlCiYjNDM7CSAqIGNvbm5lY3Rpb24gYW55d2F5LCBxdWV1ZXMgb25lIG1vcmUgc2h1dGRvd24gcGFzcy4gIEEgc2h1dGRvd24KJiM0MzsJICogYWxyZWFkeSBpbiBmbGlnaHQgbGVhdmVzIHRoYXQgUkRTX0NPTk5fRVJST1IgYWxvbmUgd2hlbiBpdAomIzQzOwkgKiBmaW5pc2hlczsgdGhlIHF1ZXVlZCBwYXNzIHRoZW4gY29tcGxldGVzIHRoZSB0cmFuc2l0aW9uIHRvCiYjNDM7CSAqIFJEU19DT05OX0RPV04gYW5kIHRlYXJzIGRvd24gYW55dGhpbmcgdGhhdCBhdHRhY2hlZCB0byB0aGUKJiM0MzsJICogcGF0aCBpbiB0aGUgbWVhbnRpbWUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fQ09OTkVDVElORywKJiM0MzsJCQkJICAgICAgUkRTX0NPTk5fUkVTRVRUSU5HKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9SRVNFVFRJTkcsCiYjNDM7CQkJCSAgICAgIFJEU19DT05OX1JFU0VUVElORykpCiYjNDM7CQlyZHNfY29ubl9wYXRoX2Ryb3AoY3AsIDApOwomIzQzOwl3YWl0X2V2ZW50KGNwLSZndDtjcF93YWl0cSwKJiM0MzsJCSAgICF0ZXN0X2FuZF9zZXRfYml0X2xvY2soUkRTX0lOX1hNSVQsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7CiYjNDM7CiYjNDM7CS8qIFJlYWQgdF9zb2NrIG9ubHkgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlULCBuZXZlciBiZWZvcmUgdGhlCiYjNDM7CSAqIHdhaXQ6IHRoZSB0ZWFyZG93biBpbiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGQKJiM0MzsJICogc29ja2V0IGFuZCBjbGVhcnMgdF9zb2NrLCBzbyBhIHBvaW50ZXIgc2FtcGxlZCBlYXJsaWVyIGNhbgomIzQzOwkgKiBiZSBzdGFsZSBieSB0aGUgdGltZSB3ZSB3YWtlIHVwLiAgVGhlIHRlYXJkb3duIGhvbGRzIHRoZQomIzQzOwkgKiBzYW1lIGxvY2sgd2hpbGUgaXQgZG9lcyBzbywgc28gd2hhdCB3ZSByZWFkIGhlcmUgY2Fubm90CiYjNDM7CSAqIGNoYW5nZSB1bmRlciB1cyB1bnRpbCB3ZSByZWxlYXNlIGl0LgomIzQzOwkgKi8KJiM0MzsJb3NvY2sgPSB0Yy0mZ3Q7dF9zb2NrOwomIzQzOwlpZiAoIW9zb2NrKQomIzQzOwkJZ290byBuZXdzb2NrOwomIzQzOwomIzQzOwkvKiByZXNldCByZWNlaXZlIHNpZGUgc3RhdGUgZm9yIHJkc190Y3BfZGF0YV9yZWN2KCkgZm9yIG9zb2NrLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgc3luYyBjYW5jZWxzIHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVCByZWx5IG9uIGNwX3dxCiYjNDM7CSAqIGJlaW5nIG9yZGVyZWQ6IGEgdGVhcmRvd24gYmxvY2tlZCBvbiB0aGUgYml0IG9jY3VwaWVzCiYjNDM7CSAqIGNwX3dxJiMzOTtzIG9ubHkgZXhlY3V0aW9uIHNsb3QsIHNvIGNwX3NlbmRfdyBhbmQgY3BfcmVjdl93IGFyZQomIzQzOwkgKiBwZW5kaW5nIGF0IG1vc3QgYW5kIHRoZSBjYW5jZWxzIG5ldmVyIGZsdXNoLiAgTm90aGluZyBoZXJlCiYjNDM7CSAqIG1heSBmbHVzaCBvciB3YWl0IG9uIGNwX3dxIGl0c2VsZi4KIAkgKi8KLQlhdG9taWNfc2V0KCZhbXA7Y3AtJmd0O2NwX3N0YXRlLCBSRFNfQ09OTl9SRVNFVFRJTkcpOwotCXdhaXRfZXZlbnQoY3AtJmd0O2NwX3dhaXRxLCAhdGVzdF9iaXQoUkRTX0lOX1hNSVQsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7Ci0JLyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jayAgKi8KIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3Bfc2VuZF93KTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3BfcmVjdl93KTsKIAlsb2NrX3NvY2sob3NvY2stJmd0O3NrKTsKQEAgLTE3Miw2ICYjNDM7MjE2LDkgQEAgdm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCWxvY2tfc29jayhzb2NrLSZndDtzayk7CiAJcmRzX3RjcF9zZXRfY2FsbGJhY2tzKHNvY2ssIGNwKTsKIAlyZWxlYXNlX3NvY2soc29jay0mZ3Q7c2spOwomIzQzOwomIzQzOwljbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CXdha2VfdXBfYWxsKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKTsKIH0KIAogLyogQWRkIHRjIHRvIHJkc190Y3BfdGNfbGlzdCBhbmQgc2V0IHRjLSZndDt0X3NvY2suIFNlZSBjb21tZW50cwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uYwppbmRleCBhM2RiOWIwNTcwODRkLi4xM2ZhNjBjMTk4NWJiIDEwMDY0NAotLS0gYS9uZXQvcmRzL3RjcF9saXN0ZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcF9saXN0ZW4uYwpAQCAtMjk1LDcgJiM0MzsyOTUsMTEgQEAgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bikKIAlpZiAocnNfdGNwLSZndDt0X3NvY2spIHsKIAkJLyogRHVlbGxpbmcgU1lOIGhhcyBiZWVuIGhhbmRsZWQgaW4gcmRzX3RjcF9hY2NlcHRfb25lKCkgKi8KIAkJcmRzX3RjcF9yZXNldF9jYWxsYmFja3MobmV3X3NvY2ssIGNwKTsKLQkJLyogcmRzX2Nvbm5lY3RfcGF0aF9jb21wbGV0ZSgpIG1hcmtzIFJEU19DT05OX1VQICovCiYjNDM7CQkvKiByZHNfY29ubmVjdF9wYXRoX2NvbXBsZXRlKCkgbWFya3MgUkRTX0NPTk5fVVAsIG9yLAomIzQzOwkJICogaWYgYSBjb25jdXJyZW50IHNodXRkb3duIHdvbiB0aGUgZHVlbCwgZHJvcHMgdGhlCiYjNDM7CQkgKiBwYXRoIGFnYWluIGFuZCB0aGUgcGFzcyB0aGF0IGRyb3AgcXVldWVzIHJlYXBzIHRoZQomIzQzOwkJICogc29ja2V0IGluc3RhbGxlZCBhYm92ZS4KJiM0MzsJCSAqLwogCQlyZHNfY29ubmVjdF9wYXRoX2NvbXBsZXRlKGNwLCBSRFNfQ09OTl9SRVNFVFRJTkcpOwogCX0gZWxzZSB7CiAJCXJkc190Y3Bfc2V0X2NhbGxiYWNrcyhuZXdfc29jaywgY3ApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTc3CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3Mgd29ydGggdGhlIHRpbWUgdG8gdGhyb3cgc29tZSBmdXp6aW5nIGF0IGl0LiBMb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYG5ldC9yZHMvYCDigJMgdGhhdCBzY3JlYW1zIFJEUywgUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cy4gUmlnaHQsIEFGX1JEUyBzb2NrZXRzLiBUaGlzIGlzIGEgcHJldHR5IGNyaXRpY2FsIG5ldHdvcmtpbmcgcHJvdG9jb2wsIGFuZCBpdCBydW5zIGluIHRob3NlIHVzdWFsIGVudmlyb25tZW50cyDigJMgc3RhbmRhcmQsIFFFTVUsIEdDRSDigJMgYWNjZXNzaWJsZSB0aHJvdWdoIHNvY2tldHMgb3IgbG9vcGJhY2svVENQLiBUaGF0JiMzOTtzIGdvb2QgY292ZXJhZ2UgZm9yIGZ1enppbmcgdGFyZ2V0cy4KClNwZWNpZmljYWxseSwgdGhlIHBhdGNoIHRvdWNoZXMgYGNvbm5lY3Rpb24uY2AsIGBpYl9yZWN2LmNgLCBgc2VuZC5jYCwgYHRjcC5jYCwgYW5kIGB0Y3BfbGlzdGVuLmNgLiBIbW0sIHRob3NlIGZpbGUgbmFtZXMgdGhlbXNlbHZlcyBhcmUgaW50ZXJlc3RpbmcuIFdlJiMzOTtyZSB0YWxraW5nIGxvY2tpbmcsIHN0YXRlIHRyYW5zaXRpb25zLCBzeW5jaHJvbml6YXRpb24gZHVyaW5nIGNvbm5lY3Rpb24gc2h1dGRvd24sIFRDUCB0cmFuc3BvcnQgcmVzZXQgY2FsbGJhY2tzLCByZWZpbGwgbG9ja2luZywgYW5kIHNlbmQgeG1pdCBmdW5jdGlvbnMuIFRoaXMgY291bGQgYmUgZ29sZCEgTG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlcyBhcmUgdGhlIGtpbmQgb2YgdGhpbmdzIGZ1enppbmcgbG92ZXMgdG8gZXhwb3NlLiBTdGF0ZSB0cmFuc2l0aW9ucyBhcmUgYW5vdGhlciBsaWtlbHkgc291cmNlIG9mIHdlaXJkbmVzcy4gVENQLXNwZWNpZmljIGNoYW5nZXMsIHRvbywgbWVhbiBtb3JlIHN1cmZhY2UgYXJlYS4gUmVmaWxsIGxvY2tpbmcgaXMgYW4gaW50ZXJlc3RpbmcgdmVjdG9yLiBTZW5kIHhtaXQgaXMgYSBjcml0aWNhbCBmdW5jdGlvbiwgc28gZXZlbiB0aGUgbW9zdCBiYXNpYyBlcnJvciBoZXJlIHdvdWxkIGNhdXNlIHRyb3VibGUuCgpOb3csIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBmaWxlcyBhbmQgY2hlY2sgdGhlIEtjb25maWcgZm9yIFJEUy4uLiBHb3R0YSBtYWtlIHN1cmUgaXQmIzM5O3MgZW5hYmxlZCBhbmQgd2UgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zIGJlZm9yZSB3YXN0aW5nIHRpbWUgZnV6emluZyBzb21ldGhpbmcgdGhhdCYjMzk7cyBub3QgZXZlbiBidWlsdCBpbnRvIHRoZSBrZXJuZWwuIEFmdGVyIHRoYXQsIHdlIGRpdmUgaW4gYW5kIGFzc2VzcyB0aGUgZnVuY3Rpb25zIGltcGFjdGVkIHRvIGxvb2sgYXQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgdGhlIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFJEUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9yZHMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Jkcy9LY29uZmlnLTItXG5uZXQvcmRzL0tjb25maWc6Mzpjb25maWcgUkRTXG5uZXQvcmRzL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O1RoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXCYjMzQ7XG4tLVxubmV0L3Jkcy9LY29uZmlnLTktXG5uZXQvcmRzL0tjb25maWc6MTA6Y29uZmlnIFJEU19SRE1BXG5uZXQvcmRzL0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBJbmZpbmliYW5kXCYjMzQ7XG4tLVxubmV0L3Jkcy9LY29uZmlnLTE2LVxubmV0L3Jkcy9LY29uZmlnOjE3OmNvbmZpZyBSRFNfVENQXG5uZXQvcmRzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtSRFMgb3ZlciBUQ1BcJiMzNDtcbi0tXG5uZXQvcmRzL0tjb25maWctMjQtXG5uZXQvcmRzL0tjb25maWc6MjU6Y29uZmlnIFJEU19ERUJVR1xubmV0L3Jkcy9LY29uZmlnLTI2LVx0Ym9vbCBcJiMzNDtSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcwMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBSRFMgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIFJlbW90ZSBEaXJlY3QgTWVtb3J5IEFjY2VzcyAoUkRNQSkgb3ZlciBUQ1AgKFJEUykga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHRoZSB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUuIFNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gY3JhY2sgb3BlbiB0aGUgYG5ldC9yZHMvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gcGxhY2UgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLCByaWdodD8gSXQmIzM5O2xsIGxheSBvdXQgYWxsIHRoZSByZWxhdGlvbnNoaXBzIGFuZCBwb3NzaWJpbGl0aWVzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBpbiB0aGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGJ1aWxkIHNldHRpbmdzIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBGcm9tIHRoZXJlLCBJIGNhbiBmaWd1cmUgb3V0IHRoZSBiZXN0IGFwcHJvYWNoIHRvIGNvbmZpZ3VyaW5nIGl0IHRvIHdvcmsgd2l0aGluIG91ciBzcGVjaWZpYyBzZXR1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yZHMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdGNvbmZpZyBSRFNcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzIFByb3RvY29sXCYjMzQ7XG4gICA1Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgVGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgcHJvdG9jb2wgcHJvdmlkZXMgcmVsaWFibGUsXG4gICA4Olx0XHQgIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiBkYXRhZ3JhbXMgb3ZlciBJbmZpbmliYW5kIG9yIFRDUC5cbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgUkRTX1JETUFcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIEluZmluaWJhbmRcJiMzNDtcbiAgMTI6XHRcdGRlcGVuZHMgb24gUkRTIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EIFx1MDAyNlx1MDAyNiBJTkZJTklCQU5EX0FERFJfVFJBTlNcbiAgMTM6XHRcdGhlbHBcbiAgMTQ6XHRcdCAgQWxsb3cgUkRTIHRvIHVzZSBJbmZpbmliYW5kIGFzIGEgdHJhbnNwb3J0LlxuICAxNTpcdFx0ICBUaGlzIHRyYW5zcG9ydCBzdXBwb3J0cyBSRE1BIG9wZXJhdGlvbnMuXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFJEU19UQ1BcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O1JEUyBvdmVyIFRDUFwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiBSRFNcbiAgMjA6XHRcdGRlcGVuZHMgb24gSVBWNiB8fCAhSVBWNlxuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBBbGxvdyBSRFMgdG8gdXNlIFRDUCBhcyBhIHRyYW5zcG9ydC5cbiAgMjM6XHRcdCAgVGhpcyB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCBSRE1BIG9wZXJhdGlvbnMuXG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIFJEU19ERUJVR1xuICAyNjpcdFx0Ym9vbCBcJiMzNDtSRFMgZGVidWdnaW5nIG1lc3NhZ2VzXCYjMzQ7XG4gIDI3Olx0XHRkZXBlbmRzIG9uIFJEU1xuICAyODpcdFx0ZGVmYXVsdCBuXG4gIDI5Olx0XG4gIDMwOlx0Y29uZmlnIEdDT1ZfUFJPRklMRV9SRFNcbiAgMzE6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIFJEU1wmIzM0O1xuICAzMjpcdFx0ZGVwZW5kcyBvbiBHQ09WX0tFUk5FTFxuICAzMzpcdFx0aGVscFxuICAzNDpcdFx0ICBFbmFibGUgR0NPViBwcm9maWxpbmcgb24gUkRTIGZvciBjaGVja2luZyB3aGljaCBmdW5jdGlvbnMvbGluZXNcbiAgMzU6XHRcdCAgYXJlIGV4ZWN1dGVkLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgzNjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIFJEUyBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBgbmV0L3Jkc2AgZGlyZWN0b3J5LiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIHZhcmlvdXMgUkRTIGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkLCBhbmQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIHRyaWdnZXIgdGhlIGluY2x1c2lvbiAob3IgZXhjbHVzaW9uKSBvZiBzcGVjaWZpYyBzb3VyY2UgZmlsZXMuIFRoZSBNYWtlZmlsZSBpcyB0aGUgbmF0dXJhbCBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBhbmFseXNpcy4gSSYjMzk7bSBsb29raW5nIHRvIG1hcCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbCBsb2dpY+KAlHNwZWNpZmljYWxseSwgSSB3YW50IHRvIHNlZSB3aGljaCBzb3VyY2UgZmlsZXMgYXJlIGJ1aWx0LCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmbGFncy4gVGhpcyB3aWxsIHRlbGwgbWUgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZGVwZW5kaW5nIG9uIGtlcm5lbCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9yZHMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0b2JqLSQoQ09ORklHX1JEUykgJiM0Mzs9IHJkcy5vXG4gICAzOlx0cmRzLXkgOj1cdGFmX3Jkcy5vIGJpbmQubyBjb25nLm8gY29ubmVjdGlvbi5vIGluZm8ubyBtZXNzYWdlLm8gICBcXFxuICAgNDpcdFx0XHRcdHJlY3YubyBzZW5kLm8gc3RhdHMubyBzeXNjdGwubyB0aHJlYWRzLm8gdHJhbnNwb3J0Lm8gXFxcbiAgIDU6XHRcdFx0XHRsb29wLm8gcGFnZS5vIHJkbWEub1xuICAgNjpcdFxuICAgNzpcdG9iai0kKENPTkZJR19SRFNfUkRNQSkgJiM0Mzs9IHJkc19yZG1hLm9cbiAgIDg6XHRyZHNfcmRtYS15IDo9XHRyZG1hX3RyYW5zcG9ydC5vIFxcXG4gICA5Olx0XHRcdFx0aWIubyBpYl9jbS5vIGliX3JlY3YubyBpYl9yaW5nLm8gaWJfc2VuZC5vIGliX3N0YXRzLm8gXFxcbiAgMTA6XHRcdFx0XHRpYl9zeXNjdGwubyBpYl9yZG1hLm8gaWJfZnJtci5vXG4gIDExOlx0XG4gIDEyOlx0XG4gIDEzOlx0b2JqLSQoQ09ORklHX1JEU19UQ1ApICYjNDM7PSByZHNfdGNwLm9cbiAgMTQ6XHRyZHNfdGNwLXkgOj1cdFx0dGNwLm8gdGNwX2Nvbm5lY3QubyB0Y3BfbGlzdGVuLm8gdGNwX3JlY3YubyBcXFxuICAxNTpcdFx0XHRcdHRjcF9zZW5kLm8gdGNwX3N0YXRzLm9cbiAgMTY6XHRcbiAgMTc6XHRjY2ZsYWdzLSQoQ09ORklHX1JEU19ERUJVRylcdDo9XHQtRFJEU19ERUJVR1xuICAxODpcdFxuICAxOTpcdCMgZm9yIEdDT1YgY292ZXJhZ2UgcHJvZmlsaW5nXG4gIDIwOlx0aWZkZWYgQ09ORklHX0dDT1ZfUFJPRklMRV9SRFNcbiAgMjE6XHRHQ09WX1BST0ZJTEUgOj0geVxuICAyMjpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk1MAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQ0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUkRTIE1vZHVsZSBEZXBlbmRlbmNpZXMgYW5kIEZ1bmN0aW9uIFVzYWdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFJEUyBjb2RlIGFuZCB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFuZCBob3cgdGhlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhY3Jvc3MgdGhlIG1vZHVsZXMuIEZpcnN0LCBJIHNlZSB0aGF0IGBuZXQvcmRzL2Nvbm5lY3Rpb24uY2AgYW5kIGBuZXQvcmRzL3NlbmQuY2AgYXJlIHN0cmFpZ2h0Zm9yd2FyZGx5IGJ1aWx0IHVuZGVyIGBDT05GSUdfUkRTYC4gYG5ldC9yZHMvaWJfcmVjdi5jYCBoYXMgYSBtb3JlIHNwZWNpZmljIGRlcGVuZGVuY3k7IGl0JiMzOTtzIGJ1aWx0IG9ubHkgaWYgYENPTkZJR19SRFNfUkRNQWAgaXMgZW5hYmxlZCwgd2hpY2ggaW1wbGllcyB3ZSBoYXZlIFJEUywgSW5maW5pYmFuZCwgYW5kIHRoZSBJbmZpbmliYW5kIGFkZHJlc3MgdHJhbnNsYXRpb24gY29tcG9uZW50cyBhbGwgaW4gcGxheS4gRmluYWxseSwgYG5ldC9yZHMvdGNwLmNgIGFuZCBgbmV0L3Jkcy90Y3BfbGlzdGVuLmNgIHJlbHkgb24gYENPTkZJR19SRFNfVENQYCwgbWVhbmluZyBSRFMgbXVzdCBiZSBlbmFibGVkIGFzIGEgcHJlcmVxdWlzaXRlLgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBpbnRvIHRoZSBmdW5jdGlvbnMuIEluIGBuZXQvcmRzL2Nvbm5lY3Rpb24uY2AsIGByZHNfY29ubl9zaHV0ZG93bmAgaXMgdGhlIGltcG9ydGFudCBvbmUgaGVyZSwgYW5kIGl0JiMzOTtzIGV4cG9ydGVkLCB3aGljaCBpcyBnb29kIHRvIGtub3csIGFuZCB0aGUgY29kZSBjb21tZW50cyBkbyBub3RlIHRoYXQgaXRzIHVzZWQgYWNyb3NzIFJEUyBtb2R1bGVzLiBXZSBhbHNvIGhhdmUgYHJkc19jb25uX3BhdGhfcmVzZXRgLCB3aGljaCBpcyBzdGF0aWMuIEluIGBuZXQvcmRzL2liX3JlY3YuY2AsIGByZHNfaWJfcmVjdl9yZWZpbGxgIGlzIG5vbi1zdGF0aWMgYW5kIGByZWxlYXNlX3JlZmlsbGAgaXMgc3RhdGljLiBJbiBgbmV0L3Jkcy9zZW5kLmNgLCBgcmRzX3NlbmRfeG1pdGAgaXMgbm9uLXN0YXRpYywgYW5kIGByZWxlYXNlX2luX3htaXRgIGlzIHN0YXRpYy4gRmluYWxseSwgaW4gdGhlIFRDUCBtb2R1bGVzLCBgcmRzX3RjcF9yZXNldF9jYWxsYmFja3NgIGFuZCBgcmRzX3RjcF9hY2NlcHRfb25lYCBhcmUgYm90aCBub24tc3RhdGljLgoKTm93IEkgbmVlZCB0byBjaGVjayB0aG9zZSBub24tc3RhdGljIGZ1bmN0aW9ucyBhZ2Fpbi4gSSYjMzk7bSBnb2luZyB0byByZXZpc2l0IGByZHNfY29ubl9zaHV0ZG93bmAsIGByZHNfc2VuZF94bWl0YCwgYHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzYCwgYHJkc190Y3BfYWNjZXB0X29uZWAsIGFuZCBgcmRzX2liX3JlY3ZfcmVmaWxsYCBzcGVjaWZpY2FsbHksIGFuZCB2ZXJpZnkgaWYgdGhleSBhcmUgZXhwb3J0ZWQgb3Igbm90LCBhbmQgYW55IGhlYWRlcnMgb3IgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBmdW5jdGlvbiwgaW4gb3JkZXIgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Jkc19jb25uX3NodXRkb3dufHJkc19zZW5kX3htaXR8cmRzX3RjcF9yZXNldF9jYWxsYmFja3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvcmRzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9yZHMvY29uZy5jPTIxNz12b2lkIHJkc19jb25nX3F1ZXVlX3VwZGF0ZXMoc3RydWN0IHJkc19jb25nX21hcCAqbWFwKVxuLS1cbm5ldC9yZHMvY29uZy5jLTIzMC1cdFx0XHRyZHNfc3RhdHNfaW5jKHNfY29uZ191cGRhdGVfcXVldWVkKTtcbm5ldC9yZHMvY29uZy5jOjIzMTpcdFx0XHQvKiBXZSBjYW5ub3QgaW5saW5lIHRoZSBjYWxsIHRvIHJkc19zZW5kX3htaXQoKSBoZXJlXG5uZXQvcmRzL2NvbmcuYy0yMzItXHRcdFx0ICogZm9yIHR3byByZWFzb25zIChib3RoIHBlcnRhaW5pbmcgdG8gYSBUQ1AgdHJhbnNwb3J0KTpcbi0tXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYz04Mz1zdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9yZHMvY29ubmVjdGlvbi5jLTEwOC0vKlxubmV0L3Jkcy9jb25uZWN0aW9uLmM6MTA5OiAqIFRoaXMgaXMgY2FsbGVkIGJ5IHJkc19jb25uX3NodXRkb3duKCkgb25jZSB0aGUgdHJhbnNwb3J0IGhhcyBicm91Z2h0XG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0xMTAtICogYSBwYXRoIGRvd24uICBJdCBjbGVhcnMgcGFydGlhbCBtZXNzYWdlIHN0YXRlIHNvIHRoYXQgdGhlIHRyYW5zcG9ydFxuLS1cbm5ldC9yZHMvY29ubmVjdGlvbi5jPTExNj1zdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbi0tXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0xMjktXHQgKiBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGFyZSBoZWxkIGFzIGxvY2tzIGJ5IHRoZVxubmV0L3Jkcy9jb25uZWN0aW9uLmM6MTMwOlx0ICogY2FsbGVyLCByZHNfY29ubl9zaHV0ZG93bigpLCB3aGljaCByZWxlYXNlcyB0aGVtIG9uY2UgdGhlXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0xMzEtXHQgKiB0ZWFyZG93biBpcyBjb21wbGV0ZS5cbi0tXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYz0zOTA9RVhQT1JUX1NZTUJPTF9HUEwocmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKTtcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTM5MS1cbm5ldC9yZHMvY29ubmVjdGlvbi5jOjM5Mjp2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTM5My17XG4tLVxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDM3LVx0XHQvKiBSZWxlYXNlIHRoZSB0d28gbG9ja3MgYW5kIHdha2UgYW55IHdhaXRlciAoZS5nLlxubmV0L3Jkcy9jb25uZWN0aW9uLmM6NDM4Olx0XHQgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpKSB0aGF0IGJsb2NrZWQgb24gdGhlbSB3aGlsZVxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDM5LVx0XHQgKiB3ZSBoZWxkIHRoZW0uICBUaGUgdW5sb2NrIG9yZGVycyB0aGUgdHJhbnNwb3J0JiMzOTtzIHJpbmdcbi0tXG5uZXQvcmRzL2liX2NtLmM9MjgyPXN0YXRpYyB2b2lkIHJkc19pYl90YXNrbGV0X2ZuX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKVxuLS1cbm5ldC9yZHMvaWJfY20uYy0yOTktXHQgICAgdGVzdF9iaXQoMCwgXHUwMDI2Y29ubi1cdTAwM2VjX21hcF9xdWV1ZWQpKSlcbm5ldC9yZHMvaWJfY20uYzozMDA6XHRcdHJkc19zZW5kX3htaXQoXHUwMDI2aWMtXHUwMDNlY29ubi1cdTAwM2VjX3BhdGhbMF0pO1xubmV0L3Jkcy9pYl9jbS5jLTMwMS19XG4tLVxubmV0L3Jkcy9pYl9yZWN2LmM9MzgyPXZvaWQgcmRzX2liX3JlY3ZfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgaW50IHByZWZpbGwsIGdmcF90IGdmcClcbi0tXG5uZXQvcmRzL2liX3JlY3YuYy0zOTQtXHQgKiBsZXQgdGhlbSBkbyB0aGVpciB0aGluZy4gIFRoZSBob2xkZXIgbWF5IGFsc28gYmVcbm5ldC9yZHMvaWJfcmVjdi5jOjM5NTpcdCAqIHJkc19jb25uX3NodXRkb3duKCkgdGVhcmluZyB0aGUgcGF0aCBkb3duLCBpbiB3aGljaCBjYXNlXG5uZXQvcmRzL2liX3JlY3YuYy0zOTYtXHQgKiB0aGVyZSBpcyBub3RoaW5nIHRvIHBvc3QuXG4tLVxubmV0L3Jkcy9pYl9zZW5kLmM9MjQ1PXZvaWQgcmRzX2liX3NlbmRfY3FlX2hhbmRsZXIoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3djICp3Yylcbi0tXG5uZXQvcmRzL2liX3NlbmQuYy0zMzUtICpcbm5ldC9yZHMvaWJfc2VuZC5jOjMzNjogKiBUaGUgUkRTIHNlbmQgY29kZSBpcyBlc3NlbnRpYWxseSBzaW5nbGUtdGhyZWFkZWQ7IHJkc19zZW5kX3htaXRcbm5ldC9yZHMvaWJfc2VuZC5jLTMzNy0gKiBzZXRzIFJEU19JTl9YTUlUIHRvIGVuc3VyZSBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBzZW5kIHJpbmcuXG4tLVxubmV0L3Jkcy9sb29wLmM9MjM1PXZvaWQgcmRzX2xvb3BfbmV0X2V4aXQodm9pZClcbi0tXG5uZXQvcmRzL2xvb3AuYy0yNDEtICogVGhpcyBpcyBtaXNzaW5nIC54bWl0XyogYmVjYXVzZSBsb29wIGRvZXNuJiMzOTt0IGdvIHRocm91Z2ggZ2VuZXJpY1xubmV0L3Jkcy9sb29wLmM6MjQyOiAqIHJkc19zZW5kX3htaXQoKSBhbmQgZG9lc24mIzM5O3QgY2FsbCByZHNfcmVjdl9pbmNvbWluZygpLiAgLmxpc3Rlbl9zdG9wIGFuZFxubmV0L3Jkcy9sb29wLmMtMjQzLSAqIC5sYWRkcl9jaGVjayBhcmUgbWlzc2luZyBiZWNhdXNlIHRyYW5zcG9ydC5jIGRvZXNuJiMzOTt0IGl0ZXJhdGUgb3ZlclxuLS1cbm5ldC9yZHMvcmRzLmg9NTQwPXN0cnVjdCByZHNfdHJhbnNwb3J0IHtcbi0tXG5uZXQvcmRzL3Jkcy5oLTU4MC1cdC8qXG5uZXQvcmRzL3Jkcy5oOjU4MTpcdCAqIC54bWl0IGlzIGNhbGxlZCBieSByZHNfc2VuZF94bWl0KCkgdG8gdGVsbCB0aGUgdHJhbnNwb3J0IHRvIHNlbmRcbm5ldC9yZHMvcmRzLmgtNTgyLVx0ICogcGFydCBvZiBhIG1lc3NhZ2UuICBUaGUgY2FsbGVyIHNlcmlhbGl6ZXMgb24gdGhlIHNlbmRfc2VtIHNvIHRoaXNcbi0tXG5uZXQvcmRzL3Jkcy5oPTgxNT1zdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyhzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3Jkcy9yZHMuaC04MTktXHRcdFx0XHRcdFx0dTggdG9zLCBnZnBfdCBnZnAsIGludCBkZXZfaWYpO1xubmV0L3Jkcy9yZHMuaDo4MjA6dm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3BhdGgpO1xubmV0L3Jkcy9yZHMuaC04MjEtdm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XG4tLVxubmV0L3Jkcy9yZHMuaD05NTc9dm9pZCByZHNfc2VuZF9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjb25uKTtcbm5ldC9yZHMvcmRzLmg6OTU4OmludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XG5uZXQvcmRzL3Jkcy5oLTk1OS1zdHJ1Y3Qgc29ja2FkZHJfaW47XG4tLVxubmV0L3Jkcy9zZW5kLmMtNDQtXG5uZXQvcmRzL3NlbmQuYzo0NTovKiBXaGVuIHRyYW5zbWl0dGluZyBtZXNzYWdlcyBpbiByZHNfc2VuZF94bWl0LCB3ZSBuZWVkIHRvIGVtZXJnZSBmcm9tXG5uZXQvcmRzL3NlbmQuYy00Ni0gKiB0aW1lIHRvIHRpbWUgYW5kIGJyaWVmbHkgcmVsZWFzZSB0aGUgQ1BVLiBPdGhlcndpc2UgdGhlIHNvZnRsb2NrIHdhdGNoZG9nXG4tLVxubmV0L3Jkcy9zZW5kLmM9NTk9c3RhdGljIHZvaWQgcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jayhzdHJ1Y3QgbGlzdF9oZWFkICptZXNzYWdlcywgaW50IHN0YXR1cyk7XG4tLVxubmV0L3Jkcy9zZW5kLmMtNjItICogUmVzZXQgdGhlIHNlbmQgc3RhdGUuICBDYWxsZXJzIG11c3QgZW5zdXJlIHRoYXQgdGhpcyBkb2VzbiYjMzk7dCByYWNlIHdpdGhcbm5ldC9yZHMvc2VuZC5jOjYzOiAqIHJkc19zZW5kX3htaXQoKS5cbm5ldC9yZHMvc2VuZC5jLTY0LSAqL1xuLS1cbm5ldC9yZHMvc2VuZC5jPTEzMz1zdGF0aWMgYm9vbCByZHNfbXByZHNfY3AwX2NhdGNodXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTE5MS0gKi9cbm5ldC9yZHMvc2VuZC5jOjE5MjppbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG5uZXQvcmRzL3NlbmQuYy0xOTMte1xuLS1cbm5ldC9yZHMvc2VuZC5jLTI0Ni1cdC8qXG5uZXQvcmRzL3NlbmQuYzoyNDc6XHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gYWNxdWlyZXNcbm5ldC9yZHMvc2VuZC5jLTI0OC1cdCAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZS5cbi0tXG5uZXQvcmRzL3NlbmQuYy01NTctfVxubmV0L3Jkcy9zZW5kLmM6NTU4OkVYUE9SVF9TWU1CT0xfR1BMKHJkc19zZW5kX3htaXQpO1xubmV0L3Jkcy9zZW5kLmMtNTU5LVxuLS1cbm5ldC9yZHMvc2VuZC5jPTY5Mj1zdGF0aWMgdm9pZCByZHNfc2VuZF9yZW1vdmVfZnJvbV9zb2NrKHN0cnVjdCBsaXN0X2hlYWQgKm1lc3NhZ2VzLCBpbnQgc3RhdHVzKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTc2Ny0gKiBtZXNzYWdlcyB1cCB0bywgYW5kIGluY2x1ZGluZywgdGhlIGdpdmVuIHNlcXVlbmNlIG51bWJlci4gIE1lc3NhZ2VzIGFyZVxubmV0L3Jkcy9zZW5kLmM6NzY4OiAqIG1vdmVkIHRvIHRoZSByZXRyYW5zIHF1ZXVlIHdoZW4gcmRzX3NlbmRfeG1pdCBwaWNrcyB0aGVtIG9mZiB0aGUgc2VuZFxubmV0L3Jkcy9zZW5kLmMtNzY5LSAqIHF1ZXVlLiBUaGlzIG1lYW5zIHRoYXQgaW4gdGhlIFRDUCBjYXNlLCB0aGUgbWVzc2FnZSBtYXkgbm90IGhhdmUgYmVlblxuLS1cbm5ldC9yZHMvc2VuZC5jPTExNTQ9aW50IHJkc19zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHBheWxvYWRfbGVuKVxuLS1cbm5ldC9yZHMvc2VuZC5jLTE0NTEtXG5uZXQvcmRzL3NlbmQuYzoxNDUyOlx0cmV0ID0gcmRzX3NlbmRfeG1pdChjcGF0aCk7XG5uZXQvcmRzL3NlbmQuYy0xNDUzLVx0aWYgKHJldCA9PSAtRU5PTUVNIHx8IHJldCA9PSAtRUFHQUlOKSB7XG4tLVxubmV0L3Jkcy90Y3AuYz05Nj12b2lkIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbi0tXG5uZXQvcmRzL3RjcC5jLTExNy0vKlxubmV0L3Jkcy90Y3AuYzoxMTg6ICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSBzd2l0Y2hlcyBhIHBhdGggdG8gYSBuZXcgc29ja2V0IGFuZFxubmV0L3Jkcy90Y3AuYy0xMTktICogcmVsZWFzZXMgdGhlIG9sZCBvbmUgaXQgZmluZHMgaW4gdGMtXHUwMDNldF9zb2NrLCByZXNvbHZpbmcgYSBkdWVsbGluZ1xuLS1cbm5ldC9yZHMvdGNwLmMtMTMyLSAqIFJEU19JTl9YTUlUIHNvIHRoYXQgaXQgY2Fubm90IGludGVybGVhdmUgd2l0aCBhIHNlbmRlciBhbHJlYWR5XG5uZXQvcmRzL3RjcC5jOjEzMzogKiBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpLlxubmV0L3Jkcy90Y3AuYy0xMzQtICovXG5uZXQvcmRzL3RjcC5jOjEzNTp2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG5uZXQvcmRzL3RjcC5jLTEzNi1cdFx0XHQgICAgIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbi0tXG5uZXQvcmRzL3RjcC5jLTE0Ni1cdCAqIHRoYW4gUkRTX0NPTk5fVVAgc3RvcHMgbmV3IHNlbmRlcnMsIGFuZCBvd25pbmcgUkRTX0lOX1hNSVRcbm5ldC9yZHMvdGNwLmM6MTQ3Olx0ICogZXhjbHVkZXMgYW55IHRocmVhZCBhbHJlYWR5IGluc2lkZSByZHNfc2VuZF94bWl0KCkgLSBvciBhXG5uZXQvcmRzL3RjcC5jOjE0ODpcdCAqIHRlYXJkb3duIGluIHJkc19jb25uX3NodXRkb3duKCksIHdoaWNoIGhvbGRzIHRoZSBzYW1lIGxvY2tcbm5ldC9yZHMvdGNwLmMtMTQ5LVx0ICogZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNwb3J0IHNodXRkb3duIC0gZm9yIHRoZSB3aG9sZVxuLS1cbm5ldC9yZHMvdGNwLmMtMTUyLVx0ICogQW4gaW5jb21pbmcgc3luLWFjayBhdCB0aGlzIHBvaW50IHdvdWxkIGVuZCB1cCBtYXJraW5nIHRoZVxubmV0L3Jkcy90Y3AuYzoxNTM6XHQgKiBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0IHJkc19zZW5kX3htaXQoKVxubmV0L3Jkcy90Y3AuYy0xNTQtXHQgKiB0aHJlYWRzIHRocm91Z2gsIHNvIGlkZWFsbHkgd2Ugd291bGQgc3luY2hyb25pemUgb25cbi0tXG5uZXQvcmRzL3RjcC5jLTE4My1cdC8qIFJlYWQgdF9zb2NrIG9ubHkgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlULCBuZXZlciBiZWZvcmUgdGhlXG5uZXQvcmRzL3RjcC5jOjE4NDpcdCAqIHdhaXQ6IHRoZSB0ZWFyZG93biBpbiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGRcbm5ldC9yZHMvdGNwLmMtMTg1LVx0ICogc29ja2V0IGFuZCBjbGVhcnMgdF9zb2NrLCBzbyBhIHBvaW50ZXIgc2FtcGxlZCBlYXJsaWVyIGNhblxuLS1cbm5ldC9yZHMvdGNwLmMtMjI0LS8qIEFkZCB0YyB0byByZHNfdGNwX3RjX2xpc3QgYW5kIHNldCB0Yy1cdTAwM2V0X3NvY2suIFNlZSBjb21tZW50c1xubmV0L3Jkcy90Y3AuYzoyMjU6ICogYWJvdmUgcmRzX3RjcF9yZXNldF9jYWxsYmFja3MgZm9yIG5vdGVzIGFib3V0IHN5bmNocm9uaXphdGlvblxubmV0L3Jkcy90Y3AuYy0yMjYtICogd2l0aCBkYXRhIHBhdGhcbi0tXG5uZXQvcmRzL3RjcC5oPTc0PXZvaWQgcmRzX3RjcF9zZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XG5uZXQvcmRzL3RjcC5oOjc1OnZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHJkc19jb25uX3BhdGggKmNwKTtcbm5ldC9yZHMvdGNwLmgtNzYtdm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4tLVxubmV0L3Jkcy90Y3BfbGlzdGVuLmM9MTUyPWludCByZHNfdGNwX2FjY2VwdF9vbmUoc3RydWN0IHJkc190Y3BfbmV0ICpydG4pXG4tLVxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMjk2LVx0XHQvKiBEdWVsbGluZyBTWU4gaGFzIGJlZW4gaGFuZGxlZCBpbiByZHNfdGNwX2FjY2VwdF9vbmUoKSAqL1xubmV0L3Jkcy90Y3BfbGlzdGVuLmM6Mjk3Olx0XHRyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhuZXdfc29jaywgY3ApO1xubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMjk4LVx0XHQvKiByZHNfY29ubmVjdF9wYXRoX2NvbXBsZXRlKCkgbWFya3MgUkRTX0NPTk5fVVAsIG9yLFxuLS1cbm5ldC9yZHMvdGhyZWFkcy5jPTE5MT12b2lkIHJkc19zZW5kX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Jkcy90aHJlYWRzLmMtMTk5LVx0XHRjbGVhcl9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpO1xubmV0L3Jkcy90aHJlYWRzLmM6MjAwOlx0XHRyZXQgPSByZHNfc2VuZF94bWl0KGNwKTtcbm5ldC9yZHMvdGhyZWFkcy5jLTIwMS1cdFx0Y29uZF9yZXNjaGVkKCk7XG4tLVxubmV0L3Jkcy90aHJlYWRzLmM9MjQzPXZvaWQgcmRzX3NodXRkb3duX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Jkcy90aHJlYWRzLmMtMjQ4LVxubmV0L3Jkcy90aHJlYWRzLmM6MjQ5Olx0cmRzX2Nvbm5fc2h1dGRvd24oY3ApO1xubmV0L3Jkcy90aHJlYWRzLmMtMjUwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NDEKCQkJCQkJCW91dHB1dDogMTgwCgkJCQkJCQl0aG91Z2h0czogNDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJEUyBQcm90b2NvbCBJbnZlc3RpZ2F0aW9uOiBDb25maWdzIGFuZCBGb2N1cyBTeW1ib2xzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9ucyBmb3IgdGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgcHJvdG9jb2wuIFNwZWNpZmljYWxseSwgYFJEU2AgaXRzZWxmIGRlcGVuZHMgb24gYElORVRgLCB3aGljaCBpcyBzdGFuZGFyZCwgYnV0IHRoZSBrZXkgb25lcywgYFJEU19UQ1BgIGFuZCBgUkRTX1JETUFgLCByZXF1aXJlIGRlZXBlciBleGFtaW5hdGlvbi4gYFJEU19UQ1BgIHJlbGllcyBvbiBgUkRTYCBhbmQgZWl0aGVyIGBJUFY2YCBvciBpdHMgbmVnYXRpb24sIHdoaWNoIGlzIGV4cGVjdGVkLiBgUkRTX1JETUFgIGlzIG1vcmUgaW50ZXJlc3RpbmcsIGFzIGl0IGRlcGVuZHMgb24gYFJEU2AsIGBJTkZJTklCQU5EYCwgYW5kIGBJTkZJTklCQU5EX0FERFJfVFJBTlNgLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gU2VlbXMgbGlrZSAmIzM0O1JEUyYjMzQ7LCAmIzM0O1JEU19UQ1AmIzM0OywgYW5kICYjMzQ7UkRTX1JETUEmIzM0OyBhcmUgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGNvbnNpZGVyLCBhbG9uZyB3aXRoICYjMzQ7SU5GSU5JQkFORCYjMzQ7IGFuZCAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7IGlmIFJETUEgaXMgZW5hYmxlZC4KCk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY3JpdGljYWwgZm9jdXMgc3ltYm9scy4gSSYjMzk7dmUgaWRlbnRpZmllZCBgcmRzX2Nvbm5fc2h1dGRvd25gLCBgcmRzX3NlbmRfeG1pdGAsIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AsIGByZHNfaWJfcmVjdl9yZWZpbGxgLCBhbmQgYHJkc190Y3BfYWNjZXB0X29uZWAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJIHNob3VsZCBjb25jZW50cmF0ZSBvbiBmb3IgYW55IGFuYWx5c2lzLgoKVGhlIG1vc3QgaW1wb3J0YW50IHBhcnQgaXMgdGhlIHdvcnRoaW5lc3Mgb2YgdGhpcyBhcmVhIGZvciBmdXp6aW5nLiBBYnNvbHV0ZWx5LCB0aGlzIGlzIGNvcmUgUkRTIG5ldHdvcmtpbmcgY29kZS4gSXQgaGFuZGxlcyBsb2Nrcywgc3RhdGUgbWFjaGluZXMsIHRoZSBTWU5zLCB0aGUgc29ja2V0IHN3YXBzLCBhbmQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBib3RoIHRlYXJkb3duIGFuZCBkYXRhIHRyYW5zZmVyLiBBbmQsIGltcG9ydGFudGx5LCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIGZ1enppbmcgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBhbmQgR0NFLCBieSBleHBsb2l0aW5nIHRoZSBzb2NrZXQgb3BlcmF0aW9ucyBvbiBBRl9SRFMgc29ja2V0cyBhY3Jvc3MgdGhlIGRpZmZlcmVudCB0cmFuc3BvcnRzIChUQ1AvbG9vcGJhY2svUkRNQSkuCgpGaW5hbGx5LCBJIHdpbGwgY29sbGF0ZSBhbGwgb2YgdGhpczogdGhlIGNvbmZpZ3MsIHRoZSBzeW1ib2xzLCBhbmQgdGhlIHJhdGlvbmFsZSBmb3IgdGhlIG5leHQgc3RlcCwgd2hpY2ggaXMgY2FsbGluZyB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHdpdGggdGhlc2UgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSRFMmIzM0OywKICAgICYjMzQ7UkRTX1RDUCYjMzQ7LAogICAgJiMzNDtSRFNfUkRNQSYjMzQ7LAogICAgJiMzNDtJTkZJTklCQU5EJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkRfQUREUl9UUkFOUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Jkc19jb25uX3NodXRkb3duJiMzNDssCiAgICAmIzM0O3Jkc19zZW5kX3htaXQmIzM0OywKICAgICYjMzQ7cmRzX3RjcF9yZXNldF9jYWxsYmFja3MmIzM0OywKICAgICYjMzQ7cmRzX3RjcF9hY2NlcHRfb25lJiMzNDssCiAgICAmIzM0O3Jkc19pYl9yZWN2X3JlZmlsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgbWVjaGFuaXNtcyAoc3BlY2lmaWNhbGx5IFJEU19JTl9YTUlUIGFuZCBSRFNfUkVDVl9SRUZJTEwgYml0bG9ja3MsIHdhaXRxdWV1ZSBiYXJyaWVycywgYW5kIHN0YXRlIHRyYW5zaXRpb25zKSBpbiBSRFMgY29ubmVjdGlvbiB0ZWFyZG93biwgc2VuZCwgcmVjZWl2ZS1yZWZpbGwsIGFuZCBUQ1Agc29ja2V0IHN3YXBwaW5nIHBhdGhzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbmV0d29yayBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1JEUyYjMzQ7LAogICAgJiMzNDtSRFNfVENQJiMzNDssCiAgICAmIzM0O1JEU19SRE1BJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORF9BRERSX1RSQU5TJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmRzX2Nvbm5fc2h1dGRvd24mIzM0OywKICAgICYjMzQ7cmRzX3NlbmRfeG1pdCYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyYjMzQ7LAogICAgJiMzNDtyZHNfdGNwX2FjY2VwdF9vbmUmIzM0OywKICAgICYjMzQ7cmRzX2liX3JlY3ZfcmVmaWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBtZWNoYW5pc21zIChzcGVjaWZpY2FsbHkgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBiaXRsb2Nrcywgd2FpdHF1ZXVlIGJhcnJpZXJzLCBhbmQgc3RhdGUgdHJhbnNpdGlvbnMpIGluIFJEUyBjb25uZWN0aW9uIHRlYXJkb3duLCBzZW5kLCByZWNlaXZlLXJlZmlsbCwgYW5kIFRDUCBzb2NrZXQgc3dhcHBpbmcgcGF0aHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBuZXR3b3JrIHNvY2tldCBvcGVyYXRpb25zIGFuZCBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMjo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZXNvbHZlcyBjb25jdXJyZW5jeSwgcmFjZSBjb25kaXRpb24sIGFuZCBzdGF0ZS1tYWNoaW5lIHN5bmNocm9uaXphdGlvbiBidWdzIGluIHRoZSBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIHN1YnN5c3RlbSBkdXJpbmcgY29ubmVjdGlvbiB0ZWFyZG93biwgcmVzZXQsIGFuZCBkdWVsbGluZyBTWU4gcmVzb2x1dGlvbiAoc3BlY2lmaWNhbGx5IGxvY2tpbmcgYW5kIGJpdC1tYW5pcHVsYXRpb24gb2YgUkRTX0lOX1hNSVQsIFJEU19SRUNWX1JFRklMTCwgYW5kIFJEU19DT05OXyogc3RhdGUgdHJhbnNpdGlvbnMpLlxuXG4tIE5vIG5ldyBoZWFwL3N0YWNrIGFsbG9jYXRpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYWRkZWQgb3IgbW9kaWZpZWQuXG4tIE5vIGtlcm5lbC10by11c2VyIGNvcHkgb3BlcmF0aW9ucyAoZS5nLiwgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluaywgaW9jdGwsIGdldHNvY2tvcHQpIG9yIHVzZXItZmFjaW5nIHN0cnVjdHMgYXJlIHRvdWNoZWQuXG4tIE5vIGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tzLCBvciBwYXlsb2FkIHBhcnNpbmcgcm91dGluZXMgYXJlIGFsdGVyZWQgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuLSBBbnkgY29uY3VycmVuY3kgYnVncywgdXNlLWFmdGVyLWZyZWUsIGRlYWRsb2Nrcywgb3IgbG9jayBvcmRlcmluZyBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIHRoZXNlIGNoYW5nZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkZmUzNzY3OTBiN2M5ZGNmM2U2ZjUzMWU1NjVmMjM3N2ZjZWZiM2FlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjggMjI6NDc6MDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCmluZGV4IDdjOGFiOGU5NzNlMWIuLmI2YzRiZWI1MGVhZjAgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvY29ubmVjdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9yZHMvY29ubmVjdGlvbi5jCkBAIC0xMDYsMTAgJiM0MzsxMDYsMTIgQEAgc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwKIH0KIAogLyoKLSAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRyYW5zcG9ydHMgYXMgdGhleSYjMzk7cmUgYnJpbmdpbmcgZG93biBhIGNvbm5lY3Rpb24uCi0gKiBJdCBjbGVhcnMgcGFydGlhbCBtZXNzYWdlIHN0YXRlIHNvIHRoYXQgdGhlIHRyYW5zcG9ydCBjYW4gc3RhcnQgc2VuZGluZwotICogYW5kIHJlY2VpdmluZyBvdmVyIHRoaXMgY29ubmVjdGlvbiBhZ2FpbiBpbiB0aGUgZnV0dXJlLiAgSXQgaXMgdXAgdG8KLSAqIHRoZSB0cmFuc3BvcnQgdG8gaGF2ZSBzZXJpYWxpemVkIHRoaXMgY2FsbCB3aXRoIGl0cyBzZW5kIGFuZCByZWN2LgomIzQzOyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHJkc19jb25uX3NodXRkb3duKCkgb25jZSB0aGUgdHJhbnNwb3J0IGhhcyBicm91Z2h0CiYjNDM7ICogYSBwYXRoIGRvd24uICBJdCBjbGVhcnMgcGFydGlhbCBtZXNzYWdlIHN0YXRlIHNvIHRoYXQgdGhlIHRyYW5zcG9ydAomIzQzOyAqIGNhbiBzdGFydCBzZW5kaW5nIGFuZCByZWNlaXZpbmcgb3ZlciB0aGlzIHBhdGggYWdhaW4gaW4gdGhlIGZ1dHVyZS4KJiM0MzsgKiBUaGUgY2FsbGVyIG93bnMgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBhY3Jvc3MgdGhpcyBjYWxsLAomIzQzOyAqIHdoaWNoIGlzIHdoYXQgc2VyaWFsaXplcyBpdCBhZ2FpbnN0IHRoZSBzZW5kIGFuZCByZWNlaXZlLXJlZmlsbAomIzQzOyAqIHBhdGhzLgogICovCiBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKIHsKQEAgLTEyMCw3ICYjNDM7MTIyLDE2IEBAIHN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogCiAJcmRzX3N0YXRzX2luYyhzX2Nvbm5fcmVzZXQpOwogCXJkc19zZW5kX3BhdGhfcmVzZXQoY3ApOwotCWNwLSZndDtjcF9mbGFncyA9IDA7CiYjNDM7CiYjNDM7CS8qIENsZWFyIHRoZSBiaXRzIHRoZSByZXNldCBpcyByZXNwb25zaWJsZSBmb3IgaW5kaXZpZHVhbGx5OiBhCiYjNDM7CSAqIGJsYW5rZXQgY3BfZmxhZ3MgPSAwIGlzIGEgcGxhaW4gc3RvcmUgdGhhdCBjYW4gY2xvYmJlciBhCiYjNDM7CSAqIGNvbmN1cnJlbnQgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIG9uIHRoZSBzYW1lIHdvcmQuCiYjNDM7CSAqIFJEU19JTl9YTUlUIGFuZCBSRFNfUkVDVl9SRUZJTEwgYXJlIGhlbGQgYXMgbG9ja3MgYnkgdGhlCiYjNDM7CSAqIGNhbGxlciwgcmRzX2Nvbm5fc2h1dGRvd24oKSwgd2hpY2ggcmVsZWFzZXMgdGhlbSBvbmNlIHRoZQomIzQzOwkgKiB0ZWFyZG93biBpcyBjb21wbGV0ZS4KJiM0MzsJICovCiYjNDM7CWNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CWNsZWFyX2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKTsKIAogCS8qIERvIG5vdCBjbGVhciBuZXh0X3J4X3NlcSBoZXJlLCBlbHNlIHdlIGNhbm5vdCBkaXN0aW5ndWlzaAogCSAqIHJldHJhbnNtaXR0ZWQgcGFja2V0cyBmcm9tIG5ldyBwYWNrZXRzLCBhbmQgd2lsbCBoYW5kIGFsbApAQCAtNDA2LDI4ICYjNDM7NDE3LDcwIEBAIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKQogCQl9CiAJCW11dGV4X3VubG9jaygmYW1wO2NwLSZndDtjcF9jbV9sb2NrKTsKIAomIzQzOwkJLyogUXVpZXNjZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUtcmVmaWxsIHBhdGhzIGJ5CiYjNDM7CQkgKiBhY3F1aXJpbmcgdGhlaXIgYml0IGxvY2tzLCBub3QgbWVyZWx5IHdhaXRpbmcgZm9yCiYjNDM7CQkgKiB0aGVtIHRvIGJlIHJlbGVhc2VkOiB3aXRoIGEgcGxhaW4gd2FpdCwgZWl0aGVyIHBhdGgKJiM0MzsJCSAqIGNhbiByZS10YWtlIGl0cyBsb2NrIHRoZSBpbnN0YW50IGFmdGVyIHdlIHNhbXBsZSBpdAomIzQzOwkJICogY2xlYXIgYW5kIHRoZW4gcnVuIGNvbmN1cnJlbnRseSB3aXRoIHRoZSB0cmFuc3BvcnQKJiM0MzsJCSAqIHNodXRkb3duIGFuZCB0aGUgcGF0aCByZXNldCBiZWxvdy4gIEhvbGRpbmcgYm90aAomIzQzOwkJICogbG9ja3MgYWNyb3NzIHRoZSB0ZWFyZG93biBtYWtlcyB0aGF0IHN0cnVjdHVyYWxseQomIzQzOwkJICogaW1wb3NzaWJsZS4KJiM0MzsJCSAqLwogCQl3YWl0X2V2ZW50KGNwLSZndDtjcF93YWl0cSwKLQkJCSAgICF0ZXN0X2JpdChSRFNfSU5fWE1JVCwgJmFtcDtjcC0mZ3Q7Y3BfZmxhZ3MpKTsKJiM0MzsJCQkgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwogCQl3YWl0X2V2ZW50KGNwLSZndDtjcF93YWl0cSwKLQkJCSAgICF0ZXN0X2JpdChSRFNfUkVDVl9SRUZJTEwsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7CiYjNDM7CQkJICAgIXRlc3RfYW5kX3NldF9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCAmYW1wO2NwLSZndDtjcF9mbGFncykpOwogCiAJCWNvbm4tJmd0O2NfdHJhbnMtJmd0O2Nvbm5fcGF0aF9zaHV0ZG93bihjcCk7CiAJCXJkc19jb25uX3BhdGhfcmVzZXQoY3ApOwogCiYjNDM7CQkvKiBSZWxlYXNlIHRoZSB0d28gbG9ja3MgYW5kIHdha2UgYW55IHdhaXRlciAoZS5nLgomIzQzOwkJICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSkgdGhhdCBibG9ja2VkIG9uIHRoZW0gd2hpbGUKJiM0MzsJCSAqIHdlIGhlbGQgdGhlbS4gIFRoZSB1bmxvY2sgb3JkZXJzIHRoZSB0cmFuc3BvcnQmIzM5O3MgcmluZwomIzQzOwkJICogcmUtaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBwYXRoIHJlc2V0IGFib3ZlIGJlZm9yZQomIzQzOwkJICogZWl0aGVyIGJpdCBpcyBzZWVuIGNsZWFyLiAgcmRzX2Nvbm5fcGF0aF9yZXNldCgpIGxlYXZlcwomIzQzOwkJICogYm90aCBiaXRzIGFsb25lOiBvd25lcnNoaXAgZW5kcyBoZXJlLCBub3QgaW5zaWRlIHRoZQomIzQzOwkJICogcmVzZXQuCiYjNDM7CQkgKi8KJiM0MzsJCWNsZWFyX2JpdF91bmxvY2soUkRTX0lOX1hNSVQsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKTsKJiM0MzsJCWNsZWFyX2JpdF91bmxvY2soUkRTX1JFQ1ZfUkVGSUxMLCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CQl3YWtlX3VwX2FsbCgmYW1wO2NwLSZndDtjcF93YWl0cSk7CiYjNDM7CiAJCWlmICghcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9ESVNDT05ORUNUSU5HLAotCQkJCQkgICAgICBSRFNfQ09OTl9ET1dOKSAmYW1wOyZhbXA7Ci0JCSAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9FUlJPUiwKIAkJCQkJICAgICAgUkRTX0NPTk5fRE9XTikpIHsKLQkJCS8qIFRoaXMgY2FuIGhhcHBlbiAtIGVnIHdoZW4gd2UmIzM5O3JlIGluIHRoZSBtaWRkbGUgb2YgdGVhcmluZwotCQkJICogZG93biB0aGUgY29ubmVjdGlvbiwgYW5kIHNvbWVvbmUgdW5sb2FkcyB0aGUgcmRzIG1vZHVsZS4KLQkJCSAqIFF1aXRlIHJlcHJvZHVjaWJsZSB3aXRoIGxvb3BiYWNrIGNvbm5lY3Rpb25zLgotCQkJICogTW9zdGx5IGhhcm1sZXNzLgomIzQzOwkJCS8qIFRoZSBwYXRoIHdhcyBkcm9wcGVkIGFnYWluIHdoaWxlIHdlIHRvcmUgaXQKJiM0MzsJCQkgKiBkb3duOiBieSBhIHNvY2tldCBzdGF0ZS1jaGFuZ2UgY2FsbGJhY2sgaW4KJiM0MzsJCQkgKiBpcnEgY29udGV4dCBvbiByZWNlaXB0IG9mIGEgRklOLCBvciBieSBhbgomIzQzOwkJCSAqIGFjY2VwdCB0aGF0IGNsYWltZWQgdGhlIHBhdGgganVzdCBiZWZvcmUgYQomIzQzOwkJCSAqIGRyb3AgcHV0IGl0IGJhY2sgdG8gUkRTX0NPTk5fRVJST1IgYW5kIHRoZW4KJiM0MzsJCQkgKiBpbnN0YWxsZWQgYSBmcmVzaCBzb2NrZXQgb24gaXQuICBVbmxlc3MgYQomIzQzOwkJCSAqIHBlbmRpbmcgZGVzdHJveSBzdXBwcmVzc2VkIGl0LCB0aGUgZHJvcCBhbHNvCiYjNDM7CQkJICogcXVldWVkIGFub3RoZXIgc2h1dGRvd24gcGFzcywgYW5kIHRoYXQgcGFzcwomIzQzOwkJCSAqIG11c3QgcnVuLCBiZWNhdXNlIGl0IGlzIHdoYXQgdGVhcnMgZG93bgomIzQzOwkJCSAqIHdoYXRldmVyIGF0dGFjaGVkIHRvIHRoZSBwYXRoIGFmdGVyIHRoZQomIzQzOwkJCSAqIHRyYW5zcG9ydCBzaHV0ZG93biBhYm92ZSBzYW1wbGVkIGl0cyBzdGF0ZS4KJiM0MzsJCQkgKiBDb25zdW1pbmcgdGhlIFJEU19DT05OX0VSUk9SIGhlcmUgd291bGQgdHVybgomIzQzOwkJCSAqIHRoYXQgcGFzcyBpbnRvIGEgbm8tb3A6IGxlYXZlIHRoZSBzdGF0ZQomIzQzOwkJCSAqIGFsb25lLCBhbmQgbGV0IHRoZSBwYXNzIGZpbmlzaCB0aGUgam9iLgogCQkJICoKLQkJCSAqIE5vdGUgdGhhdCB0aGlzIGFsc28gaGFwcGVucyB3aXRoIHJkcy10Y3AgYmVjYXVzZQotCQkJICogd2UgY291bGQgaGF2ZSB0cmlnZ2VyZWQgcmRzX2Nvbm5fcGF0aF9kcm9wIGluIGlycQotCQkJICogbW9kZSBmcm9tIHJkc190Y3Bfc3RhdGUgY2hhbmdlIG9uIHRoZSByZWNlaXB0IG9mCi0JCQkgKiBhIEZJTiwgdGh1cyB3ZSBuZWVkIHRvIHJlY2hlY2sgZm9yIFJEU19DT05OX0VSUk9SCi0JCQkgKiBoZXJlLgomIzQzOwkJCSAqIFF1aWVzY2UgdGhlIHJlY29ubmVjdCB0aW1lciBiZWZvcmUgYmFpbGluZwomIzQzOwkJCSAqIG91dCwgdGhvdWdoLiAgV2hlbiBhIHBlbmRpbmcgZGVzdHJveSBkaWQKJiM0MzsJCQkgKiBzdXBwcmVzcyB0aGUgcXVldWUsIG5vIGxhdGVyIHBhc3MgcnVucywgYW5kCiYjNDM7CQkJICogcmRzX2Nvbm5fcGF0aF9kZXN0cm95KCkgaXMgYWJvdXQgdG8gZmx1c2gKJiM0MzsJCQkgKiBjcF9kb3duX3cgYW5kIGZyZWUgdGhlIHBhdGg6IGl0IG11c3Qgbm90CiYjNDM7CQkJICogZmluZCBjcF9jb25uX3cgc3RpbGwgYXJtZWQuICBBIHN1Y2Nlc3NvcgomIzQzOwkJCSAqIHBhc3MsIHdoZW4gdGhlcmUgaXMgb25lLCByZS1hcm1zIHRoZQomIzQzOwkJCSAqIHJlY29ubmVjdCBmcm9tIGl0cyBvd24gdGFpbC4KJiM0MzsJCQkgKi8KJiM0MzsJCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3BfY29ubl93KTsKJiM0MzsJCQljbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CiYjNDM7CQkJaWYgKHJkc19jb25uX3BhdGhfc3RhdGUoY3ApID09IFJEU19DT05OX0VSUk9SKQomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJLyogTm8gY3VycmVudCBjcF9zdGF0ZSB3cml0ZXIgbGVhdmVzIGEKJiM0MzsJCQkgKiBESVNDT05ORUNUSU5HIHBhdGggaW4gYW55IHN0YXRlIGJ1dAomIzQzOwkJCSAqIFJEU19DT05OX0VSUk9SOyByZXBvcnQgbG91ZGx5IGlmIG9uZSBldmVyCiYjNDM7CQkJICogZG9lcy4KIAkJCSAqLwogCQkJcmRzX2Nvbm5fcGF0aF9lcnJvcihjcCwgJiMzNDslczogZmFpbGVkIHRvIHRyYW5zaXRpb24gJiMzNDsKIAkJCQkJICAgICYjMzQ7dG8gc3RhdGUgRE9XTiwgY3VycmVudCBzdGF0ZSAmIzM0OwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZWN2LmMgYi9uZXQvcmRzL2liX3JlY3YuYwppbmRleCAzNTcxMjhkMzRhNTQ2Li5iZDZjYjNmZmFhNTcxIDEwMDY0NAotLS0gYS9uZXQvcmRzL2liX3JlY3YuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL2liX3JlY3YuYwpAQCAtMzYzLDE1ICYjNDM7MzYzLDE0IEBAIHN0YXRpYyBpbnQgYWNxdWlyZV9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQogCiBzdGF0aWMgdm9pZCByZWxlYXNlX3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiB7Ci0JY2xlYXJfYml0KFJEU19SRUNWX1JFRklMTCwgJmFtcDtjb25uLSZndDtjX2ZsYWdzKTsKLQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwomIzQzOwljbGVhcl9iaXRfdW5sb2NrKFJEU19SRUNWX1JFRklMTCwgJmFtcDtjb25uLSZndDtjX2ZsYWdzKTsKIAogCS8qIFdlIGRvbiYjMzk7dCB1c2Ugd2FpdF9vbl9iaXQoKS93YWtlX3VwX2JpdCgpIGJlY2F1c2Ugb3VyIHdha2luZyBpcyBpbiBhCiAJICogaG90IHBhdGggYW5kIGZpbmRpbmcgd2FpdGVycyBpcyB2ZXJ5IHJhcmUuICBXZSBkb24mIzM5O3Qgd2FudCB0byB3YWxrCiAJICogdGhlIHN5c3RlbS13aWRlIGhhc2hlZCB3YWl0cXVldWUgYnVja2V0cyBpbiB0aGUgZmFzdCBwYXRoIG9ubHkgdG8KIAkgKiBhbG1vc3QgbmV2ZXIgZmluZCB3YWl0ZXJzLgogCSAqLwotCWlmICh3YWl0cXVldWVfYWN0aXZlKCZhbXA7Y29ubi0mZ3Q7Y193YWl0cSkpCiYjNDM7CWlmICh3cV9oYXNfc2xlZXBlcigmYW1wO2Nvbm4tJmd0O2Nfd2FpdHEpKQogCQl3YWtlX3VwX2FsbCgmYW1wO2Nvbm4tJmd0O2Nfd2FpdHEpOwogfQogCkBAIC0zOTIsNyAmIzQzOzM5MSw5IEBAIHZvaWQgcmRzX2liX3JlY3ZfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgaW50IHByZWZpbGwsIGdmcF90IGdmcCkKIAogCS8qIHRoZSBnb2FsIGhlcmUgaXMgdG8ganVzdCBtYWtlIHN1cmUgdGhhdCBzb21lb25lLCBzb21ld2hlcmUKIAkgKiBpcyBwb3N0aW5nIGJ1ZmZlcnMuICBJZiB3ZSBjYW4mIzM5O3QgZ2V0IHRoZSByZWZpbGwgbG9jaywKLQkgKiBsZXQgdGhlbSBkbyB0aGVpciB0aGluZwomIzQzOwkgKiBsZXQgdGhlbSBkbyB0aGVpciB0aGluZy4gIFRoZSBob2xkZXIgbWF5IGFsc28gYmUKJiM0MzsJICogcmRzX2Nvbm5fc2h1dGRvd24oKSB0ZWFyaW5nIHRoZSBwYXRoIGRvd24sIGluIHdoaWNoIGNhc2UKJiM0MzsJICogdGhlcmUgaXMgbm90aGluZyB0byBwb3N0LgogCSAqLwogCWlmICghYWNxdWlyZV9yZWZpbGwoY29ubikpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmMKaW5kZXggMTVhMWI5N2YxM2U3Ni4uMWFmYTk4MWU1YzA2ZCAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9zZW5kLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy9zZW5kLmMKQEAgLTExNCw4ICYjNDM7MTE0LDEzIEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfaW5feG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJICogaG90IHBhdGggYW5kIGZpbmRpbmcgd2FpdGVycyBpcyB2ZXJ5IHJhcmUuICBXZSBkb24mIzM5O3Qgd2FudCB0byB3YWxrCiAJICogdGhlIHN5c3RlbS13aWRlIGhhc2hlZCB3YWl0cXVldWUgYnVja2V0cyBpbiB0aGUgZmFzdCBwYXRoIG9ubHkgdG8KIAkgKiBhbG1vc3QgbmV2ZXIgZmluZCB3YWl0ZXJzLgomIzQzOwkgKgomIzQzOwkgKiB3cV9oYXNfc2xlZXBlcigpIHN1cHBsaWVzIHRoZSBmdWxsIGJhcnJpZXIgdGhhdCBvcmRlcnMgdGhlIHdhaXQKJiM0MzsJICogcXVldWUgcmVhZCBhZnRlciB0aGUgYml0IGNsZWFyOyBjbGVhcl9iaXRfdW5sb2NrKCkgYWxvbmUgaXMgb25seQomIzQzOwkgKiBhIHJlbGVhc2UgYW5kIHdvdWxkIGxldCB0aGlzIGNoZWNrIHJlYWQgYSBzdGFsZSBlbXB0eSBxdWV1ZSwKJiM0MzsJICogbG9zaW5nIHRoZSB3YWtlLXVwLgogCSAqLwotCWlmICh3YWl0cXVldWVfYWN0aXZlKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKSkKJiM0MzsJaWYgKHdxX2hhc19zbGVlcGVyKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKSkKIAkJd2FrZV91cF9hbGwoJmFtcDtjcC0mZ3Q7Y3Bfd2FpdHEpOwogfQogCkBAIC0yMzksOCAmIzQzOzI0NCwxMSBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApCiAJV1JJVEVfT05DRShjcC0mZ3Q7Y3Bfc2VuZF9nZW4sIHNlbmRfZ2VuKTsKIAogCS8qCi0JICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIHRlc3RzIFJEU19JTl9YTUlULAotCSAqIHdlIGRvIHRoZSBvcHBvc2l0ZSB0byBhdm9pZCByYWNlcy4KJiM0MzsJICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIGFjcXVpcmVzCiYjNDM7CSAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZS4KJiM0MzsJICogT3duZXJzaGlwIGlzIGRlY2lkZWQgYnkgdGhlIGF0b21pYyBSTVcgb24gdGhlIGNwX2ZsYWdzIHdvcmQ6CiYjNDM7CSAqIGlmIHRoZSB0ZWFyZG93biB3b24gdGhlIGJpdCB3ZSBiYWNrIG9mZiBoZXJlLCBhbmQgaWYgd2Ugd29uCiYjNDM7CSAqIGl0IHRoZSB0ZWFyZG93biB3YWl0cyB1bnRpbCB3ZSByZWxlYXNlIGl0LgogCSAqLwogCWlmICghcmRzX2Nvbm5fcGF0aF91cChjcCkpIHsKIAkJcmVsZWFzZV9pbl94bWl0KGNwKTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwLmMgYi9uZXQvcmRzL3RjcC5jCmluZGV4IGIyNjM2MzRhYzc1MGQuLjc3NGE3MWY4OGQzNzUgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvdGNwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Jkcy90Y3AuYwpAQCAtMTE1LDQ2ICYjNDM7MTE1LDkwIEBAIHZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogfQogCiAvKgotICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSBzd2l0Y2hlcyB0aGUgdG8gdGhlIG5ldyBzb2NrIGFuZAotICogcmV0dXJucyB0aGUgZXhpc3RpbmcgdGMtJmd0O3Rfc29jay4KJiM0MzsgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpIHN3aXRjaGVzIGEgcGF0aCB0byBhIG5ldyBzb2NrZXQgYW5kCiYjNDM7ICogcmVsZWFzZXMgdGhlIG9sZCBvbmUgaXQgZmluZHMgaW4gdGMtJmd0O3Rfc29jaywgcmVzb2x2aW5nIGEgZHVlbGxpbmcKJiM0MzsgKiBTWU4uCiAgKgotICogVGhlIG9ubHkgZnVuY3Rpb25zIHRoYXQgc2V0IHRjLSZndDt0X3NvY2sgYXJlIHJkc190Y3Bfc2V0X2NhbGxiYWNrcwotICogYW5kIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzLiAgU2VuZCBhbmQgcmVjZWl2ZSB0cnVzdCB0aGF0Ci0gKiBpdCBpcyBzZXQuICBUaGUgYWJzZW5jZSBvZiBSRFNfQ09OTl9VUCBiaXQgcHJvdGVjdHMgdGhvc2UgcGF0aHMKLSAqIGZyb20gYmVpbmcgY2FsbGVkIHdoaWxlIGl0IGlzbiYjMzk7dCBzZXQuCiYjNDM7ICogdGMtJmd0O3Rfc29jayBpcyBzZXQgYnkgcmRzX3RjcF9zZXRfY2FsbGJhY2tzKCkgYW5kIGNsZWFyZWQgYnkKJiM0MzsgKiByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKCkuICBGb3VyIHBhdGhzIHdyaXRlIGl0OiB0aGUgYWN0aXZlCiYjNDM7ICogY29ubmVjdCBpbiByZHNfdGNwX2Nvbm5fcGF0aF9jb25uZWN0KCksIHdoaWNoIHNldHMgaXQgYW5kIGNsZWFycyBpdAomIzQzOyAqIGFnYWluIG9uIGZhaWx1cmU7IHRoZSBhY2NlcHQgcGF0aCBpbiByZHNfdGNwX2FjY2VwdF9vbmUoKSwgd2hpY2gKJiM0MzsgKiBzZXRzIGl0IGZvciBhIHBhdGggd2l0aCBubyBzb2NrZXQgeWV0OyB0aGUgdGVhcmRvd24gaW4KJiM0MzsgKiByZHNfdGNwX2Nvbm5fcGF0aF9zaHV0ZG93bigpLCB3aGljaCBjbGVhcnMgaXQ7IGFuZCB0aGUgc3dhcCBkb25lCiYjNDM7ICogaGVyZSwgd2hpY2ggZG9lcyBib3RoLiAgVGhlIGNvbm5lY3QgYW5kIGFjY2VwdCBwYXRocyBhcmUgc2VyaWFsaXplZAomIzQzOyAqIGFnYWluc3QgZWFjaCBvdGhlciBieSB0X2Nvbm5fcGF0aF9sb2NrLiAgU2VuZCBhbmQgcmVjZWl2ZSB0cnVzdAomIzQzOyAqIHRoYXQgaXQgaXMgc2V0OiB0aGUgYWJzZW5jZSBvZiBSRFNfQ09OTl9VUCBwcm90ZWN0cyB0aG9zZSBwYXRocwomIzQzOyAqIGZyb20gYmVpbmcgY2FsbGVkIHdoaWxlIGl0IGlzbiYjMzk7dCwgYW5kIHRoZSBzd2FwIGRvbmUgaGVyZSBydW5zIHVuZGVyCiYjNDM7ICogUkRTX0lOX1hNSVQgc28gdGhhdCBpdCBjYW5ub3QgaW50ZXJsZWF2ZSB3aXRoIGEgc2VuZGVyIGFscmVhZHkKJiM0MzsgKiBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpLgogICovCiB2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkgICAgIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCkKIHsKIAlzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLSZndDtjcF90cmFuc3BvcnRfZGF0YTsKLQlzdHJ1Y3Qgc29ja2V0ICpvc29jayA9IHRjLSZndDt0X3NvY2s7Ci0KLQlpZiAoIW9zb2NrKQotCQlnb3RvIG5ld3NvY2s7CiYjNDM7CXN0cnVjdCBzb2NrZXQgKm9zb2NrOwogCiAJLyogTmVlZCB0byByZXNvbHZlIGEgZHVlbGxpbmcgU1lOIGJldHdlZW4gcGVlcnMuCiAJICogV2UgaGF2ZSBhbiBvdXRzdGFuZGluZyBTWU4gdG8gdGhpcyBwZWVyLCB3aGljaCBtYXkKIAkgKiBwb3RlbnRpYWxseSBoYXZlIHRyYW5zaXRpb25lZCB0byB0aGUgUkRTX0NPTk5fVVAgc3RhdGUsCiAJICogc28gd2UgbXVzdCBxdWllc2NlIGFueSBzZW5kIHRocmVhZHMgYmVmb3JlIHJlc2V0dGluZwotCSAqIGNwX3RyYW5zcG9ydF9kYXRhLiBXZSBxdWllc2NlIHRoZXNlIHRocmVhZHMgYnkgc2V0dGluZwotCSAqIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFJEU19DT05OX1VQLCBhbmQgdGhlbgotCSAqIHdhaXRpbmcgZm9yIGFueSBleGlzdGluZyB0aHJlYWRzIGluIHJkc19zZW5kX3htaXQgdG8KLQkgKiBjb21wbGV0ZSByZWxlYXNlX2luX3htaXQoKS4gKFN1YnNlcXVlbnQgdGhyZWFkcyBlbnRlcmluZwotCSAqIHJkc19zZW5kX3htaXQoKSB3aWxsIGJhaWwgb24gIXJkc19jb25uX3VwKCkuCiYjNDM7CSAqIGNwX3RyYW5zcG9ydF9kYXRhLiAgU2V0dGluZyBjcF9zdGF0ZSB0byBzb21ldGhpbmcgb3RoZXIKJiM0MzsJICogdGhhbiBSRFNfQ09OTl9VUCBzdG9wcyBuZXcgc2VuZGVycywgYW5kIG93bmluZyBSRFNfSU5fWE1JVAomIzQzOwkgKiBleGNsdWRlcyBhbnkgdGhyZWFkIGFscmVhZHkgaW5zaWRlIHJkc19zZW5kX3htaXQoKSAtIG9yIGEKJiM0MzsJICogdGVhcmRvd24gaW4gcmRzX2Nvbm5fc2h1dGRvd24oKSwgd2hpY2ggaG9sZHMgdGhlIHNhbWUgbG9jawomIzQzOwkgKiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB0cmFuc3BvcnQgc2h1dGRvd24gLSBmb3IgdGhlIHdob2xlCiYjNDM7CSAqIHNvY2tldCBzd2FwIGFuZCB0aGUgcmRzX3NlbmRfcGF0aF9yZXNldCgpIGJlbG93LgogCSAqCi0JICogSG93ZXZlciBhbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwCi0JICogbWFya2luZyB0aGUgY29ubiBhcyBSRFNfQ09OTl9VUCwgYW5kIHdvdWxkIGFnYWluIHBlcm1pdAotCSAqIHJkc19zZW5kX3htaSgpIHRocmVhZHMgdGhyb3VnaCwgc28gaWRlYWxseSB3ZSB3b3VsZAotCSAqIHN5bmNocm9uaXplIG9uIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90Ci0JICogZG8gdGhhdDogd2FpdGluZyBvbiAhUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5Ci0JICogZW5kIHVwIGRlYWRsb2NraW5nIHdpdGggdGNwX3NlbmRtc2coKSwgYW5kIHRoZSBSRFNfSU5fWE1JVAotCSAqIHdvdWxkIG5vdCBnZXQgc2V0LiBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG8KLQkgKiBSRFNfQ09OTl9SRVNFVFRUSU5HLCB0byBlbnN1cmUgdGhhdCByZHNfdGNwX3N0YXRlX2NoYW5nZQotCSAqIGNhbm5vdCBtYXJrIHJkc19jb25uX3BhdGhfdXAoKSBpbiB0aGUgd2luZG93IGJlZm9yZSBsb2NrX3NvY2soKQomIzQzOwkgKiBBbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwIG1hcmtpbmcgdGhlCiYjNDM7CSAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpCiYjNDM7CSAqIHRocmVhZHMgdGhyb3VnaCwgc28gaWRlYWxseSB3ZSB3b3VsZCBzeW5jaHJvbml6ZSBvbgomIzQzOwkgKiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdCBkbyB0aGF0OiBhY3F1aXJpbmcKJiM0MzsJICogUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5IGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoCiYjNDM7CSAqIHRjcF9zZW5kbXNnKCksIHdoaWNoIHRha2VzIHRoZSBzb2NrZXQgbG9jayB3aGlsZSBob2xkaW5nCiYjNDM7CSAqIFJEU19JTl9YTUlULiAgQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvCiYjNDM7CSAqIFJEU19DT05OX1JFU0VUVElORywgdG8gZW5zdXJlIHRoYXQgcmRzX3RjcF9zdGF0ZV9jaGFuZ2UKJiM0MzsJICogY2Fubm90IG1hcmsgcmRzX2Nvbm5fcGF0aF91cCgpIGluIHRoZSB3aW5kb3cgYmVmb3JlCiYjNDM7CSAqIGxvY2tfc29jaygpLgomIzQzOwkgKgomIzQzOwkgKiBPbmx5IG1ha2UgdGhhdCB0cmFuc2l0aW9uIGlmIHRoZSBwYXRoIGlzIHN0aWxsIGNvbm5lY3RpbmcKJiM0MzsJICogKG9yIGFscmVhZHkgcmVzZXR0aW5nIGZyb20gYW4gZWFybGllciBkdWVsKS4gIEEgcGF0aCBpbiBhbnkKJiM0MzsJICogb3RoZXIgc3RhdGUgLSB0eXBpY2FsbHkgUkRTX0NPTk5fRElTQ09OTkVDVElORyBvcgomIzQzOwkgKiBSRFNfQ09OTl9FUlJPUiB3aXRoIGEgc2h1dGRvd24gaW4gZmxpZ2h0IC0gaXMgZHJvcHBlZAomIzQzOwkgKiBpbnN0ZWFkLiAgVGhhdCBzdGlsbCByZXBsYWNlcyBpdHMgc3RhdGUsIHdpdGggUkRTX0NPTk5fRVJST1IsCiYjNDM7CSAqIGFuZCwgdW5sZXNzIGEgcGVuZGluZyBkZXN0cm95IGlzIGFib3V0IHRvIHJlYXAgdGhlIHdob2xlCiYjNDM7CSAqIGNvbm5lY3Rpb24gYW55d2F5LCBxdWV1ZXMgb25lIG1vcmUgc2h1dGRvd24gcGFzcy4gIEEgc2h1dGRvd24KJiM0MzsJICogYWxyZWFkeSBpbiBmbGlnaHQgbGVhdmVzIHRoYXQgUkRTX0NPTk5fRVJST1IgYWxvbmUgd2hlbiBpdAomIzQzOwkgKiBmaW5pc2hlczsgdGhlIHF1ZXVlZCBwYXNzIHRoZW4gY29tcGxldGVzIHRoZSB0cmFuc2l0aW9uIHRvCiYjNDM7CSAqIFJEU19DT05OX0RPV04gYW5kIHRlYXJzIGRvd24gYW55dGhpbmcgdGhhdCBhdHRhY2hlZCB0byB0aGUKJiM0MzsJICogcGF0aCBpbiB0aGUgbWVhbnRpbWUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fQ09OTkVDVElORywKJiM0MzsJCQkJICAgICAgUkRTX0NPTk5fUkVTRVRUSU5HKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9SRVNFVFRJTkcsCiYjNDM7CQkJCSAgICAgIFJEU19DT05OX1JFU0VUVElORykpCiYjNDM7CQlyZHNfY29ubl9wYXRoX2Ryb3AoY3AsIDApOwomIzQzOwl3YWl0X2V2ZW50KGNwLSZndDtjcF93YWl0cSwKJiM0MzsJCSAgICF0ZXN0X2FuZF9zZXRfYml0X2xvY2soUkRTX0lOX1hNSVQsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7CiYjNDM7CiYjNDM7CS8qIFJlYWQgdF9zb2NrIG9ubHkgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlULCBuZXZlciBiZWZvcmUgdGhlCiYjNDM7CSAqIHdhaXQ6IHRoZSB0ZWFyZG93biBpbiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGQKJiM0MzsJICogc29ja2V0IGFuZCBjbGVhcnMgdF9zb2NrLCBzbyBhIHBvaW50ZXIgc2FtcGxlZCBlYXJsaWVyIGNhbgomIzQzOwkgKiBiZSBzdGFsZSBieSB0aGUgdGltZSB3ZSB3YWtlIHVwLiAgVGhlIHRlYXJkb3duIGhvbGRzIHRoZQomIzQzOwkgKiBzYW1lIGxvY2sgd2hpbGUgaXQgZG9lcyBzbywgc28gd2hhdCB3ZSByZWFkIGhlcmUgY2Fubm90CiYjNDM7CSAqIGNoYW5nZSB1bmRlciB1cyB1bnRpbCB3ZSByZWxlYXNlIGl0LgomIzQzOwkgKi8KJiM0MzsJb3NvY2sgPSB0Yy0mZ3Q7dF9zb2NrOwomIzQzOwlpZiAoIW9zb2NrKQomIzQzOwkJZ290byBuZXdzb2NrOwomIzQzOwomIzQzOwkvKiByZXNldCByZWNlaXZlIHNpZGUgc3RhdGUgZm9yIHJkc190Y3BfZGF0YV9yZWN2KCkgZm9yIG9zb2NrLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgc3luYyBjYW5jZWxzIHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVCByZWx5IG9uIGNwX3dxCiYjNDM7CSAqIGJlaW5nIG9yZGVyZWQ6IGEgdGVhcmRvd24gYmxvY2tlZCBvbiB0aGUgYml0IG9jY3VwaWVzCiYjNDM7CSAqIGNwX3dxJiMzOTtzIG9ubHkgZXhlY3V0aW9uIHNsb3QsIHNvIGNwX3NlbmRfdyBhbmQgY3BfcmVjdl93IGFyZQomIzQzOwkgKiBwZW5kaW5nIGF0IG1vc3QgYW5kIHRoZSBjYW5jZWxzIG5ldmVyIGZsdXNoLiAgTm90aGluZyBoZXJlCiYjNDM7CSAqIG1heSBmbHVzaCBvciB3YWl0IG9uIGNwX3dxIGl0c2VsZi4KIAkgKi8KLQlhdG9taWNfc2V0KCZhbXA7Y3AtJmd0O2NwX3N0YXRlLCBSRFNfQ09OTl9SRVNFVFRJTkcpOwotCXdhaXRfZXZlbnQoY3AtJmd0O2NwX3dhaXRxLCAhdGVzdF9iaXQoUkRTX0lOX1hNSVQsICZhbXA7Y3AtJmd0O2NwX2ZsYWdzKSk7Ci0JLyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jayAgKi8KIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3Bfc2VuZF93KTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtjcC0mZ3Q7Y3BfcmVjdl93KTsKIAlsb2NrX3NvY2sob3NvY2stJmd0O3NrKTsKQEAgLTE3Miw2ICYjNDM7MjE2LDkgQEAgdm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCWxvY2tfc29jayhzb2NrLSZndDtzayk7CiAJcmRzX3RjcF9zZXRfY2FsbGJhY2tzKHNvY2ssIGNwKTsKIAlyZWxlYXNlX3NvY2soc29jay0mZ3Q7c2spOwomIzQzOwomIzQzOwljbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCAmYW1wO2NwLSZndDtjcF9mbGFncyk7CiYjNDM7CXdha2VfdXBfYWxsKCZhbXA7Y3AtJmd0O2NwX3dhaXRxKTsKIH0KIAogLyogQWRkIHRjIHRvIHJkc190Y3BfdGNfbGlzdCBhbmQgc2V0IHRjLSZndDt0X3NvY2suIFNlZSBjb21tZW50cwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uYwppbmRleCBhM2RiOWIwNTcwODRkLi4xM2ZhNjBjMTk4NWJiIDEwMDY0NAotLS0gYS9uZXQvcmRzL3RjcF9saXN0ZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvcmRzL3RjcF9saXN0ZW4uYwpAQCAtMjk1LDcgJiM0MzsyOTUsMTEgQEAgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bikKIAlpZiAocnNfdGNwLSZndDt0X3NvY2spIHsKIAkJLyogRHVlbGxpbmcgU1lOIGhhcyBiZWVuIGhhbmRsZWQgaW4gcmRzX3RjcF9hY2NlcHRfb25lKCkgKi8KIAkJcmRzX3RjcF9yZXNldF9jYWxsYmFja3MobmV3X3NvY2ssIGNwKTsKLQkJLyogcmRzX2Nvbm5lY3RfcGF0aF9jb21wbGV0ZSgpIG1hcmtzIFJEU19DT05OX1VQICovCiYjNDM7CQkvKiByZHNfY29ubmVjdF9wYXRoX2NvbXBsZXRlKCkgbWFya3MgUkRTX0NPTk5fVVAsIG9yLAomIzQzOwkJICogaWYgYSBjb25jdXJyZW50IHNodXRkb3duIHdvbiB0aGUgZHVlbCwgZHJvcHMgdGhlCiYjNDM7CQkgKiBwYXRoIGFnYWluIGFuZCB0aGUgcGFzcyB0aGF0IGRyb3AgcXVldWVzIHJlYXBzIHRoZQomIzQzOwkJICogc29ja2V0IGluc3RhbGxlZCBhYm92ZS4KJiM0MzsJCSAqLwogCQlyZHNfY29ubmVjdF9wYXRoX2NvbXBsZXRlKGNwLCBSRFNfQ09OTl9SRVNFVFRJTkcpOwogCX0gZWxzZSB7CiAJCXJkc190Y3Bfc2V0X2NhbGxiYWNrcyhuZXdfc29jaywgY3ApOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjI6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk3NAoJCQkJCQkJb3V0cHV0OiAyMzgKCQkJCQkJCXRob3VnaHRzOiAxMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBSRFMgQ29ubmVjdGlvbiBMaWZlY3ljbGUgU3luY2hyb25pemF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBwcmltYXJpbHkgYSBzeW5jaHJvbml6YXRpb24gYW5kIGNvbmN1cnJlbmN5IGZpeCB3aXRoaW4gdGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgY29ubmVjdGlvbiBsaWZlY3ljbGUgbWFuYWdlbWVudC4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBhY3Jvc3Mgc2V2ZXJhbCBmaWxlczogYGNvbm5lY3Rpb24uY2AsIGBpYl9yZWN2LmNgLCBgc2VuZC5jYCwgYHRjcC5jYCwgYW5kIGB0Y3BfbGlzdGVuLmNgLiBNeSBleHBlcnQgZXllIGlzIGltbWVkaWF0ZWx5IGRyYXduIHRvIHRoZSBtb2RpZmljYXRpb25zIGludm9sdmluZyBhdG9taWMgb3BlcmF0aW9ucywgYml0bG9ja3MsIGFuZCB3YWl0cXVldWVzLCB3aGljaCBzY3JlYW0gJiMzNDtyYWNlIGNvbmRpdGlvbiBmaXguJiMzNDsKClNwZWNpZmljYWxseSwgbGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgoqICAgYGNvbm5lY3Rpb24uY2A6IFRoZSBwYXRjaCBlbGVnYW50bHkgdHJhbnNpdGlvbnMgZnJvbSBzaW1wbGUgZmxhZyBjbGVhcnMgdG8gdXNpbmcgYGNsZWFyX2JpdGAgd2l0aCBgY2xlYXJfYml0X3VubG9ja2Agd2l0aGluIHRoZSBgcmRzX2Nvbm5fcGF0aF9yZXNldCgpYCBhbmQgYHJkc19jb25uX3NodXRkb3duKClgIGZ1bmN0aW9ucy4gVGhpcyBpbmRpY2F0ZXMgYSBjb25zY2lvdXMgZWZmb3J0IHRvIGF2b2lkIGNsb2JiZXJpbmcgY29uY3VycmVudCBhdG9taWMgb3BlcmF0aW9ucyBvbiB0aGUgYGNwX2ZsYWdzYCBmaWVsZCwgY3J1Y2lhbCBpbiBhbnkgY29uY3VycmVudCBzeXN0ZW0uIFRoZSB1c2Ugb2YgYHRlc3RfYW5kX3NldF9iaXRfbG9ja2AgdG8gc2VyaWFsaXplIGFjY2VzcyBkdXJpbmcgc2h1dGRvd24gbWFrZXMgcGVyZmVjdCBzZW5zZSB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGhlIGRpc2Nvbm5lY3Rpb24gcHJvY2Vzcy4gVGhlIHN0YXRlIHRyYW5zaXRpb24gYW5kIGhhbmRsaW5nIG9mIGRlbGF5ZWQgd29yayBzZWVtIGxpa2UgYSB0eXBpY2FsIGJ1ZyBmaXggZHVyaW5nIGNvbm5lY3Rpb24gdGVhcmRvd24uCiogICBgaWJfcmVjdi5jYCBhbmQgYHNlbmQuY2A6IFRoZSByZXBsYWNlbWVudCBvZiBgY2xlYXJfYml0YCAmIzQzOyBgc21wX21iX19hZnRlcl9hdG9taWMoKWAgYW5kIGB3YWl0cXVldWVfYWN0aXZlKClgIHdpdGggYGNsZWFyX2JpdF91bmxvY2soKWAgYW5kIGB3cV9oYXNfc2xlZXBlcigpYCBpbiBgcmVsZWFzZV9yZWZpbGwoKWAgYW5kIGByZWxlYXNlX2luX3htaXQoKWAgcmVzcGVjdGl2ZWx5IGlzIGEgY2xhc3NpYyBvcHRpbWl6YXRpb24gYW5kIHNpbXBsaWZpY2F0aW9uLCB3aGlsZSBtYWludGFpbmluZyBzeW5jaHJvbml6YXRpb24gY29ycmVjdG5lc3MsIHRvIGNoZWNrIGlmIGEgdGFzayBpcyB3YWl0aW5nIG9uIHRoYXQgcXVldWUuCiogICBgdGNwLmNgOiBUaGUgaW50cm9kdWN0aW9uIG9mIGB0ZXN0X2FuZF9zZXRfYml0X2xvY2tgIGluIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpYCBiZWZvcmUgYWNjZXNzaW5nIGB0Yy0mZ3Q7dF9zb2NrYCBzdWdnZXN0cyBhIGNyaXRpY2FsIGZpeCBmb3Igc29ja2V0IHN3YXBwaW5nIGFnYWluc3Qgc2VuZGVycyBhbmQgdGVhcmRvd24gaW4gYSBtdWx0aS10aHJlYWRlZCBvciBpbnRlcnJ1cHQtZHJpdmVuIGNvbnRleHQuIFRoaXMgZ3VhcmFudGVlcyB0aGF0IHNvY2tldCBzdGF0ZSBpcyB2YWxpZCB3aGVuIGJlaW5nIHVzZWQsIGFuZCBhdm9pZHMgb3RoZXIgcmFjZXMgb24gaXQuCiogICBgdGNwX2xpc3Rlbi5jYDogVGhlIGNvbW1lbnQgdXBkYXRlIGlzIGluc2lnbmlmaWNhbnQuCgpOb3csIGxldCYjMzk7cyBtZXRob2RpY2FsbHkgYWRkcmVzcyB0aGUgcG90ZW50aWFsIHJpc2tzLiBNeSBwcmltYXJ5IGZvY3VzIGlzIGFsd2F5cyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgKEtNU0FOKSBvciBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZXMgKEtBU0FOLCBMT0NLREVQLCBldGMuKS4KCjEuICAqKlVzZXIgU3BhY2UgSW50ZXJhY3Rpb246KiogVGhpcyBwYXRjaCAqZG9lc24mIzM5O3QqIHRvdWNoIGFueSBrZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgdmlhIGBjb3B5X3RvX3VzZXJgLCBgcHV0X3VzZXJgLCBuZXRsaW5rLCBvciBzb2NrZXQgb3B0aW9ucy4gU28sIG5vIGNvbmNlcm5zIHRoZXJlLgoyLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlczoqKiBUaGUgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIG5ldyBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgZGVwZW5kZW50IG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBFdmVyeXRoaW5nIEkgc2VlIGlzIHdvcmtpbmcgd2l0aCBhdG9taWMgZmxhZ3Mgb3IgcHJlLWV4aXN0aW5nIGZpZWxkcyB3aXRoaW4gYHJkc19jb25uZWN0aW9uYCwgYHJkc19jb25uX3BhdGhgLCBvciBgcmRzX3RjcF9jb25uZWN0aW9uYCBvYmplY3RzIHRoYXQgYXJlIGFzc3VtZWQgdG8gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCjMuICAqKkRhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uOioqIEkmIzM5O20gbm90IHNlZWluZyBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9uIG9yIGFueSBjaGFuZ2VzIHRoYXQgY291bGQgbGVhZCB0byBzdWJzZXF1ZW50IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Lgo0LiAgKipCb3VuZHMvTGVuZ3RoIENoZWNrczoqKiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgbW9kaWZ5IGFueSBib3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBwb3RlbnRpYWxseSBpbnRyb2R1Y2UgYnVmZmVyIG92ZXJydW5zLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBwcmltYXJpbHkgYWRkcmVzc2VzICpjb25jdXJyZW5jeSBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlcyosIHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIG9yIHBvdGVudGlhbCBzdGF0ZSBtYWNoaW5lIGRlc3luY2hyb25pemF0aW9uLiBUaGVzZSBhcmUgdGhlIGtpbmRzIG9mIGlzc3VlcyBkZXRlY3RlZCBieSB0b29scyBsaWtlIEtBU0FOLCBMT0NLREVQLCBhbmQgcG90ZW50aWFsbHkgZnVuY3Rpb25hbCB0ZXN0aW5nLiBJdCBpcyAqbm90KiByZWxhdGVkIHRvIEtNU0FOIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBwcm90ZWN0aW5nIGFnYWluc3QgZGF0YSByYWNlcyBvbiBzaGFyZWQgc3RhdGUuCgpUaGUgS01TQU4gZG9jdW1lbnRhdGlvbiBpcyBjbGVhcjogJiMzNDtUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLiYjMzQ7IEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcyBhbmQgbXkgYW5hbHlzaXMsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgZmFsc2UuIEkmIzM5O20gY29tZm9ydGFibGUgaW4gc2F5aW5nIHRoaXMgcGF0Y2ggaXMgYSBnb29kIHRoaW5nOyB0aGUgc3luY2hyb25pemF0aW9uIGZpeGVzIGFyZSBjbGVhcmx5IGJlbmVmaWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIyOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyByZXNvbHZlcyBjb25jdXJyZW5jeSwgcmFjZSBjb25kaXRpb24sIGFuZCBzdGF0ZS1tYWNoaW5lIHN5bmNocm9uaXphdGlvbiBidWdzIGluIHRoZSBSRFMgKFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMpIHN1YnN5c3RlbSBkdXJpbmcgY29ubmVjdGlvbiB0ZWFyZG93biwgcmVzZXQsIGFuZCBkdWVsbGluZyBTWU4gcmVzb2x1dGlvbiAoc3BlY2lmaWNhbGx5IGxvY2tpbmcgYW5kIGJpdC1tYW5pcHVsYXRpb24gb2YgUkRTX0lOX1hNSVQsIFJEU19SRUNWX1JFRklMTCwgYW5kIFJEU19DT05OXyogc3RhdGUgdHJhbnNpdGlvbnMpLlxuXG4tIE5vIG5ldyBoZWFwL3N0YWNrIGFsbG9jYXRpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYWRkZWQgb3IgbW9kaWZpZWQuXG4tIE5vIGtlcm5lbC10by11c2VyIGNvcHkgb3BlcmF0aW9ucyAoZS5nLiwgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluaywgaW9jdGwsIGdldHNvY2tvcHQpIG9yIHVzZXItZmFjaW5nIHN0cnVjdHMgYXJlIHRvdWNoZWQuXG4tIE5vIGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tzLCBvciBwYXlsb2FkIHBhcnNpbmcgcm91dGluZXMgYXJlIGFsdGVyZWQgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuLSBBbnkgY29uY3VycmVuY3kgYnVncywgdXNlLWFmdGVyLWZyZWUsIGRlYWRsb2Nrcywgb3IgbG9jayBvcmRlcmluZyBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIHRoZXNlIGNoYW5nZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlc29sdmVzIGNvbmN1cnJlbmN5LCByYWNlIGNvbmRpdGlvbiwgYW5kIHN0YXRlLW1hY2hpbmUgc3luY2hyb25pemF0aW9uIGJ1Z3MgaW4gdGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgc3Vic3lzdGVtIGR1cmluZyBjb25uZWN0aW9uIHRlYXJkb3duLCByZXNldCwgYW5kIGR1ZWxsaW5nIFNZTiByZXNvbHV0aW9uIChzcGVjaWZpY2FsbHkgbG9ja2luZyBhbmQgYml0LW1hbmlwdWxhdGlvbiBvZiBSRFNfSU5fWE1JVCwgUkRTX1JFQ1ZfUkVGSUxMLCBhbmQgUkRTX0NPTk5fKiBzdGF0ZSB0cmFuc2l0aW9ucykuXG5cbi0gTm8gbmV3IGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhZGRlZCBvciBtb2RpZmllZC5cbi0gTm8ga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zIChlLmcuLCBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rLCBpb2N0bCwgZ2V0c29ja29wdCkgb3IgdXNlci1mYWNpbmcgc3RydWN0cyBhcmUgdG91Y2hlZC5cbi0gTm8gYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja3MsIG9yIHBheWxvYWQgcGFyc2luZyByb3V0aW5lcyBhcmUgYWx0ZXJlZCB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4tIEFueSBjb25jdXJyZW5jeSBidWdzLCB1c2UtYWZ0ZXItZnJlZSwgZGVhZGxvY2tzLCBvciBsb2NrIG9yZGVyaW5nIGlzc3VlcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gdGhlc2UgY2hhbmdlcyBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgZmFjaWxpdGllcywgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjAyLjc2MDAxOTIzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyNDk1MDU1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfVENQXCIsXG4gICAgXCJSRFNfUkRNQVwiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiSU5GSU5JQkFORF9BRERSX1RSQU5TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX2Nvbm5fc2h1dGRvd25cIixcbiAgICBcInJkc19zZW5kX3htaXRcIixcbiAgICBcInJkc190Y3BfcmVzZXRfY2FsbGJhY2tzXCIsXG4gICAgXCJyZHNfdGNwX2FjY2VwdF9vbmVcIixcbiAgICBcInJkc19pYl9yZWN2X3JlZmlsbFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlc29sdmVzIGNvbmN1cnJlbmN5LCByYWNlIGNvbmRpdGlvbiwgYW5kIHN0YXRlLW1hY2hpbmUgc3luY2hyb25pemF0aW9uIGJ1Z3MgaW4gdGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgc3Vic3lzdGVtIGR1cmluZyBjb25uZWN0aW9uIHRlYXJkb3duLCByZXNldCwgYW5kIGR1ZWxsaW5nIFNZTiByZXNvbHV0aW9uIChzcGVjaWZpY2FsbHkgbG9ja2luZyBhbmQgYml0LW1hbmlwdWxhdGlvbiBvZiBSRFNfSU5fWE1JVCwgUkRTX1JFQ1ZfUkVGSUxMLCBhbmQgUkRTX0NPTk5fKiBzdGF0ZSB0cmFuc2l0aW9ucykuXFxuXFxuLSBObyBuZXcgaGVhcC9zdGFjayBhbGxvY2F0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGFkZGVkIG9yIG1vZGlmaWVkLlxcbi0gTm8ga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zIChlLmcuLCBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rLCBpb2N0bCwgZ2V0c29ja29wdCkgb3IgdXNlci1mYWNpbmcgc3RydWN0cyBhcmUgdG91Y2hlZC5cXG4tIE5vIGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tzLCBvciBwYXlsb2FkIHBhcnNpbmcgcm91dGluZXMgYXJlIGFsdGVyZWQgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Llxcbi0gQW55IGNvbmN1cnJlbmN5IGJ1Z3MsIHVzZS1hZnRlci1mcmVlLCBkZWFkbG9ja3MsIG9yIGxvY2sgb3JkZXJpbmcgaXNzdWVzIHRoYXQgY291bGQgYXJpc2UgZnJvbSB0aGVzZSBjaGFuZ2VzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBtZWNoYW5pc21zIChzcGVjaWZpY2FsbHkgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBiaXRsb2Nrcywgd2FpdHF1ZXVlIGJhcnJpZXJzLCBhbmQgc3RhdGUgdHJhbnNpdGlvbnMpIGluIFJEUyBjb25uZWN0aW9uIHRlYXJkb3duLCBzZW5kLCByZWNlaXZlLXJlZmlsbCwgYW5kIFRDUCBzb2NrZXQgc3dhcHBpbmcgcGF0aHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBuZXR3b3JrIHNvY2tldCBvcGVyYXRpb25zIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDc6MDIuNzYwMDIzNTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5OTAxMTc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRmZTM3Njc5MGI3YzlkY2YzZTZmNTMxZTU2NWYyMzc3ZmNlZmIzYWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjggMjI6NDc6MDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9jb25uZWN0aW9uLmMgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uY1xcbmluZGV4IDdjOGFiOGU5NzNlMWIuLmI2YzRiZWI1MGVhZjAgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9jb25uZWN0aW9uLmNcXG4rKysgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uY1xcbkBAIC0xMDYsMTAgKzEwNiwxMiBAQCBzdGF0aWMgc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LFxcbiB9XFxuIFxcbiAvKlxcbi0gKiBUaGlzIGlzIGNhbGxlZCBieSB0cmFuc3BvcnRzIGFzIHRoZXkncmUgYnJpbmdpbmcgZG93biBhIGNvbm5lY3Rpb24uXFxuLSAqIEl0IGNsZWFycyBwYXJ0aWFsIG1lc3NhZ2Ugc3RhdGUgc28gdGhhdCB0aGUgdHJhbnNwb3J0IGNhbiBzdGFydCBzZW5kaW5nXFxuLSAqIGFuZCByZWNlaXZpbmcgb3ZlciB0aGlzIGNvbm5lY3Rpb24gYWdhaW4gaW4gdGhlIGZ1dHVyZS4gIEl0IGlzIHVwIHRvXFxuLSAqIHRoZSB0cmFuc3BvcnQgdG8gaGF2ZSBzZXJpYWxpemVkIHRoaXMgY2FsbCB3aXRoIGl0cyBzZW5kIGFuZCByZWN2LlxcbisgKiBUaGlzIGlzIGNhbGxlZCBieSByZHNfY29ubl9zaHV0ZG93bigpIG9uY2UgdGhlIHRyYW5zcG9ydCBoYXMgYnJvdWdodFxcbisgKiBhIHBhdGggZG93bi4gIEl0IGNsZWFycyBwYXJ0aWFsIG1lc3NhZ2Ugc3RhdGUgc28gdGhhdCB0aGUgdHJhbnNwb3J0XFxuKyAqIGNhbiBzdGFydCBzZW5kaW5nIGFuZCByZWNlaXZpbmcgb3ZlciB0aGlzIHBhdGggYWdhaW4gaW4gdGhlIGZ1dHVyZS5cXG4rICogVGhlIGNhbGxlciBvd25zIFJEU19JTl9YTUlUIGFuZCBSRFNfUkVDVl9SRUZJTEwgYWNyb3NzIHRoaXMgY2FsbCxcXG4rICogd2hpY2ggaXMgd2hhdCBzZXJpYWxpemVzIGl0IGFnYWluc3QgdGhlIHNlbmQgYW5kIHJlY2VpdmUtcmVmaWxsXFxuKyAqIHBhdGhzLlxcbiAgKi9cXG4gc3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuIHtcXG5AQCAtMTIwLDcgKzEyMiwxNiBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG4gXFxuIFxcdHJkc19zdGF0c19pbmMoc19jb25uX3Jlc2V0KTtcXG4gXFx0cmRzX3NlbmRfcGF0aF9yZXNldChjcCk7XFxuLVxcdGNwLVxcdTAwM2VjcF9mbGFncyA9IDA7XFxuK1xcbitcXHQvKiBDbGVhciB0aGUgYml0cyB0aGUgcmVzZXQgaXMgcmVzcG9uc2libGUgZm9yIGluZGl2aWR1YWxseTogYVxcbitcXHQgKiBibGFua2V0IGNwX2ZsYWdzID0gMCBpcyBhIHBsYWluIHN0b3JlIHRoYXQgY2FuIGNsb2JiZXIgYVxcbitcXHQgKiBjb25jdXJyZW50IGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBvbiB0aGUgc2FtZSB3b3JkLlxcbitcXHQgKiBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGFyZSBoZWxkIGFzIGxvY2tzIGJ5IHRoZVxcbitcXHQgKiBjYWxsZXIsIHJkc19jb25uX3NodXRkb3duKCksIHdoaWNoIHJlbGVhc2VzIHRoZW0gb25jZSB0aGVcXG4rXFx0ICogdGVhcmRvd24gaXMgY29tcGxldGUuXFxuK1xcdCAqL1xcbitcXHRjbGVhcl9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncyk7XFxuK1xcdGNsZWFyX2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsIFxcdTAwMjZjcC1cXHUwMDNlY3BfZmxhZ3MpO1xcbiBcXG4gXFx0LyogRG8gbm90IGNsZWFyIG5leHRfcnhfc2VxIGhlcmUsIGVsc2Ugd2UgY2Fubm90IGRpc3Rpbmd1aXNoXFxuIFxcdCAqIHJldHJhbnNtaXR0ZWQgcGFja2V0cyBmcm9tIG5ldyBwYWNrZXRzLCBhbmQgd2lsbCBoYW5kIGFsbFxcbkBAIC00MDYsMjggKzQxNyw3MCBAQCB2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG4gXFx0XFx0fVxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmNwLVxcdTAwM2VjcF9jbV9sb2NrKTtcXG4gXFxuK1xcdFxcdC8qIFF1aWVzY2UgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlLXJlZmlsbCBwYXRocyBieVxcbitcXHRcXHQgKiBhY3F1aXJpbmcgdGhlaXIgYml0IGxvY2tzLCBub3QgbWVyZWx5IHdhaXRpbmcgZm9yXFxuK1xcdFxcdCAqIHRoZW0gdG8gYmUgcmVsZWFzZWQ6IHdpdGggYSBwbGFpbiB3YWl0LCBlaXRoZXIgcGF0aFxcbitcXHRcXHQgKiBjYW4gcmUtdGFrZSBpdHMgbG9jayB0aGUgaW5zdGFudCBhZnRlciB3ZSBzYW1wbGUgaXRcXG4rXFx0XFx0ICogY2xlYXIgYW5kIHRoZW4gcnVuIGNvbmN1cnJlbnRseSB3aXRoIHRoZSB0cmFuc3BvcnRcXG4rXFx0XFx0ICogc2h1dGRvd24gYW5kIHRoZSBwYXRoIHJlc2V0IGJlbG93LiAgSG9sZGluZyBib3RoXFxuK1xcdFxcdCAqIGxvY2tzIGFjcm9zcyB0aGUgdGVhcmRvd24gbWFrZXMgdGhhdCBzdHJ1Y3R1cmFsbHlcXG4rXFx0XFx0ICogaW1wb3NzaWJsZS5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdHdhaXRfZXZlbnQoY3AtXFx1MDAzZWNwX3dhaXRxLFxcbi1cXHRcXHRcXHQgICAhdGVzdF9iaXQoUkRTX0lOX1hNSVQsIFxcdTAwMjZjcC1cXHUwMDNlY3BfZmxhZ3MpKTtcXG4rXFx0XFx0XFx0ICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhSRFNfSU5fWE1JVCwgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncykpO1xcbiBcXHRcXHR3YWl0X2V2ZW50KGNwLVxcdTAwM2VjcF93YWl0cSxcXG4tXFx0XFx0XFx0ICAgIXRlc3RfYml0KFJEU19SRUNWX1JFRklMTCwgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncykpO1xcbitcXHRcXHRcXHQgICAhdGVzdF9hbmRfc2V0X2JpdChSRFNfUkVDVl9SRUZJTEwsIFxcdTAwMjZjcC1cXHUwMDNlY3BfZmxhZ3MpKTtcXG4gXFxuIFxcdFxcdGNvbm4tXFx1MDAzZWNfdHJhbnMtXFx1MDAzZWNvbm5fcGF0aF9zaHV0ZG93bihjcCk7XFxuIFxcdFxcdHJkc19jb25uX3BhdGhfcmVzZXQoY3ApO1xcbiBcXG4rXFx0XFx0LyogUmVsZWFzZSB0aGUgdHdvIGxvY2tzIGFuZCB3YWtlIGFueSB3YWl0ZXIgKGUuZy5cXG4rXFx0XFx0ICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSkgdGhhdCBibG9ja2VkIG9uIHRoZW0gd2hpbGVcXG4rXFx0XFx0ICogd2UgaGVsZCB0aGVtLiAgVGhlIHVubG9jayBvcmRlcnMgdGhlIHRyYW5zcG9ydCdzIHJpbmdcXG4rXFx0XFx0ICogcmUtaW5pdGlhbGl6YXRpb24gYW5kIHRoZSBwYXRoIHJlc2V0IGFib3ZlIGJlZm9yZVxcbitcXHRcXHQgKiBlaXRoZXIgYml0IGlzIHNlZW4gY2xlYXIuICByZHNfY29ubl9wYXRoX3Jlc2V0KCkgbGVhdmVzXFxuK1xcdFxcdCAqIGJvdGggYml0cyBhbG9uZTogb3duZXJzaGlwIGVuZHMgaGVyZSwgbm90IGluc2lkZSB0aGVcXG4rXFx0XFx0ICogcmVzZXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKTtcXG4rXFx0XFx0Y2xlYXJfYml0X3VubG9jayhSRFNfUkVDVl9SRUZJTEwsIFxcdTAwMjZjcC1cXHUwMDNlY3BfZmxhZ3MpO1xcbitcXHRcXHR3YWtlX3VwX2FsbChcXHUwMDI2Y3AtXFx1MDAzZWNwX3dhaXRxKTtcXG4rXFxuIFxcdFxcdGlmICghcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9ESVNDT05ORUNUSU5HLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBSRFNfQ09OTl9ET1dOKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRVJST1IsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFJEU19DT05OX0RPV04pKSB7XFxuLVxcdFxcdFxcdC8qIFRoaXMgY2FuIGhhcHBlbiAtIGVnIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiB0ZWFyaW5nXFxuLVxcdFxcdFxcdCAqIGRvd24gdGhlIGNvbm5lY3Rpb24sIGFuZCBzb21lb25lIHVubG9hZHMgdGhlIHJkcyBtb2R1bGUuXFxuLVxcdFxcdFxcdCAqIFF1aXRlIHJlcHJvZHVjaWJsZSB3aXRoIGxvb3BiYWNrIGNvbm5lY3Rpb25zLlxcbi1cXHRcXHRcXHQgKiBNb3N0bHkgaGFybWxlc3MuXFxuK1xcdFxcdFxcdC8qIFRoZSBwYXRoIHdhcyBkcm9wcGVkIGFnYWluIHdoaWxlIHdlIHRvcmUgaXRcXG4rXFx0XFx0XFx0ICogZG93bjogYnkgYSBzb2NrZXQgc3RhdGUtY2hhbmdlIGNhbGxiYWNrIGluXFxuK1xcdFxcdFxcdCAqIGlycSBjb250ZXh0IG9uIHJlY2VpcHQgb2YgYSBGSU4sIG9yIGJ5IGFuXFxuK1xcdFxcdFxcdCAqIGFjY2VwdCB0aGF0IGNsYWltZWQgdGhlIHBhdGgganVzdCBiZWZvcmUgYVxcbitcXHRcXHRcXHQgKiBkcm9wIHB1dCBpdCBiYWNrIHRvIFJEU19DT05OX0VSUk9SIGFuZCB0aGVuXFxuK1xcdFxcdFxcdCAqIGluc3RhbGxlZCBhIGZyZXNoIHNvY2tldCBvbiBpdC4gIFVubGVzcyBhXFxuK1xcdFxcdFxcdCAqIHBlbmRpbmcgZGVzdHJveSBzdXBwcmVzc2VkIGl0LCB0aGUgZHJvcCBhbHNvXFxuK1xcdFxcdFxcdCAqIHF1ZXVlZCBhbm90aGVyIHNodXRkb3duIHBhc3MsIGFuZCB0aGF0IHBhc3NcXG4rXFx0XFx0XFx0ICogbXVzdCBydW4sIGJlY2F1c2UgaXQgaXMgd2hhdCB0ZWFycyBkb3duXFxuK1xcdFxcdFxcdCAqIHdoYXRldmVyIGF0dGFjaGVkIHRvIHRoZSBwYXRoIGFmdGVyIHRoZVxcbitcXHRcXHRcXHQgKiB0cmFuc3BvcnQgc2h1dGRvd24gYWJvdmUgc2FtcGxlZCBpdHMgc3RhdGUuXFxuK1xcdFxcdFxcdCAqIENvbnN1bWluZyB0aGUgUkRTX0NPTk5fRVJST1IgaGVyZSB3b3VsZCB0dXJuXFxuK1xcdFxcdFxcdCAqIHRoYXQgcGFzcyBpbnRvIGEgbm8tb3A6IGxlYXZlIHRoZSBzdGF0ZVxcbitcXHRcXHRcXHQgKiBhbG9uZSwgYW5kIGxldCB0aGUgcGFzcyBmaW5pc2ggdGhlIGpvYi5cXG4gXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogTm90ZSB0aGF0IHRoaXMgYWxzbyBoYXBwZW5zIHdpdGggcmRzLXRjcCBiZWNhdXNlXFxuLVxcdFxcdFxcdCAqIHdlIGNvdWxkIGhhdmUgdHJpZ2dlcmVkIHJkc19jb25uX3BhdGhfZHJvcCBpbiBpcnFcXG4tXFx0XFx0XFx0ICogbW9kZSBmcm9tIHJkc190Y3Bfc3RhdGUgY2hhbmdlIG9uIHRoZSByZWNlaXB0IG9mXFxuLVxcdFxcdFxcdCAqIGEgRklOLCB0aHVzIHdlIG5lZWQgdG8gcmVjaGVjayBmb3IgUkRTX0NPTk5fRVJST1JcXG4tXFx0XFx0XFx0ICogaGVyZS5cXG4rXFx0XFx0XFx0ICogUXVpZXNjZSB0aGUgcmVjb25uZWN0IHRpbWVyIGJlZm9yZSBiYWlsaW5nXFxuK1xcdFxcdFxcdCAqIG91dCwgdGhvdWdoLiAgV2hlbiBhIHBlbmRpbmcgZGVzdHJveSBkaWRcXG4rXFx0XFx0XFx0ICogc3VwcHJlc3MgdGhlIHF1ZXVlLCBubyBsYXRlciBwYXNzIHJ1bnMsIGFuZFxcbitcXHRcXHRcXHQgKiByZHNfY29ubl9wYXRoX2Rlc3Ryb3koKSBpcyBhYm91dCB0byBmbHVzaFxcbitcXHRcXHRcXHQgKiBjcF9kb3duX3cgYW5kIGZyZWUgdGhlIHBhdGg6IGl0IG11c3Qgbm90XFxuK1xcdFxcdFxcdCAqIGZpbmQgY3BfY29ubl93IHN0aWxsIGFybWVkLiAgQSBzdWNjZXNzb3JcXG4rXFx0XFx0XFx0ICogcGFzcywgd2hlbiB0aGVyZSBpcyBvbmUsIHJlLWFybXMgdGhlXFxuK1xcdFxcdFxcdCAqIHJlY29ubmVjdCBmcm9tIGl0cyBvd24gdGFpbC5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2Y3AtXFx1MDAzZWNwX2Nvbm5fdyk7XFxuK1xcdFxcdFxcdGNsZWFyX2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsIFxcdTAwMjZjcC1cXHUwMDNlY3BfZmxhZ3MpO1xcbitcXG4rXFx0XFx0XFx0aWYgKHJkc19jb25uX3BhdGhfc3RhdGUoY3ApID09IFJEU19DT05OX0VSUk9SKVxcbitcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdC8qIE5vIGN1cnJlbnQgY3Bfc3RhdGUgd3JpdGVyIGxlYXZlcyBhXFxuK1xcdFxcdFxcdCAqIERJU0NPTk5FQ1RJTkcgcGF0aCBpbiBhbnkgc3RhdGUgYnV0XFxuK1xcdFxcdFxcdCAqIFJEU19DT05OX0VSUk9SOyByZXBvcnQgbG91ZGx5IGlmIG9uZSBldmVyXFxuK1xcdFxcdFxcdCAqIGRvZXMuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRyZHNfY29ubl9wYXRoX2Vycm9yKGNwLCBcXFwiJXM6IGZhaWxlZCB0byB0cmFuc2l0aW9uIFxcXCJcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJ0byBzdGF0ZSBET1dOLCBjdXJyZW50IHN0YXRlIFxcXCJcXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZWN2LmMgYi9uZXQvcmRzL2liX3JlY3YuY1xcbmluZGV4IDM1NzEyOGQzNGE1NDYuLmJkNmNiM2ZmYWE1NzEgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9pYl9yZWN2LmNcXG4rKysgYi9uZXQvcmRzL2liX3JlY3YuY1xcbkBAIC0zNjMsMTUgKzM2MywxNCBAQCBzdGF0aWMgaW50IGFjcXVpcmVfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcXG4gXFxuIHN0YXRpYyB2b2lkIHJlbGVhc2VfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcXG4ge1xcbi1cXHRjbGVhcl9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCBcXHUwMDI2Y29ubi1cXHUwMDNlY19mbGFncyk7XFxuLVxcdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XFxuK1xcdGNsZWFyX2JpdF91bmxvY2soUkRTX1JFQ1ZfUkVGSUxMLCBcXHUwMDI2Y29ubi1cXHUwMDNlY19mbGFncyk7XFxuIFxcbiBcXHQvKiBXZSBkb24ndCB1c2Ugd2FpdF9vbl9iaXQoKS93YWtlX3VwX2JpdCgpIGJlY2F1c2Ugb3VyIHdha2luZyBpcyBpbiBhXFxuIFxcdCAqIGhvdCBwYXRoIGFuZCBmaW5kaW5nIHdhaXRlcnMgaXMgdmVyeSByYXJlLiAgV2UgZG9uJ3Qgd2FudCB0byB3YWxrXFxuIFxcdCAqIHRoZSBzeXN0ZW0td2lkZSBoYXNoZWQgd2FpdHF1ZXVlIGJ1Y2tldHMgaW4gdGhlIGZhc3QgcGF0aCBvbmx5IHRvXFxuIFxcdCAqIGFsbW9zdCBuZXZlciBmaW5kIHdhaXRlcnMuXFxuIFxcdCAqL1xcbi1cXHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcXHUwMDI2Y29ubi1cXHUwMDNlY193YWl0cSkpXFxuK1xcdGlmICh3cV9oYXNfc2xlZXBlcihcXHUwMDI2Y29ubi1cXHUwMDNlY193YWl0cSkpXFxuIFxcdFxcdHdha2VfdXBfYWxsKFxcdTAwMjZjb25uLVxcdTAwM2VjX3dhaXRxKTtcXG4gfVxcbiBcXG5AQCAtMzkyLDcgKzM5MSw5IEBAIHZvaWQgcmRzX2liX3JlY3ZfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgaW50IHByZWZpbGwsIGdmcF90IGdmcClcXG4gXFxuIFxcdC8qIHRoZSBnb2FsIGhlcmUgaXMgdG8ganVzdCBtYWtlIHN1cmUgdGhhdCBzb21lb25lLCBzb21ld2hlcmVcXG4gXFx0ICogaXMgcG9zdGluZyBidWZmZXJzLiAgSWYgd2UgY2FuJ3QgZ2V0IHRoZSByZWZpbGwgbG9jayxcXG4tXFx0ICogbGV0IHRoZW0gZG8gdGhlaXIgdGhpbmdcXG4rXFx0ICogbGV0IHRoZW0gZG8gdGhlaXIgdGhpbmcuICBUaGUgaG9sZGVyIG1heSBhbHNvIGJlXFxuK1xcdCAqIHJkc19jb25uX3NodXRkb3duKCkgdGVhcmluZyB0aGUgcGF0aCBkb3duLCBpbiB3aGljaCBjYXNlXFxuK1xcdCAqIHRoZXJlIGlzIG5vdGhpbmcgdG8gcG9zdC5cXG4gXFx0ICovXFxuIFxcdGlmICghYWNxdWlyZV9yZWZpbGwoY29ubikpXFxuIFxcdFxcdHJldHVybjtcXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuY1xcbmluZGV4IDE1YTFiOTdmMTNlNzYuLjFhZmE5ODFlNWMwNmQgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcXG4rKysgYi9uZXQvcmRzL3NlbmQuY1xcbkBAIC0xMTQsOCArMTE0LDEzIEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfaW5feG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuIFxcdCAqIGhvdCBwYXRoIGFuZCBmaW5kaW5nIHdhaXRlcnMgaXMgdmVyeSByYXJlLiAgV2UgZG9uJ3Qgd2FudCB0byB3YWxrXFxuIFxcdCAqIHRoZSBzeXN0ZW0td2lkZSBoYXNoZWQgd2FpdHF1ZXVlIGJ1Y2tldHMgaW4gdGhlIGZhc3QgcGF0aCBvbmx5IHRvXFxuIFxcdCAqIGFsbW9zdCBuZXZlciBmaW5kIHdhaXRlcnMuXFxuK1xcdCAqXFxuK1xcdCAqIHdxX2hhc19zbGVlcGVyKCkgc3VwcGxpZXMgdGhlIGZ1bGwgYmFycmllciB0aGF0IG9yZGVycyB0aGUgd2FpdFxcbitcXHQgKiBxdWV1ZSByZWFkIGFmdGVyIHRoZSBiaXQgY2xlYXI7IGNsZWFyX2JpdF91bmxvY2soKSBhbG9uZSBpcyBvbmx5XFxuK1xcdCAqIGEgcmVsZWFzZSBhbmQgd291bGQgbGV0IHRoaXMgY2hlY2sgcmVhZCBhIHN0YWxlIGVtcHR5IHF1ZXVlLFxcbitcXHQgKiBsb3NpbmcgdGhlIHdha2UtdXAuXFxuIFxcdCAqL1xcbi1cXHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcXHUwMDI2Y3AtXFx1MDAzZWNwX3dhaXRxKSlcXG4rXFx0aWYgKHdxX2hhc19zbGVlcGVyKFxcdTAwMjZjcC1cXHUwMDNlY3Bfd2FpdHEpKVxcbiBcXHRcXHR3YWtlX3VwX2FsbChcXHUwMDI2Y3AtXFx1MDAzZWNwX3dhaXRxKTtcXG4gfVxcbiBcXG5AQCAtMjM5LDggKzI0NCwxMSBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuIFxcdFdSSVRFX09OQ0UoY3AtXFx1MDAzZWNwX3NlbmRfZ2VuLCBzZW5kX2dlbik7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gdGVzdHMgUkRTX0lOX1hNSVQsXFxuLVxcdCAqIHdlIGRvIHRoZSBvcHBvc2l0ZSB0byBhdm9pZCByYWNlcy5cXG4rXFx0ICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIGFjcXVpcmVzXFxuK1xcdCAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZS5cXG4rXFx0ICogT3duZXJzaGlwIGlzIGRlY2lkZWQgYnkgdGhlIGF0b21pYyBSTVcgb24gdGhlIGNwX2ZsYWdzIHdvcmQ6XFxuK1xcdCAqIGlmIHRoZSB0ZWFyZG93biB3b24gdGhlIGJpdCB3ZSBiYWNrIG9mZiBoZXJlLCBhbmQgaWYgd2Ugd29uXFxuK1xcdCAqIGl0IHRoZSB0ZWFyZG93biB3YWl0cyB1bnRpbCB3ZSByZWxlYXNlIGl0LlxcbiBcXHQgKi9cXG4gXFx0aWYgKCFyZHNfY29ubl9wYXRoX3VwKGNwKSkge1xcbiBcXHRcXHRyZWxlYXNlX2luX3htaXQoY3ApO1xcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcC5jIGIvbmV0L3Jkcy90Y3AuY1xcbmluZGV4IGIyNjM2MzRhYzc1MGQuLjc3NGE3MWY4OGQzNzUgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy90Y3AuY1xcbisrKyBiL25ldC9yZHMvdGNwLmNcXG5AQCAtMTE1LDQ2ICsxMTUsOTAgQEAgdm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIH1cXG4gXFxuIC8qXFxuLSAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgdGhlIHRvIHRoZSBuZXcgc29jayBhbmRcXG4tICogcmV0dXJucyB0aGUgZXhpc3RpbmcgdGMtXFx1MDAzZXRfc29jay5cXG4rICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSBzd2l0Y2hlcyBhIHBhdGggdG8gYSBuZXcgc29ja2V0IGFuZFxcbisgKiByZWxlYXNlcyB0aGUgb2xkIG9uZSBpdCBmaW5kcyBpbiB0Yy1cXHUwMDNldF9zb2NrLCByZXNvbHZpbmcgYSBkdWVsbGluZ1xcbisgKiBTWU4uXFxuICAqXFxuLSAqIFRoZSBvbmx5IGZ1bmN0aW9ucyB0aGF0IHNldCB0Yy1cXHUwMDNldF9zb2NrIGFyZSByZHNfdGNwX3NldF9jYWxsYmFja3NcXG4tICogYW5kIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzLiAgU2VuZCBhbmQgcmVjZWl2ZSB0cnVzdCB0aGF0XFxuLSAqIGl0IGlzIHNldC4gIFRoZSBhYnNlbmNlIG9mIFJEU19DT05OX1VQIGJpdCBwcm90ZWN0cyB0aG9zZSBwYXRoc1xcbi0gKiBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24ndCBzZXQuXFxuKyAqIHRjLVxcdTAwM2V0X3NvY2sgaXMgc2V0IGJ5IHJkc190Y3Bfc2V0X2NhbGxiYWNrcygpIGFuZCBjbGVhcmVkIGJ5XFxuKyAqIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3MoKS4gIEZvdXIgcGF0aHMgd3JpdGUgaXQ6IHRoZSBhY3RpdmVcXG4rICogY29ubmVjdCBpbiByZHNfdGNwX2Nvbm5fcGF0aF9jb25uZWN0KCksIHdoaWNoIHNldHMgaXQgYW5kIGNsZWFycyBpdFxcbisgKiBhZ2FpbiBvbiBmYWlsdXJlOyB0aGUgYWNjZXB0IHBhdGggaW4gcmRzX3RjcF9hY2NlcHRfb25lKCksIHdoaWNoXFxuKyAqIHNldHMgaXQgZm9yIGEgcGF0aCB3aXRoIG5vIHNvY2tldCB5ZXQ7IHRoZSB0ZWFyZG93biBpblxcbisgKiByZHNfdGNwX2Nvbm5fcGF0aF9zaHV0ZG93bigpLCB3aGljaCBjbGVhcnMgaXQ7IGFuZCB0aGUgc3dhcCBkb25lXFxuKyAqIGhlcmUsIHdoaWNoIGRvZXMgYm90aC4gIFRoZSBjb25uZWN0IGFuZCBhY2NlcHQgcGF0aHMgYXJlIHNlcmlhbGl6ZWRcXG4rICogYWdhaW5zdCBlYWNoIG90aGVyIGJ5IHRfY29ubl9wYXRoX2xvY2suICBTZW5kIGFuZCByZWNlaXZlIHRydXN0XFxuKyAqIHRoYXQgaXQgaXMgc2V0OiB0aGUgYWJzZW5jZSBvZiBSRFNfQ09OTl9VUCBwcm90ZWN0cyB0aG9zZSBwYXRoc1xcbisgKiBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24ndCwgYW5kIHRoZSBzd2FwIGRvbmUgaGVyZSBydW5zIHVuZGVyXFxuKyAqIFJEU19JTl9YTUlUIHNvIHRoYXQgaXQgY2Fubm90IGludGVybGVhdmUgd2l0aCBhIHNlbmRlciBhbHJlYWR5XFxuKyAqIGluc2lkZSByZHNfc2VuZF94bWl0KCkuXFxuICAqL1xcbiB2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxcbiB7XFxuIFxcdHN0cnVjdCByZHNfdGNwX2Nvbm5lY3Rpb24gKnRjID0gY3AtXFx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xcbi1cXHRzdHJ1Y3Qgc29ja2V0ICpvc29jayA9IHRjLVxcdTAwM2V0X3NvY2s7XFxuLVxcbi1cXHRpZiAoIW9zb2NrKVxcbi1cXHRcXHRnb3RvIG5ld3NvY2s7XFxuK1xcdHN0cnVjdCBzb2NrZXQgKm9zb2NrO1xcbiBcXG4gXFx0LyogTmVlZCB0byByZXNvbHZlIGEgZHVlbGxpbmcgU1lOIGJldHdlZW4gcGVlcnMuXFxuIFxcdCAqIFdlIGhhdmUgYW4gb3V0c3RhbmRpbmcgU1lOIHRvIHRoaXMgcGVlciwgd2hpY2ggbWF5XFxuIFxcdCAqIHBvdGVudGlhbGx5IGhhdmUgdHJhbnNpdGlvbmVkIHRvIHRoZSBSRFNfQ09OTl9VUCBzdGF0ZSxcXG4gXFx0ICogc28gd2UgbXVzdCBxdWllc2NlIGFueSBzZW5kIHRocmVhZHMgYmVmb3JlIHJlc2V0dGluZ1xcbi1cXHQgKiBjcF90cmFuc3BvcnRfZGF0YS4gV2UgcXVpZXNjZSB0aGVzZSB0aHJlYWRzIGJ5IHNldHRpbmdcXG4tXFx0ICogY3Bfc3RhdGUgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gUkRTX0NPTk5fVVAsIGFuZCB0aGVuXFxuLVxcdCAqIHdhaXRpbmcgZm9yIGFueSBleGlzdGluZyB0aHJlYWRzIGluIHJkc19zZW5kX3htaXQgdG9cXG4tXFx0ICogY29tcGxldGUgcmVsZWFzZV9pbl94bWl0KCkuIChTdWJzZXF1ZW50IHRocmVhZHMgZW50ZXJpbmdcXG4tXFx0ICogcmRzX3NlbmRfeG1pdCgpIHdpbGwgYmFpbCBvbiAhcmRzX2Nvbm5fdXAoKS5cXG4rXFx0ICogY3BfdHJhbnNwb3J0X2RhdGEuICBTZXR0aW5nIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlclxcbitcXHQgKiB0aGFuIFJEU19DT05OX1VQIHN0b3BzIG5ldyBzZW5kZXJzLCBhbmQgb3duaW5nIFJEU19JTl9YTUlUXFxuK1xcdCAqIGV4Y2x1ZGVzIGFueSB0aHJlYWQgYWxyZWFkeSBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpIC0gb3IgYVxcbitcXHQgKiB0ZWFyZG93biBpbiByZHNfY29ubl9zaHV0ZG93bigpLCB3aGljaCBob2xkcyB0aGUgc2FtZSBsb2NrXFxuK1xcdCAqIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zcG9ydCBzaHV0ZG93biAtIGZvciB0aGUgd2hvbGVcXG4rXFx0ICogc29ja2V0IHN3YXAgYW5kIHRoZSByZHNfc2VuZF9wYXRoX3Jlc2V0KCkgYmVsb3cuXFxuIFxcdCAqXFxuLVxcdCAqIEhvd2V2ZXIgYW4gaW5jb21pbmcgc3luLWFjayBhdCB0aGlzIHBvaW50IHdvdWxkIGVuZCB1cFxcbi1cXHQgKiBtYXJraW5nIHRoZSBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0XFxuLVxcdCAqIHJkc19zZW5kX3htaSgpIHRocmVhZHMgdGhyb3VnaCwgc28gaWRlYWxseSB3ZSB3b3VsZFxcbi1cXHQgKiBzeW5jaHJvbml6ZSBvbiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdFxcbi1cXHQgKiBkbyB0aGF0OiB3YWl0aW5nIG9uICFSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXlcXG4tXFx0ICogZW5kIHVwIGRlYWRsb2NraW5nIHdpdGggdGNwX3NlbmRtc2coKSwgYW5kIHRoZSBSRFNfSU5fWE1JVFxcbi1cXHQgKiB3b3VsZCBub3QgZ2V0IHNldC4gQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvXFxuLVxcdCAqIFJEU19DT05OX1JFU0VUVFRJTkcsIHRvIGVuc3VyZSB0aGF0IHJkc190Y3Bfc3RhdGVfY2hhbmdlXFxuLVxcdCAqIGNhbm5vdCBtYXJrIHJkc19jb25uX3BhdGhfdXAoKSBpbiB0aGUgd2luZG93IGJlZm9yZSBsb2NrX3NvY2soKVxcbitcXHQgKiBBbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwIG1hcmtpbmcgdGhlXFxuK1xcdCAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpXFxuK1xcdCAqIHRocmVhZHMgdGhyb3VnaCwgc28gaWRlYWxseSB3ZSB3b3VsZCBzeW5jaHJvbml6ZSBvblxcbitcXHQgKiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdCBkbyB0aGF0OiBhY3F1aXJpbmdcXG4rXFx0ICogUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5IGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoXFxuK1xcdCAqIHRjcF9zZW5kbXNnKCksIHdoaWNoIHRha2VzIHRoZSBzb2NrZXQgbG9jayB3aGlsZSBob2xkaW5nXFxuK1xcdCAqIFJEU19JTl9YTUlULiAgQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvXFxuK1xcdCAqIFJEU19DT05OX1JFU0VUVElORywgdG8gZW5zdXJlIHRoYXQgcmRzX3RjcF9zdGF0ZV9jaGFuZ2VcXG4rXFx0ICogY2Fubm90IG1hcmsgcmRzX2Nvbm5fcGF0aF91cCgpIGluIHRoZSB3aW5kb3cgYmVmb3JlXFxuK1xcdCAqIGxvY2tfc29jaygpLlxcbitcXHQgKlxcbitcXHQgKiBPbmx5IG1ha2UgdGhhdCB0cmFuc2l0aW9uIGlmIHRoZSBwYXRoIGlzIHN0aWxsIGNvbm5lY3RpbmdcXG4rXFx0ICogKG9yIGFscmVhZHkgcmVzZXR0aW5nIGZyb20gYW4gZWFybGllciBkdWVsKS4gIEEgcGF0aCBpbiBhbnlcXG4rXFx0ICogb3RoZXIgc3RhdGUgLSB0eXBpY2FsbHkgUkRTX0NPTk5fRElTQ09OTkVDVElORyBvclxcbitcXHQgKiBSRFNfQ09OTl9FUlJPUiB3aXRoIGEgc2h1dGRvd24gaW4gZmxpZ2h0IC0gaXMgZHJvcHBlZFxcbitcXHQgKiBpbnN0ZWFkLiAgVGhhdCBzdGlsbCByZXBsYWNlcyBpdHMgc3RhdGUsIHdpdGggUkRTX0NPTk5fRVJST1IsXFxuK1xcdCAqIGFuZCwgdW5sZXNzIGEgcGVuZGluZyBkZXN0cm95IGlzIGFib3V0IHRvIHJlYXAgdGhlIHdob2xlXFxuK1xcdCAqIGNvbm5lY3Rpb24gYW55d2F5LCBxdWV1ZXMgb25lIG1vcmUgc2h1dGRvd24gcGFzcy4gIEEgc2h1dGRvd25cXG4rXFx0ICogYWxyZWFkeSBpbiBmbGlnaHQgbGVhdmVzIHRoYXQgUkRTX0NPTk5fRVJST1IgYWxvbmUgd2hlbiBpdFxcbitcXHQgKiBmaW5pc2hlczsgdGhlIHF1ZXVlZCBwYXNzIHRoZW4gY29tcGxldGVzIHRoZSB0cmFuc2l0aW9uIHRvXFxuK1xcdCAqIFJEU19DT05OX0RPV04gYW5kIHRlYXJzIGRvd24gYW55dGhpbmcgdGhhdCBhdHRhY2hlZCB0byB0aGVcXG4rXFx0ICogcGF0aCBpbiB0aGUgbWVhbnRpbWUuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fQ09OTkVDVElORyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgUkRTX0NPTk5fUkVTRVRUSU5HKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fUkVTRVRUSU5HLFxcbitcXHRcXHRcXHRcXHQgICAgICBSRFNfQ09OTl9SRVNFVFRJTkcpKVxcbitcXHRcXHRyZHNfY29ubl9wYXRoX2Ryb3AoY3AsIDApO1xcbitcXHR3YWl0X2V2ZW50KGNwLVxcdTAwM2VjcF93YWl0cSxcXG4rXFx0XFx0ICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhSRFNfSU5fWE1JVCwgXFx1MDAyNmNwLVxcdTAwM2VjcF9mbGFncykpO1xcbitcXG4rXFx0LyogUmVhZCB0X3NvY2sgb25seSB3aGlsZSBvd25pbmcgUkRTX0lOX1hNSVQsIG5ldmVyIGJlZm9yZSB0aGVcXG4rXFx0ICogd2FpdDogdGhlIHRlYXJkb3duIGluIHJkc19jb25uX3NodXRkb3duKCkgcmVsZWFzZXMgdGhlIG9sZFxcbitcXHQgKiBzb2NrZXQgYW5kIGNsZWFycyB0X3NvY2ssIHNvIGEgcG9pbnRlciBzYW1wbGVkIGVhcmxpZXIgY2FuXFxuK1xcdCAqIGJlIHN0YWxlIGJ5IHRoZSB0aW1lIHdlIHdha2UgdXAuICBUaGUgdGVhcmRvd24gaG9sZHMgdGhlXFxuK1xcdCAqIHNhbWUgbG9jayB3aGlsZSBpdCBkb2VzIHNvLCBzbyB3aGF0IHdlIHJlYWQgaGVyZSBjYW5ub3RcXG4rXFx0ICogY2hhbmdlIHVuZGVyIHVzIHVudGlsIHdlIHJlbGVhc2UgaXQuXFxuK1xcdCAqL1xcbitcXHRvc29jayA9IHRjLVxcdTAwM2V0X3NvY2s7XFxuK1xcdGlmICghb3NvY2spXFxuK1xcdFxcdGdvdG8gbmV3c29jaztcXG4rXFxuK1xcdC8qIHJlc2V0IHJlY2VpdmUgc2lkZSBzdGF0ZSBmb3IgcmRzX3RjcF9kYXRhX3JlY3YoKSBmb3Igb3NvY2suXFxuK1xcdCAqXFxuK1xcdCAqIFRoZSBzeW5jIGNhbmNlbHMgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlUIHJlbHkgb24gY3Bfd3FcXG4rXFx0ICogYmVpbmcgb3JkZXJlZDogYSB0ZWFyZG93biBibG9ja2VkIG9uIHRoZSBiaXQgb2NjdXBpZXNcXG4rXFx0ICogY3Bfd3EncyBvbmx5IGV4ZWN1dGlvbiBzbG90LCBzbyBjcF9zZW5kX3cgYW5kIGNwX3JlY3ZfdyBhcmVcXG4rXFx0ICogcGVuZGluZyBhdCBtb3N0IGFuZCB0aGUgY2FuY2VscyBuZXZlciBmbHVzaC4gIE5vdGhpbmcgaGVyZVxcbitcXHQgKiBtYXkgZmx1c2ggb3Igd2FpdCBvbiBjcF93cSBpdHNlbGYuXFxuIFxcdCAqL1xcbi1cXHRhdG9taWNfc2V0KFxcdTAwMjZjcC1cXHUwMDNlY3Bfc3RhdGUsIFJEU19DT05OX1JFU0VUVElORyk7XFxuLVxcdHdhaXRfZXZlbnQoY3AtXFx1MDAzZWNwX3dhaXRxLCAhdGVzdF9iaXQoUkRTX0lOX1hNSVQsIFxcdTAwMjZjcC1cXHUwMDNlY3BfZmxhZ3MpKTtcXG4tXFx0LyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jayAgKi9cXG4gXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZjcC1cXHUwMDNlY3Bfc2VuZF93KTtcXG4gXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZjcC1cXHUwMDNlY3BfcmVjdl93KTtcXG4gXFx0bG9ja19zb2NrKG9zb2NrLVxcdTAwM2Vzayk7XFxuQEAgLTE3Miw2ICsyMTYsOSBAQCB2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuIFxcdGxvY2tfc29jayhzb2NrLVxcdTAwM2Vzayk7XFxuIFxcdHJkc190Y3Bfc2V0X2NhbGxiYWNrcyhzb2NrLCBjcCk7XFxuIFxcdHJlbGVhc2Vfc29jayhzb2NrLVxcdTAwM2Vzayk7XFxuK1xcbitcXHRjbGVhcl9iaXRfdW5sb2NrKFJEU19JTl9YTUlULCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKTtcXG4rXFx0d2FrZV91cF9hbGwoXFx1MDAyNmNwLVxcdTAwM2VjcF93YWl0cSk7XFxuIH1cXG4gXFxuIC8qIEFkZCB0YyB0byByZHNfdGNwX3RjX2xpc3QgYW5kIHNldCB0Yy1cXHUwMDNldF9zb2NrLiBTZWUgY29tbWVudHNcXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xcbmluZGV4IGEzZGI5YjA1NzA4NGQuLjEzZmE2MGMxOTg1YmIgMTAwNjQ0XFxuLS0tIGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmNcXG4rKysgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xcbkBAIC0yOTUsNyArMjk1LDExIEBAIGludCByZHNfdGNwX2FjY2VwdF9vbmUoc3RydWN0IHJkc190Y3BfbmV0ICpydG4pXFxuIFxcdGlmIChyc190Y3AtXFx1MDAzZXRfc29jaykge1xcbiBcXHRcXHQvKiBEdWVsbGluZyBTWU4gaGFzIGJlZW4gaGFuZGxlZCBpbiByZHNfdGNwX2FjY2VwdF9vbmUoKSAqL1xcbiBcXHRcXHRyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhuZXdfc29jaywgY3ApO1xcbi1cXHRcXHQvKiByZHNfY29ubmVjdF9wYXRoX2NvbXBsZXRlKCkgbWFya3MgUkRTX0NPTk5fVVAgKi9cXG4rXFx0XFx0LyogcmRzX2Nvbm5lY3RfcGF0aF9jb21wbGV0ZSgpIG1hcmtzIFJEU19DT05OX1VQLCBvcixcXG4rXFx0XFx0ICogaWYgYSBjb25jdXJyZW50IHNodXRkb3duIHdvbiB0aGUgZHVlbCwgZHJvcHMgdGhlXFxuK1xcdFxcdCAqIHBhdGggYWdhaW4gYW5kIHRoZSBwYXNzIHRoYXQgZHJvcCBxdWV1ZXMgcmVhcHMgdGhlXFxuK1xcdFxcdCAqIHNvY2tldCBpbnN0YWxsZWQgYWJvdmUuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRyZHNfY29ubmVjdF9wYXRoX2NvbXBsZXRlKGNwLCBSRFNfQ09OTl9SRVNFVFRJTkcpO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRyZHNfdGNwX3NldF9jYWxsYmFja3MobmV3X3NvY2ssIGNwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDc6MDMuMTU5NzE4NDYzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NTAyMTQzMzk2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSRFNcIixcbiAgICBcIlJEU19UQ1BcIixcbiAgICBcIlJEU19SRE1BXCIsXG4gICAgXCJJTkZJTklCQU5EXCIsXG4gICAgXCJJTkZJTklCQU5EX0FERFJfVFJBTlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZHNfY29ubl9zaHV0ZG93blwiLFxuICAgIFwicmRzX3NlbmRfeG1pdFwiLFxuICAgIFwicmRzX3RjcF9yZXNldF9jYWxsYmFja3NcIixcbiAgICBcInJkc190Y3BfYWNjZXB0X29uZVwiLFxuICAgIFwicmRzX2liX3JlY3ZfcmVmaWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nIG1lY2hhbmlzbXMgKHNwZWNpZmljYWxseSBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGJpdGxvY2tzLCB3YWl0cXVldWUgYmFycmllcnMsIGFuZCBzdGF0ZSB0cmFuc2l0aW9ucykgaW4gUkRTIGNvbm5lY3Rpb24gdGVhcmRvd24sIHNlbmQsIHJlY2VpdmUtcmVmaWxsLCBhbmQgVENQIHNvY2tldCBzd2FwcGluZyBwYXRocyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgcmVhY2hhYmxlIG5ldHdvcmsgc29ja2V0IG9wZXJhdGlvbnMgYW5kIGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkZmUzNzY3OTBiN2M5ZGNmM2U2ZjUzMWU1NjVmMjM3N2ZjZWZiM2FlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMjI6NDc6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcmRzL2Nvbm5lY3Rpb24uYyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5pbmRleCA3YzhhYjhlOTczZTFiLi5iNmM0YmViNTBlYWYwIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9jb25uZWN0aW9uLmNcbisrKyBiL25ldC9yZHMvY29ubmVjdGlvbi5jXG5AQCAtMTA2LDEwICsxMDYsMTIgQEAgc3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcbiB9XG4gXG4gLypcbi0gKiBUaGlzIGlzIGNhbGxlZCBieSB0cmFuc3BvcnRzIGFzIHRoZXkncmUgYnJpbmdpbmcgZG93biBhIGNvbm5lY3Rpb24uXG4tICogSXQgY2xlYXJzIHBhcnRpYWwgbWVzc2FnZSBzdGF0ZSBzbyB0aGF0IHRoZSB0cmFuc3BvcnQgY2FuIHN0YXJ0IHNlbmRpbmdcbi0gKiBhbmQgcmVjZWl2aW5nIG92ZXIgdGhpcyBjb25uZWN0aW9uIGFnYWluIGluIHRoZSBmdXR1cmUuICBJdCBpcyB1cCB0b1xuLSAqIHRoZSB0cmFuc3BvcnQgdG8gaGF2ZSBzZXJpYWxpemVkIHRoaXMgY2FsbCB3aXRoIGl0cyBzZW5kIGFuZCByZWN2LlxuKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHJkc19jb25uX3NodXRkb3duKCkgb25jZSB0aGUgdHJhbnNwb3J0IGhhcyBicm91Z2h0XG4rICogYSBwYXRoIGRvd24uICBJdCBjbGVhcnMgcGFydGlhbCBtZXNzYWdlIHN0YXRlIHNvIHRoYXQgdGhlIHRyYW5zcG9ydFxuKyAqIGNhbiBzdGFydCBzZW5kaW5nIGFuZCByZWNlaXZpbmcgb3ZlciB0aGlzIHBhdGggYWdhaW4gaW4gdGhlIGZ1dHVyZS5cbisgKiBUaGUgY2FsbGVyIG93bnMgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBhY3Jvc3MgdGhpcyBjYWxsLFxuKyAqIHdoaWNoIGlzIHdoYXQgc2VyaWFsaXplcyBpdCBhZ2FpbnN0IHRoZSBzZW5kIGFuZCByZWNlaXZlLXJlZmlsbFxuKyAqIHBhdGhzLlxuICAqL1xuIHN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIHtcbkBAIC0xMjAsNyArMTIyLDE2IEBAIHN0YXRpYyB2b2lkIHJkc19jb25uX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIFxuIFx0cmRzX3N0YXRzX2luYyhzX2Nvbm5fcmVzZXQpO1xuIFx0cmRzX3NlbmRfcGF0aF9yZXNldChjcCk7XG4tXHRjcC1cdTAwM2VjcF9mbGFncyA9IDA7XG4rXG4rXHQvKiBDbGVhciB0aGUgYml0cyB0aGUgcmVzZXQgaXMgcmVzcG9uc2libGUgZm9yIGluZGl2aWR1YWxseTogYVxuK1x0ICogYmxhbmtldCBjcF9mbGFncyA9IDAgaXMgYSBwbGFpbiBzdG9yZSB0aGF0IGNhbiBjbG9iYmVyIGFcbitcdCAqIGNvbmN1cnJlbnQgYXRvbWljIHJlYWQtbW9kaWZ5LXdyaXRlIG9uIHRoZSBzYW1lIHdvcmQuXG4rXHQgKiBSRFNfSU5fWE1JVCBhbmQgUkRTX1JFQ1ZfUkVGSUxMIGFyZSBoZWxkIGFzIGxvY2tzIGJ5IHRoZVxuK1x0ICogY2FsbGVyLCByZHNfY29ubl9zaHV0ZG93bigpLCB3aGljaCByZWxlYXNlcyB0aGVtIG9uY2UgdGhlXG4rXHQgKiB0ZWFyZG93biBpcyBjb21wbGV0ZS5cbitcdCAqL1xuK1x0Y2xlYXJfYml0KFJEU19MTF9TRU5EX0ZVTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbitcdGNsZWFyX2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbiBcbiBcdC8qIERvIG5vdCBjbGVhciBuZXh0X3J4X3NlcSBoZXJlLCBlbHNlIHdlIGNhbm5vdCBkaXN0aW5ndWlzaFxuIFx0ICogcmV0cmFuc21pdHRlZCBwYWNrZXRzIGZyb20gbmV3IHBhY2tldHMsIGFuZCB3aWxsIGhhbmQgYWxsXG5AQCAtNDA2LDI4ICs0MTcsNzAgQEAgdm9pZCByZHNfY29ubl9zaHV0ZG93bihzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRcdH1cbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNwLVx1MDAzZWNwX2NtX2xvY2spO1xuIFxuK1x0XHQvKiBRdWllc2NlIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZS1yZWZpbGwgcGF0aHMgYnlcbitcdFx0ICogYWNxdWlyaW5nIHRoZWlyIGJpdCBsb2Nrcywgbm90IG1lcmVseSB3YWl0aW5nIGZvclxuK1x0XHQgKiB0aGVtIHRvIGJlIHJlbGVhc2VkOiB3aXRoIGEgcGxhaW4gd2FpdCwgZWl0aGVyIHBhdGhcbitcdFx0ICogY2FuIHJlLXRha2UgaXRzIGxvY2sgdGhlIGluc3RhbnQgYWZ0ZXIgd2Ugc2FtcGxlIGl0XG4rXHRcdCAqIGNsZWFyIGFuZCB0aGVuIHJ1biBjb25jdXJyZW50bHkgd2l0aCB0aGUgdHJhbnNwb3J0XG4rXHRcdCAqIHNodXRkb3duIGFuZCB0aGUgcGF0aCByZXNldCBiZWxvdy4gIEhvbGRpbmcgYm90aFxuK1x0XHQgKiBsb2NrcyBhY3Jvc3MgdGhlIHRlYXJkb3duIG1ha2VzIHRoYXQgc3RydWN0dXJhbGx5XG4rXHRcdCAqIGltcG9zc2libGUuXG4rXHRcdCAqL1xuIFx0XHR3YWl0X2V2ZW50KGNwLVx1MDAzZWNwX3dhaXRxLFxuLVx0XHRcdCAgICF0ZXN0X2JpdChSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbitcdFx0XHQgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuIFx0XHR3YWl0X2V2ZW50KGNwLVx1MDAzZWNwX3dhaXRxLFxuLVx0XHRcdCAgICF0ZXN0X2JpdChSRFNfUkVDVl9SRUZJTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSk7XG4rXHRcdFx0ICAgIXRlc3RfYW5kX3NldF9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuIFxuIFx0XHRjb25uLVx1MDAzZWNfdHJhbnMtXHUwMDNlY29ubl9wYXRoX3NodXRkb3duKGNwKTtcbiBcdFx0cmRzX2Nvbm5fcGF0aF9yZXNldChjcCk7XG4gXG4rXHRcdC8qIFJlbGVhc2UgdGhlIHR3byBsb2NrcyBhbmQgd2FrZSBhbnkgd2FpdGVyIChlLmcuXG4rXHRcdCAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkpIHRoYXQgYmxvY2tlZCBvbiB0aGVtIHdoaWxlXG4rXHRcdCAqIHdlIGhlbGQgdGhlbS4gIFRoZSB1bmxvY2sgb3JkZXJzIHRoZSB0cmFuc3BvcnQncyByaW5nXG4rXHRcdCAqIHJlLWluaXRpYWxpemF0aW9uIGFuZCB0aGUgcGF0aCByZXNldCBhYm92ZSBiZWZvcmVcbitcdFx0ICogZWl0aGVyIGJpdCBpcyBzZWVuIGNsZWFyLiAgcmRzX2Nvbm5fcGF0aF9yZXNldCgpIGxlYXZlc1xuK1x0XHQgKiBib3RoIGJpdHMgYWxvbmU6IG93bmVyc2hpcCBlbmRzIGhlcmUsIG5vdCBpbnNpZGUgdGhlXG4rXHRcdCAqIHJlc2V0LlxuK1x0XHQgKi9cbitcdFx0Y2xlYXJfYml0X3VubG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpO1xuK1x0XHRjbGVhcl9iaXRfdW5sb2NrKFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpO1xuK1x0XHR3YWtlX3VwX2FsbChcdTAwMjZjcC1cdTAwM2VjcF93YWl0cSk7XG4rXG4gXHRcdGlmICghcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9ESVNDT05ORUNUSU5HLFxuLVx0XHRcdFx0XHQgICAgICBSRFNfQ09OTl9ET1dOKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX0VSUk9SLFxuIFx0XHRcdFx0XHQgICAgICBSRFNfQ09OTl9ET1dOKSkge1xuLVx0XHRcdC8qIFRoaXMgY2FuIGhhcHBlbiAtIGVnIHdoZW4gd2UncmUgaW4gdGhlIG1pZGRsZSBvZiB0ZWFyaW5nXG4tXHRcdFx0ICogZG93biB0aGUgY29ubmVjdGlvbiwgYW5kIHNvbWVvbmUgdW5sb2FkcyB0aGUgcmRzIG1vZHVsZS5cbi1cdFx0XHQgKiBRdWl0ZSByZXByb2R1Y2libGUgd2l0aCBsb29wYmFjayBjb25uZWN0aW9ucy5cbi1cdFx0XHQgKiBNb3N0bHkgaGFybWxlc3MuXG4rXHRcdFx0LyogVGhlIHBhdGggd2FzIGRyb3BwZWQgYWdhaW4gd2hpbGUgd2UgdG9yZSBpdFxuK1x0XHRcdCAqIGRvd246IGJ5IGEgc29ja2V0IHN0YXRlLWNoYW5nZSBjYWxsYmFjayBpblxuK1x0XHRcdCAqIGlycSBjb250ZXh0IG9uIHJlY2VpcHQgb2YgYSBGSU4sIG9yIGJ5IGFuXG4rXHRcdFx0ICogYWNjZXB0IHRoYXQgY2xhaW1lZCB0aGUgcGF0aCBqdXN0IGJlZm9yZSBhXG4rXHRcdFx0ICogZHJvcCBwdXQgaXQgYmFjayB0byBSRFNfQ09OTl9FUlJPUiBhbmQgdGhlblxuK1x0XHRcdCAqIGluc3RhbGxlZCBhIGZyZXNoIHNvY2tldCBvbiBpdC4gIFVubGVzcyBhXG4rXHRcdFx0ICogcGVuZGluZyBkZXN0cm95IHN1cHByZXNzZWQgaXQsIHRoZSBkcm9wIGFsc29cbitcdFx0XHQgKiBxdWV1ZWQgYW5vdGhlciBzaHV0ZG93biBwYXNzLCBhbmQgdGhhdCBwYXNzXG4rXHRcdFx0ICogbXVzdCBydW4sIGJlY2F1c2UgaXQgaXMgd2hhdCB0ZWFycyBkb3duXG4rXHRcdFx0ICogd2hhdGV2ZXIgYXR0YWNoZWQgdG8gdGhlIHBhdGggYWZ0ZXIgdGhlXG4rXHRcdFx0ICogdHJhbnNwb3J0IHNodXRkb3duIGFib3ZlIHNhbXBsZWQgaXRzIHN0YXRlLlxuK1x0XHRcdCAqIENvbnN1bWluZyB0aGUgUkRTX0NPTk5fRVJST1IgaGVyZSB3b3VsZCB0dXJuXG4rXHRcdFx0ICogdGhhdCBwYXNzIGludG8gYSBuby1vcDogbGVhdmUgdGhlIHN0YXRlXG4rXHRcdFx0ICogYWxvbmUsIGFuZCBsZXQgdGhlIHBhc3MgZmluaXNoIHRoZSBqb2IuXG4gXHRcdFx0ICpcbi1cdFx0XHQgKiBOb3RlIHRoYXQgdGhpcyBhbHNvIGhhcHBlbnMgd2l0aCByZHMtdGNwIGJlY2F1c2Vcbi1cdFx0XHQgKiB3ZSBjb3VsZCBoYXZlIHRyaWdnZXJlZCByZHNfY29ubl9wYXRoX2Ryb3AgaW4gaXJxXG4tXHRcdFx0ICogbW9kZSBmcm9tIHJkc190Y3Bfc3RhdGUgY2hhbmdlIG9uIHRoZSByZWNlaXB0IG9mXG4tXHRcdFx0ICogYSBGSU4sIHRodXMgd2UgbmVlZCB0byByZWNoZWNrIGZvciBSRFNfQ09OTl9FUlJPUlxuLVx0XHRcdCAqIGhlcmUuXG4rXHRcdFx0ICogUXVpZXNjZSB0aGUgcmVjb25uZWN0IHRpbWVyIGJlZm9yZSBiYWlsaW5nXG4rXHRcdFx0ICogb3V0LCB0aG91Z2guICBXaGVuIGEgcGVuZGluZyBkZXN0cm95IGRpZFxuK1x0XHRcdCAqIHN1cHByZXNzIHRoZSBxdWV1ZSwgbm8gbGF0ZXIgcGFzcyBydW5zLCBhbmRcbitcdFx0XHQgKiByZHNfY29ubl9wYXRoX2Rlc3Ryb3koKSBpcyBhYm91dCB0byBmbHVzaFxuK1x0XHRcdCAqIGNwX2Rvd25fdyBhbmQgZnJlZSB0aGUgcGF0aDogaXQgbXVzdCBub3RcbitcdFx0XHQgKiBmaW5kIGNwX2Nvbm5fdyBzdGlsbCBhcm1lZC4gIEEgc3VjY2Vzc29yXG4rXHRcdFx0ICogcGFzcywgd2hlbiB0aGVyZSBpcyBvbmUsIHJlLWFybXMgdGhlXG4rXHRcdFx0ICogcmVjb25uZWN0IGZyb20gaXRzIG93biB0YWlsLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZjcC1cdTAwM2VjcF9jb25uX3cpO1xuK1x0XHRcdGNsZWFyX2JpdChSRFNfUkVDT05ORUNUX1BFTkRJTkcsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbitcbitcdFx0XHRpZiAocmRzX2Nvbm5fcGF0aF9zdGF0ZShjcCkgPT0gUkRTX0NPTk5fRVJST1IpXG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0LyogTm8gY3VycmVudCBjcF9zdGF0ZSB3cml0ZXIgbGVhdmVzIGFcbitcdFx0XHQgKiBESVNDT05ORUNUSU5HIHBhdGggaW4gYW55IHN0YXRlIGJ1dFxuK1x0XHRcdCAqIFJEU19DT05OX0VSUk9SOyByZXBvcnQgbG91ZGx5IGlmIG9uZSBldmVyXG4rXHRcdFx0ICogZG9lcy5cbiBcdFx0XHQgKi9cbiBcdFx0XHRyZHNfY29ubl9wYXRoX2Vycm9yKGNwLCBcIiVzOiBmYWlsZWQgdG8gdHJhbnNpdGlvbiBcIlxuIFx0XHRcdFx0XHQgICAgXCJ0byBzdGF0ZSBET1dOLCBjdXJyZW50IHN0YXRlIFwiXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZWN2LmMgYi9uZXQvcmRzL2liX3JlY3YuY1xuaW5kZXggMzU3MTI4ZDM0YTU0Ni4uYmQ2Y2IzZmZhYTU3MSAxMDA2NDRcbi0tLSBhL25ldC9yZHMvaWJfcmVjdi5jXG4rKysgYi9uZXQvcmRzL2liX3JlY3YuY1xuQEAgLTM2MywxNSArMzYzLDE0IEBAIHN0YXRpYyBpbnQgYWNxdWlyZV9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxuIFxuIHN0YXRpYyB2b2lkIHJlbGVhc2VfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbiB7XG4tXHRjbGVhcl9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCBcdTAwMjZjb25uLVx1MDAzZWNfZmxhZ3MpO1xuLVx0c21wX21iX19hZnRlcl9hdG9taWMoKTtcbitcdGNsZWFyX2JpdF91bmxvY2soUkRTX1JFQ1ZfUkVGSUxMLCBcdTAwMjZjb25uLVx1MDAzZWNfZmxhZ3MpO1xuIFxuIFx0LyogV2UgZG9uJ3QgdXNlIHdhaXRfb25fYml0KCkvd2FrZV91cF9iaXQoKSBiZWNhdXNlIG91ciB3YWtpbmcgaXMgaW4gYVxuIFx0ICogaG90IHBhdGggYW5kIGZpbmRpbmcgd2FpdGVycyBpcyB2ZXJ5IHJhcmUuICBXZSBkb24ndCB3YW50IHRvIHdhbGtcbiBcdCAqIHRoZSBzeXN0ZW0td2lkZSBoYXNoZWQgd2FpdHF1ZXVlIGJ1Y2tldHMgaW4gdGhlIGZhc3QgcGF0aCBvbmx5IHRvXG4gXHQgKiBhbG1vc3QgbmV2ZXIgZmluZCB3YWl0ZXJzLlxuIFx0ICovXG4tXHRpZiAod2FpdHF1ZXVlX2FjdGl2ZShcdTAwMjZjb25uLVx1MDAzZWNfd2FpdHEpKVxuK1x0aWYgKHdxX2hhc19zbGVlcGVyKFx1MDAyNmNvbm4tXHUwMDNlY193YWl0cSkpXG4gXHRcdHdha2VfdXBfYWxsKFx1MDAyNmNvbm4tXHUwMDNlY193YWl0cSk7XG4gfVxuIFxuQEAgLTM5Miw3ICszOTEsOSBAQCB2b2lkIHJkc19pYl9yZWN2X3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGludCBwcmVmaWxsLCBnZnBfdCBnZnApXG4gXG4gXHQvKiB0aGUgZ29hbCBoZXJlIGlzIHRvIGp1c3QgbWFrZSBzdXJlIHRoYXQgc29tZW9uZSwgc29tZXdoZXJlXG4gXHQgKiBpcyBwb3N0aW5nIGJ1ZmZlcnMuICBJZiB3ZSBjYW4ndCBnZXQgdGhlIHJlZmlsbCBsb2NrLFxuLVx0ICogbGV0IHRoZW0gZG8gdGhlaXIgdGhpbmdcbitcdCAqIGxldCB0aGVtIGRvIHRoZWlyIHRoaW5nLiAgVGhlIGhvbGRlciBtYXkgYWxzbyBiZVxuK1x0ICogcmRzX2Nvbm5fc2h1dGRvd24oKSB0ZWFyaW5nIHRoZSBwYXRoIGRvd24sIGluIHdoaWNoIGNhc2VcbitcdCAqIHRoZXJlIGlzIG5vdGhpbmcgdG8gcG9zdC5cbiBcdCAqL1xuIFx0aWYgKCFhY3F1aXJlX3JlZmlsbChjb25uKSlcbiBcdFx0cmV0dXJuO1xuZGlmZiAtLWdpdCBhL25ldC9yZHMvc2VuZC5jIGIvbmV0L3Jkcy9zZW5kLmNcbmluZGV4IDE1YTFiOTdmMTNlNzYuLjFhZmE5ODFlNWMwNmQgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3NlbmQuY1xuKysrIGIvbmV0L3Jkcy9zZW5kLmNcbkBAIC0xMTQsOCArMTE0LDEzIEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfaW5feG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHQgKiBob3QgcGF0aCBhbmQgZmluZGluZyB3YWl0ZXJzIGlzIHZlcnkgcmFyZS4gIFdlIGRvbid0IHdhbnQgdG8gd2Fsa1xuIFx0ICogdGhlIHN5c3RlbS13aWRlIGhhc2hlZCB3YWl0cXVldWUgYnVja2V0cyBpbiB0aGUgZmFzdCBwYXRoIG9ubHkgdG9cbiBcdCAqIGFsbW9zdCBuZXZlciBmaW5kIHdhaXRlcnMuXG4rXHQgKlxuK1x0ICogd3FfaGFzX3NsZWVwZXIoKSBzdXBwbGllcyB0aGUgZnVsbCBiYXJyaWVyIHRoYXQgb3JkZXJzIHRoZSB3YWl0XG4rXHQgKiBxdWV1ZSByZWFkIGFmdGVyIHRoZSBiaXQgY2xlYXI7IGNsZWFyX2JpdF91bmxvY2soKSBhbG9uZSBpcyBvbmx5XG4rXHQgKiBhIHJlbGVhc2UgYW5kIHdvdWxkIGxldCB0aGlzIGNoZWNrIHJlYWQgYSBzdGFsZSBlbXB0eSBxdWV1ZSxcbitcdCAqIGxvc2luZyB0aGUgd2FrZS11cC5cbiBcdCAqL1xuLVx0aWYgKHdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2Y3AtXHUwMDNlY3Bfd2FpdHEpKVxuK1x0aWYgKHdxX2hhc19zbGVlcGVyKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKSlcbiBcdFx0d2FrZV91cF9hbGwoXHUwMDI2Y3AtXHUwMDNlY3Bfd2FpdHEpO1xuIH1cbiBcbkBAIC0yMzksOCArMjQ0LDExIEBAIGludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcdFdSSVRFX09OQ0UoY3AtXHUwMDNlY3Bfc2VuZF9nZW4sIHNlbmRfZ2VuKTtcbiBcbiBcdC8qXG4tXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gdGVzdHMgUkRTX0lOX1hNSVQsXG4tXHQgKiB3ZSBkbyB0aGUgb3Bwb3NpdGUgdG8gYXZvaWQgcmFjZXMuXG4rXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gYWNxdWlyZXNcbitcdCAqIFJEU19JTl9YTUlUOyB3ZSB0YWtlIHRoZSBsb2NrIGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRoZSBzdGF0ZS5cbitcdCAqIE93bmVyc2hpcCBpcyBkZWNpZGVkIGJ5IHRoZSBhdG9taWMgUk1XIG9uIHRoZSBjcF9mbGFncyB3b3JkOlxuK1x0ICogaWYgdGhlIHRlYXJkb3duIHdvbiB0aGUgYml0IHdlIGJhY2sgb2ZmIGhlcmUsIGFuZCBpZiB3ZSB3b25cbitcdCAqIGl0IHRoZSB0ZWFyZG93biB3YWl0cyB1bnRpbCB3ZSByZWxlYXNlIGl0LlxuIFx0ICovXG4gXHRpZiAoIXJkc19jb25uX3BhdGhfdXAoY3ApKSB7XG4gXHRcdHJlbGVhc2VfaW5feG1pdChjcCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3AuYyBiL25ldC9yZHMvdGNwLmNcbmluZGV4IGIyNjM2MzRhYzc1MGQuLjc3NGE3MWY4OGQzNzUgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL3RjcC5jXG4rKysgYi9uZXQvcmRzL3RjcC5jXG5AQCAtMTE1LDQ2ICsxMTUsOTAgQEAgdm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gfVxuIFxuIC8qXG4tICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSBzd2l0Y2hlcyB0aGUgdG8gdGhlIG5ldyBzb2NrIGFuZFxuLSAqIHJldHVybnMgdGhlIGV4aXN0aW5nIHRjLVx1MDAzZXRfc29jay5cbisgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpIHN3aXRjaGVzIGEgcGF0aCB0byBhIG5ldyBzb2NrZXQgYW5kXG4rICogcmVsZWFzZXMgdGhlIG9sZCBvbmUgaXQgZmluZHMgaW4gdGMtXHUwMDNldF9zb2NrLCByZXNvbHZpbmcgYSBkdWVsbGluZ1xuKyAqIFNZTi5cbiAgKlxuLSAqIFRoZSBvbmx5IGZ1bmN0aW9ucyB0aGF0IHNldCB0Yy1cdTAwM2V0X3NvY2sgYXJlIHJkc190Y3Bfc2V0X2NhbGxiYWNrc1xuLSAqIGFuZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcy4gIFNlbmQgYW5kIHJlY2VpdmUgdHJ1c3QgdGhhdFxuLSAqIGl0IGlzIHNldC4gIFRoZSBhYnNlbmNlIG9mIFJEU19DT05OX1VQIGJpdCBwcm90ZWN0cyB0aG9zZSBwYXRoc1xuLSAqIGZyb20gYmVpbmcgY2FsbGVkIHdoaWxlIGl0IGlzbid0IHNldC5cbisgKiB0Yy1cdTAwM2V0X3NvY2sgaXMgc2V0IGJ5IHJkc190Y3Bfc2V0X2NhbGxiYWNrcygpIGFuZCBjbGVhcmVkIGJ5XG4rICogcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcygpLiAgRm91ciBwYXRocyB3cml0ZSBpdDogdGhlIGFjdGl2ZVxuKyAqIGNvbm5lY3QgaW4gcmRzX3RjcF9jb25uX3BhdGhfY29ubmVjdCgpLCB3aGljaCBzZXRzIGl0IGFuZCBjbGVhcnMgaXRcbisgKiBhZ2FpbiBvbiBmYWlsdXJlOyB0aGUgYWNjZXB0IHBhdGggaW4gcmRzX3RjcF9hY2NlcHRfb25lKCksIHdoaWNoXG4rICogc2V0cyBpdCBmb3IgYSBwYXRoIHdpdGggbm8gc29ja2V0IHlldDsgdGhlIHRlYXJkb3duIGluXG4rICogcmRzX3RjcF9jb25uX3BhdGhfc2h1dGRvd24oKSwgd2hpY2ggY2xlYXJzIGl0OyBhbmQgdGhlIHN3YXAgZG9uZVxuKyAqIGhlcmUsIHdoaWNoIGRvZXMgYm90aC4gIFRoZSBjb25uZWN0IGFuZCBhY2NlcHQgcGF0aHMgYXJlIHNlcmlhbGl6ZWRcbisgKiBhZ2FpbnN0IGVhY2ggb3RoZXIgYnkgdF9jb25uX3BhdGhfbG9jay4gIFNlbmQgYW5kIHJlY2VpdmUgdHJ1c3RcbisgKiB0aGF0IGl0IGlzIHNldDogdGhlIGFic2VuY2Ugb2YgUkRTX0NPTk5fVVAgcHJvdGVjdHMgdGhvc2UgcGF0aHNcbisgKiBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24ndCwgYW5kIHRoZSBzd2FwIGRvbmUgaGVyZSBydW5zIHVuZGVyXG4rICogUkRTX0lOX1hNSVQgc28gdGhhdCBpdCBjYW5ub3QgaW50ZXJsZWF2ZSB3aXRoIGEgc2VuZGVyIGFscmVhZHlcbisgKiBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpLlxuICAqL1xuIHZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcbiBcdFx0XHQgICAgIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiB7XG4gXHRzdHJ1Y3QgcmRzX3RjcF9jb25uZWN0aW9uICp0YyA9IGNwLVx1MDAzZWNwX3RyYW5zcG9ydF9kYXRhO1xuLVx0c3RydWN0IHNvY2tldCAqb3NvY2sgPSB0Yy1cdTAwM2V0X3NvY2s7XG4tXG4tXHRpZiAoIW9zb2NrKVxuLVx0XHRnb3RvIG5ld3NvY2s7XG4rXHRzdHJ1Y3Qgc29ja2V0ICpvc29jaztcbiBcbiBcdC8qIE5lZWQgdG8gcmVzb2x2ZSBhIGR1ZWxsaW5nIFNZTiBiZXR3ZWVuIHBlZXJzLlxuIFx0ICogV2UgaGF2ZSBhbiBvdXRzdGFuZGluZyBTWU4gdG8gdGhpcyBwZWVyLCB3aGljaCBtYXlcbiBcdCAqIHBvdGVudGlhbGx5IGhhdmUgdHJhbnNpdGlvbmVkIHRvIHRoZSBSRFNfQ09OTl9VUCBzdGF0ZSxcbiBcdCAqIHNvIHdlIG11c3QgcXVpZXNjZSBhbnkgc2VuZCB0aHJlYWRzIGJlZm9yZSByZXNldHRpbmdcbi1cdCAqIGNwX3RyYW5zcG9ydF9kYXRhLiBXZSBxdWllc2NlIHRoZXNlIHRocmVhZHMgYnkgc2V0dGluZ1xuLVx0ICogY3Bfc3RhdGUgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gUkRTX0NPTk5fVVAsIGFuZCB0aGVuXG4tXHQgKiB3YWl0aW5nIGZvciBhbnkgZXhpc3RpbmcgdGhyZWFkcyBpbiByZHNfc2VuZF94bWl0IHRvXG4tXHQgKiBjb21wbGV0ZSByZWxlYXNlX2luX3htaXQoKS4gKFN1YnNlcXVlbnQgdGhyZWFkcyBlbnRlcmluZ1xuLVx0ICogcmRzX3NlbmRfeG1pdCgpIHdpbGwgYmFpbCBvbiAhcmRzX2Nvbm5fdXAoKS5cbitcdCAqIGNwX3RyYW5zcG9ydF9kYXRhLiAgU2V0dGluZyBjcF9zdGF0ZSB0byBzb21ldGhpbmcgb3RoZXJcbitcdCAqIHRoYW4gUkRTX0NPTk5fVVAgc3RvcHMgbmV3IHNlbmRlcnMsIGFuZCBvd25pbmcgUkRTX0lOX1hNSVRcbitcdCAqIGV4Y2x1ZGVzIGFueSB0aHJlYWQgYWxyZWFkeSBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpIC0gb3IgYVxuK1x0ICogdGVhcmRvd24gaW4gcmRzX2Nvbm5fc2h1dGRvd24oKSwgd2hpY2ggaG9sZHMgdGhlIHNhbWUgbG9ja1xuK1x0ICogZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNwb3J0IHNodXRkb3duIC0gZm9yIHRoZSB3aG9sZVxuK1x0ICogc29ja2V0IHN3YXAgYW5kIHRoZSByZHNfc2VuZF9wYXRoX3Jlc2V0KCkgYmVsb3cuXG4gXHQgKlxuLVx0ICogSG93ZXZlciBhbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwXG4tXHQgKiBtYXJraW5nIHRoZSBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0XG4tXHQgKiByZHNfc2VuZF94bWkoKSB0aHJlYWRzIHRocm91Z2gsIHNvIGlkZWFsbHkgd2Ugd291bGRcbi1cdCAqIHN5bmNocm9uaXplIG9uIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90XG4tXHQgKiBkbyB0aGF0OiB3YWl0aW5nIG9uICFSRFNfSU5fWE1JVCBhZnRlciBsb2NrX3NvY2soKSBtYXlcbi1cdCAqIGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoIHRjcF9zZW5kbXNnKCksIGFuZCB0aGUgUkRTX0lOX1hNSVRcbi1cdCAqIHdvdWxkIG5vdCBnZXQgc2V0LiBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG9cbi1cdCAqIFJEU19DT05OX1JFU0VUVFRJTkcsIHRvIGVuc3VyZSB0aGF0IHJkc190Y3Bfc3RhdGVfY2hhbmdlXG4tXHQgKiBjYW5ub3QgbWFyayByZHNfY29ubl9wYXRoX3VwKCkgaW4gdGhlIHdpbmRvdyBiZWZvcmUgbG9ja19zb2NrKClcbitcdCAqIEFuIGluY29taW5nIHN5bi1hY2sgYXQgdGhpcyBwb2ludCB3b3VsZCBlbmQgdXAgbWFya2luZyB0aGVcbitcdCAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpXG4rXHQgKiB0aHJlYWRzIHRocm91Z2gsIHNvIGlkZWFsbHkgd2Ugd291bGQgc3luY2hyb25pemUgb25cbitcdCAqIFJEU19DT05OX1VQIGFmdGVyIGxvY2tfc29jaygpLCBidXQgY2Fubm90IGRvIHRoYXQ6IGFjcXVpcmluZ1xuK1x0ICogUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5IGVuZCB1cCBkZWFkbG9ja2luZyB3aXRoXG4rXHQgKiB0Y3Bfc2VuZG1zZygpLCB3aGljaCB0YWtlcyB0aGUgc29ja2V0IGxvY2sgd2hpbGUgaG9sZGluZ1xuK1x0ICogUkRTX0lOX1hNSVQuICBBcyBhIHJlc3VsdCwgd2Ugc2V0IGNfc3RhdGUgdG9cbitcdCAqIFJEU19DT05OX1JFU0VUVElORywgdG8gZW5zdXJlIHRoYXQgcmRzX3RjcF9zdGF0ZV9jaGFuZ2VcbitcdCAqIGNhbm5vdCBtYXJrIHJkc19jb25uX3BhdGhfdXAoKSBpbiB0aGUgd2luZG93IGJlZm9yZVxuK1x0ICogbG9ja19zb2NrKCkuXG4rXHQgKlxuK1x0ICogT25seSBtYWtlIHRoYXQgdHJhbnNpdGlvbiBpZiB0aGUgcGF0aCBpcyBzdGlsbCBjb25uZWN0aW5nXG4rXHQgKiAob3IgYWxyZWFkeSByZXNldHRpbmcgZnJvbSBhbiBlYXJsaWVyIGR1ZWwpLiAgQSBwYXRoIGluIGFueVxuK1x0ICogb3RoZXIgc3RhdGUgLSB0eXBpY2FsbHkgUkRTX0NPTk5fRElTQ09OTkVDVElORyBvclxuK1x0ICogUkRTX0NPTk5fRVJST1Igd2l0aCBhIHNodXRkb3duIGluIGZsaWdodCAtIGlzIGRyb3BwZWRcbitcdCAqIGluc3RlYWQuICBUaGF0IHN0aWxsIHJlcGxhY2VzIGl0cyBzdGF0ZSwgd2l0aCBSRFNfQ09OTl9FUlJPUixcbitcdCAqIGFuZCwgdW5sZXNzIGEgcGVuZGluZyBkZXN0cm95IGlzIGFib3V0IHRvIHJlYXAgdGhlIHdob2xlXG4rXHQgKiBjb25uZWN0aW9uIGFueXdheSwgcXVldWVzIG9uZSBtb3JlIHNodXRkb3duIHBhc3MuICBBIHNodXRkb3duXG4rXHQgKiBhbHJlYWR5IGluIGZsaWdodCBsZWF2ZXMgdGhhdCBSRFNfQ09OTl9FUlJPUiBhbG9uZSB3aGVuIGl0XG4rXHQgKiBmaW5pc2hlczsgdGhlIHF1ZXVlZCBwYXNzIHRoZW4gY29tcGxldGVzIHRoZSB0cmFuc2l0aW9uIHRvXG4rXHQgKiBSRFNfQ09OTl9ET1dOIGFuZCB0ZWFycyBkb3duIGFueXRoaW5nIHRoYXQgYXR0YWNoZWQgdG8gdGhlXG4rXHQgKiBwYXRoIGluIHRoZSBtZWFudGltZS5cbitcdCAqL1xuK1x0aWYgKCFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX0NPTk5FQ1RJTkcsXG4rXHRcdFx0XHQgICAgICBSRFNfQ09OTl9SRVNFVFRJTkcpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFyZHNfY29ubl9wYXRoX3RyYW5zaXRpb24oY3AsIFJEU19DT05OX1JFU0VUVElORyxcbitcdFx0XHRcdCAgICAgIFJEU19DT05OX1JFU0VUVElORykpXG4rXHRcdHJkc19jb25uX3BhdGhfZHJvcChjcCwgMCk7XG4rXHR3YWl0X2V2ZW50KGNwLVx1MDAzZWNwX3dhaXRxLFxuK1x0XHQgICAhdGVzdF9hbmRfc2V0X2JpdF9sb2NrKFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuK1xuK1x0LyogUmVhZCB0X3NvY2sgb25seSB3aGlsZSBvd25pbmcgUkRTX0lOX1hNSVQsIG5ldmVyIGJlZm9yZSB0aGVcbitcdCAqIHdhaXQ6IHRoZSB0ZWFyZG93biBpbiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGRcbitcdCAqIHNvY2tldCBhbmQgY2xlYXJzIHRfc29jaywgc28gYSBwb2ludGVyIHNhbXBsZWQgZWFybGllciBjYW5cbitcdCAqIGJlIHN0YWxlIGJ5IHRoZSB0aW1lIHdlIHdha2UgdXAuICBUaGUgdGVhcmRvd24gaG9sZHMgdGhlXG4rXHQgKiBzYW1lIGxvY2sgd2hpbGUgaXQgZG9lcyBzbywgc28gd2hhdCB3ZSByZWFkIGhlcmUgY2Fubm90XG4rXHQgKiBjaGFuZ2UgdW5kZXIgdXMgdW50aWwgd2UgcmVsZWFzZSBpdC5cbitcdCAqL1xuK1x0b3NvY2sgPSB0Yy1cdTAwM2V0X3NvY2s7XG4rXHRpZiAoIW9zb2NrKVxuK1x0XHRnb3RvIG5ld3NvY2s7XG4rXG4rXHQvKiByZXNldCByZWNlaXZlIHNpZGUgc3RhdGUgZm9yIHJkc190Y3BfZGF0YV9yZWN2KCkgZm9yIG9zb2NrLlxuK1x0ICpcbitcdCAqIFRoZSBzeW5jIGNhbmNlbHMgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlUIHJlbHkgb24gY3Bfd3FcbitcdCAqIGJlaW5nIG9yZGVyZWQ6IGEgdGVhcmRvd24gYmxvY2tlZCBvbiB0aGUgYml0IG9jY3VwaWVzXG4rXHQgKiBjcF93cSdzIG9ubHkgZXhlY3V0aW9uIHNsb3QsIHNvIGNwX3NlbmRfdyBhbmQgY3BfcmVjdl93IGFyZVxuK1x0ICogcGVuZGluZyBhdCBtb3N0IGFuZCB0aGUgY2FuY2VscyBuZXZlciBmbHVzaC4gIE5vdGhpbmcgaGVyZVxuK1x0ICogbWF5IGZsdXNoIG9yIHdhaXQgb24gY3Bfd3EgaXRzZWxmLlxuIFx0ICovXG4tXHRhdG9taWNfc2V0KFx1MDAyNmNwLVx1MDAzZWNwX3N0YXRlLCBSRFNfQ09OTl9SRVNFVFRJTkcpO1xuLVx0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSwgIXRlc3RfYml0KFJEU19JTl9YTUlULCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuLVx0LyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jayAgKi9cbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZjcC1cdTAwM2VjcF9zZW5kX3cpO1xuIFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNmNwLVx1MDAzZWNwX3JlY3Zfdyk7XG4gXHRsb2NrX3NvY2sob3NvY2stXHUwMDNlc2spO1xuQEAgLTE3Miw2ICsyMTYsOSBAQCB2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gXHRsb2NrX3NvY2soc29jay1cdTAwM2Vzayk7XG4gXHRyZHNfdGNwX3NldF9jYWxsYmFja3Moc29jaywgY3ApO1xuIFx0cmVsZWFzZV9zb2NrKHNvY2stXHUwMDNlc2spO1xuK1xuK1x0Y2xlYXJfYml0X3VubG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpO1xuK1x0d2FrZV91cF9hbGwoXHUwMDI2Y3AtXHUwMDNlY3Bfd2FpdHEpO1xuIH1cbiBcbiAvKiBBZGQgdGMgdG8gcmRzX3RjcF90Y19saXN0IGFuZCBzZXQgdGMtXHUwMDNldF9zb2NrLiBTZWUgY29tbWVudHNcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcF9saXN0ZW4uYyBiL25ldC9yZHMvdGNwX2xpc3Rlbi5jXG5pbmRleCBhM2RiOWIwNTcwODRkLi4xM2ZhNjBjMTk4NWJiIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmNcbisrKyBiL25ldC9yZHMvdGNwX2xpc3Rlbi5jXG5AQCAtMjk1LDcgKzI5NSwxMSBAQCBpbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxuIFx0aWYgKHJzX3RjcC1cdTAwM2V0X3NvY2spIHtcbiBcdFx0LyogRHVlbGxpbmcgU1lOIGhhcyBiZWVuIGhhbmRsZWQgaW4gcmRzX3RjcF9hY2NlcHRfb25lKCkgKi9cbiBcdFx0cmRzX3RjcF9yZXNldF9jYWxsYmFja3MobmV3X3NvY2ssIGNwKTtcbi1cdFx0LyogcmRzX2Nvbm5lY3RfcGF0aF9jb21wbGV0ZSgpIG1hcmtzIFJEU19DT05OX1VQICovXG4rXHRcdC8qIHJkc19jb25uZWN0X3BhdGhfY29tcGxldGUoKSBtYXJrcyBSRFNfQ09OTl9VUCwgb3IsXG4rXHRcdCAqIGlmIGEgY29uY3VycmVudCBzaHV0ZG93biB3b24gdGhlIGR1ZWwsIGRyb3BzIHRoZVxuK1x0XHQgKiBwYXRoIGFnYWluIGFuZCB0aGUgcGFzcyB0aGF0IGRyb3AgcXVldWVzIHJlYXBzIHRoZVxuK1x0XHQgKiBzb2NrZXQgaW5zdGFsbGVkIGFib3ZlLlxuK1x0XHQgKi9cbiBcdFx0cmRzX2Nvbm5lY3RfcGF0aF9jb21wbGV0ZShjcCwgUkRTX0NPTk5fUkVTRVRUSU5HKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHJkc190Y3Bfc2V0X2NhbGxiYWNrcyhuZXdfc29jaywgY3ApO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDc6MDMuMTU5NzE5ODQzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTEzODgwMjg4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSwgYW5kIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyB3b3J0aCB0aGUgdGltZSB0byB0aHJvdyBzb21lIGZ1enppbmcgYXQgaXQuIExvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIGBuZXQvcmRzL2Ag4oCTIHRoYXQgc2NyZWFtcyBSRFMsIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMuIFJpZ2h0LCBBRl9SRFMgc29ja2V0cy4gVGhpcyBpcyBhIHByZXR0eSBjcml0aWNhbCBuZXR3b3JraW5nIHByb3RvY29sLCBhbmQgaXQgcnVucyBpbiB0aG9zZSB1c3VhbCBlbnZpcm9ubWVudHMg4oCTIHN0YW5kYXJkLCBRRU1VLCBHQ0Ug4oCTIGFjY2Vzc2libGUgdGhyb3VnaCBzb2NrZXRzIG9yIGxvb3BiYWNrL1RDUC4gVGhhdCdzIGdvb2QgY292ZXJhZ2UgZm9yIGZ1enppbmcgdGFyZ2V0cy5cblxuU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggdG91Y2hlcyBgY29ubmVjdGlvbi5jYCwgYGliX3JlY3YuY2AsIGBzZW5kLmNgLCBgdGNwLmNgLCBhbmQgYHRjcF9saXN0ZW4uY2AuIEhtbSwgdGhvc2UgZmlsZSBuYW1lcyB0aGVtc2VsdmVzIGFyZSBpbnRlcmVzdGluZy4gV2UncmUgdGFsa2luZyBsb2NraW5nLCBzdGF0ZSB0cmFuc2l0aW9ucywgc3luY2hyb25pemF0aW9uIGR1cmluZyBjb25uZWN0aW9uIHNodXRkb3duLCBUQ1AgdHJhbnNwb3J0IHJlc2V0IGNhbGxiYWNrcywgcmVmaWxsIGxvY2tpbmcsIGFuZCBzZW5kIHhtaXQgZnVuY3Rpb25zLiBUaGlzIGNvdWxkIGJlIGdvbGQhIExvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgYXJlIHRoZSBraW5kIG9mIHRoaW5ncyBmdXp6aW5nIGxvdmVzIHRvIGV4cG9zZS4gU3RhdGUgdHJhbnNpdGlvbnMgYXJlIGFub3RoZXIgbGlrZWx5IHNvdXJjZSBvZiB3ZWlyZG5lc3MuIFRDUC1zcGVjaWZpYyBjaGFuZ2VzLCB0b28sIG1lYW4gbW9yZSBzdXJmYWNlIGFyZWEuIFJlZmlsbCBsb2NraW5nIGlzIGFuIGludGVyZXN0aW5nIHZlY3Rvci4gU2VuZCB4bWl0IGlzIGEgY3JpdGljYWwgZnVuY3Rpb24sIHNvIGV2ZW4gdGhlIG1vc3QgYmFzaWMgZXJyb3IgaGVyZSB3b3VsZCBjYXVzZSB0cm91YmxlLlxuXG5Ob3csIGxldCdzIHB1bGwgdXAgdGhlIGZpbGVzIGFuZCBjaGVjayB0aGUgS2NvbmZpZyBmb3IgUkRTLi4uIEdvdHRhIG1ha2Ugc3VyZSBpdCdzIGVuYWJsZWQgYW5kIHdlIGhhdmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBiZWZvcmUgd2FzdGluZyB0aW1lIGZ1enppbmcgc29tZXRoaW5nIHRoYXQncyBub3QgZXZlbiBidWlsdCBpbnRvIHRoZSBrZXJuZWwuIEFmdGVyIHRoYXQsIHdlIGRpdmUgaW4gYW5kIGFzc2VzcyB0aGUgZnVuY3Rpb25zIGltcGFjdGVkIHRvIGxvb2sgYXQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgdGhlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NzcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzoxNC41NDc3NTE5NDdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MzM0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFJEU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvcmRzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9yZHMvS2NvbmZpZy0yLVxcbm5ldC9yZHMvS2NvbmZpZzozOmNvbmZpZyBSRFNcXG5uZXQvcmRzL0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiVGhlIFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgUHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvcmRzL0tjb25maWctOS1cXG5uZXQvcmRzL0tjb25maWc6MTA6Y29uZmlnIFJEU19SRE1BXFxubmV0L3Jkcy9LY29uZmlnLTExLVxcdHRyaXN0YXRlIFxcXCJSRFMgb3ZlciBJbmZpbmliYW5kXFxcIlxcbi0tXFxubmV0L3Jkcy9LY29uZmlnLTE2LVxcbm5ldC9yZHMvS2NvbmZpZzoxNzpjb25maWcgUkRTX1RDUFxcbm5ldC9yZHMvS2NvbmZpZy0xOC1cXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgVENQXFxcIlxcbi0tXFxubmV0L3Jkcy9LY29uZmlnLTI0LVxcbm5ldC9yZHMvS2NvbmZpZzoyNTpjb25maWcgUkRTX0RFQlVHXFxubmV0L3Jkcy9LY29uZmlnLTI2LVxcdGJvb2wgXFxcIlJEUyBkZWJ1Z2dpbmcgbWVzc2FnZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjE0LjU5MjU5MDEzNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjg0OTcyNTAxMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBSRFMgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgUmVtb3RlIERpcmVjdCBNZW1vcnkgQWNjZXNzIChSRE1BKSBvdmVyIFRDUCAoUkRTKSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcyBhbmQgdGhlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zIGF2YWlsYWJsZS4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIGdvaW5nIHRvIGNyYWNrIG9wZW4gdGhlIGBuZXQvcmRzL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgZ28tdG8gcGxhY2UgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLCByaWdodD8gSXQnbGwgbGF5IG91dCBhbGwgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIHBvc3NpYmlsaXRpZXMuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBpbiB0aGVyZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgYnVpbGQgc2V0dGluZ3MgYW5kIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIEZyb20gdGhlcmUsIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggdG8gY29uZmlndXJpbmcgaXQgdG8gd29yayB3aXRoaW4gb3VyIHNwZWNpZmljIHNldHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NzAyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDc6MjMuMDg5ODQyMDMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3Jkcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRcXG4gICAzOlxcdGNvbmZpZyBSRFNcXG4gICA0OlxcdFxcdHRyaXN0YXRlIFxcXCJUaGUgUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyBQcm90b2NvbFxcXCJcXG4gICA1OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDY6XFx0XFx0aGVscFxcbiAgIDc6XFx0XFx0ICBUaGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBwcm90b2NvbCBwcm92aWRlcyByZWxpYWJsZSxcXG4gICA4OlxcdFxcdCAgc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIGRhdGFncmFtcyBvdmVyIEluZmluaWJhbmQgb3IgVENQLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb25maWcgUkRTX1JETUFcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJSRFMgb3ZlciBJbmZpbmliYW5kXFxcIlxcbiAgMTI6XFx0XFx0ZGVwZW5kcyBvbiBSRFMgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBJTkZJTklCQU5EX0FERFJfVFJBTlNcXG4gIDEzOlxcdFxcdGhlbHBcXG4gIDE0OlxcdFxcdCAgQWxsb3cgUkRTIHRvIHVzZSBJbmZpbmliYW5kIGFzIGEgdHJhbnNwb3J0LlxcbiAgMTU6XFx0XFx0ICBUaGlzIHRyYW5zcG9ydCBzdXBwb3J0cyBSRE1BIG9wZXJhdGlvbnMuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBSRFNfVENQXFxuICAxODpcXHRcXHR0cmlzdGF0ZSBcXFwiUkRTIG92ZXIgVENQXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBSRFNcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gSVBWNiB8fCAhSVBWNlxcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBBbGxvdyBSRFMgdG8gdXNlIFRDUCBhcyBhIHRyYW5zcG9ydC5cXG4gIDIzOlxcdFxcdCAgVGhpcyB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCBSRE1BIG9wZXJhdGlvbnMuXFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBSRFNfREVCVUdcXG4gIDI2OlxcdFxcdGJvb2wgXFxcIlJEUyBkZWJ1Z2dpbmcgbWVzc2FnZXNcXFwiXFxuICAyNzpcXHRcXHRkZXBlbmRzIG9uIFJEU1xcbiAgMjg6XFx0XFx0ZGVmYXVsdCBuXFxuICAyOTpcXHRcXG4gIDMwOlxcdGNvbmZpZyBHQ09WX1BST0ZJTEVfUkRTXFxuICAzMTpcXHRcXHRib29sIFxcXCJFbmFibGUgR0NPViBwcm9maWxpbmcgb24gUkRTXFxcIlxcbiAgMzI6XFx0XFx0ZGVwZW5kcyBvbiBHQ09WX0tFUk5FTFxcbiAgMzM6XFx0XFx0aGVscFxcbiAgMzQ6XFx0XFx0ICBFbmFibGUgR0NPViBwcm9maWxpbmcgb24gUkRTIGZvciBjaGVja2luZyB3aGljaCBmdW5jdGlvbnMvbGluZXNcXG4gIDM1OlxcdFxcdCAgYXJlIGV4ZWN1dGVkLlxcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjIzLjA4OTg5NzUxM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3NTIzODkzNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgUkRTIE1ha2VmaWxlKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBgbmV0L3Jkc2AgZGlyZWN0b3J5LiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBidWlsZCBwcm9jZXNzLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIHZhcmlvdXMgUkRTIGNvbXBvbmVudHMgYXJlIGNvbXBpbGVkLCBhbmQgd2hpY2ggY29uZmlndXJhdGlvbiBvcHRpb25zIHRyaWdnZXIgdGhlIGluY2x1c2lvbiAob3IgZXhjbHVzaW9uKSBvZiBzcGVjaWZpYyBzb3VyY2UgZmlsZXMuIFRoZSBNYWtlZmlsZSBpcyB0aGUgbmF0dXJhbCBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBhbmFseXNpcy4gSSdtIGxvb2tpbmcgdG8gbWFwIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmRpdGlvbmFsIGxvZ2lj4oCUc3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gc2VlIHdoaWNoIHNvdXJjZSBmaWxlcyBhcmUgYnVpbHQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZsYWdzLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBvciBkaXNhYmxlZCBkZXBlbmRpbmcgb24ga2VybmVsIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzY1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzoyNy44NDIyODk4OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9yZHMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRvYmotJChDT05GSUdfUkRTKSArPSByZHMub1xcbiAgIDM6XFx0cmRzLXkgOj1cXHRhZl9yZHMubyBiaW5kLm8gY29uZy5vIGNvbm5lY3Rpb24ubyBpbmZvLm8gbWVzc2FnZS5vICAgXFxcXFxcbiAgIDQ6XFx0XFx0XFx0XFx0cmVjdi5vIHNlbmQubyBzdGF0cy5vIHN5c2N0bC5vIHRocmVhZHMubyB0cmFuc3BvcnQubyBcXFxcXFxuICAgNTpcXHRcXHRcXHRcXHRsb29wLm8gcGFnZS5vIHJkbWEub1xcbiAgIDY6XFx0XFxuICAgNzpcXHRvYmotJChDT05GSUdfUkRTX1JETUEpICs9IHJkc19yZG1hLm9cXG4gICA4OlxcdHJkc19yZG1hLXkgOj1cXHRyZG1hX3RyYW5zcG9ydC5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdFxcdGliLm8gaWJfY20ubyBpYl9yZWN2Lm8gaWJfcmluZy5vIGliX3NlbmQubyBpYl9zdGF0cy5vIFxcXFxcXG4gIDEwOlxcdFxcdFxcdFxcdGliX3N5c2N0bC5vIGliX3JkbWEubyBpYl9mcm1yLm9cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFxuICAxMzpcXHRvYmotJChDT05GSUdfUkRTX1RDUCkgKz0gcmRzX3RjcC5vXFxuICAxNDpcXHRyZHNfdGNwLXkgOj1cXHRcXHR0Y3AubyB0Y3BfY29ubmVjdC5vIHRjcF9saXN0ZW4ubyB0Y3BfcmVjdi5vIFxcXFxcXG4gIDE1OlxcdFxcdFxcdFxcdHRjcF9zZW5kLm8gdGNwX3N0YXRzLm9cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y2NmbGFncy0kKENPTkZJR19SRFNfREVCVUcpXFx0Oj1cXHQtRFJEU19ERUJVR1xcbiAgMTg6XFx0XFxuICAxOTpcXHQjIGZvciBHQ09WIGNvdmVyYWdlIHByb2ZpbGluZ1xcbiAgMjA6XFx0aWZkZWYgQ09ORklHX0dDT1ZfUFJPRklMRV9SRFNcXG4gIDIxOlxcdEdDT1ZfUFJPRklMRSA6PSB5XFxuICAyMjpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzoyNy44NDIzNTY5MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNzYyMTY1NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSRFMgTW9kdWxlIERlcGVuZGVuY2llcyBhbmQgRnVuY3Rpb24gVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFJEUyBjb2RlIGFuZCB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFuZCBob3cgdGhlIGZ1bmN0aW9ucyBhcmUgdXNlZCBhY3Jvc3MgdGhlIG1vZHVsZXMuIEZpcnN0LCBJIHNlZSB0aGF0IGBuZXQvcmRzL2Nvbm5lY3Rpb24uY2AgYW5kIGBuZXQvcmRzL3NlbmQuY2AgYXJlIHN0cmFpZ2h0Zm9yd2FyZGx5IGJ1aWx0IHVuZGVyIGBDT05GSUdfUkRTYC4gYG5ldC9yZHMvaWJfcmVjdi5jYCBoYXMgYSBtb3JlIHNwZWNpZmljIGRlcGVuZGVuY3k7IGl0J3MgYnVpbHQgb25seSBpZiBgQ09ORklHX1JEU19SRE1BYCBpcyBlbmFibGVkLCB3aGljaCBpbXBsaWVzIHdlIGhhdmUgUkRTLCBJbmZpbmliYW5kLCBhbmQgdGhlIEluZmluaWJhbmQgYWRkcmVzcyB0cmFuc2xhdGlvbiBjb21wb25lbnRzIGFsbCBpbiBwbGF5LiBGaW5hbGx5LCBgbmV0L3Jkcy90Y3AuY2AgYW5kIGBuZXQvcmRzL3RjcF9saXN0ZW4uY2AgcmVseSBvbiBgQ09ORklHX1JEU19UQ1BgLCBtZWFuaW5nIFJEUyBtdXN0IGJlIGVuYWJsZWQgYXMgYSBwcmVyZXF1aXNpdGUuXG5cbk5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBmdW5jdGlvbnMuIEluIGBuZXQvcmRzL2Nvbm5lY3Rpb24uY2AsIGByZHNfY29ubl9zaHV0ZG93bmAgaXMgdGhlIGltcG9ydGFudCBvbmUgaGVyZSwgYW5kIGl0J3MgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QgdG8ga25vdywgYW5kIHRoZSBjb2RlIGNvbW1lbnRzIGRvIG5vdGUgdGhhdCBpdHMgdXNlZCBhY3Jvc3MgUkRTIG1vZHVsZXMuIFdlIGFsc28gaGF2ZSBgcmRzX2Nvbm5fcGF0aF9yZXNldGAsIHdoaWNoIGlzIHN0YXRpYy4gSW4gYG5ldC9yZHMvaWJfcmVjdi5jYCwgYHJkc19pYl9yZWN2X3JlZmlsbGAgaXMgbm9uLXN0YXRpYyBhbmQgYHJlbGVhc2VfcmVmaWxsYCBpcyBzdGF0aWMuIEluIGBuZXQvcmRzL3NlbmQuY2AsIGByZHNfc2VuZF94bWl0YCBpcyBub24tc3RhdGljLCBhbmQgYHJlbGVhc2VfaW5feG1pdGAgaXMgc3RhdGljLiBGaW5hbGx5LCBpbiB0aGUgVENQIG1vZHVsZXMsIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AgYW5kIGByZHNfdGNwX2FjY2VwdF9vbmVgIGFyZSBib3RoIG5vbi1zdGF0aWMuXG5cbk5vdyBJIG5lZWQgdG8gY2hlY2sgdGhvc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgYWdhaW4uIEknbSBnb2luZyB0byByZXZpc2l0IGByZHNfY29ubl9zaHV0ZG93bmAsIGByZHNfc2VuZF94bWl0YCwgYHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzYCwgYHJkc190Y3BfYWNjZXB0X29uZWAsIGFuZCBgcmRzX2liX3JlY3ZfcmVmaWxsYCBzcGVjaWZpY2FsbHksIGFuZCB2ZXJpZnkgaWYgdGhleSBhcmUgZXhwb3J0ZWQgb3Igbm90LCBhbmQgYW55IGhlYWRlcnMgb3IgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGVzZSBmdW5jdGlvbiwgaW4gb3JkZXIgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NTAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzozOC42MDQ1MjU3MDFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDk0MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJkc19jb25uX3NodXRkb3dufHJkc19zZW5kX3htaXR8cmRzX3RjcF9yZXNldF9jYWxsYmFja3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Jkc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvcmRzL2NvbmcuYz0yMTc9dm9pZCByZHNfY29uZ19xdWV1ZV91cGRhdGVzKHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcClcXG4tLVxcbm5ldC9yZHMvY29uZy5jLTIzMC1cXHRcXHRcXHRyZHNfc3RhdHNfaW5jKHNfY29uZ191cGRhdGVfcXVldWVkKTtcXG5uZXQvcmRzL2NvbmcuYzoyMzE6XFx0XFx0XFx0LyogV2UgY2Fubm90IGlubGluZSB0aGUgY2FsbCB0byByZHNfc2VuZF94bWl0KCkgaGVyZVxcbm5ldC9yZHMvY29uZy5jLTIzMi1cXHRcXHRcXHQgKiBmb3IgdHdvIHJlYXNvbnMgKGJvdGggcGVydGFpbmluZyB0byBhIFRDUCB0cmFuc3BvcnQpOlxcbi0tXFxubmV0L3Jkcy9jb25uZWN0aW9uLmM9ODM9c3RhdGljIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fbG9va3VwKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTEwOC0vKlxcbm5ldC9yZHMvY29ubmVjdGlvbi5jOjEwOTogKiBUaGlzIGlzIGNhbGxlZCBieSByZHNfY29ubl9zaHV0ZG93bigpIG9uY2UgdGhlIHRyYW5zcG9ydCBoYXMgYnJvdWdodFxcbm5ldC9yZHMvY29ubmVjdGlvbi5jLTExMC0gKiBhIHBhdGggZG93bi4gIEl0IGNsZWFycyBwYXJ0aWFsIG1lc3NhZ2Ugc3RhdGUgc28gdGhhdCB0aGUgdHJhbnNwb3J0XFxuLS1cXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYz0xMTY9c3RhdGljIHZvaWQgcmRzX2Nvbm5fcGF0aF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxuLS1cXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0xMjktXFx0ICogUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBhcmUgaGVsZCBhcyBsb2NrcyBieSB0aGVcXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYzoxMzA6XFx0ICogY2FsbGVyLCByZHNfY29ubl9zaHV0ZG93bigpLCB3aGljaCByZWxlYXNlcyB0aGVtIG9uY2UgdGhlXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtMTMxLVxcdCAqIHRlYXJkb3duIGlzIGNvbXBsZXRlLlxcbi0tXFxubmV0L3Jkcy9jb25uZWN0aW9uLmM9MzkwPUVYUE9SVF9TWU1CT0xfR1BMKHJkc19jb25uX2NyZWF0ZV9vdXRnb2luZyk7XFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtMzkxLVxcbm5ldC9yZHMvY29ubmVjdGlvbi5jOjM5Mjp2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG5uZXQvcmRzL2Nvbm5lY3Rpb24uYy0zOTMte1xcbi0tXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDM3LVxcdFxcdC8qIFJlbGVhc2UgdGhlIHR3byBsb2NrcyBhbmQgd2FrZSBhbnkgd2FpdGVyIChlLmcuXFxubmV0L3Jkcy9jb25uZWN0aW9uLmM6NDM4OlxcdFxcdCAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkpIHRoYXQgYmxvY2tlZCBvbiB0aGVtIHdoaWxlXFxubmV0L3Jkcy9jb25uZWN0aW9uLmMtNDM5LVxcdFxcdCAqIHdlIGhlbGQgdGhlbS4gIFRoZSB1bmxvY2sgb3JkZXJzIHRoZSB0cmFuc3BvcnQncyByaW5nXFxuLS1cXG5uZXQvcmRzL2liX2NtLmM9MjgyPXN0YXRpYyB2b2lkIHJkc19pYl90YXNrbGV0X2ZuX3NlbmQodW5zaWduZWQgbG9uZyBkYXRhKVxcbi0tXFxubmV0L3Jkcy9pYl9jbS5jLTI5OS1cXHQgICAgdGVzdF9iaXQoMCwgXFx1MDAyNmNvbm4tXFx1MDAzZWNfbWFwX3F1ZXVlZCkpKVxcbm5ldC9yZHMvaWJfY20uYzozMDA6XFx0XFx0cmRzX3NlbmRfeG1pdChcXHUwMDI2aWMtXFx1MDAzZWNvbm4tXFx1MDAzZWNfcGF0aFswXSk7XFxubmV0L3Jkcy9pYl9jbS5jLTMwMS19XFxuLS1cXG5uZXQvcmRzL2liX3JlY3YuYz0zODI9dm9pZCByZHNfaWJfcmVjdl9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBpbnQgcHJlZmlsbCwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L3Jkcy9pYl9yZWN2LmMtMzk0LVxcdCAqIGxldCB0aGVtIGRvIHRoZWlyIHRoaW5nLiAgVGhlIGhvbGRlciBtYXkgYWxzbyBiZVxcbm5ldC9yZHMvaWJfcmVjdi5jOjM5NTpcXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHRlYXJpbmcgdGhlIHBhdGggZG93biwgaW4gd2hpY2ggY2FzZVxcbm5ldC9yZHMvaWJfcmVjdi5jLTM5Ni1cXHQgKiB0aGVyZSBpcyBub3RoaW5nIHRvIHBvc3QuXFxuLS1cXG5uZXQvcmRzL2liX3NlbmQuYz0yNDU9dm9pZCByZHNfaWJfc2VuZF9jcWVfaGFuZGxlcihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfd2MgKndjKVxcbi0tXFxubmV0L3Jkcy9pYl9zZW5kLmMtMzM1LSAqXFxubmV0L3Jkcy9pYl9zZW5kLmM6MzM2OiAqIFRoZSBSRFMgc2VuZCBjb2RlIGlzIGVzc2VudGlhbGx5IHNpbmdsZS10aHJlYWRlZDsgcmRzX3NlbmRfeG1pdFxcbm5ldC9yZHMvaWJfc2VuZC5jLTMzNy0gKiBzZXRzIFJEU19JTl9YTUlUIHRvIGVuc3VyZSBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBzZW5kIHJpbmcuXFxuLS1cXG5uZXQvcmRzL2xvb3AuYz0yMzU9dm9pZCByZHNfbG9vcF9uZXRfZXhpdCh2b2lkKVxcbi0tXFxubmV0L3Jkcy9sb29wLmMtMjQxLSAqIFRoaXMgaXMgbWlzc2luZyAueG1pdF8qIGJlY2F1c2UgbG9vcCBkb2Vzbid0IGdvIHRocm91Z2ggZ2VuZXJpY1xcbm5ldC9yZHMvbG9vcC5jOjI0MjogKiByZHNfc2VuZF94bWl0KCkgYW5kIGRvZXNuJ3QgY2FsbCByZHNfcmVjdl9pbmNvbWluZygpLiAgLmxpc3Rlbl9zdG9wIGFuZFxcbm5ldC9yZHMvbG9vcC5jLTI0My0gKiAubGFkZHJfY2hlY2sgYXJlIG1pc3NpbmcgYmVjYXVzZSB0cmFuc3BvcnQuYyBkb2Vzbid0IGl0ZXJhdGUgb3Zlclxcbi0tXFxubmV0L3Jkcy9yZHMuaD01NDA9c3RydWN0IHJkc190cmFuc3BvcnQge1xcbi0tXFxubmV0L3Jkcy9yZHMuaC01ODAtXFx0LypcXG5uZXQvcmRzL3Jkcy5oOjU4MTpcXHQgKiAueG1pdCBpcyBjYWxsZWQgYnkgcmRzX3NlbmRfeG1pdCgpIHRvIHRlbGwgdGhlIHRyYW5zcG9ydCB0byBzZW5kXFxubmV0L3Jkcy9yZHMuaC01ODItXFx0ICogcGFydCBvZiBhIG1lc3NhZ2UuICBUaGUgY2FsbGVyIHNlcmlhbGl6ZXMgb24gdGhlIHNlbmRfc2VtIHNvIHRoaXNcXG4tLVxcbm5ldC9yZHMvcmRzLmg9ODE1PXN0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9yZHMvcmRzLmgtODE5LVxcdFxcdFxcdFxcdFxcdFxcdHU4IHRvcywgZ2ZwX3QgZ2ZwLCBpbnQgZGV2X2lmKTtcXG5uZXQvcmRzL3Jkcy5oOjgyMDp2b2lkIHJkc19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubl9wYXRoICpjcGF0aCk7XFxubmV0L3Jkcy9yZHMuaC04MjEtdm9pZCByZHNfY29ubl9kZXN0cm95KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7XFxuLS1cXG5uZXQvcmRzL3Jkcy5oPTk1Nz12b2lkIHJkc19zZW5kX3BhdGhfcmVzZXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNvbm4pO1xcbm5ldC9yZHMvcmRzLmg6OTU4OmludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XFxubmV0L3Jkcy9yZHMuaC05NTktc3RydWN0IHNvY2thZGRyX2luO1xcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNDQtXFxubmV0L3Jkcy9zZW5kLmM6NDU6LyogV2hlbiB0cmFuc21pdHRpbmcgbWVzc2FnZXMgaW4gcmRzX3NlbmRfeG1pdCwgd2UgbmVlZCB0byBlbWVyZ2UgZnJvbVxcbm5ldC9yZHMvc2VuZC5jLTQ2LSAqIHRpbWUgdG8gdGltZSBhbmQgYnJpZWZseSByZWxlYXNlIHRoZSBDUFUuIE90aGVyd2lzZSB0aGUgc29mdGxvY2sgd2F0Y2hkb2dcXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTU5PXN0YXRpYyB2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpO1xcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNjItICogUmVzZXQgdGhlIHNlbmQgc3RhdGUuICBDYWxsZXJzIG11c3QgZW5zdXJlIHRoYXQgdGhpcyBkb2Vzbid0IHJhY2Ugd2l0aFxcbm5ldC9yZHMvc2VuZC5jOjYzOiAqIHJkc19zZW5kX3htaXQoKS5cXG5uZXQvcmRzL3NlbmQuYy02NC0gKi9cXG4tLVxcbm5ldC9yZHMvc2VuZC5jPTEzMz1zdGF0aWMgYm9vbCByZHNfbXByZHNfY3AwX2NhdGNodXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKVxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtMTkxLSAqL1xcbm5ldC9yZHMvc2VuZC5jOjE5MjppbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXFxubmV0L3Jkcy9zZW5kLmMtMTkzLXtcXG4tLVxcbm5ldC9yZHMvc2VuZC5jLTI0Ni1cXHQvKlxcbm5ldC9yZHMvc2VuZC5jOjI0NzpcXHQgKiByZHNfY29ubl9zaHV0ZG93bigpIHNldHMgdGhlIGNvbm4gc3RhdGUgYW5kIHRoZW4gYWNxdWlyZXNcXG5uZXQvcmRzL3NlbmQuYy0yNDgtXFx0ICogUkRTX0lOX1hNSVQ7IHdlIHRha2UgdGhlIGxvY2sgZmlyc3QgYW5kIHRoZW4gY2hlY2sgdGhlIHN0YXRlLlxcbi0tXFxubmV0L3Jkcy9zZW5kLmMtNTU3LX1cXG5uZXQvcmRzL3NlbmQuYzo1NTg6RVhQT1JUX1NZTUJPTF9HUEwocmRzX3NlbmRfeG1pdCk7XFxubmV0L3Jkcy9zZW5kLmMtNTU5LVxcbi0tXFxubmV0L3Jkcy9zZW5kLmM9NjkyPXN0YXRpYyB2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpXFxuLS1cXG5uZXQvcmRzL3NlbmQuYy03NjctICogbWVzc2FnZXMgdXAgdG8sIGFuZCBpbmNsdWRpbmcsIHRoZSBnaXZlbiBzZXF1ZW5jZSBudW1iZXIuICBNZXNzYWdlcyBhcmVcXG5uZXQvcmRzL3NlbmQuYzo3Njg6ICogbW92ZWQgdG8gdGhlIHJldHJhbnMgcXVldWUgd2hlbiByZHNfc2VuZF94bWl0IHBpY2tzIHRoZW0gb2ZmIHRoZSBzZW5kXFxubmV0L3Jkcy9zZW5kLmMtNzY5LSAqIHF1ZXVlLiBUaGlzIG1lYW5zIHRoYXQgaW4gdGhlIFRDUCBjYXNlLCB0aGUgbWVzc2FnZSBtYXkgbm90IGhhdmUgYmVlblxcbi0tXFxubmV0L3Jkcy9zZW5kLmM9MTE1ND1pbnQgcmRzX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgcGF5bG9hZF9sZW4pXFxuLS1cXG5uZXQvcmRzL3NlbmQuYy0xNDUxLVxcbm5ldC9yZHMvc2VuZC5jOjE0NTI6XFx0cmV0ID0gcmRzX3NlbmRfeG1pdChjcGF0aCk7XFxubmV0L3Jkcy9zZW5kLmMtMTQ1My1cXHRpZiAocmV0ID09IC1FTk9NRU0gfHwgcmV0ID09IC1FQUdBSU4pIHtcXG4tLVxcbm5ldC9yZHMvdGNwLmM9OTY9dm9pZCByZHNfdGNwX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXFxuLS1cXG5uZXQvcmRzL3RjcC5jLTExNy0vKlxcbm5ldC9yZHMvdGNwLmM6MTE4OiAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgYSBwYXRoIHRvIGEgbmV3IHNvY2tldCBhbmRcXG5uZXQvcmRzL3RjcC5jLTExOS0gKiByZWxlYXNlcyB0aGUgb2xkIG9uZSBpdCBmaW5kcyBpbiB0Yy1cXHUwMDNldF9zb2NrLCByZXNvbHZpbmcgYSBkdWVsbGluZ1xcbi0tXFxubmV0L3Jkcy90Y3AuYy0xMzItICogUkRTX0lOX1hNSVQgc28gdGhhdCBpdCBjYW5ub3QgaW50ZXJsZWF2ZSB3aXRoIGEgc2VuZGVyIGFscmVhZHlcXG5uZXQvcmRzL3RjcC5jOjEzMzogKiBpbnNpZGUgcmRzX3NlbmRfeG1pdCgpLlxcbm5ldC9yZHMvdGNwLmMtMTM0LSAqL1xcbm5ldC9yZHMvdGNwLmM6MTM1OnZvaWQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcXG5uZXQvcmRzL3RjcC5jLTEzNi1cXHRcXHRcXHQgICAgIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcXG4tLVxcbm5ldC9yZHMvdGNwLmMtMTQ2LVxcdCAqIHRoYW4gUkRTX0NPTk5fVVAgc3RvcHMgbmV3IHNlbmRlcnMsIGFuZCBvd25pbmcgUkRTX0lOX1hNSVRcXG5uZXQvcmRzL3RjcC5jOjE0NzpcXHQgKiBleGNsdWRlcyBhbnkgdGhyZWFkIGFscmVhZHkgaW5zaWRlIHJkc19zZW5kX3htaXQoKSAtIG9yIGFcXG5uZXQvcmRzL3RjcC5jOjE0ODpcXHQgKiB0ZWFyZG93biBpbiByZHNfY29ubl9zaHV0ZG93bigpLCB3aGljaCBob2xkcyB0aGUgc2FtZSBsb2NrXFxubmV0L3Jkcy90Y3AuYy0xNDktXFx0ICogZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNwb3J0IHNodXRkb3duIC0gZm9yIHRoZSB3aG9sZVxcbi0tXFxubmV0L3Jkcy90Y3AuYy0xNTItXFx0ICogQW4gaW5jb21pbmcgc3luLWFjayBhdCB0aGlzIHBvaW50IHdvdWxkIGVuZCB1cCBtYXJraW5nIHRoZVxcbm5ldC9yZHMvdGNwLmM6MTUzOlxcdCAqIGNvbm4gYXMgUkRTX0NPTk5fVVAsIGFuZCB3b3VsZCBhZ2FpbiBwZXJtaXQgcmRzX3NlbmRfeG1pdCgpXFxubmV0L3Jkcy90Y3AuYy0xNTQtXFx0ICogdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkIHN5bmNocm9uaXplIG9uXFxuLS1cXG5uZXQvcmRzL3RjcC5jLTE4My1cXHQvKiBSZWFkIHRfc29jayBvbmx5IHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVCwgbmV2ZXIgYmVmb3JlIHRoZVxcbm5ldC9yZHMvdGNwLmM6MTg0OlxcdCAqIHdhaXQ6IHRoZSB0ZWFyZG93biBpbiByZHNfY29ubl9zaHV0ZG93bigpIHJlbGVhc2VzIHRoZSBvbGRcXG5uZXQvcmRzL3RjcC5jLTE4NS1cXHQgKiBzb2NrZXQgYW5kIGNsZWFycyB0X3NvY2ssIHNvIGEgcG9pbnRlciBzYW1wbGVkIGVhcmxpZXIgY2FuXFxuLS1cXG5uZXQvcmRzL3RjcC5jLTIyNC0vKiBBZGQgdGMgdG8gcmRzX3RjcF90Y19saXN0IGFuZCBzZXQgdGMtXFx1MDAzZXRfc29jay4gU2VlIGNvbW1lbnRzXFxubmV0L3Jkcy90Y3AuYzoyMjU6ICogYWJvdmUgcmRzX3RjcF9yZXNldF9jYWxsYmFja3MgZm9yIG5vdGVzIGFib3V0IHN5bmNocm9uaXphdGlvblxcbm5ldC9yZHMvdGNwLmMtMjI2LSAqIHdpdGggZGF0YSBwYXRoXFxuLS1cXG5uZXQvcmRzL3RjcC5oPTc0PXZvaWQgcmRzX3RjcF9zZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XFxubmV0L3Jkcy90Y3AuaDo3NTp2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCByZHNfY29ubl9wYXRoICpjcCk7XFxubmV0L3Jkcy90Y3AuaC03Ni12b2lkIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3Moc3RydWN0IHNvY2tldCAqc29jayxcXG4tLVxcbm5ldC9yZHMvdGNwX2xpc3Rlbi5jPTE1Mj1pbnQgcmRzX3RjcF9hY2NlcHRfb25lKHN0cnVjdCByZHNfdGNwX25ldCAqcnRuKVxcbi0tXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMjk2LVxcdFxcdC8qIER1ZWxsaW5nIFNZTiBoYXMgYmVlbiBoYW5kbGVkIGluIHJkc190Y3BfYWNjZXB0X29uZSgpICovXFxubmV0L3Jkcy90Y3BfbGlzdGVuLmM6Mjk3OlxcdFxcdHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKG5ld19zb2NrLCBjcCk7XFxubmV0L3Jkcy90Y3BfbGlzdGVuLmMtMjk4LVxcdFxcdC8qIHJkc19jb25uZWN0X3BhdGhfY29tcGxldGUoKSBtYXJrcyBSRFNfQ09OTl9VUCwgb3IsXFxuLS1cXG5uZXQvcmRzL3RocmVhZHMuYz0xOTE9dm9pZCByZHNfc2VuZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3Jkcy90aHJlYWRzLmMtMTk5LVxcdFxcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcXHUwMDI2Y3AtXFx1MDAzZWNwX2ZsYWdzKTtcXG5uZXQvcmRzL3RocmVhZHMuYzoyMDA6XFx0XFx0cmV0ID0gcmRzX3NlbmRfeG1pdChjcCk7XFxubmV0L3Jkcy90aHJlYWRzLmMtMjAxLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubmV0L3Jkcy90aHJlYWRzLmM9MjQzPXZvaWQgcmRzX3NodXRkb3duX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvcmRzL3RocmVhZHMuYy0yNDgtXFxubmV0L3Jkcy90aHJlYWRzLmM6MjQ5OlxcdHJkc19jb25uX3NodXRkb3duKGNwKTtcXG5uZXQvcmRzL3RocmVhZHMuYy0yNTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMjo0NzozOC42NTI2MjcyMTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTQ1MDA3NzU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSRFMgUHJvdG9jb2wgSW52ZXN0aWdhdGlvbjogQ29uZmlncyBhbmQgRm9jdXMgU3ltYm9scyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyAoUkRTKSBwcm90b2NvbC4gU3BlY2lmaWNhbGx5LCBgUkRTYCBpdHNlbGYgZGVwZW5kcyBvbiBgSU5FVGAsIHdoaWNoIGlzIHN0YW5kYXJkLCBidXQgdGhlIGtleSBvbmVzLCBgUkRTX1RDUGAgYW5kIGBSRFNfUkRNQWAsIHJlcXVpcmUgZGVlcGVyIGV4YW1pbmF0aW9uLiBgUkRTX1RDUGAgcmVsaWVzIG9uIGBSRFNgIGFuZCBlaXRoZXIgYElQVjZgIG9yIGl0cyBuZWdhdGlvbiwgd2hpY2ggaXMgZXhwZWN0ZWQuIGBSRFNfUkRNQWAgaXMgbW9yZSBpbnRlcmVzdGluZywgYXMgaXQgZGVwZW5kcyBvbiBgUkRTYCwgYElORklOSUJBTkRgLCBhbmQgYElORklOSUJBTkRfQUREUl9UUkFOU2AuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBTZWVtcyBsaWtlIFwiUkRTXCIsIFwiUkRTX1RDUFwiLCBhbmQgXCJSRFNfUkRNQVwiIGFyZSB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gY29uc2lkZXIsIGFsb25nIHdpdGggXCJJTkZJTklCQU5EXCIgYW5kIFwiSU5GSU5JQkFORF9BRERSX1RSQU5TXCIgaWYgUkRNQSBpcyBlbmFibGVkLlxuXG5OZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGZvY3VzIHN5bWJvbHMuIEkndmUgaWRlbnRpZmllZCBgcmRzX2Nvbm5fc2h1dGRvd25gLCBgcmRzX3NlbmRfeG1pdGAsIGByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc2AsIGByZHNfaWJfcmVjdl9yZWZpbGxgLCBhbmQgYHJkc190Y3BfYWNjZXB0X29uZWAuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBJIHNob3VsZCBjb25jZW50cmF0ZSBvbiBmb3IgYW55IGFuYWx5c2lzLlxuXG5UaGUgbW9zdCBpbXBvcnRhbnQgcGFydCBpcyB0aGUgd29ydGhpbmVzcyBvZiB0aGlzIGFyZWEgZm9yIGZ1enppbmcuIEFic29sdXRlbHksIHRoaXMgaXMgY29yZSBSRFMgbmV0d29ya2luZyBjb2RlLiBJdCBoYW5kbGVzIGxvY2tzLCBzdGF0ZSBtYWNoaW5lcywgdGhlIFNZTnMsIHRoZSBzb2NrZXQgc3dhcHMsIGFuZCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIGJvdGggdGVhcmRvd24gYW5kIGRhdGEgdHJhbnNmZXIuIEFuZCwgaW1wb3J0YW50bHksIHRoaXMgY29kZSBpcyByZWFjaGFibGUgaW4gZnV6emluZyBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0UsIGJ5IGV4cGxvaXRpbmcgdGhlIHNvY2tldCBvcGVyYXRpb25zIG9uIEFGX1JEUyBzb2NrZXRzIGFjcm9zcyB0aGUgZGlmZmVyZW50IHRyYW5zcG9ydHMgKFRDUC9sb29wYmFjay9SRE1BKS5cblxuRmluYWxseSwgSSB3aWxsIGNvbGxhdGUgYWxsIG9mIHRoaXM6IHRoZSBjb25maWdzLCB0aGUgc3ltYm9scywgYW5kIHRoZSByYXRpb25hbGUgZm9yIHRoZSBuZXh0IHN0ZXAsIHdoaWNoIGlzIGNhbGxpbmcgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB3aXRoIHRoZXNlIGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk0MSwiT3V0cHV0VG9rZW5zIjoxODAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDc6NDguMTAyNzA3Mjg1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg0NDE4MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlJEU1wiLFxuICAgIFwiUkRTX1RDUFwiLFxuICAgIFwiUkRTX1JETUFcIixcbiAgICBcIklORklOSUJBTkRcIixcbiAgICBcIklORklOSUJBTkRfQUREUl9UUkFOU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJkc19jb25uX3NodXRkb3duXCIsXG4gICAgXCJyZHNfc2VuZF94bWl0XCIsXG4gICAgXCJyZHNfdGNwX3Jlc2V0X2NhbGxiYWNrc1wiLFxuICAgIFwicmRzX3RjcF9hY2NlcHRfb25lXCIsXG4gICAgXCJyZHNfaWJfcmVjdl9yZWZpbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgbWVjaGFuaXNtcyAoc3BlY2lmaWNhbGx5IFJEU19JTl9YTUlUIGFuZCBSRFNfUkVDVl9SRUZJTEwgYml0bG9ja3MsIHdhaXRxdWV1ZSBiYXJyaWVycywgYW5kIHN0YXRlIHRyYW5zaXRpb25zKSBpbiBSRFMgY29ubmVjdGlvbiB0ZWFyZG93biwgc2VuZCwgcmVjZWl2ZS1yZWZpbGwsIGFuZCBUQ1Agc29ja2V0IHN3YXBwaW5nIHBhdGhzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCByZWFjaGFibGUgbmV0d29yayBzb2NrZXQgb3BlcmF0aW9ucyBhbmQgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUkRTXCIsXG4gICAgXCJSRFNfVENQXCIsXG4gICAgXCJSRFNfUkRNQVwiLFxuICAgIFwiSU5GSU5JQkFORFwiLFxuICAgIFwiSU5GSU5JQkFORF9BRERSX1RSQU5TXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmRzX2Nvbm5fc2h1dGRvd25cIixcbiAgICBcInJkc19zZW5kX3htaXRcIixcbiAgICBcInJkc190Y3BfcmVzZXRfY2FsbGJhY2tzXCIsXG4gICAgXCJyZHNfdGNwX2FjY2VwdF9vbmVcIixcbiAgICBcInJkc19pYl9yZWN2X3JlZmlsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBtZWNoYW5pc21zIChzcGVjaWZpY2FsbHkgUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBiaXRsb2Nrcywgd2FpdHF1ZXVlIGJhcnJpZXJzLCBhbmQgc3RhdGUgdHJhbnNpdGlvbnMpIGluIFJEUyBjb25uZWN0aW9uIHRlYXJkb3duLCBzZW5kLCByZWNlaXZlLXJlZmlsbCwgYW5kIFRDUCBzb2NrZXQgc3dhcHBpbmcgcGF0aHMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHJlYWNoYWJsZSBuZXR3b3JrIHNvY2tldCBvcGVyYXRpb25zIGFuZCBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjI6NDc6NDguMTgxMTU2ODMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgyODM1ODE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjQ4LjE4MjQ1NTUyMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEwODI3MDU1Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVzb2x2ZXMgY29uY3VycmVuY3ksIHJhY2UgY29uZGl0aW9uLCBhbmQgc3RhdGUtbWFjaGluZSBzeW5jaHJvbml6YXRpb24gYnVncyBpbiB0aGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBzdWJzeXN0ZW0gZHVyaW5nIGNvbm5lY3Rpb24gdGVhcmRvd24sIHJlc2V0LCBhbmQgZHVlbGxpbmcgU1lOIHJlc29sdXRpb24gKHNwZWNpZmljYWxseSBsb2NraW5nIGFuZCBiaXQtbWFuaXB1bGF0aW9uIG9mIFJEU19JTl9YTUlULCBSRFNfUkVDVl9SRUZJTEwsIGFuZCBSRFNfQ09OTl8qIHN0YXRlIHRyYW5zaXRpb25zKS5cXG5cXG4tIE5vIG5ldyBoZWFwL3N0YWNrIGFsbG9jYXRpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYWRkZWQgb3IgbW9kaWZpZWQuXFxuLSBObyBrZXJuZWwtdG8tdXNlciBjb3B5IG9wZXJhdGlvbnMgKGUuZy4sIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmssIGlvY3RsLCBnZXRzb2Nrb3B0KSBvciB1c2VyLWZhY2luZyBzdHJ1Y3RzIGFyZSB0b3VjaGVkLlxcbi0gTm8gYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja3MsIG9yIHBheWxvYWQgcGFyc2luZyByb3V0aW5lcyBhcmUgYWx0ZXJlZCB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuLSBBbnkgY29uY3VycmVuY3kgYnVncywgdXNlLWFmdGVyLWZyZWUsIGRlYWRsb2Nrcywgb3IgbG9jayBvcmRlcmluZyBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIHRoZXNlIGNoYW5nZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMsIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGZlMzc2NzkwYjdjOWRjZjNlNmY1MzFlNTY1ZjIzNzdmY2VmYjNhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDI4IDIyOjQ3OjAyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy9jb25uZWN0aW9uLmMgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uY1xuaW5kZXggN2M4YWI4ZTk3M2UxYi4uYjZjNGJlYjUwZWFmMCAxMDA2NDRcbi0tLSBhL25ldC9yZHMvY29ubmVjdGlvbi5jXG4rKysgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uY1xuQEAgLTEwNiwxMCArMTA2LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsXG4gfVxuIFxuIC8qXG4tICogVGhpcyBpcyBjYWxsZWQgYnkgdHJhbnNwb3J0cyBhcyB0aGV5J3JlIGJyaW5naW5nIGRvd24gYSBjb25uZWN0aW9uLlxuLSAqIEl0IGNsZWFycyBwYXJ0aWFsIG1lc3NhZ2Ugc3RhdGUgc28gdGhhdCB0aGUgdHJhbnNwb3J0IGNhbiBzdGFydCBzZW5kaW5nXG4tICogYW5kIHJlY2VpdmluZyBvdmVyIHRoaXMgY29ubmVjdGlvbiBhZ2FpbiBpbiB0aGUgZnV0dXJlLiAgSXQgaXMgdXAgdG9cbi0gKiB0aGUgdHJhbnNwb3J0IHRvIGhhdmUgc2VyaWFsaXplZCB0aGlzIGNhbGwgd2l0aCBpdHMgc2VuZCBhbmQgcmVjdi5cbisgKiBUaGlzIGlzIGNhbGxlZCBieSByZHNfY29ubl9zaHV0ZG93bigpIG9uY2UgdGhlIHRyYW5zcG9ydCBoYXMgYnJvdWdodFxuKyAqIGEgcGF0aCBkb3duLiAgSXQgY2xlYXJzIHBhcnRpYWwgbWVzc2FnZSBzdGF0ZSBzbyB0aGF0IHRoZSB0cmFuc3BvcnRcbisgKiBjYW4gc3RhcnQgc2VuZGluZyBhbmQgcmVjZWl2aW5nIG92ZXIgdGhpcyBwYXRoIGFnYWluIGluIHRoZSBmdXR1cmUuXG4rICogVGhlIGNhbGxlciBvd25zIFJEU19JTl9YTUlUIGFuZCBSRFNfUkVDVl9SRUZJTEwgYWNyb3NzIHRoaXMgY2FsbCxcbisgKiB3aGljaCBpcyB3aGF0IHNlcmlhbGl6ZXMgaXQgYWdhaW5zdCB0aGUgc2VuZCBhbmQgcmVjZWl2ZS1yZWZpbGxcbisgKiBwYXRocy5cbiAgKi9cbiBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiB7XG5AQCAtMTIwLDcgKzEyMiwxNiBAQCBzdGF0aWMgdm9pZCByZHNfY29ubl9wYXRoX3Jlc2V0KHN0cnVjdCByZHNfY29ubl9wYXRoICpjcClcbiBcbiBcdHJkc19zdGF0c19pbmMoc19jb25uX3Jlc2V0KTtcbiBcdHJkc19zZW5kX3BhdGhfcmVzZXQoY3ApO1xuLVx0Y3AtXHUwMDNlY3BfZmxhZ3MgPSAwO1xuK1xuK1x0LyogQ2xlYXIgdGhlIGJpdHMgdGhlIHJlc2V0IGlzIHJlc3BvbnNpYmxlIGZvciBpbmRpdmlkdWFsbHk6IGFcbitcdCAqIGJsYW5rZXQgY3BfZmxhZ3MgPSAwIGlzIGEgcGxhaW4gc3RvcmUgdGhhdCBjYW4gY2xvYmJlciBhXG4rXHQgKiBjb25jdXJyZW50IGF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBvbiB0aGUgc2FtZSB3b3JkLlxuK1x0ICogUkRTX0lOX1hNSVQgYW5kIFJEU19SRUNWX1JFRklMTCBhcmUgaGVsZCBhcyBsb2NrcyBieSB0aGVcbitcdCAqIGNhbGxlciwgcmRzX2Nvbm5fc2h1dGRvd24oKSwgd2hpY2ggcmVsZWFzZXMgdGhlbSBvbmNlIHRoZVxuK1x0ICogdGVhcmRvd24gaXMgY29tcGxldGUuXG4rXHQgKi9cbitcdGNsZWFyX2JpdChSRFNfTExfU0VORF9GVUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4rXHRjbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4gXG4gXHQvKiBEbyBub3QgY2xlYXIgbmV4dF9yeF9zZXEgaGVyZSwgZWxzZSB3ZSBjYW5ub3QgZGlzdGluZ3Vpc2hcbiBcdCAqIHJldHJhbnNtaXR0ZWQgcGFja2V0cyBmcm9tIG5ldyBwYWNrZXRzLCBhbmQgd2lsbCBoYW5kIGFsbFxuQEAgLTQwNiwyOCArNDE3LDcwIEBAIHZvaWQgcmRzX2Nvbm5fc2h1dGRvd24oc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIFx0XHR9XG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZjcC1cdTAwM2VjcF9jbV9sb2NrKTtcbiBcbitcdFx0LyogUXVpZXNjZSB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUtcmVmaWxsIHBhdGhzIGJ5XG4rXHRcdCAqIGFjcXVpcmluZyB0aGVpciBiaXQgbG9ja3MsIG5vdCBtZXJlbHkgd2FpdGluZyBmb3JcbitcdFx0ICogdGhlbSB0byBiZSByZWxlYXNlZDogd2l0aCBhIHBsYWluIHdhaXQsIGVpdGhlciBwYXRoXG4rXHRcdCAqIGNhbiByZS10YWtlIGl0cyBsb2NrIHRoZSBpbnN0YW50IGFmdGVyIHdlIHNhbXBsZSBpdFxuK1x0XHQgKiBjbGVhciBhbmQgdGhlbiBydW4gY29uY3VycmVudGx5IHdpdGggdGhlIHRyYW5zcG9ydFxuK1x0XHQgKiBzaHV0ZG93biBhbmQgdGhlIHBhdGggcmVzZXQgYmVsb3cuICBIb2xkaW5nIGJvdGhcbitcdFx0ICogbG9ja3MgYWNyb3NzIHRoZSB0ZWFyZG93biBtYWtlcyB0aGF0IHN0cnVjdHVyYWxseVxuK1x0XHQgKiBpbXBvc3NpYmxlLlxuK1x0XHQgKi9cbiBcdFx0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbi1cdFx0XHQgICAhdGVzdF9iaXQoUkRTX0lOX1hNSVQsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKSk7XG4rXHRcdFx0ICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiBcdFx0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbi1cdFx0XHQgICAhdGVzdF9iaXQoUkRTX1JFQ1ZfUkVGSUxMLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncykpO1xuK1x0XHRcdCAgICF0ZXN0X2FuZF9zZXRfYml0KFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbiBcbiBcdFx0Y29ubi1cdTAwM2VjX3RyYW5zLVx1MDAzZWNvbm5fcGF0aF9zaHV0ZG93bihjcCk7XG4gXHRcdHJkc19jb25uX3BhdGhfcmVzZXQoY3ApO1xuIFxuK1x0XHQvKiBSZWxlYXNlIHRoZSB0d28gbG9ja3MgYW5kIHdha2UgYW55IHdhaXRlciAoZS5nLlxuK1x0XHQgKiByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcygpKSB0aGF0IGJsb2NrZWQgb24gdGhlbSB3aGlsZVxuK1x0XHQgKiB3ZSBoZWxkIHRoZW0uICBUaGUgdW5sb2NrIG9yZGVycyB0aGUgdHJhbnNwb3J0J3MgcmluZ1xuK1x0XHQgKiByZS1pbml0aWFsaXphdGlvbiBhbmQgdGhlIHBhdGggcmVzZXQgYWJvdmUgYmVmb3JlXG4rXHRcdCAqIGVpdGhlciBiaXQgaXMgc2VlbiBjbGVhci4gIHJkc19jb25uX3BhdGhfcmVzZXQoKSBsZWF2ZXNcbitcdFx0ICogYm90aCBiaXRzIGFsb25lOiBvd25lcnNoaXAgZW5kcyBoZXJlLCBub3QgaW5zaWRlIHRoZVxuK1x0XHQgKiByZXNldC5cbitcdFx0ICovXG4rXHRcdGNsZWFyX2JpdF91bmxvY2soUkRTX0lOX1hNSVQsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbitcdFx0Y2xlYXJfYml0X3VubG9jayhSRFNfUkVDVl9SRUZJTEwsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbitcdFx0d2FrZV91cF9hbGwoXHUwMDI2Y3AtXHUwMDNlY3Bfd2FpdHEpO1xuK1xuIFx0XHRpZiAoIXJkc19jb25uX3BhdGhfdHJhbnNpdGlvbihjcCwgUkRTX0NPTk5fRElTQ09OTkVDVElORyxcbi1cdFx0XHRcdFx0ICAgICAgUkRTX0NPTk5fRE9XTikgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9FUlJPUixcbiBcdFx0XHRcdFx0ICAgICAgUkRTX0NPTk5fRE9XTikpIHtcbi1cdFx0XHQvKiBUaGlzIGNhbiBoYXBwZW4gLSBlZyB3aGVuIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgdGVhcmluZ1xuLVx0XHRcdCAqIGRvd24gdGhlIGNvbm5lY3Rpb24sIGFuZCBzb21lb25lIHVubG9hZHMgdGhlIHJkcyBtb2R1bGUuXG4tXHRcdFx0ICogUXVpdGUgcmVwcm9kdWNpYmxlIHdpdGggbG9vcGJhY2sgY29ubmVjdGlvbnMuXG4tXHRcdFx0ICogTW9zdGx5IGhhcm1sZXNzLlxuK1x0XHRcdC8qIFRoZSBwYXRoIHdhcyBkcm9wcGVkIGFnYWluIHdoaWxlIHdlIHRvcmUgaXRcbitcdFx0XHQgKiBkb3duOiBieSBhIHNvY2tldCBzdGF0ZS1jaGFuZ2UgY2FsbGJhY2sgaW5cbitcdFx0XHQgKiBpcnEgY29udGV4dCBvbiByZWNlaXB0IG9mIGEgRklOLCBvciBieSBhblxuK1x0XHRcdCAqIGFjY2VwdCB0aGF0IGNsYWltZWQgdGhlIHBhdGgganVzdCBiZWZvcmUgYVxuK1x0XHRcdCAqIGRyb3AgcHV0IGl0IGJhY2sgdG8gUkRTX0NPTk5fRVJST1IgYW5kIHRoZW5cbitcdFx0XHQgKiBpbnN0YWxsZWQgYSBmcmVzaCBzb2NrZXQgb24gaXQuICBVbmxlc3MgYVxuK1x0XHRcdCAqIHBlbmRpbmcgZGVzdHJveSBzdXBwcmVzc2VkIGl0LCB0aGUgZHJvcCBhbHNvXG4rXHRcdFx0ICogcXVldWVkIGFub3RoZXIgc2h1dGRvd24gcGFzcywgYW5kIHRoYXQgcGFzc1xuK1x0XHRcdCAqIG11c3QgcnVuLCBiZWNhdXNlIGl0IGlzIHdoYXQgdGVhcnMgZG93blxuK1x0XHRcdCAqIHdoYXRldmVyIGF0dGFjaGVkIHRvIHRoZSBwYXRoIGFmdGVyIHRoZVxuK1x0XHRcdCAqIHRyYW5zcG9ydCBzaHV0ZG93biBhYm92ZSBzYW1wbGVkIGl0cyBzdGF0ZS5cbitcdFx0XHQgKiBDb25zdW1pbmcgdGhlIFJEU19DT05OX0VSUk9SIGhlcmUgd291bGQgdHVyblxuK1x0XHRcdCAqIHRoYXQgcGFzcyBpbnRvIGEgbm8tb3A6IGxlYXZlIHRoZSBzdGF0ZVxuK1x0XHRcdCAqIGFsb25lLCBhbmQgbGV0IHRoZSBwYXNzIGZpbmlzaCB0aGUgam9iLlxuIFx0XHRcdCAqXG4tXHRcdFx0ICogTm90ZSB0aGF0IHRoaXMgYWxzbyBoYXBwZW5zIHdpdGggcmRzLXRjcCBiZWNhdXNlXG4tXHRcdFx0ICogd2UgY291bGQgaGF2ZSB0cmlnZ2VyZWQgcmRzX2Nvbm5fcGF0aF9kcm9wIGluIGlycVxuLVx0XHRcdCAqIG1vZGUgZnJvbSByZHNfdGNwX3N0YXRlIGNoYW5nZSBvbiB0aGUgcmVjZWlwdCBvZlxuLVx0XHRcdCAqIGEgRklOLCB0aHVzIHdlIG5lZWQgdG8gcmVjaGVjayBmb3IgUkRTX0NPTk5fRVJST1Jcbi1cdFx0XHQgKiBoZXJlLlxuK1x0XHRcdCAqIFF1aWVzY2UgdGhlIHJlY29ubmVjdCB0aW1lciBiZWZvcmUgYmFpbGluZ1xuK1x0XHRcdCAqIG91dCwgdGhvdWdoLiAgV2hlbiBhIHBlbmRpbmcgZGVzdHJveSBkaWRcbitcdFx0XHQgKiBzdXBwcmVzcyB0aGUgcXVldWUsIG5vIGxhdGVyIHBhc3MgcnVucywgYW5kXG4rXHRcdFx0ICogcmRzX2Nvbm5fcGF0aF9kZXN0cm95KCkgaXMgYWJvdXQgdG8gZmx1c2hcbitcdFx0XHQgKiBjcF9kb3duX3cgYW5kIGZyZWUgdGhlIHBhdGg6IGl0IG11c3Qgbm90XG4rXHRcdFx0ICogZmluZCBjcF9jb25uX3cgc3RpbGwgYXJtZWQuICBBIHN1Y2Nlc3NvclxuK1x0XHRcdCAqIHBhc3MsIHdoZW4gdGhlcmUgaXMgb25lLCByZS1hcm1zIHRoZVxuK1x0XHRcdCAqIHJlY29ubmVjdCBmcm9tIGl0cyBvd24gdGFpbC5cbitcdFx0XHQgKi9cbitcdFx0XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2Y3AtXHUwMDNlY3BfY29ubl93KTtcbitcdFx0XHRjbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCBcdTAwMjZjcC1cdTAwM2VjcF9mbGFncyk7XG4rXG4rXHRcdFx0aWYgKHJkc19jb25uX3BhdGhfc3RhdGUoY3ApID09IFJEU19DT05OX0VSUk9SKVxuK1x0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdC8qIE5vIGN1cnJlbnQgY3Bfc3RhdGUgd3JpdGVyIGxlYXZlcyBhXG4rXHRcdFx0ICogRElTQ09OTkVDVElORyBwYXRoIGluIGFueSBzdGF0ZSBidXRcbitcdFx0XHQgKiBSRFNfQ09OTl9FUlJPUjsgcmVwb3J0IGxvdWRseSBpZiBvbmUgZXZlclxuK1x0XHRcdCAqIGRvZXMuXG4gXHRcdFx0ICovXG4gXHRcdFx0cmRzX2Nvbm5fcGF0aF9lcnJvcihjcCwgXCIlczogZmFpbGVkIHRvIHRyYW5zaXRpb24gXCJcbiBcdFx0XHRcdFx0ICAgIFwidG8gc3RhdGUgRE9XTiwgY3VycmVudCBzdGF0ZSBcIlxuZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfcmVjdi5jIGIvbmV0L3Jkcy9pYl9yZWN2LmNcbmluZGV4IDM1NzEyOGQzNGE1NDYuLmJkNmNiM2ZmYWE1NzEgMTAwNjQ0XG4tLS0gYS9uZXQvcmRzL2liX3JlY3YuY1xuKysrIGIvbmV0L3Jkcy9pYl9yZWN2LmNcbkBAIC0zNjMsMTUgKzM2MywxNCBAQCBzdGF0aWMgaW50IGFjcXVpcmVfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubilcbiBcbiBzdGF0aWMgdm9pZCByZWxlYXNlX3JlZmlsbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pXG4ge1xuLVx0Y2xlYXJfYml0KFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y29ubi1cdTAwM2VjX2ZsYWdzKTtcbi1cdHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7XG4rXHRjbGVhcl9iaXRfdW5sb2NrKFJEU19SRUNWX1JFRklMTCwgXHUwMDI2Y29ubi1cdTAwM2VjX2ZsYWdzKTtcbiBcbiBcdC8qIFdlIGRvbid0IHVzZSB3YWl0X29uX2JpdCgpL3dha2VfdXBfYml0KCkgYmVjYXVzZSBvdXIgd2FraW5nIGlzIGluIGFcbiBcdCAqIGhvdCBwYXRoIGFuZCBmaW5kaW5nIHdhaXRlcnMgaXMgdmVyeSByYXJlLiAgV2UgZG9uJ3Qgd2FudCB0byB3YWxrXG4gXHQgKiB0aGUgc3lzdGVtLXdpZGUgaGFzaGVkIHdhaXRxdWV1ZSBidWNrZXRzIGluIHRoZSBmYXN0IHBhdGggb25seSB0b1xuIFx0ICogYWxtb3N0IG5ldmVyIGZpbmQgd2FpdGVycy5cbiBcdCAqL1xuLVx0aWYgKHdhaXRxdWV1ZV9hY3RpdmUoXHUwMDI2Y29ubi1cdTAwM2VjX3dhaXRxKSlcbitcdGlmICh3cV9oYXNfc2xlZXBlcihcdTAwMjZjb25uLVx1MDAzZWNfd2FpdHEpKVxuIFx0XHR3YWtlX3VwX2FsbChcdTAwMjZjb25uLVx1MDAzZWNfd2FpdHEpO1xuIH1cbiBcbkBAIC0zOTIsNyArMzkxLDkgQEAgdm9pZCByZHNfaWJfcmVjdl9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBpbnQgcHJlZmlsbCwgZ2ZwX3QgZ2ZwKVxuIFxuIFx0LyogdGhlIGdvYWwgaGVyZSBpcyB0byBqdXN0IG1ha2Ugc3VyZSB0aGF0IHNvbWVvbmUsIHNvbWV3aGVyZVxuIFx0ICogaXMgcG9zdGluZyBidWZmZXJzLiAgSWYgd2UgY2FuJ3QgZ2V0IHRoZSByZWZpbGwgbG9jayxcbi1cdCAqIGxldCB0aGVtIGRvIHRoZWlyIHRoaW5nXG4rXHQgKiBsZXQgdGhlbSBkbyB0aGVpciB0aGluZy4gIFRoZSBob2xkZXIgbWF5IGFsc28gYmVcbitcdCAqIHJkc19jb25uX3NodXRkb3duKCkgdGVhcmluZyB0aGUgcGF0aCBkb3duLCBpbiB3aGljaCBjYXNlXG4rXHQgKiB0aGVyZSBpcyBub3RoaW5nIHRvIHBvc3QuXG4gXHQgKi9cbiBcdGlmICghYWNxdWlyZV9yZWZpbGwoY29ubikpXG4gXHRcdHJldHVybjtcbmRpZmYgLS1naXQgYS9uZXQvcmRzL3NlbmQuYyBiL25ldC9yZHMvc2VuZC5jXG5pbmRleCAxNWExYjk3ZjEzZTc2Li4xYWZhOTgxZTVjMDZkIDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy9zZW5kLmNcbisrKyBiL25ldC9yZHMvc2VuZC5jXG5AQCAtMTE0LDggKzExNCwxMyBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX2luX3htaXQoc3RydWN0IHJkc19jb25uX3BhdGggKmNwKVxuIFx0ICogaG90IHBhdGggYW5kIGZpbmRpbmcgd2FpdGVycyBpcyB2ZXJ5IHJhcmUuICBXZSBkb24ndCB3YW50IHRvIHdhbGtcbiBcdCAqIHRoZSBzeXN0ZW0td2lkZSBoYXNoZWQgd2FpdHF1ZXVlIGJ1Y2tldHMgaW4gdGhlIGZhc3QgcGF0aCBvbmx5IHRvXG4gXHQgKiBhbG1vc3QgbmV2ZXIgZmluZCB3YWl0ZXJzLlxuK1x0ICpcbitcdCAqIHdxX2hhc19zbGVlcGVyKCkgc3VwcGxpZXMgdGhlIGZ1bGwgYmFycmllciB0aGF0IG9yZGVycyB0aGUgd2FpdFxuK1x0ICogcXVldWUgcmVhZCBhZnRlciB0aGUgYml0IGNsZWFyOyBjbGVhcl9iaXRfdW5sb2NrKCkgYWxvbmUgaXMgb25seVxuK1x0ICogYSByZWxlYXNlIGFuZCB3b3VsZCBsZXQgdGhpcyBjaGVjayByZWFkIGEgc3RhbGUgZW1wdHkgcXVldWUsXG4rXHQgKiBsb3NpbmcgdGhlIHdha2UtdXAuXG4gXHQgKi9cbi1cdGlmICh3YWl0cXVldWVfYWN0aXZlKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKSlcbitcdGlmICh3cV9oYXNfc2xlZXBlcihcdTAwMjZjcC1cdTAwM2VjcF93YWl0cSkpXG4gXHRcdHdha2VfdXBfYWxsKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKTtcbiB9XG4gXG5AQCAtMjM5LDggKzI0NCwxMSBAQCBpbnQgcmRzX3NlbmRfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4gXHRXUklURV9PTkNFKGNwLVx1MDAzZWNwX3NlbmRfZ2VuLCBzZW5kX2dlbik7XG4gXG4gXHQvKlxuLVx0ICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIHRlc3RzIFJEU19JTl9YTUlULFxuLVx0ICogd2UgZG8gdGhlIG9wcG9zaXRlIHRvIGF2b2lkIHJhY2VzLlxuK1x0ICogcmRzX2Nvbm5fc2h1dGRvd24oKSBzZXRzIHRoZSBjb25uIHN0YXRlIGFuZCB0aGVuIGFjcXVpcmVzXG4rXHQgKiBSRFNfSU5fWE1JVDsgd2UgdGFrZSB0aGUgbG9jayBmaXJzdCBhbmQgdGhlbiBjaGVjayB0aGUgc3RhdGUuXG4rXHQgKiBPd25lcnNoaXAgaXMgZGVjaWRlZCBieSB0aGUgYXRvbWljIFJNVyBvbiB0aGUgY3BfZmxhZ3Mgd29yZDpcbitcdCAqIGlmIHRoZSB0ZWFyZG93biB3b24gdGhlIGJpdCB3ZSBiYWNrIG9mZiBoZXJlLCBhbmQgaWYgd2Ugd29uXG4rXHQgKiBpdCB0aGUgdGVhcmRvd24gd2FpdHMgdW50aWwgd2UgcmVsZWFzZSBpdC5cbiBcdCAqL1xuIFx0aWYgKCFyZHNfY29ubl9wYXRoX3VwKGNwKSkge1xuIFx0XHRyZWxlYXNlX2luX3htaXQoY3ApO1xuZGlmZiAtLWdpdCBhL25ldC9yZHMvdGNwLmMgYi9uZXQvcmRzL3RjcC5jXG5pbmRleCBiMjYzNjM0YWM3NTBkLi43NzRhNzFmODhkMzc1IDEwMDY0NFxuLS0tIGEvbmV0L3Jkcy90Y3AuY1xuKysrIGIvbmV0L3Jkcy90Y3AuY1xuQEAgLTExNSw0NiArMTE1LDkwIEBAIHZvaWQgcmRzX3RjcF9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIH1cbiBcbiAvKlxuLSAqIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKCkgc3dpdGNoZXMgdGhlIHRvIHRoZSBuZXcgc29jayBhbmRcbi0gKiByZXR1cm5zIHRoZSBleGlzdGluZyB0Yy1cdTAwM2V0X3NvY2suXG4rICogcmRzX3RjcF9yZXNldF9jYWxsYmFja3MoKSBzd2l0Y2hlcyBhIHBhdGggdG8gYSBuZXcgc29ja2V0IGFuZFxuKyAqIHJlbGVhc2VzIHRoZSBvbGQgb25lIGl0IGZpbmRzIGluIHRjLVx1MDAzZXRfc29jaywgcmVzb2x2aW5nIGEgZHVlbGxpbmdcbisgKiBTWU4uXG4gICpcbi0gKiBUaGUgb25seSBmdW5jdGlvbnMgdGhhdCBzZXQgdGMtXHUwMDNldF9zb2NrIGFyZSByZHNfdGNwX3NldF9jYWxsYmFja3Ncbi0gKiBhbmQgcmRzX3RjcF9yZXNldF9jYWxsYmFja3MuICBTZW5kIGFuZCByZWNlaXZlIHRydXN0IHRoYXRcbi0gKiBpdCBpcyBzZXQuICBUaGUgYWJzZW5jZSBvZiBSRFNfQ09OTl9VUCBiaXQgcHJvdGVjdHMgdGhvc2UgcGF0aHNcbi0gKiBmcm9tIGJlaW5nIGNhbGxlZCB3aGlsZSBpdCBpc24ndCBzZXQuXG4rICogdGMtXHUwMDNldF9zb2NrIGlzIHNldCBieSByZHNfdGNwX3NldF9jYWxsYmFja3MoKSBhbmQgY2xlYXJlZCBieVxuKyAqIHJkc190Y3BfcmVzdG9yZV9jYWxsYmFja3MoKS4gIEZvdXIgcGF0aHMgd3JpdGUgaXQ6IHRoZSBhY3RpdmVcbisgKiBjb25uZWN0IGluIHJkc190Y3BfY29ubl9wYXRoX2Nvbm5lY3QoKSwgd2hpY2ggc2V0cyBpdCBhbmQgY2xlYXJzIGl0XG4rICogYWdhaW4gb24gZmFpbHVyZTsgdGhlIGFjY2VwdCBwYXRoIGluIHJkc190Y3BfYWNjZXB0X29uZSgpLCB3aGljaFxuKyAqIHNldHMgaXQgZm9yIGEgcGF0aCB3aXRoIG5vIHNvY2tldCB5ZXQ7IHRoZSB0ZWFyZG93biBpblxuKyAqIHJkc190Y3BfY29ubl9wYXRoX3NodXRkb3duKCksIHdoaWNoIGNsZWFycyBpdDsgYW5kIHRoZSBzd2FwIGRvbmVcbisgKiBoZXJlLCB3aGljaCBkb2VzIGJvdGguICBUaGUgY29ubmVjdCBhbmQgYWNjZXB0IHBhdGhzIGFyZSBzZXJpYWxpemVkXG4rICogYWdhaW5zdCBlYWNoIG90aGVyIGJ5IHRfY29ubl9wYXRoX2xvY2suICBTZW5kIGFuZCByZWNlaXZlIHRydXN0XG4rICogdGhhdCBpdCBpcyBzZXQ6IHRoZSBhYnNlbmNlIG9mIFJEU19DT05OX1VQIHByb3RlY3RzIHRob3NlIHBhdGhzXG4rICogZnJvbSBiZWluZyBjYWxsZWQgd2hpbGUgaXQgaXNuJ3QsIGFuZCB0aGUgc3dhcCBkb25lIGhlcmUgcnVucyB1bmRlclxuKyAqIFJEU19JTl9YTUlUIHNvIHRoYXQgaXQgY2Fubm90IGludGVybGVhdmUgd2l0aCBhIHNlbmRlciBhbHJlYWR5XG4rICogaW5zaWRlIHJkc19zZW5kX3htaXQoKS5cbiAgKi9cbiB2b2lkIHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKHN0cnVjdCBzb2NrZXQgKnNvY2ssXG4gXHRcdFx0ICAgICBzdHJ1Y3QgcmRzX2Nvbm5fcGF0aCAqY3ApXG4ge1xuIFx0c3RydWN0IHJkc190Y3BfY29ubmVjdGlvbiAqdGMgPSBjcC1cdTAwM2VjcF90cmFuc3BvcnRfZGF0YTtcbi1cdHN0cnVjdCBzb2NrZXQgKm9zb2NrID0gdGMtXHUwMDNldF9zb2NrO1xuLVxuLVx0aWYgKCFvc29jaylcbi1cdFx0Z290byBuZXdzb2NrO1xuK1x0c3RydWN0IHNvY2tldCAqb3NvY2s7XG4gXG4gXHQvKiBOZWVkIHRvIHJlc29sdmUgYSBkdWVsbGluZyBTWU4gYmV0d2VlbiBwZWVycy5cbiBcdCAqIFdlIGhhdmUgYW4gb3V0c3RhbmRpbmcgU1lOIHRvIHRoaXMgcGVlciwgd2hpY2ggbWF5XG4gXHQgKiBwb3RlbnRpYWxseSBoYXZlIHRyYW5zaXRpb25lZCB0byB0aGUgUkRTX0NPTk5fVVAgc3RhdGUsXG4gXHQgKiBzbyB3ZSBtdXN0IHF1aWVzY2UgYW55IHNlbmQgdGhyZWFkcyBiZWZvcmUgcmVzZXR0aW5nXG4tXHQgKiBjcF90cmFuc3BvcnRfZGF0YS4gV2UgcXVpZXNjZSB0aGVzZSB0aHJlYWRzIGJ5IHNldHRpbmdcbi1cdCAqIGNwX3N0YXRlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFJEU19DT05OX1VQLCBhbmQgdGhlblxuLVx0ICogd2FpdGluZyBmb3IgYW55IGV4aXN0aW5nIHRocmVhZHMgaW4gcmRzX3NlbmRfeG1pdCB0b1xuLVx0ICogY29tcGxldGUgcmVsZWFzZV9pbl94bWl0KCkuIChTdWJzZXF1ZW50IHRocmVhZHMgZW50ZXJpbmdcbi1cdCAqIHJkc19zZW5kX3htaXQoKSB3aWxsIGJhaWwgb24gIXJkc19jb25uX3VwKCkuXG4rXHQgKiBjcF90cmFuc3BvcnRfZGF0YS4gIFNldHRpbmcgY3Bfc3RhdGUgdG8gc29tZXRoaW5nIG90aGVyXG4rXHQgKiB0aGFuIFJEU19DT05OX1VQIHN0b3BzIG5ldyBzZW5kZXJzLCBhbmQgb3duaW5nIFJEU19JTl9YTUlUXG4rXHQgKiBleGNsdWRlcyBhbnkgdGhyZWFkIGFscmVhZHkgaW5zaWRlIHJkc19zZW5kX3htaXQoKSAtIG9yIGFcbitcdCAqIHRlYXJkb3duIGluIHJkc19jb25uX3NodXRkb3duKCksIHdoaWNoIGhvbGRzIHRoZSBzYW1lIGxvY2tcbitcdCAqIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zcG9ydCBzaHV0ZG93biAtIGZvciB0aGUgd2hvbGVcbitcdCAqIHNvY2tldCBzd2FwIGFuZCB0aGUgcmRzX3NlbmRfcGF0aF9yZXNldCgpIGJlbG93LlxuIFx0ICpcbi1cdCAqIEhvd2V2ZXIgYW4gaW5jb21pbmcgc3luLWFjayBhdCB0aGlzIHBvaW50IHdvdWxkIGVuZCB1cFxuLVx0ICogbWFya2luZyB0aGUgY29ubiBhcyBSRFNfQ09OTl9VUCwgYW5kIHdvdWxkIGFnYWluIHBlcm1pdFxuLVx0ICogcmRzX3NlbmRfeG1pKCkgdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkXG4tXHQgKiBzeW5jaHJvbml6ZSBvbiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdFxuLVx0ICogZG8gdGhhdDogd2FpdGluZyBvbiAhUkRTX0lOX1hNSVQgYWZ0ZXIgbG9ja19zb2NrKCkgbWF5XG4tXHQgKiBlbmQgdXAgZGVhZGxvY2tpbmcgd2l0aCB0Y3Bfc2VuZG1zZygpLCBhbmQgdGhlIFJEU19JTl9YTUlUXG4tXHQgKiB3b3VsZCBub3QgZ2V0IHNldC4gQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvXG4tXHQgKiBSRFNfQ09OTl9SRVNFVFRUSU5HLCB0byBlbnN1cmUgdGhhdCByZHNfdGNwX3N0YXRlX2NoYW5nZVxuLVx0ICogY2Fubm90IG1hcmsgcmRzX2Nvbm5fcGF0aF91cCgpIGluIHRoZSB3aW5kb3cgYmVmb3JlIGxvY2tfc29jaygpXG4rXHQgKiBBbiBpbmNvbWluZyBzeW4tYWNrIGF0IHRoaXMgcG9pbnQgd291bGQgZW5kIHVwIG1hcmtpbmcgdGhlXG4rXHQgKiBjb25uIGFzIFJEU19DT05OX1VQLCBhbmQgd291bGQgYWdhaW4gcGVybWl0IHJkc19zZW5kX3htaXQoKVxuK1x0ICogdGhyZWFkcyB0aHJvdWdoLCBzbyBpZGVhbGx5IHdlIHdvdWxkIHN5bmNocm9uaXplIG9uXG4rXHQgKiBSRFNfQ09OTl9VUCBhZnRlciBsb2NrX3NvY2soKSwgYnV0IGNhbm5vdCBkbyB0aGF0OiBhY3F1aXJpbmdcbitcdCAqIFJEU19JTl9YTUlUIGFmdGVyIGxvY2tfc29jaygpIG1heSBlbmQgdXAgZGVhZGxvY2tpbmcgd2l0aFxuK1x0ICogdGNwX3NlbmRtc2coKSwgd2hpY2ggdGFrZXMgdGhlIHNvY2tldCBsb2NrIHdoaWxlIGhvbGRpbmdcbitcdCAqIFJEU19JTl9YTUlULiAgQXMgYSByZXN1bHQsIHdlIHNldCBjX3N0YXRlIHRvXG4rXHQgKiBSRFNfQ09OTl9SRVNFVFRJTkcsIHRvIGVuc3VyZSB0aGF0IHJkc190Y3Bfc3RhdGVfY2hhbmdlXG4rXHQgKiBjYW5ub3QgbWFyayByZHNfY29ubl9wYXRoX3VwKCkgaW4gdGhlIHdpbmRvdyBiZWZvcmVcbitcdCAqIGxvY2tfc29jaygpLlxuK1x0ICpcbitcdCAqIE9ubHkgbWFrZSB0aGF0IHRyYW5zaXRpb24gaWYgdGhlIHBhdGggaXMgc3RpbGwgY29ubmVjdGluZ1xuK1x0ICogKG9yIGFscmVhZHkgcmVzZXR0aW5nIGZyb20gYW4gZWFybGllciBkdWVsKS4gIEEgcGF0aCBpbiBhbnlcbitcdCAqIG90aGVyIHN0YXRlIC0gdHlwaWNhbGx5IFJEU19DT05OX0RJU0NPTk5FQ1RJTkcgb3JcbitcdCAqIFJEU19DT05OX0VSUk9SIHdpdGggYSBzaHV0ZG93biBpbiBmbGlnaHQgLSBpcyBkcm9wcGVkXG4rXHQgKiBpbnN0ZWFkLiAgVGhhdCBzdGlsbCByZXBsYWNlcyBpdHMgc3RhdGUsIHdpdGggUkRTX0NPTk5fRVJST1IsXG4rXHQgKiBhbmQsIHVubGVzcyBhIHBlbmRpbmcgZGVzdHJveSBpcyBhYm91dCB0byByZWFwIHRoZSB3aG9sZVxuK1x0ICogY29ubmVjdGlvbiBhbnl3YXksIHF1ZXVlcyBvbmUgbW9yZSBzaHV0ZG93biBwYXNzLiAgQSBzaHV0ZG93blxuK1x0ICogYWxyZWFkeSBpbiBmbGlnaHQgbGVhdmVzIHRoYXQgUkRTX0NPTk5fRVJST1IgYWxvbmUgd2hlbiBpdFxuK1x0ICogZmluaXNoZXM7IHRoZSBxdWV1ZWQgcGFzcyB0aGVuIGNvbXBsZXRlcyB0aGUgdHJhbnNpdGlvbiB0b1xuK1x0ICogUkRTX0NPTk5fRE9XTiBhbmQgdGVhcnMgZG93biBhbnl0aGluZyB0aGF0IGF0dGFjaGVkIHRvIHRoZVxuK1x0ICogcGF0aCBpbiB0aGUgbWVhbnRpbWUuXG4rXHQgKi9cbitcdGlmICghcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9DT05ORUNUSU5HLFxuK1x0XHRcdFx0ICAgICAgUkRTX0NPTk5fUkVTRVRUSU5HKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhcmRzX2Nvbm5fcGF0aF90cmFuc2l0aW9uKGNwLCBSRFNfQ09OTl9SRVNFVFRJTkcsXG4rXHRcdFx0XHQgICAgICBSRFNfQ09OTl9SRVNFVFRJTkcpKVxuK1x0XHRyZHNfY29ubl9wYXRoX2Ryb3AoY3AsIDApO1xuK1x0d2FpdF9ldmVudChjcC1cdTAwM2VjcF93YWl0cSxcbitcdFx0ICAgIXRlc3RfYW5kX3NldF9iaXRfbG9jayhSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbitcbitcdC8qIFJlYWQgdF9zb2NrIG9ubHkgd2hpbGUgb3duaW5nIFJEU19JTl9YTUlULCBuZXZlciBiZWZvcmUgdGhlXG4rXHQgKiB3YWl0OiB0aGUgdGVhcmRvd24gaW4gcmRzX2Nvbm5fc2h1dGRvd24oKSByZWxlYXNlcyB0aGUgb2xkXG4rXHQgKiBzb2NrZXQgYW5kIGNsZWFycyB0X3NvY2ssIHNvIGEgcG9pbnRlciBzYW1wbGVkIGVhcmxpZXIgY2FuXG4rXHQgKiBiZSBzdGFsZSBieSB0aGUgdGltZSB3ZSB3YWtlIHVwLiAgVGhlIHRlYXJkb3duIGhvbGRzIHRoZVxuK1x0ICogc2FtZSBsb2NrIHdoaWxlIGl0IGRvZXMgc28sIHNvIHdoYXQgd2UgcmVhZCBoZXJlIGNhbm5vdFxuK1x0ICogY2hhbmdlIHVuZGVyIHVzIHVudGlsIHdlIHJlbGVhc2UgaXQuXG4rXHQgKi9cbitcdG9zb2NrID0gdGMtXHUwMDNldF9zb2NrO1xuK1x0aWYgKCFvc29jaylcbitcdFx0Z290byBuZXdzb2NrO1xuK1xuK1x0LyogcmVzZXQgcmVjZWl2ZSBzaWRlIHN0YXRlIGZvciByZHNfdGNwX2RhdGFfcmVjdigpIGZvciBvc29jay5cbitcdCAqXG4rXHQgKiBUaGUgc3luYyBjYW5jZWxzIHdoaWxlIG93bmluZyBSRFNfSU5fWE1JVCByZWx5IG9uIGNwX3dxXG4rXHQgKiBiZWluZyBvcmRlcmVkOiBhIHRlYXJkb3duIGJsb2NrZWQgb24gdGhlIGJpdCBvY2N1cGllc1xuK1x0ICogY3Bfd3EncyBvbmx5IGV4ZWN1dGlvbiBzbG90LCBzbyBjcF9zZW5kX3cgYW5kIGNwX3JlY3ZfdyBhcmVcbitcdCAqIHBlbmRpbmcgYXQgbW9zdCBhbmQgdGhlIGNhbmNlbHMgbmV2ZXIgZmx1c2guICBOb3RoaW5nIGhlcmVcbitcdCAqIG1heSBmbHVzaCBvciB3YWl0IG9uIGNwX3dxIGl0c2VsZi5cbiBcdCAqL1xuLVx0YXRvbWljX3NldChcdTAwMjZjcC1cdTAwM2VjcF9zdGF0ZSwgUkRTX0NPTk5fUkVTRVRUSU5HKTtcbi1cdHdhaXRfZXZlbnQoY3AtXHUwMDNlY3Bfd2FpdHEsICF0ZXN0X2JpdChSRFNfSU5fWE1JVCwgXHUwMDI2Y3AtXHUwMDNlY3BfZmxhZ3MpKTtcbi1cdC8qIHJlc2V0IHJlY2VpdmUgc2lkZSBzdGF0ZSBmb3IgcmRzX3RjcF9kYXRhX3JlY3YoKSBmb3Igb3NvY2sgICovXG4gXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2Y3AtXHUwMDNlY3Bfc2VuZF93KTtcbiBcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZjcC1cdTAwM2VjcF9yZWN2X3cpO1xuIFx0bG9ja19zb2NrKG9zb2NrLVx1MDAzZXNrKTtcbkBAIC0xNzIsNiArMjE2LDkgQEAgdm9pZCByZHNfdGNwX3Jlc2V0X2NhbGxiYWNrcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLFxuIFx0bG9ja19zb2NrKHNvY2stXHUwMDNlc2spO1xuIFx0cmRzX3RjcF9zZXRfY2FsbGJhY2tzKHNvY2ssIGNwKTtcbiBcdHJlbGVhc2Vfc29jayhzb2NrLVx1MDAzZXNrKTtcbitcbitcdGNsZWFyX2JpdF91bmxvY2soUkRTX0lOX1hNSVQsIFx1MDAyNmNwLVx1MDAzZWNwX2ZsYWdzKTtcbitcdHdha2VfdXBfYWxsKFx1MDAyNmNwLVx1MDAzZWNwX3dhaXRxKTtcbiB9XG4gXG4gLyogQWRkIHRjIHRvIHJkc190Y3BfdGNfbGlzdCBhbmQgc2V0IHRjLVx1MDAzZXRfc29jay4gU2VlIGNvbW1lbnRzXG5kaWZmIC0tZ2l0IGEvbmV0L3Jkcy90Y3BfbGlzdGVuLmMgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xuaW5kZXggYTNkYjliMDU3MDg0ZC4uMTNmYTYwYzE5ODViYiAxMDA2NDRcbi0tLSBhL25ldC9yZHMvdGNwX2xpc3Rlbi5jXG4rKysgYi9uZXQvcmRzL3RjcF9saXN0ZW4uY1xuQEAgLTI5NSw3ICsyOTUsMTEgQEAgaW50IHJkc190Y3BfYWNjZXB0X29uZShzdHJ1Y3QgcmRzX3RjcF9uZXQgKnJ0bilcbiBcdGlmIChyc190Y3AtXHUwMDNldF9zb2NrKSB7XG4gXHRcdC8qIER1ZWxsaW5nIFNZTiBoYXMgYmVlbiBoYW5kbGVkIGluIHJkc190Y3BfYWNjZXB0X29uZSgpICovXG4gXHRcdHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKG5ld19zb2NrLCBjcCk7XG4tXHRcdC8qIHJkc19jb25uZWN0X3BhdGhfY29tcGxldGUoKSBtYXJrcyBSRFNfQ09OTl9VUCAqL1xuK1x0XHQvKiByZHNfY29ubmVjdF9wYXRoX2NvbXBsZXRlKCkgbWFya3MgUkRTX0NPTk5fVVAsIG9yLFxuK1x0XHQgKiBpZiBhIGNvbmN1cnJlbnQgc2h1dGRvd24gd29uIHRoZSBkdWVsLCBkcm9wcyB0aGVcbitcdFx0ICogcGF0aCBhZ2FpbiBhbmQgdGhlIHBhc3MgdGhhdCBkcm9wIHF1ZXVlcyByZWFwcyB0aGVcbitcdFx0ICogc29ja2V0IGluc3RhbGxlZCBhYm92ZS5cbitcdFx0ICovXG4gXHRcdHJkc19jb25uZWN0X3BhdGhfY29tcGxldGUoY3AsIFJEU19DT05OX1JFU0VUVElORyk7XG4gXHR9IGVsc2Uge1xuIFx0XHRyZHNfdGNwX3NldF9jYWxsYmFja3MobmV3X3NvY2ssIGNwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjQ4LjE4MjQ2MDA2MloiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDgyNzAzMDgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogUkRTIENvbm5lY3Rpb24gTGlmZWN5Y2xlIFN5bmNocm9uaXphdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIHByaW1hcmlseSBhIHN5bmNocm9uaXphdGlvbiBhbmQgY29uY3VycmVuY3kgZml4IHdpdGhpbiB0aGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBjb25uZWN0aW9uIGxpZmVjeWNsZSBtYW5hZ2VtZW50LiBJJ20gc2VlaW5nIGNoYW5nZXMgYWNyb3NzIHNldmVyYWwgZmlsZXM6IGBjb25uZWN0aW9uLmNgLCBgaWJfcmVjdi5jYCwgYHNlbmQuY2AsIGB0Y3AuY2AsIGFuZCBgdGNwX2xpc3Rlbi5jYC4gTXkgZXhwZXJ0IGV5ZSBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUgbW9kaWZpY2F0aW9ucyBpbnZvbHZpbmcgYXRvbWljIG9wZXJhdGlvbnMsIGJpdGxvY2tzLCBhbmQgd2FpdHF1ZXVlcywgd2hpY2ggc2NyZWFtIFwicmFjZSBjb25kaXRpb24gZml4LlwiXG5cblNwZWNpZmljYWxseSwgbGV0J3MgYnJlYWsgaXQgZG93bjpcblxuKiAgIGBjb25uZWN0aW9uLmNgOiBUaGUgcGF0Y2ggZWxlZ2FudGx5IHRyYW5zaXRpb25zIGZyb20gc2ltcGxlIGZsYWcgY2xlYXJzIHRvIHVzaW5nIGBjbGVhcl9iaXRgIHdpdGggYGNsZWFyX2JpdF91bmxvY2tgIHdpdGhpbiB0aGUgYHJkc19jb25uX3BhdGhfcmVzZXQoKWAgYW5kIGByZHNfY29ubl9zaHV0ZG93bigpYCBmdW5jdGlvbnMuIFRoaXMgaW5kaWNhdGVzIGEgY29uc2Npb3VzIGVmZm9ydCB0byBhdm9pZCBjbG9iYmVyaW5nIGNvbmN1cnJlbnQgYXRvbWljIG9wZXJhdGlvbnMgb24gdGhlIGBjcF9mbGFnc2AgZmllbGQsIGNydWNpYWwgaW4gYW55IGNvbmN1cnJlbnQgc3lzdGVtLiBUaGUgdXNlIG9mIGB0ZXN0X2FuZF9zZXRfYml0X2xvY2tgIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgZHVyaW5nIHNodXRkb3duIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRoZSBkaXNjb25uZWN0aW9uIHByb2Nlc3MuIFRoZSBzdGF0ZSB0cmFuc2l0aW9uIGFuZCBoYW5kbGluZyBvZiBkZWxheWVkIHdvcmsgc2VlbSBsaWtlIGEgdHlwaWNhbCBidWcgZml4IGR1cmluZyBjb25uZWN0aW9uIHRlYXJkb3duLlxuKiAgIGBpYl9yZWN2LmNgIGFuZCBgc2VuZC5jYDogVGhlIHJlcGxhY2VtZW50IG9mIGBjbGVhcl9iaXRgICsgYHNtcF9tYl9fYWZ0ZXJfYXRvbWljKClgIGFuZCBgd2FpdHF1ZXVlX2FjdGl2ZSgpYCB3aXRoIGBjbGVhcl9iaXRfdW5sb2NrKClgIGFuZCBgd3FfaGFzX3NsZWVwZXIoKWAgaW4gYHJlbGVhc2VfcmVmaWxsKClgIGFuZCBgcmVsZWFzZV9pbl94bWl0KClgIHJlc3BlY3RpdmVseSBpcyBhIGNsYXNzaWMgb3B0aW1pemF0aW9uIGFuZCBzaW1wbGlmaWNhdGlvbiwgd2hpbGUgbWFpbnRhaW5pbmcgc3luY2hyb25pemF0aW9uIGNvcnJlY3RuZXNzLCB0byBjaGVjayBpZiBhIHRhc2sgaXMgd2FpdGluZyBvbiB0aGF0IHF1ZXVlLlxuKiAgIGB0Y3AuY2A6IFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHRlc3RfYW5kX3NldF9iaXRfbG9ja2AgaW4gYHJkc190Y3BfcmVzZXRfY2FsbGJhY2tzKClgIGJlZm9yZSBhY2Nlc3NpbmcgYHRjLVx1MDAzZXRfc29ja2Agc3VnZ2VzdHMgYSBjcml0aWNhbCBmaXggZm9yIHNvY2tldCBzd2FwcGluZyBhZ2FpbnN0IHNlbmRlcnMgYW5kIHRlYXJkb3duIGluIGEgbXVsdGktdGhyZWFkZWQgb3IgaW50ZXJydXB0LWRyaXZlbiBjb250ZXh0LiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBzb2NrZXQgc3RhdGUgaXMgdmFsaWQgd2hlbiBiZWluZyB1c2VkLCBhbmQgYXZvaWRzIG90aGVyIHJhY2VzIG9uIGl0LlxuKiAgIGB0Y3BfbGlzdGVuLmNgOiBUaGUgY29tbWVudCB1cGRhdGUgaXMgaW5zaWduaWZpY2FudC5cblxuTm93LCBsZXQncyBtZXRob2RpY2FsbHkgYWRkcmVzcyB0aGUgcG90ZW50aWFsIHJpc2tzLiBNeSBwcmltYXJ5IGZvY3VzIGlzIGFsd2F5cyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgKEtNU0FOKSBvciBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZXMgKEtBU0FOLCBMT0NLREVQLCBldGMuKS5cblxuMS4gICoqVXNlciBTcGFjZSBJbnRlcmFjdGlvbjoqKiBUaGlzIHBhdGNoICpkb2Vzbid0KiB0b3VjaCBhbnkga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHZpYSBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluaywgb3Igc29ja2V0IG9wdGlvbnMuIFNvLCBubyBjb25jZXJucyB0aGVyZS5cbjIuICAqKlVuaW5pdGlhbGl6ZWQgVmFyaWFibGVzOioqIFRoZSBwYXRjaCBpc24ndCBpbnRyb2R1Y2luZyBuZXcgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGRlcGVuZGVudCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gRXZlcnl0aGluZyBJIHNlZSBpcyB3b3JraW5nIHdpdGggYXRvbWljIGZsYWdzIG9yIHByZS1leGlzdGluZyBmaWVsZHMgd2l0aGluIGByZHNfY29ubmVjdGlvbmAsIGByZHNfY29ubl9wYXRoYCwgb3IgYHJkc190Y3BfY29ubmVjdGlvbmAgb2JqZWN0cyB0aGF0IGFyZSBhc3N1bWVkIHRvIGJlIHByb3Blcmx5IGluaXRpYWxpemVkLlxuMy4gICoqRGF0YSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb246KiogSSdtIG5vdCBzZWVpbmcgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbiBvciBhbnkgY2hhbmdlcyB0aGF0IGNvdWxkIGxlYWQgdG8gc3Vic2VxdWVudCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS5cbjQuICAqKkJvdW5kcy9MZW5ndGggQ2hlY2tzOioqIFRoZSBwYXRjaCBkb2Vzbid0IG1vZGlmeSBhbnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgcG90ZW50aWFsbHkgaW50cm9kdWNlIGJ1ZmZlciBvdmVycnVucy5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBwYXRjaCBwcmltYXJpbHkgYWRkcmVzc2VzICpjb25jdXJyZW5jeSBhbmQgc3luY2hyb25pemF0aW9uIGlzc3VlcyosIHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zLCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIG9yIHBvdGVudGlhbCBzdGF0ZSBtYWNoaW5lIGRlc3luY2hyb25pemF0aW9uLiBUaGVzZSBhcmUgdGhlIGtpbmRzIG9mIGlzc3VlcyBkZXRlY3RlZCBieSB0b29scyBsaWtlIEtBU0FOLCBMT0NLREVQLCBhbmQgcG90ZW50aWFsbHkgZnVuY3Rpb25hbCB0ZXN0aW5nLiBJdCBpcyAqbm90KiByZWxhdGVkIHRvIEtNU0FOIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBXZSdyZSBsb29raW5nIGF0IHByb3RlY3RpbmcgYWdhaW5zdCBkYXRhIHJhY2VzIG9uIHNoYXJlZCBzdGF0ZS5cblxuVGhlIEtNU0FOIGRvY3VtZW50YXRpb24gaXMgY2xlYXI6IFwiVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cIiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMgYW5kIG15IGFuYWx5c2lzLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlLiBJJ20gY29tZm9ydGFibGUgaW4gc2F5aW5nIHRoaXMgcGF0Y2ggaXMgYSBnb29kIHRoaW5nOyB0aGUgc3luY2hyb25pemF0aW9uIGZpeGVzIGFyZSBjbGVhcmx5IGJlbmVmaWNpYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NzQsIk91dHB1dFRva2VucyI6MjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIyOjQ3OjU5LjAwOTQ5NDAxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVzb2x2ZXMgY29uY3VycmVuY3ksIHJhY2UgY29uZGl0aW9uLCBhbmQgc3RhdGUtbWFjaGluZSBzeW5jaHJvbml6YXRpb24gYnVncyBpbiB0aGUgUkRTIChSZWxpYWJsZSBEYXRhZ3JhbSBTb2NrZXRzKSBzdWJzeXN0ZW0gZHVyaW5nIGNvbm5lY3Rpb24gdGVhcmRvd24sIHJlc2V0LCBhbmQgZHVlbGxpbmcgU1lOIHJlc29sdXRpb24gKHNwZWNpZmljYWxseSBsb2NraW5nIGFuZCBiaXQtbWFuaXB1bGF0aW9uIG9mIFJEU19JTl9YTUlULCBSRFNfUkVDVl9SRUZJTEwsIGFuZCBSRFNfQ09OTl8qIHN0YXRlIHRyYW5zaXRpb25zKS5cXG5cXG4tIE5vIG5ldyBoZWFwL3N0YWNrIGFsbG9jYXRpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYWRkZWQgb3IgbW9kaWZpZWQuXFxuLSBObyBrZXJuZWwtdG8tdXNlciBjb3B5IG9wZXJhdGlvbnMgKGUuZy4sIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmssIGlvY3RsLCBnZXRzb2Nrb3B0KSBvciB1c2VyLWZhY2luZyBzdHJ1Y3RzIGFyZSB0b3VjaGVkLlxcbi0gTm8gYnVmZmVyIGxlbmd0aHMsIGJvdW5kcyBjaGVja3MsIG9yIHBheWxvYWQgcGFyc2luZyByb3V0aW5lcyBhcmUgYWx0ZXJlZCB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuLSBBbnkgY29uY3VycmVuY3kgYnVncywgdXNlLWFmdGVyLWZyZWUsIGRlYWRsb2Nrcywgb3IgbG9jayBvcmRlcmluZyBpc3N1ZXMgdGhhdCBjb3VsZCBhcmlzZSBmcm9tIHRoZXNlIGNoYW5nZXMgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIGZhY2lsaXRpZXMsIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlc29sdmVzIGNvbmN1cnJlbmN5LCByYWNlIGNvbmRpdGlvbiwgYW5kIHN0YXRlLW1hY2hpbmUgc3luY2hyb25pemF0aW9uIGJ1Z3MgaW4gdGhlIFJEUyAoUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cykgc3Vic3lzdGVtIGR1cmluZyBjb25uZWN0aW9uIHRlYXJkb3duLCByZXNldCwgYW5kIGR1ZWxsaW5nIFNZTiByZXNvbHV0aW9uIChzcGVjaWZpY2FsbHkgbG9ja2luZyBhbmQgYml0LW1hbmlwdWxhdGlvbiBvZiBSRFNfSU5fWE1JVCwgUkRTX1JFQ1ZfUkVGSUxMLCBhbmQgUkRTX0NPTk5fKiBzdGF0ZSB0cmFuc2l0aW9ucykuXFxuXFxuLSBObyBuZXcgaGVhcC9zdGFjayBhbGxvY2F0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGFkZGVkIG9yIG1vZGlmaWVkLlxcbi0gTm8ga2VybmVsLXRvLXVzZXIgY29weSBvcGVyYXRpb25zIChlLmcuLCBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rLCBpb2N0bCwgZ2V0c29ja29wdCkgb3IgdXNlci1mYWNpbmcgc3RydWN0cyBhcmUgdG91Y2hlZC5cXG4tIE5vIGJ1ZmZlciBsZW5ndGhzLCBib3VuZHMgY2hlY2tzLCBvciBwYXlsb2FkIHBhcnNpbmcgcm91dGluZXMgYXJlIGFsdGVyZWQgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5Llxcbi0gQW55IGNvbmN1cnJlbmN5IGJ1Z3MsIHVzZS1hZnRlci1mcmVlLCBkZWFkbG9ja3MsIG9yIGxvY2sgb3JkZXJpbmcgaXNzdWVzIHRoYXQgY291bGQgYXJpc2UgZnJvbSB0aGVzZSBjaGFuZ2VzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyBmYWNpbGl0aWVzLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ll6n[1] Phase: Succeeded StartedAt: 2026-08-28 22:48:10 +0000 UTC FinishedAt: 2026-08-28 22:48:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-28 22:48:10 +0000 UTC FinishedAt: 2026-08-28 22:48:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2] Phase: Succeeded StartedAt: 2026-08-28 22:48:10 +0000 UTC FinishedAt: 2026-08-29 02:26:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-28 22:48:10 +0000 UTC FinishedAt: 2026-08-29 02:26:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-28 22:48:10 +0000 UTC FinishedAt: 2026-08-28 22:48:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-28 22:48:10 +0000 UTC FinishedAt: 2026-08-28 22:48:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow7ll6n/series-workflow7ll6n-convert-artifact-1313075907/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-28 22:48:20 +0000 UTC FinishedAt: 2026-08-28 23:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-28 22:48:20 +0000 UTC FinishedAt: 2026-08-28 23:04:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*45265496-7355-4140-96d7-c1e50e835a7b,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-workflow7ll6n/series-workflow7ll6n-convert-artifact-1313075907/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": "43933830-4075-4d83-883f-1606bf027f5b", "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-workflow7ll6n/series-workflow7ll6n-build-action-2073521457/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-28 22:48:20 +0000 UTC FinishedAt: 2026-08-28 23:04:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*45265496-7355-4140-96d7-c1e50e835a7b,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-workflow7ll6n/series-workflow7ll6n-convert-artifact-1313075907/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": "43933830-4075-4d83-883f-1606bf027f5b", "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-workflow7ll6n/series-workflow7ll6n-build-action-2073521457/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-28 23:04:26 +0000 UTC FinishedAt: 2026-08-28 23:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-28 23:04:26 +0000 UTC FinishedAt: 2026-08-28 23:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-28 23:04:26 +0000 UTC FinishedAt: 2026-08-28 23:04:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-28 23:04:26 +0000 UTC FinishedAt: 2026-08-28 23:04:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow7ll6n/series-workflow7ll6n-convert-artifact-3137045626/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-28 23:04:36 +0000 UTC FinishedAt: 2026-08-28 23:06:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-28 23:04:36 +0000 UTC FinishedAt: 2026-08-28 23:06:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*43933830-4075-4d83-883f-1606bf027f5b,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-workflow7ll6n/series-workflow7ll6n-build-action-2073521457/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-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-28 23:06:44 +0000 UTC FinishedAt: 2026-08-28 23:06:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-28 23:06:44 +0000 UTC FinishedAt: 2026-08-28 23:06:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-28 23:06:44 +0000 UTC FinishedAt: 2026-08-28 23:23:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-28 23:06:44 +0000 UTC FinishedAt: 2026-08-28 23:23:14 +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:*45265496-7355-4140-96d7-c1e50e835a7b,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-workflow7ll6n/series-workflow7ll6n-convert-artifact-3137045626/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": "500357d3-b2cf-437d-ab6f-c9ef36067b7b", "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-workflow7ll6n/series-workflow7ll6n-build-action-2102797278/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-28 23:06:44 +0000 UTC FinishedAt: 2026-08-28 23:23:04 +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:*45265496-7355-4140-96d7-c1e50e835a7b,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-workflow7ll6n/series-workflow7ll6n-convert-artifact-3137045626/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": "500357d3-b2cf-437d-ab6f-c9ef36067b7b", "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-workflow7ll6n/series-workflow7ll6n-build-action-2102797278/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-28 23:23:14 +0000 UTC FinishedAt: 2026-08-28 23:23:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-28 23:23:14 +0000 UTC FinishedAt: 2026-08-28 23:23:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-28 23:23:14 +0000 UTC FinishedAt: 2026-08-28 23:25:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-28 23:23:14 +0000 UTC FinishedAt: 2026-08-28 23:25:09 +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:*500357d3-b2cf-437d-ab6f-c9ef36067b7b,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-workflow7ll6n/series-workflow7ll6n-build-action-2102797278/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-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-28 23:25:18 +0000 UTC FinishedAt: 2026-08-29 02:26:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-28 23:25:18 +0000 UTC FinishedAt: 2026-08-29 02:26:38 +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":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"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:*43933830-4075-4d83-883f-1606bf027f5b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*500357d3-b2cf-437d-ab6f-c9ef36067b7b,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-workflow7ll6n/series-workflow7ll6n-build-action-2073521457/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-workflow7ll6n/series-workflow7ll6n-build-action-2102797278/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-28 23:25:18 +0000 UTC FinishedAt: 2026-08-28 23:25:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-28 23:25:18 +0000 UTC FinishedAt: 2026-08-28 23:25:23 +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":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"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-workflow7ll6n/series-workflow7ll6n-convert-artifact-2970665391/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-28 23:25:18 +0000 UTC FinishedAt: 2026-08-28 23:25:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-28 23:25:18 +0000 UTC FinishedAt: 2026-08-28 23:25:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-28 23:25:18 +0000 UTC FinishedAt: 2026-08-28 23:25:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-28 23:25:28 +0000 UTC FinishedAt: 2026-08-29 02:26:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7ll6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rds_conn_shutdown","rds_send_xmit","rds_tcp_reset_callbacks","rds_tcp_accept_one","rds_ib_recv_refill"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4e15e89faac9f308baeb01f46c13a051814d2449","config_name":"upstream-apparmor-kasan.config","enable_configs":["RDS","RDS_TCP","RDS_RDMA","INFINIBAND","INFINIBAND_ADDR_TRANS"],"series_id":"f00fbdba-93f0-4a7f-817c-8a6edbed661c","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-28 23:25:28 +0000 UTC FinishedAt: 2026-08-29 02:26:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*43933830-4075-4d83-883f-1606bf027f5b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*500357d3-b2cf-437d-ab6f-c9ef36067b7b,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-workflow7ll6n/series-workflow7ll6n-build-action-2073521457/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-workflow7ll6n/series-workflow7ll6n-build-action-2102797278/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-workflow7ll6n/series-workflow7ll6n-convert-artifact-2970665391/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,}