Name: series-workflowsrn8j Phase: Succeeded StartedAt: 2026-08-16 07:11:46 +0000 UTC FinishedAt: 2026-08-16 11:41:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[0] Phase: Succeeded StartedAt: 2026-08-16 07:11:46 +0000 UTC FinishedAt: 2026-08-16 07:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[0].run-triage Phase: Succeeded StartedAt: 2026-08-16 07:11:46 +0000 UTC FinishedAt: 2026-08-16 07:59:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "ad6fcfce-e22b-4928-bc57-403e9345b7da" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "skb_tx_error", "skb_zerocopy", "ovs_dp_process_packet" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3R4X2Vycm9yJiMzNDssCiAgICAmIzM0O3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcmAgdG8gaWdub3JlIGNsb25lZCBza2JzLCBhcyB0aGVpciB6ZXJvLWNvcHkgc3RhdGUgKGluIGBza2Jfc2hpbmZvYCkgaXMgc2hhcmVkIGFtb25nIGNsb25lcy4gSXQgYWxzbyBhZGp1c3RzIHdoZXJlIGBza2JfdHhfZXJyb3JgIGlzIGNhbGxlZCBpbiBgc2tiX3plcm9jb3B5YCBhbmQgb3BlbnZzd2l0Y2ggZGF0YXBhdGguIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBpc3N1ZXMgd2l0aCB6ZXJvLWNvcHkgc3RhdGUgbWFuYWdlbWVudCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCB0eXBpY2FsbHkgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzLiBTdWNoIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2tiX3R4X2Vycm9yYCBpbiBjb3JlIG5ldHdvcmtpbmcgdG8gZG8gbm90aGluZyBmb3IgY2xvbmVkIHNrYnMsIGFuZCBjaGFuZ2VzIGl0cyB1c2FnZSBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGFuZCBPcGVuIHZTd2l0Y2ggcGF0aHMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIHdpdGggemVyb2NvcHkgc2ticy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNhNTRlMjY0ZjNkMTgzY2Q3NDUxOTNlNmQ2OTJjMWYyMDIzY2U0M2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwNzo1ODozNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCBiYTNkYmFjODBmYjQ5Li4wNDc3NmExMTIzMzQyIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtMTQxNywxMCAmIzQzOzE0MTcsMTMgQEAgRVhQT1JUX1NZTUJPTChza2JfZHVtcCk7XG4gICpcbiAgKlx0UmVwb3J0IHhtaXQgZXJyb3IgaWYgYSBkZXZpY2UgY2FsbGJhY2sgaXMgdHJhY2tpbmcgdGhpcyBza2IuXG4gICpcdHNrYiBtdXN0IGJlIGZyZWVkIGFmdGVyd2FyZHMuXG4mIzQzOyAqXG4mIzQzOyAqXHREb2VzIG5vdGhpbmcgZm9yIGEgY2xvbmVkIHNrYjogdGhlIHplcm9jb3B5IHN0YXRlIGxpdmVzIGluXG4mIzQzOyAqXHRza2Jfc2hpbmZvKCksIHdoaWNoIHRoZSBjbG9uZXMgc2hhcmUuXG4gICovXG4gdm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRpZiAoc2tiKSB7XG4mIzQzO1x0aWYgKHNrYiBcdTAwMjZcdTAwMjYgIXNrYl9jbG9uZWQoc2tiKSkge1xuIFx0XHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcbiBcdFx0c2tiX3pjb3B5X2NsZWFyKHNrYiwgdHJ1ZSk7XG4gXHR9XG5AQCAtMzkwNywxMCAmIzQzOzM5MTAsOSBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG4gXG4gXHRza2JfbGVuX2FkZCh0bywgbGVuICYjNDM7IHBsZW4pO1xuIFxuLVx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKSB7XG4tXHRcdHNrYl90eF9lcnJvcihmcm9tKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuJiM0MztcbiBcdHNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBza2Jfc2hpbmZvKGZyb20pLVx1MDAzZW5yX2ZyYWdzOyBpJiM0MzsmIzQzOykge1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGFlNjliMmNhYmFiOWUuLmZmZjc1YzNlZWQxMTYgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0yODUsNiAmIzQzOzI4NSw3IEBAIHZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxuIFx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdHNrYl90eF9lcnJvcihza2IpO1xuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNjAxLDggJiM0Mzs2MDIsNiBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGVyciA9IGdlbmxtc2dfdW5pY2FzdChvdnNfZHBfZ2V0X25ldChkcCksIHVzZXJfc2tiLCB1cGNhbGxfaW5mby1cdTAwM2Vwb3J0aWQpO1xuIFx0dXNlcl9za2IgPSBOVUxMO1xuIG91dDpcbi1cdGlmIChlcnIpXG4tXHRcdHNrYl90eF9lcnJvcihza2IpO1xuIFx0Y29uc3VtZV9za2IodXNlcl9za2IpO1xuIFx0Y29uc3VtZV9za2IobnNrYik7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3R4X2Vycm9yJiMzNDssCiAgICAmIzM0O3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl90eF9lcnJvcmAgaW4gY29yZSBuZXR3b3JraW5nIHRvIGRvIG5vdGhpbmcgZm9yIGNsb25lZCBza2JzLCBhbmQgY2hhbmdlcyBpdHMgdXNhZ2UgaW4gYHNrYl96ZXJvY29weWAgYW5kIE9wZW4gdlN3aXRjaCYjMzk7cyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBhbmQgT3BlbiB2U3dpdGNoIHBhdGhzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciB3aXRoIHplcm9jb3B5IHNrYnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYTU0ZTI2NGYzZDE4M2NkNzQ1MTkzZTZkNjkyYzFmMjAyM2NlNDNjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMDc6NTg6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IGJhM2RiYWM4MGZiNDkuLjA0Nzc2YTExMjMzNDIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC0xNDE3LDEwICYjNDM7MTQxNywxMyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTsKICAqCiAgKglSZXBvcnQgeG1pdCBlcnJvciBpZiBhIGRldmljZSBjYWxsYmFjayBpcyB0cmFja2luZyB0aGlzIHNrYi4KICAqCXNrYiBtdXN0IGJlIGZyZWVkIGFmdGVyd2FyZHMuCiYjNDM7ICoKJiM0MzsgKglEb2VzIG5vdGhpbmcgZm9yIGEgY2xvbmVkIHNrYjogdGhlIHplcm9jb3B5IHN0YXRlIGxpdmVzIGluCiYjNDM7ICoJc2tiX3NoaW5mbygpLCB3aGljaCB0aGUgY2xvbmVzIHNoYXJlLgogICovCiB2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWlmIChza2IpIHsKJiM0MzsJaWYgKHNrYiAmYW1wOyZhbXA7ICFza2JfY2xvbmVkKHNrYikpIHsKIAkJc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7CiAJCXNrYl96Y29weV9jbGVhcihza2IsIHRydWUpOwogCX0KQEAgLTM5MDcsMTAgJiM0MzszOTEwLDkgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQogCiAJc2tiX2xlbl9hZGQodG8sIGxlbiAmIzQzOyBwbGVuKTsKIAotCWlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkgewotCQlza2JfdHhfZXJyb3IoZnJvbSk7CiYjNDM7CWlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQomIzQzOwogCXNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2tiX3NoaW5mbyhmcm9tKS0mZ3Q7bnJfZnJhZ3M7IGkmIzQzOyYjNDM7KSB7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCmluZGV4IGFlNjliMmNhYmFiOWUuLmZmZjc1YzNlZWQxMTYgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCkBAIC0yODUsNiAmIzQzOzI4NSw3IEBAIHZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KQogCQkJY29uc3VtZV9za2Ioc2tiKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgomIzQzOwkJCXNrYl90eF9lcnJvcihza2IpOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlicmVhazsKIAkJfQpAQCAtNjAxLDggJiM0Mzs2MDIsNiBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAllcnIgPSBnZW5sbXNnX3VuaWNhc3Qob3ZzX2RwX2dldF9uZXQoZHApLCB1c2VyX3NrYiwgdXBjYWxsX2luZm8tJmd0O3BvcnRpZCk7CiAJdXNlcl9za2IgPSBOVUxMOwogb3V0OgotCWlmIChlcnIpCi0JCXNrYl90eF9lcnJvcihza2IpOwogCWNvbnN1bWVfc2tiKHVzZXJfc2tiKTsKIAljb25zdW1lX3NrYihuc2tiKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIFBhY2tldCBIYW5kbGluZyBDaGFuZ2VzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgaG93IHdlIGhhbmRsZSB0cmFuc21pdCBlcnJvcnMsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBuZXR3b3JrIGJ1ZmZlcnMgKGBza2JgcykuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBpdCYjMzk7cyBtb2RpZnlpbmcgYHNrYl90eF9lcnJvcmAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCB0byBlZmZlY3RpdmVseSBkbyBub3RoaW5nIGZvciBjbG9uZWQgU0tCcy4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2sgYXQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdC4gSXQgYWxzbyBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyByZW1vdmluZyBgc2tiX3R4X2Vycm9yKGZyb20pYCBjYWxscyBmcm9tIGBza2JfemVyb2NvcHlgIGluIHRoZSBzYW1lIGZpbGUgYW5kIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLCBhbmQgYWRkaW5nIGBza2JfdHhfZXJyb3Ioc2tiKWAgdG8gYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIHdoaWNoIGlzIGFsc28gaW4gdGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCBjb2RlLgoKVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBhbmQgT3BlbiB2U3dpdGNoLCB3aGljaCBpcyBhIGtleSBzaWduYWwgdGhhdCB0aGlzIGlzIGEgcGF0Y2ggdGhhdCYjMzk7cyBwb3RlbnRpYWxseSBpbXBhY3RmdWwgYW5kIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgcmVncmVzc2lvbiBidWdzLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSBPcGVuIHZTd2l0Y2ggY29uZmlndXJhdGlvbiwganVzdCB0byBiZSBzdXJlLiBBbHJpZ2h0LCBgQ09ORklHX09QRU5WU1dJVENIYCBpbiBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIHdpbGwgdGVsbCB1cyBpZiBpdCYjMzk7cyBlbmFibGVkLiBUaGUgY29yZSBuZXR3b3JraW5nIGJpdHMgYXJlIGFsd2F5cyBlbmFibGVkLCBzbyB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4KCkkmIzM5O20gemVyb2luZyBpbiBvbiBhIGZldyBjcml0aWNhbCBzeW1ib2xzIGhlcmU6IGBza2JfdHhfZXJyb3JgLCBgc2tiX3plcm9jb3B5YCwgYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIEkgbmVlZCB0byB2ZXJpZnkgdGhlaXIgdmlzaWJpbGl0eSB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgbGlua2FnZSBpc3N1ZXMgb3Igc3VycHJpc2VzLiBTZWVtcyBsaWtlIGBza2JfdHhfZXJyb3JgLCBgc2tiX3plcm9jb3B5YCwgYW5kIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIGFyZSBhbGwgbm9uLXN0YXRpYywgc28gdGhlIGNoYW5jZXMgYXJlIHRoYXQgYEVYUE9SVF9TWU1CT0woc2tiX3R4X2Vycm9yKWAgaXMgaW4gcGxhY2UuIEJ1dCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIEhvd2V2ZXIsIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpcyBzdGF0aWMuIFNvLCBpdCBtYXkgbm90IGJlIGEgZ29vZCBmb2NhbCBwb2ludC4KCkkgc2hvdWxkIGNoZWNrIHRoZSBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgIGZpbGUgZm9yIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBhcyB3ZWxsLiBZdXAsIGl0JiMzOTtzIHN0YXRpYy4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgc2tiX3R4X2Vycm9yYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIGFuZCBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgc2tiX3R4X2Vycm9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9MTQxMj1FWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNDIzLSAqL1xubmV0L2NvcmUvc2tidWZmLmM6MTQyNDp2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvc2tidWZmLmMtMTQyNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gdGhlIEtlcm5lbCBOZXR3b3JraW5nIENvZGUqKgoKT2theSwgc28gYHNrYl90eF9lcnJvcmAgaXMgZXhwb3J0ZWQg4oCTIHRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBhIHJlbGF0ZWQgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBgc2tiX3plcm9jb3B5YC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoZXNlIGFyZSBsaW5rZWQgc29tZWhvdy4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCAqaG93KiB0aGV5IGludGVyYWN0LCBpZiB0aGV5IGRvLiBUaGlzIGNvdWxkIGJlIGFib3V0IGVycm9yIGhhbmRsaW5nIGluIHplcm8tY29weSBzY2VuYXJpb3MsIG9yIG1heWJlIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudC4gUmVnYXJkbGVzcywgYHNrYl96ZXJvY29weWAgaXMgdGhlIG5leHQgbG9naWNhbCBmdW5jdGlvbiB0byBpbnZlc3RpZ2F0ZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IHNrYl96ZXJvY29weSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jPTE5MTM9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTQtXG5uZXQvY29yZS9za2J1ZmYuYzoxOTE1OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMTkxNi1cdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTcyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgc2tiX3plcm9jb3B5YCoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBza2JfemVyb2NvcHlgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0IGxpdmVzIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIEdvb2QsIHRoYXQgbmFycm93cyB0aGUgc2VhcmNoIGNvbnNpZGVyYWJseS4gTGV0JiMzOTtzIHB1bGwgdXAgdGhlIGRlZmluaXRpb24uIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBwYXJzZSB0aHJvdWdoIHRoZSBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBpbnRlbnQuIEhvcGVmdWxseSwgdGhlIGNvbW1lbnRzIGFyZSBjbGVhciBhbmQgY29uY2lzZSwgYW5kIHRoZSBjb2RlIGZvbGxvd3Mgc3RhbmRhcmQga2VybmVsIGNvZGluZyBjb252ZW50aW9ucyAtIGxldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZGlzc2VjdC4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhpcyB6ZXJvLWNvcHkgbWVjaGFuaXNtIHdvcmtzIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgc2tfYnVmZiBsaWZlY3ljbGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBkYXRhIHJhY2VzIGFuZCB0aGVpciBtaXRpZ2F0aW9ucy4gT2YgcGFydGljdWxhciBpbnRlcmVzdCBpcyB0aGUgaW50ZXJwbGF5IHdpdGggcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBidWZmZXIgbWFuYWdlbWVudCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGFuZCBETUEuIEkmIzM5O2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgbG9ja2luZyBwYXR0ZXJucyBvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgZGF0YSBmbG93LCBlc3BlY2lhbGx5IHRoZSBjb3B5LW9uLXdyaXRlIGFzcGVjdHMsIGlzIGNydWNpYWwgZm9yIGFzc2Vzc2luZyBpdHMgb3ZlcmFsbCBlZmZpY2llbmN5IGFuZCBwb3RlbnRpYWwgZHJhd2JhY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl96ZXJvY29weVxcKHN0cnVjdCBza19idWZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9Mzg3OD1pbnRcbm5ldC9jb3JlL3NrYnVmZi5jOjM4Nzk6c2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxubmV0L2NvcmUvc2tidWZmLmMtMzg4MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM3MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBgc2tiX3plcm9jb3B5YCBFeHBvcnQgU3RhdHVzKioKCkFscmlnaHQsIHRoZSBjb2RlIHNuaXBwZXQgaW4gZnJvbnQgb2YgbWUgaXMgYGludCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZnVuY3Rpb24sIGBza2JfemVyb2NvcHlgLCBpcyBhY3R1YWxseSBleHBvcnRlZCBhbmQgYWNjZXNzaWJsZSBmb3IgdXNlLiBHaXZlbiB0aGlzIGlzIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLCBpdCYjMzk7cyBsaWtlbHkgcGFydCBvZiB0aGUga2VybmVsJiMzOTtzIGludGVybmFsIEFQSS4gSG93ZXZlciwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgZXhwb3J0ZWQg4oCTIGVpdGhlciB0aHJvdWdoIGEgc3ltYm9sIHRhYmxlIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtIOKAkyBzbyB0aGF0IGl0JiMzOTtzIGF2YWlsYWJsZSB0byBtb2R1bGVzIGFuZCB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIGlmIHRoYXQgaXMgdGhlIHVzZSBjYXNlLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIHJlYWRpbHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZyb20gbXkgY3VycmVudCBjb250ZXh0LCBvciB3aWxsIEkgbmVlZCB0byBqdW1wIHRocm91Z2ggaG9vcHMgbGlrZSBjYWxsaW5nIGl0IGludGVybmFsbHkgdG8gYSBzcGVjaWZpYyBkZXZpY2UgZHJpdmVyIGZ1bmN0aW9uLiBJIG5lZWQgdG8ga25vdyB0aGUgdmlzaWJpbGl0eSBvZiB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipza2JfemVyb2NvcHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz0xOTE1PWludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTItfVxubmV0L2NvcmUvc2tidWZmLmM6MTk1MzpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0pO1xubmV0L2NvcmUvc2tidWZmLmMtMTk1NC1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0zODQxPXNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTctfVxubmV0L2NvcmUvc2tidWZmLmM6Mzg1ODpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XG5uZXQvY29yZS9za2J1ZmYuYy0zODU5LVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTM4Nzk9c2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM5MzQtfVxubmV0L2NvcmUvc2tidWZmLmM6MzkzNTpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xubmV0L2NvcmUvc2tidWZmLmMtMzkzNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk4NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBJbnZlc3RpZ2F0aW9uOiBgc2tiX3plcm9jb3B5YCAmYW1wOyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCoqCgpBbHJpZ2h0LCBzbyBgc2tiX3plcm9jb3B5YCAqaXMqIGV4cG9ydGVkLCBjb25maXJtZWQuIFRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGJyb2FkZXIgZGF0YSBwYXRoIHdpdGhpbiBPVlMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBvdXIgY3VycmVudCBwcm9ibGVtLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGVlcGx5IGV4YW1pbmUgdGhlIGludGVybmFscyBvZiBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgbGluY2hwaW4uIFVuZGVyc3RhbmRpbmcgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgU0tCLCBob3cgaXQgaGFuZGxlcyBwYWNrZXQgYnVmZmVycywgYW5kIHdoZXRoZXIgaXQmIzM5O3MgKnV0aWxpemluZyogYHNrYl96ZXJvY29weWAgKG9yICpjb3VsZCogdXRpbGl6ZSBpdCkgaXMgZ29pbmcgdG8gYmUga2V5IHRvIHdoYXRldmVyIEkgYW0gdHJ5aW5nIHRvIGFjaGlldmUuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgZmxvdywgc2NydXRpbml6ZSBpdHMgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbG9vayBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpbmVmZmljaWVuY2llcyByZWxhdGVkIHRvIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMsIGJlY2F1c2UgaWYgYHNrYl96ZXJvY29weWAgaXMgYXZhaWxhYmxlLCBpdCB3b3VsZCBzZWVtIHJlYXNvbmFibGUgdG8gY29uc2lkZXIgZW1wbG95aW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yMzM9dm9pZCBvdnNfZHBfZGV0YWNoX3BvcnQoc3RydWN0IHZwb3J0ICpwKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0NC0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2suICovXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyNDU6dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDE2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkNvbnNpZGVyaW5nIEV4cG9ydGluZyoqCgpBbHJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaXMsICYjMzQ7SXMgaXQgZXhwb3J0ZWQ/JiMzNDsgVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBpdC4gV2UgbmVlZCB0byBpbW1lZGlhdGVseSBkZWZpbmUgJiMzNDtpdC4mIzM0OyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNwZWNpZmljIGRhdGFzZXQsIGEgbW9kZWwsIHRoZSBvdXRwdXQgb2YgYSBwcm9jZXNzLCBvciBhIG1vcmUgYWJzdHJhY3QgY29uY2VwdCBsaWtlIGEgY2FwYWJpbGl0eSBvciBhIHByb2R1Y3Q/IFRoZSBjb250ZXh0IGlzIGNydWNpYWwuIEFzc3VtaW5nIHdlIGhhdmUgdGhhdCBjb250ZXh0LCB0aGUgbmV4dCBsZXZlbCBvZiBncmFudWxhcml0eSBkZXBlbmRzIGVudGlyZWx5IG9uIHRoZSBmcmFtZXdvcmsgc3Vycm91bmRpbmcgaXQuIAoKSSYjMzk7bSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHZhcmlvdXMgc3RhZ2VzLiBXZSBjYW4mIzM5O3QganVzdCBzbGFwIGEgJiMzNDt5ZXMmIzM0OyBvciAmIzM0O25vJiMzNDsgb24gdGhpcy4gV2hhdCBkb2VzIGV4cG9ydGluZyAqbWVhbiogaW4gdGhpcyBzY2VuYXJpbz8gSXMgaXQgYSBzaW1wbGUgZGF0YSBkdW1wLCBvciBhIGZvcm1hbGl6ZWQgcHJvY2VzcyB3aXRoIHZlcnNpb25pbmcsIG1ldGFkYXRhLCBhbmQgc2VjdXJpdHkgaW1wbGljYXRpb25zPyBUaGUgbWV0aG9kIG9mIHRyYW5zZmVyIGlzIGFsc28gY3JpdGljYWwuIFJFU1QgQVBJPyBGaWxlIHRyYW5zZmVyIHByb3RvY29sPyBTdHJlYW1pbmc/IFRoYXQgYWxvbmUgZHJpdmVzIHRoZSBjb252ZXJzYXRpb24gZG93biBhIHBhcnRpY3VsYXIgcGF0aC4KClRoZW4sIHRoZSBkZXN0aW5hdGlvbiBiZWNvbWVzIHRoZSBuZXh0IGNyaXRpY2FsIHBvaW50LiBJcyBpdCBhIHdlbGwtZGVmaW5lZCBleHRlcm5hbCBzeXN0ZW0sIGFub3RoZXIgaW50ZXJuYWwgbW9kdWxlLCBvciBhIGNvbGxlY3Rpb24gb2YgZGlzcGFyYXRlIGNvbnN1bWVycz8gVGhlIGV4cGVjdGVkIGZvcm1hdCBhbmQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSB0YXJnZXQgc3lzdGVtIHdpbGwgYmUgYSBtYWpvciBkcml2ZXIgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBJcyBpdCBhIGxlZ2FjeSBzeXN0ZW0sIGFuIGluZHVzdHJ5IHN0YW5kYXJkLCBvciBhIGN1dHRpbmcgZWRnZSBwbGF0Zm9ybT8gVGhlIGFuc3dlciB0byB0aGlzIGlzIHRoZSBiaWdnZXN0IGlzc3VlLiBJdCBtYXkgYmUgdGhhdCB0aGVyZSBhcmUgbm8gc3RhbmRhcmQgZXhwb3J0IG9wdGlvbnMuCgpUaGUgJiMzNDtpcyBpdCYjMzQ7IHBhcnQgYWxzbyBzdWJ0bHkgc3VnZ2VzdHMgYSBwcmVzZW50LXRlbnNlIGNvbmNlcm4uIElzIHRoaXMgYSBuZXcgcmVxdWlyZW1lbnQ/IE9yIGhhcyBpdCBhbHdheXMgYmVlbiBzbz8gSXMgaXQgYSBjdXJyZW50IGZ1bmN0aW9uLCBvciBqdXN0IGEgY29uY2VwdD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiAqbm90KiBleHBvcnRpbmc/IFBvdGVudGlhbCByZXZlbnVlIGxvc3MsIGxhY2sgb2YgaW50ZXJvcGVyYWJpbGl0eSwgb3IganVzdCBhIHdhc3RlZCBvcHBvcnR1bml0eSB0byBsZXZlcmFnZSB0aGUgdmFsdWUgb2Ygb3VyIHdvcms/IAoKU28sIHVsdGltYXRlbHksIGFuc3dlcmluZyB0aGlzIHNpbXBsZSBxdWVzdGlvbiByZXF1aXJlcyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhlICp3aGF0KiwgdGhlICpob3cqLCB0aGUgKndoZXJlKiwgYW5kIHRoZSAqd2h5Ki4gSXQmIzM5O3MgcmFyZWx5IGEgc3RyYWlnaHRmb3J3YXJkIGJpbmFyeSByZXNwb25zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4ODEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGlubmVyIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIE5vbi1TdGF0aWMsIEludGVybmFsIERhdGFwYXRoIEZ1bmN0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBmdW5jdGlvbiBJJiMzOTttIGxvb2tpbmcgYXQgaXNuJiMzOTt0ICpleHBvcnRlZCosIHdoaWNoIGlzIHRoZSBmaXJzdCBjbHVlLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGUgbW9kdWxlIG9yIGxpYnJhcnkgaXQgYmVsb25ncyB0by4gQnV0IHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKm5vbi1zdGF0aWMqIGlzIGludGVyZXN0aW5nLiBJdCYjMzk7cyBub3QgbGltaXRlZCB0byB0aGlzIGZpbGUsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXQgY291bGQgYmUgY2FsbGVkIGZyb20gb3RoZXIgZmlsZXMgaW4gdGhlIHByb2plY3QuCgpHaXZlbiB0aGF0IGl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIHBhY2tldCBwcm9jZXNzaW5nLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZXhhbWluZSB0aGUgZnVuY3Rpb24gYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZGF0YXBhdGgsIGhvdyBwYWNrZXRzIGFyZSBoYW5kbGVkLCBhbmQgd2hvIG1pZ2h0IGJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hhdCYjMzk7cyB0aGUgZGF0YSBmbG93PyBBbmQgaG93IGRvZXMgdGhpcyBmdW5jdGlvbiBmaXQgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgb2YgT3BlbiB2U3dpdGNoPyBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgdXNhZ2Ugd2l0aGluIHRoYXQgZmlsZSB0byBzZWUgd2hlcmUgZWxzZSBpdCBpcyB1c2VkIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGZ1bmN0aW9uJiMzOTtzIG5vbi1zdGF0aWMgc3RhdHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdWV1ZV91c2Vyc3BhY2VfcGFja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MTI3PXN0YXRpYyBpbnQgcXVldWVfZ3NvX3BhY2tldHMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzAtXHRcdFx0ICAgICB1aW50MzJfdCBjdXRsZW4pO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTMxOnN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqLFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTMyLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0zMzA9aW50IG92c19kcF91cGNhbGwoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zNDYtXHRpZiAoIXNrYl9pc19nc28oc2tiKSlcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjM0NzpcdFx0ZXJyID0gcXVldWVfdXNlcnNwYWNlX3BhY2tldChkcCwgc2tiLCBrZXksIHVwY2FsbF9pbmZvLCBjdXRsZW4pO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzQ4LVx0ZWxzZVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTM2Nz1zdGF0aWMgaW50IHF1ZXVlX2dzb19wYWNrZXRzKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzk3LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6Mzk4Olx0XHRlcnIgPSBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KGRwLCBza2IsIGtleSwgdXBjYWxsX2luZm8sIGN1dGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zOTktXHRcdGlmIChlcnIpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDQyPXN0YXRpYyB2b2lkIHBhZF9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy00NTEtXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo0NTI6c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy00NTMtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzI4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgU3RhdGljIE5hdHVyZSBhbmQgS2V5IFN5bWJvbHMqKgoKQWxyaWdodCwgdGhpcyBmZWVscyBzdGF0aWMg4oCTIG5vIGR5bmFtaWMgZWxlbWVudHMgdG8gaW1tZWRpYXRlbHkgZ3JhYiBteSBhdHRlbnRpb24uIE15IGluaXRpYWwgYW5hbHlzaXMgaXMgemVyb2luZyBpbiBvbiBhIGZldyBjcnVjaWFsIHN5bWJvbHM6IGBza2JfdHhfZXJyb3JgLCBgc2tiX3plcm9jb3B5YCwgYW5kIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaG9zZSBhcmUgbXkgb2J2aW91cyBzdGFydGluZyBwb2ludHMuIFRoZSBjb250ZXh0IHBvaW50cyB0byBgT1BFTlZTV0lUQ0hgIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBhY2tldCBwcm9jZXNzaW5nIHdpdGhpbiBhbiBPcGVuIHZTd2l0Y2ggZW52aXJvbm1lbnQuIFRoZSBwcmVzZW5jZSBvZiBgc2tiX3R4X2Vycm9yYCBhbmQgYHNrYl96ZXJvY29weWAgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgdHJhbnNtaXNzaW9uIGVycm9ycyB3aXRoaW4gYW4gYHNrYmAsIHBvdGVudGlhbGx5IHplcm8tY29weSBvcHRpbWl6YXRpb25zLCBvciBib3RoLiBOb3cgYG92c19kcF9wcm9jZXNzX3BhY2tldGAuLi4gdGhhdCYjMzk7cyB0aGUgY29yZS4gTXkgaW5zdGluY3QgaXMgdGhhdCB3ZSBhcmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIGRhdGEgcGF0aCBwYWNrZXQgcHJvY2Vzc2luZyBpbnRlcmFjdGlvbi4KCk15IG5leHQgbW92ZT8gSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBPUEVOVlNXSVRDSGAgaGFzIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgd29ydGggbm90aW5nLiBJdCBpcyB1bmxpa2VseSB0aGF0IGFueXRoaW5nIEkgc2VlIHRoZXJlIHdpbGwgYmUgb2YgaW1tZW5zZSBoZWxwLCBidXQgaW4gdGhlIGNvdXJzZSBvZiBhbiBpbnZlc3RpZ2F0aW9uLCB5b3UgbXVzdCBzdGFydCBzb21ld2hlcmUuIE15IGdvYWwgd2lsbCBiZSB0byBkZXZlbG9wIGEgbW9yZSBpbmZvcm1lZCBwZXJzcGVjdGl2ZSwgc28gdGhhdCBJIGNhbiBzZWUgdGhlIGlzc3VlIGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9QRU5WU1dJVENIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDMtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTgtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY5OmNvbmZpZyBPUEVOVlNXSVRDSF9HRU5FVkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdlbmV2ZSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzcwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgT3BlbiB2U3dpdGNoIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBPcGVuIHZTd2l0Y2ggdG9kYXkuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGFsd2F5cyB0byBzdGFydCB3aXRoIGEgZGVwZW5kZW5jeSBhbmFseXNpcy4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgYXJjaGl0ZWN0dXJlLCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBuZXR3b3JraW5nIGVjb3N5c3RlbS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIHRoaW5nICpyZWFsbHkqIHJlbGllcyBvbiwgZG93biB0byB0aGUgY29yZSBsaWJyYXJpZXMgYW5kIGtlcm5lbCBtb2R1bGVzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBzcGVjaWZpYyB2ZXJzaW9ucyBvZiBEUERLPyBEb2VzIGl0IGhlYXZpbHkgbGVhbiBvbiBzcGVjaWZpYyBrZXJuZWwgZmVhdHVyZXMsIGxpa2UgbmFtZXNwYWNlcyBvciBlQlBGPyBBbmQgYXJlIHRoZXJlIGFueSBleHRlcm5hbCBsaWJyYXJpZXMgdGhhdCBhcmUgY3JpdGljYWwgZm9yIGl0cyBvcGVyYXRpb24sIG9yIGFyZSB0aGVyZSBhbnkgdnVsbmVyYWJpbGl0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5jbHVkZWQgbGlicmFyaWVzPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBzeXN0ZW0gYW5kIGl0cyB3ZWFrIHBvaW50cy4gSXQmIzM5O3MgdGltZSB0byBzdGFydCBwZWVsaW5nIGJhY2sgdGhlIGxheWVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE9wZW4gdlN3aXRjaFxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgT1BFTlZTV0lUQ0hcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgXFxcbiAgMTA6XHRcdFx0ICAgKE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFx1MDAyNlx1MDAyNiBcXFxuICAxMTpcdFx0XHRcdFx0ICAgICAoIU5GX05BVCB8fCBORl9OQVQpIFx1MDAyNlx1MDAyNiBcXFxuICAxMjpcdFx0XHRcdFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxuICAxMzpcdFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXG4gIDE0Olx0XHRzZWxlY3QgTVBMU1xuICAxNTpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiAgMTY6XHRcdHNlbGVjdCBORVRfTVBMU19HU09cbiAgMTc6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAgMTg6XHRcdHNlbGVjdCBORVRfTlNIXG4gIDE5Olx0XHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcbiAgMjA6XHRcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBPcGVuIHZTd2l0Y2ggaXMgYSBtdWx0aWxheWVyIEV0aGVybmV0IHN3aXRjaCB0YXJnZXRlZCBhdCB2aXJ0dWFsaXplZFxuICAyMzpcdFx0ICBlbnZpcm9ubWVudHMuICBJbiBhZGRpdGlvbiB0byBzdXBwb3J0aW5nIGEgdmFyaWV0eSBvZiBmZWF0dXJlc1xuICAyNDpcdFx0ICBleHBlY3RlZCBpbiBhIHRyYWRpdGlvbmFsIGhhcmR3YXJlIHN3aXRjaCwgaXQgZW5hYmxlcyBmaW5lLWdyYWluZWRcbiAgMjU6XHRcdCAgcHJvZ3JhbW1hdGljIGV4dGVuc2lvbiBhbmQgZmxvdy1iYXNlZCBjb250cm9sIG9mIHRoZSBuZXR3b3JrLiAgVGhpc1xuICAyNjpcdFx0ICBjb250cm9sIGlzIHVzZWZ1bCBpbiBhIHdpZGUgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMgYnV0IGlzXG4gIDI3Olx0XHQgIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgaW4gbXVsdGktc2VydmVyIHZpcnR1YWxpemF0aW9uIGRlcGxveW1lbnRzLFxuICAyODpcdFx0ICB3aGljaCBhcmUgb2Z0ZW4gY2hhcmFjdGVyaXplZCBieSBoaWdobHkgZHluYW1pYyBlbmRwb2ludHMgYW5kIHRoZVxuICAyOTpcdFx0ICBuZWVkIHRvIG1haW50YWluIGxvZ2ljYWwgYWJzdHJhY3Rpb25zIGZvciBtdWx0aXBsZSB0ZW5hbnRzLlxuICAzMDpcdFxuICAzMTpcdFx0ICBUaGUgT3BlbiB2U3dpdGNoIGRhdGFwYXRoIHByb3ZpZGVzIGFuIGluLWtlcm5lbCBmYXN0IHBhdGggZm9yIHBhY2tldFxuICAzMjpcdFx0ICBmb3J3YXJkaW5nLiAgSXQgaXMgY29tcGxlbWVudGVkIGJ5IGEgdXNlcnNwYWNlIGRhZW1vbiwgb3ZzLXZzd2l0Y2hkLFxuICAzMzpcdFx0ICB3aGljaCBpcyBhYmxlIHRvIGFjY2VwdCBjb25maWd1cmF0aW9uIGZyb20gYSB2YXJpZXR5IG9mIHNvdXJjZXMgYW5kXG4gIDM0Olx0XHQgIHRyYW5zbGF0ZSBpdCBpbnRvIHBhY2tldCBwcm9jZXNzaW5nIHJ1bGVzLlxuICAzNTpcdFxuICAzNjpcdFx0ICBTZWUgaHR0cDovL29wZW52c3dpdGNoLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlXG4gIDM3Olx0XHQgIHV0aWxpdGllcy5cbiAgMzg6XHRcbiAgMzk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuICA0MDpcdFx0ICBjYWxsZWQgb3BlbnZzd2l0Y2guXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxOTMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipPcGVuIHZTd2l0Y2ggYW5kIEVycm9yIEhhbmRsaW5nKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYE9QRU5WU1dJVENIYCBzaXR1YXRpb24uIEl0IGZlZWxzIGxpa2Ugd2UmIzM5O3JlIHplcm9pbmcgaW4gb24gYSBzb2x1dGlvbiDigJMgaG9wZWZ1bGx5LCB0aGUgZGVwbG95bWVudCB3aWxsIHdvcmsgd2l0aCBpdC4gVGhlIGNvcmUgcHJpbmNpcGxlIHNlZW1zIHNvdW5kLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cy4KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBza2JfdHhfZXJyb3JgIGlzIGlzb2xhdGVkIGFuZCBvbmx5IGNhbGxlZCB3aXRoaW4gdGhlIHNjb3BlIHRoYXQgSSB0aGluayBpdCBpcy4gTm8gc25lYWt5IHNpZGUgZWZmZWN0cyBvciB1bmV4cGVjdGVkIGNhbGxzIGZyb20gZWxzZXdoZXJlLiBMZXQgbWUgZ28gb3ZlciB0aGUgY29kZSBhZ2FpbiB0byBtYWtlIHN1cmUgdGhhdCBmdW5jdGlvbiBpcyBvbmx5IHJlYWNoYWJsZSBmcm9tIHRoZSBsb2NhdGlvbnMgSSBleHBlY3QuIFdlIGNhbiYjMzk7dCBhZmZvcmQgYW55IHN1cnByaXNlcyB3aGVuIGl0IGNvbWVzIHRvIGVycm9yIGhhbmRsaW5nLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgdGhhdCBuZWVkcyBleHRyYSBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl90eF9lcnJvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuL2lvLmM9MzU2PW5ldGRldl90eF90IG92cG5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtNDQzLVx0b3Zwbl9kZXZfZHN0YXRzX3R4X2Ryb3BwZWQob3Zwbi1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjQ0NDpcdHNrYl90eF9lcnJvcihza2IpO1xuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTQ0NS1cdGtmcmVlX3NrYl9saXN0KHNrYik7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTAwMz1zdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTA4My1cdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XG5kcml2ZXJzL25ldC90dW4uYzoxMDg0Olx0c2tiX3R4X2Vycm9yKHNrYik7XG5kcml2ZXJzL25ldC90dW4uYy0xMDg1LVx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIGRyb3BfcmVhc29uKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTEzMzg9dm9pZCBza2JfZHVtcChjb25zdCBjaGFyICpsZXZlbCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBmdWxsX3BrdCk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEzMzk6dm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEzNDAtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTQxMj1FWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNDE0LS8qKlxubmV0L2NvcmUvc2tidWZmLmM6MTQxNTogKlx0c2tiX3R4X2Vycm9yIC0gcmVwb3J0IGFuIHNrX2J1ZmYgeG1pdCBlcnJvclxubmV0L2NvcmUvc2tidWZmLmMtMTQxNi0gKlx0QHNrYjogYnVmZmVyIHRoYXQgdHJpZ2dlcmVkIGFuIGVycm9yXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTQyMy0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjE0MjQ6dm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MjUte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE0MzAtfVxubmV0L2NvcmUvc2tidWZmLmM6MTQzMTpFWFBPUlRfU1lNQk9MKHNrYl90eF9lcnJvcik7XG5uZXQvY29yZS9za2J1ZmYuYy0xNDMyLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA1PW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgwMy1cdGlmICghc2tiKSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjgwNDpcdFx0c2tiX3R4X2Vycm9yKGVudHNrYik7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgwNS1cdFx0Z290byBubG1zZ19mYWlsdXJlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODEyLVx0aWYgKCFubGgpIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6ODEzOlx0XHRza2JfdHhfZXJyb3IoZW50c2tiKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODE0LVx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk2My1ubGFfcHV0X2ZhaWx1cmU6XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjk2NDpcdHNrYl90eF9lcnJvcihlbnRza2IpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NjUtXHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDU9dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjg3LVx0XHRkZWZhdWx0OlxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6Mjg4Olx0XHRcdHNrYl90eF9lcnJvcihza2IpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjg5LVx0XHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jPTE1MjU9aW50IHNrYl9tZXRhX2ludmFsaWRfY3R4KHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYy0xNTM0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmM6MTUzNTpTRUMoXCYjMzQ7ZmVudHJ5L3NrYl90eF9lcnJvclwmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jLTE1MzYtX19mYWlsdXJlIF9fbXNnKFwmIzM0O211c3QgYmUgcmVmZXJlbmNlZCBvciB0cnVzdGVkXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmM9MTUzNz1pbnQgQlBGX1BST0coc2tiX2ludmFsaWRfY3R4X2ZlbnRyeSwgdm9pZCAqc2tiKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jLTE1NDYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYzoxNTQ3OlNFQyhcJiMzNDtmZXhpdC9za2JfdHhfZXJyb3JcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYy0xNTQ4LV9fZmFpbHVyZSBfX21zZyhcJiMzNDttdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFwmIzM0OylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcyNgoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiAyMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgaXQgdG91Y2hlcyBjb2RlIGluIGBkcml2ZXJzL25ldC90dW4uY2AsIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jYCwgYGRyaXZlcnMvbmV0L292cG4vaW8uY2AsIGFuZCBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgIOKAkyBhbGwgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMgYW5kIE9wZW4gdlN3aXRjaCwgc3BlY2lmaWNhbGx5IOKAkyByZWFsbHkgZmxhZ3MgaXQgZm9yIGNsb3NlIGV4YW1pbmF0aW9uLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIGtleSBzeW1ib2xzOiBgc2tiX3R4X2Vycm9yYCwgYHNrYl96ZXJvY29weWAsIGFuZCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4KClRoZSBwYXRjaCYjMzk7cyBtb2RpZmljYXRpb24gb2YgYHNrYl90eF9lcnJvcmAgdG8gZWZmZWN0aXZlbHkgKm5vLW9wKiBmb3IgY2xvbmVkIHNrYnMsIGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCBgc2tiX3plcm9jb3B5YCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgaXMgd2hhdCYjMzk7cyBjYXRjaGluZyBteSBleWUuIFRoZXNlIGZ1bmN0aW9ucyBhcmUga2V5IHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBkZWFsaW5nIHdpdGggemVyby1jb3B5IG9wZXJhdGlvbnMgYW5kLCBjcml0aWNhbGx5LCBPcGVuIHZTd2l0Y2ggZGF0YSBwYXRoIHBhY2tldCBwcm9jZXNzaW5nLiBJIHNlZSBhIGhpZ2ggcmlzayBvZiBzdWJ0bGUgbWVtb3J5IGVycm9yczogbGVha3MsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHlvdSYjMzk7cmUgbXVja2luZyBhcm91bmQgd2l0aCBzaGFyZWQgbWVtb3J5IGJ1ZmZlcnMsIHdoaWNoIHplcm8tY29weSByZWxpZXMgb24uCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIGFuZCBJIHdpbGwgZW5hYmxlIHRoZSBgT1BFTlZTV0lUQ0hgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuc3VyZSB0aGUgT1ZTIGNvZGUgcGF0aHMgYXJlIGFjdGl2ZSBkdXJpbmcgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRob3JvdWdobHkgdGVzdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza2JfdHhfZXJyb3ImIzM0OywKICAgICYjMzQ7c2tiX3plcm9jb3B5JiMzNDssCiAgICAmIzM0O292c19kcF9wcm9jZXNzX3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2tiX3R4X2Vycm9yYCBpbiBjb3JlIG5ldHdvcmtpbmcgdG8gZG8gbm90aGluZyBmb3IgY2xvbmVkIHNrYnMsIGFuZCBjaGFuZ2VzIGl0cyB1c2FnZSBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGFuZCBPcGVuIHZTd2l0Y2ggcGF0aHMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIHdpdGggemVyb2NvcHkgc2ticy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza2JfdHhfZXJyb3ImIzM0OywKICAgICYjMzQ7c2tiX3plcm9jb3B5JiMzNDssCiAgICAmIzM0O292c19kcF9wcm9jZXNzX3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2tiX3R4X2Vycm9yYCBpbiBjb3JlIG5ldHdvcmtpbmcgdG8gZG8gbm90aGluZyBmb3IgY2xvbmVkIHNrYnMsIGFuZCBjaGFuZ2VzIGl0cyB1c2FnZSBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGFuZCBPcGVuIHZTd2l0Y2ggcGF0aHMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIHdpdGggemVyb2NvcHkgc2ticy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcmAgdG8gaWdub3JlIGNsb25lZCBza2JzLCBhcyB0aGVpciB6ZXJvLWNvcHkgc3RhdGUgKGluIGBza2Jfc2hpbmZvYCkgaXMgc2hhcmVkIGFtb25nIGNsb25lcy4gSXQgYWxzbyBhZGp1c3RzIHdoZXJlIGBza2JfdHhfZXJyb3JgIGlzIGNhbGxlZCBpbiBgc2tiX3plcm9jb3B5YCBhbmQgb3BlbnZzd2l0Y2ggZGF0YXBhdGguIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBpc3N1ZXMgd2l0aCB6ZXJvLWNvcHkgc3RhdGUgbWFuYWdlbWVudCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCB0eXBpY2FsbHkgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzLiBTdWNoIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYTU0ZTI2NGYzZDE4M2NkNzQ1MTkzZTZkNjkyYzFmMjAyM2NlNDNjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMDc6NTg6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IGJhM2RiYWM4MGZiNDkuLjA0Nzc2YTExMjMzNDIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC0xNDE3LDEwICYjNDM7MTQxNywxMyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTsKICAqCiAgKglSZXBvcnQgeG1pdCBlcnJvciBpZiBhIGRldmljZSBjYWxsYmFjayBpcyB0cmFja2luZyB0aGlzIHNrYi4KICAqCXNrYiBtdXN0IGJlIGZyZWVkIGFmdGVyd2FyZHMuCiYjNDM7ICoKJiM0MzsgKglEb2VzIG5vdGhpbmcgZm9yIGEgY2xvbmVkIHNrYjogdGhlIHplcm9jb3B5IHN0YXRlIGxpdmVzIGluCiYjNDM7ICoJc2tiX3NoaW5mbygpLCB3aGljaCB0aGUgY2xvbmVzIHNoYXJlLgogICovCiB2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWlmIChza2IpIHsKJiM0MzsJaWYgKHNrYiAmYW1wOyZhbXA7ICFza2JfY2xvbmVkKHNrYikpIHsKIAkJc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7CiAJCXNrYl96Y29weV9jbGVhcihza2IsIHRydWUpOwogCX0KQEAgLTM5MDcsMTAgJiM0MzszOTEwLDkgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQogCiAJc2tiX2xlbl9hZGQodG8sIGxlbiAmIzQzOyBwbGVuKTsKIAotCWlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkgewotCQlza2JfdHhfZXJyb3IoZnJvbSk7CiYjNDM7CWlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQomIzQzOwogCXNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2tiX3NoaW5mbyhmcm9tKS0mZ3Q7bnJfZnJhZ3M7IGkmIzQzOyYjNDM7KSB7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCmluZGV4IGFlNjliMmNhYmFiOWUuLmZmZjc1YzNlZWQxMTYgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCkBAIC0yODUsNiAmIzQzOzI4NSw3IEBAIHZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KQogCQkJY29uc3VtZV9za2Ioc2tiKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgomIzQzOwkJCXNrYl90eF9lcnJvcihza2IpOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlicmVhazsKIAkJfQpAQCAtNjAxLDggJiM0Mzs2MDIsNiBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAllcnIgPSBnZW5sbXNnX3VuaWNhc3Qob3ZzX2RwX2dldF9uZXQoZHApLCB1c2VyX3NrYiwgdXBjYWxsX2luZm8tJmd0O3BvcnRpZCk7CiAJdXNlcl9za2IgPSBOVUxMOwogb3V0OgotCWlmIChlcnIpCi0JCXNrYl90eF9lcnJvcihza2IpOwogCWNvbnN1bWVfc2tiKHVzZXJfc2tiKTsKIAljb25zdW1lX3NrYihuc2tiKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0OAoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiA4NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFplcm8tQ29weSBFcnJvciBIYW5kbGluZyBhbmQgQ2xvbmVkIFNLQnMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1vZGlmeWluZyBgc2tiX3R4X2Vycm9yYCBhbmQgYSBmZXcgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgaW4gdGhlIGtlcm5lbC4gVGhlIGNvcmUgY2hhbmdlcyBpbnZvbHZlIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgZXJyb3JzIHdpdGggemVyby1jb3B5IFNLQnMsIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCBjbG9uZWQgU0tCcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBzZWUgaWYgdGhpcyBpbnRyb2R1Y2VkIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLgoKVGhlIGZpcnN0IHBhcnQgb2YgdGhlIHBhdGNoIG1ha2VzIGBza2JfdHhfZXJyb3JgIGEgbm8tb3AgaWYgdGhlIFNLQiBpcyBjbG9uZWQuIEl0IGFsc28gcmVtb3ZlcyBhIGNhbGwgdG8gYHNrYl90eF9lcnJvcmAgd2l0aGluIGBza2JfemVyb2NvcHlgIGFuZCBtb3ZlcyBhIGNhbGwgZnJvbSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgdG8gYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIEZyb20gdGhpcywgSSB0aGluayBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzLgoKVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRoZSBgc2tiX2Nsb25lZChza2IpYCBjaGVjay4gYHNrYl90eF9lcnJvcmAgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFyaW5nIHRoZSB6ZXJvLWNvcHkgc3RhdGUgd2hpY2ggaW5jbHVkZXMgY2FsbGluZyBgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYilgIGFuZCBgc2tiX3pjb3B5X2NsZWFyKHNrYiwgdHJ1ZSlgLiBUaGUgYHNrYl9zaGluZm8oKWAgc3RydWN0dXJlIGhvbGRzIHplcm8tY29weSBzdGF0ZSBhbmQgdGhpcyBpcyBzaGFyZWQgd2l0aCBjbG9uZXMuIFRoaXMgbWFrZXMgc2Vuc2U7IGlmIGFuIGVycm9yIG9jY3VycyBhbmQgYHNrYl90eF9lcnJvcmAgKmRvZXMqIHJ1biBvbiBvbmUgY2xvbmUsIGl0IGNvdWxkIGNsZWFyIHRoZSB6ZXJvLWNvcHkgc3RhdGUgZm9yIGFsbCBvZiB0aGVtLiBUaGlzIHdvdWxkIGxlYWQgdG8gYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgZ2VuZXJhbGx5IGluY29ycmVjdCBzdGF0ZSBtYW5hZ2VtZW50LCByaWdodD8gSXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGZpeGluZyB0aGF0LCBwcmV2ZW50aW5nIHRoZSBjbGVhcmluZyBpZiB0aGUgU0tCIGlzIGNsb25lZC4KCk5vdyBJIGhhdmUgdG8gdGhpbmssIGRvZXMgKm5vdCogY2FsbGluZyBgc2tiX3R4X2Vycm9yYCBsZWF2ZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIGl0IGxlYXZlcyB0aGUgc3RhdGUgaW50YWN0IGZvciB0aGUgb3RoZXIgY2xvbmVzLCB3aGljaCBpcyB0aGUgY29ycmVjdCBiZWhhdmlvci4gQ2FsbGluZyBgc2tiX3R4X2Vycm9yYCB3b3VsZCAqY2xlYXIqIHRoZSBzdGF0ZSBhbmQgcG9zc2libHkgY2F1c2UgaXNzdWVzIGZvciBvdGhlciBjbG9uZXMuIFRoZSByZW1vdmFsIG9mIGBza2JfdHhfZXJyb3IoZnJvbSlgIGluIGBza2JfemVyb2NvcHlgIGlzIGJlY2F1c2UgYGZyb21gIGlzIGFsc28gbGlrZWx5IGNsb25lZCwgYW5kIHNob3VsZCBub3QgaGF2ZSBpdHMgc3RhdGUgY2xlYXJlZCBvbiBhbiBlcnJvciBmcm9tIHRoaXMgZnVuY3Rpb24uIFRoZSBjYWxsZXIgb2YgYHNrYl96ZXJvY29weWAgd2lsbCBwcm9iYWJseSBmcmVlIHRoZSBTS0JzLgoKVGhlIGNoYW5nZSBpbiBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgbWFrZXMgbWUgdGhpbmsuIEluIHRoYXQgZnVuY3Rpb24sIGl0IGxvb2tzIGxpa2UgYHNrYl90eF9lcnJvcihza2IpYCBpcyByZW1vdmVkIG9uIGFuIGVycm9yIGFuZCBhZGRlZCB0byBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBhcyB0aGUgZGVmYXVsdCBjYXNlLgoKT2theSwgYWZ0ZXIgZGlnZ2luZyBpbnRvIGl0LCBpdCYjMzk7cyBjbGVhciB0aGlzIGlzIG5vdCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCBhbGwuIFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGhhbmRsaW5nIHRoZSBjb21wbGV4aXRpZXMgb2YgemVyby1jb3B5IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgc3RhdGUgbWFuYWdlbWVudCwgd2hpY2ggaXMgcmVsYXRlZCB0byBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgbGlrZSBVQUYsIGRvdWJsZS1mcmVlcywgZXRjLiwgYW5kIHRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoZXJlIHRvb2xzIGxpa2UgS0FTQU4gY29tZSBpbi4KCkxldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayBgc2tiX3R4X2Vycm9yYCBhbmQgYHNrYl96Y29weV9jbGVhcmAuIGBza2JfemNvcHlfY2xlYXJgIGNhbGxzIHRoZSBjYWxsYmFjayB3aXRoaW4gdGhlIGB1YnVmX2luZm9gLCBkZWNyZW1lbnRzIGEgcmVmZXJlbmNlIGNvdW50LCBhbmQgY2xlYXJzIHRoZSBgU0tCRkxfWkVST0NPUFlfRU5BQkxFYCBmbGFnLiBJdCBpcyBwdXJlbHkgYWJvdXQgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBjYWxsYmFja3MgZm9yIHplcm8tY29weS4KClNvLCB0aGlzIHBhdGNoIGlzbiYjMzk7dCBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSXQmIzM5O3MgZml4aW5nIGEgbWVtb3J5IGNvcnJ1cHRpb24gYnVnIHJlbGF0ZWQgdG8gc2hhcmVkIHN0YXRlIGluIGNsb25lZCBTS0JzLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBoZXJlLgoKSSB3aWxsIG1hcmsgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBgc2tiX3R4X2Vycm9yYCB0byBpZ25vcmUgY2xvbmVkIHNrYnMsIGFzIHRoZWlyIHplcm8tY29weSBzdGF0ZSAoaW4gYHNrYl9zaGluZm9gKSBpcyBzaGFyZWQgYW1vbmcgY2xvbmVzLiBJdCBhbHNvIGFkanVzdHMgd2hlcmUgYHNrYl90eF9lcnJvcmAgaXMgY2FsbGVkIGluIGBza2JfemVyb2NvcHlgIGFuZCBvcGVudnN3aXRjaCBkYXRhcGF0aC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGlzc3VlcyB3aXRoIHplcm8tY29weSBzdGF0ZSBtYW5hZ2VtZW50IGFuZCByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIHR5cGljYWxseSBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Z3MuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcmAgdG8gaWdub3JlIGNsb25lZCBza2JzLCBhcyB0aGVpciB6ZXJvLWNvcHkgc3RhdGUgKGluIGBza2Jfc2hpbmZvYCkgaXMgc2hhcmVkIGFtb25nIGNsb25lcy4gSXQgYWxzbyBhZGp1c3RzIHdoZXJlIGBza2JfdHhfZXJyb3JgIGlzIGNhbGxlZCBpbiBgc2tiX3plcm9jb3B5YCBhbmQgb3BlbnZzd2l0Y2ggZGF0YXBhdGguIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBpc3N1ZXMgd2l0aCB6ZXJvLWNvcHkgc3RhdGUgbWFuYWdlbWVudCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCB0eXBpY2FsbHkgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzLiBTdWNoIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1ODozNy4xOTcyODIzMjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDk0MjM0MTExMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl90eF9lcnJvclwiLFxuICAgIFwic2tiX3plcm9jb3B5XCIsXG4gICAgXCJvdnNfZHBfcHJvY2Vzc19wYWNrZXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBgc2tiX3R4X2Vycm9yYCB0byBpZ25vcmUgY2xvbmVkIHNrYnMsIGFzIHRoZWlyIHplcm8tY29weSBzdGF0ZSAoaW4gYHNrYl9zaGluZm9gKSBpcyBzaGFyZWQgYW1vbmcgY2xvbmVzLiBJdCBhbHNvIGFkanVzdHMgd2hlcmUgYHNrYl90eF9lcnJvcmAgaXMgY2FsbGVkIGluIGBza2JfemVyb2NvcHlgIGFuZCBvcGVudnN3aXRjaCBkYXRhcGF0aC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGlzc3VlcyB3aXRoIHplcm8tY29weSBzdGF0ZSBtYW5hZ2VtZW50IGFuZCByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIHR5cGljYWxseSBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Z3MuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl90eF9lcnJvcmAgaW4gY29yZSBuZXR3b3JraW5nIHRvIGRvIG5vdGhpbmcgZm9yIGNsb25lZCBza2JzLCBhbmQgY2hhbmdlcyBpdHMgdXNhZ2UgaW4gYHNrYl96ZXJvY29weWAgYW5kIE9wZW4gdlN3aXRjaCdzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGFuZCBPcGVuIHZTd2l0Y2ggcGF0aHMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIHdpdGggemVyb2NvcHkgc2ticy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6NTg6MzcuMTk3Mjg3Nzc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU1NDU0NjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2E1NGUyNjRmM2QxODNjZDc0NTE5M2U2ZDY5MmMxZjIwMjNjZTQzY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwNzo1ODozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXFxuaW5kZXggYmEzZGJhYzgwZmI0OS4uMDQ3NzZhMTEyMzM0MiAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xcbisrKyBiL25ldC9jb3JlL3NrYnVmZi5jXFxuQEAgLTE0MTcsMTAgKzE0MTcsMTMgQEAgRVhQT1JUX1NZTUJPTChza2JfZHVtcCk7XFxuICAqXFxuICAqXFx0UmVwb3J0IHhtaXQgZXJyb3IgaWYgYSBkZXZpY2UgY2FsbGJhY2sgaXMgdHJhY2tpbmcgdGhpcyBza2IuXFxuICAqXFx0c2tiIG11c3QgYmUgZnJlZWQgYWZ0ZXJ3YXJkcy5cXG4rICpcXG4rICpcXHREb2VzIG5vdGhpbmcgZm9yIGEgY2xvbmVkIHNrYjogdGhlIHplcm9jb3B5IHN0YXRlIGxpdmVzIGluXFxuKyAqXFx0c2tiX3NoaW5mbygpLCB3aGljaCB0aGUgY2xvbmVzIHNoYXJlLlxcbiAgKi9cXG4gdm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHRpZiAoc2tiKSB7XFxuK1xcdGlmIChza2IgXFx1MDAyNlxcdTAwMjYgIXNrYl9jbG9uZWQoc2tiKSkge1xcbiBcXHRcXHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcXG4gXFx0XFx0c2tiX3pjb3B5X2NsZWFyKHNrYiwgdHJ1ZSk7XFxuIFxcdH1cXG5AQCAtMzkwNywxMCArMzkxMCw5IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcXG4gXFxuIFxcdHNrYl9sZW5fYWRkKHRvLCBsZW4gKyBwbGVuKTtcXG4gXFxuLVxcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkge1xcbi1cXHRcXHRza2JfdHhfZXJyb3IoZnJvbSk7XFxuK1xcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdH1cXG4rXFxuIFxcdHNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2tiX3NoaW5mbyhmcm9tKS1cXHUwMDNlbnJfZnJhZ3M7IGkrKykge1xcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuaW5kZXggYWU2OWIyY2FiYWI5ZS4uZmZmNzVjM2VlZDExNiAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuQEAgLTI4NSw2ICsyODUsNyBAQCB2b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG4gXFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdHNrYl90eF9lcnJvcihza2IpO1xcbiBcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG5AQCAtNjAxLDggKzYwMiw2IEBAIHN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRlcnIgPSBnZW5sbXNnX3VuaWNhc3Qob3ZzX2RwX2dldF9uZXQoZHApLCB1c2VyX3NrYiwgdXBjYWxsX2luZm8tXFx1MDAzZXBvcnRpZCk7XFxuIFxcdHVzZXJfc2tiID0gTlVMTDtcXG4gb3V0Olxcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRza2JfdHhfZXJyb3Ioc2tiKTtcXG4gXFx0Y29uc3VtZV9za2IodXNlcl9za2IpO1xcbiBcXHRjb25zdW1lX3NrYihuc2tiKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU4OjM4LjY1Mzc1MTk2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ2NTc1MTU1MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX3R4X2Vycm9yXCIsXG4gICAgXCJza2JfemVyb2NvcHlcIixcbiAgICBcIm92c19kcF9wcm9jZXNzX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfdHhfZXJyb3JgIGluIGNvcmUgbmV0d29ya2luZyB0byBkbyBub3RoaW5nIGZvciBjbG9uZWQgc2ticywgYW5kIGNoYW5nZXMgaXRzIHVzYWdlIGluIGBza2JfemVyb2NvcHlgIGFuZCBPcGVuIHZTd2l0Y2gncyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBhbmQgT3BlbiB2U3dpdGNoIHBhdGhzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciB3aXRoIHplcm9jb3B5IHNrYnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNhNTRlMjY0ZjNkMTgzY2Q3NDUxOTNlNmQ2OTJjMWYyMDIzY2U0M2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwNzo1ODozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGJhM2RiYWM4MGZiNDkuLjA0Nzc2YTExMjMzNDIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0xNDE3LDEwICsxNDE3LDEzIEBAIEVYUE9SVF9TWU1CT0woc2tiX2R1bXApO1xuICAqXG4gICpcdFJlcG9ydCB4bWl0IGVycm9yIGlmIGEgZGV2aWNlIGNhbGxiYWNrIGlzIHRyYWNraW5nIHRoaXMgc2tiLlxuICAqXHRza2IgbXVzdCBiZSBmcmVlZCBhZnRlcndhcmRzLlxuKyAqXG4rICpcdERvZXMgbm90aGluZyBmb3IgYSBjbG9uZWQgc2tiOiB0aGUgemVyb2NvcHkgc3RhdGUgbGl2ZXMgaW5cbisgKlx0c2tiX3NoaW5mbygpLCB3aGljaCB0aGUgY2xvbmVzIHNoYXJlLlxuICAqL1xuIHZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0aWYgKHNrYikge1xuK1x0aWYgKHNrYiBcdTAwMjZcdTAwMjYgIXNrYl9jbG9uZWQoc2tiKSkge1xuIFx0XHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcbiBcdFx0c2tiX3pjb3B5X2NsZWFyKHNrYiwgdHJ1ZSk7XG4gXHR9XG5AQCAtMzkwNywxMCArMzkxMCw5IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcbiBcbiBcdHNrYl9sZW5fYWRkKHRvLCBsZW4gKyBwbGVuKTtcbiBcbi1cdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkge1xuLVx0XHRza2JfdHhfZXJyb3IoZnJvbSk7XG4rXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuK1xuIFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNrYl9zaGluZm8oZnJvbSktXHUwMDNlbnJfZnJhZ3M7IGkrKykge1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGFlNjliMmNhYmFiOWUuLmZmZjc1YzNlZWQxMTYgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0yODUsNiArMjg1LDcgQEAgdm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4gXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbitcdFx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTYwMSw4ICs2MDIsNiBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGVyciA9IGdlbmxtc2dfdW5pY2FzdChvdnNfZHBfZ2V0X25ldChkcCksIHVzZXJfc2tiLCB1cGNhbGxfaW5mby1cdTAwM2Vwb3J0aWQpO1xuIFx0dXNlcl9za2IgPSBOVUxMO1xuIG91dDpcbi1cdGlmIChlcnIpXG4tXHRcdHNrYl90eF9lcnJvcihza2IpO1xuIFx0Y29uc3VtZV9za2IodXNlcl9za2IpO1xuIFx0Y29uc3VtZV9za2IobnNrYik7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1ODozOC42NTM3NTQyMzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTAyMTAzNjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIFBhY2tldCBIYW5kbGluZyBDaGFuZ2VzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBob3cgd2UgaGFuZGxlIHRyYW5zbWl0IGVycm9ycywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgYnVmZmVycyAoYHNrYmBzKS4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGl0J3MgbW9kaWZ5aW5nIGBza2JfdHhfZXJyb3JgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AgdG8gZWZmZWN0aXZlbHkgZG8gbm90aGluZyBmb3IgY2xvbmVkIFNLQnMuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2sgYXQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdC4gSXQgYWxzbyBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyByZW1vdmluZyBgc2tiX3R4X2Vycm9yKGZyb20pYCBjYWxscyBmcm9tIGBza2JfemVyb2NvcHlgIGluIHRoZSBzYW1lIGZpbGUgYW5kIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLCBhbmQgYWRkaW5nIGBza2JfdHhfZXJyb3Ioc2tiKWAgdG8gYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIHdoaWNoIGlzIGFsc28gaW4gdGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCBjb2RlLlxuXG5UaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIGFuZCBPcGVuIHZTd2l0Y2gsIHdoaWNoIGlzIGEga2V5IHNpZ25hbCB0aGF0IHRoaXMgaXMgYSBwYXRjaCB0aGF0J3MgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIGFuZCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgcmVncmVzc2lvbiBidWdzLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gT3BlbiB2U3dpdGNoIGNvbmZpZ3VyYXRpb24sIGp1c3QgdG8gYmUgc3VyZS4gQWxyaWdodCwgYENPTkZJR19PUEVOVlNXSVRDSGAgaW4gYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCB3aWxsIHRlbGwgdXMgaWYgaXQncyBlbmFibGVkLiBUaGUgY29yZSBuZXR3b3JraW5nIGJpdHMgYXJlIGFsd2F5cyBlbmFibGVkLCBzbyB3ZSdyZSBnb29kIHRoZXJlLlxuXG5JJ20gemVyb2luZyBpbiBvbiBhIGZldyBjcml0aWNhbCBzeW1ib2xzIGhlcmU6IGBza2JfdHhfZXJyb3JgLCBgc2tiX3plcm9jb3B5YCwgYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIEkgbmVlZCB0byB2ZXJpZnkgdGhlaXIgdmlzaWJpbGl0eSB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBsaW5rYWdlIGlzc3VlcyBvciBzdXJwcmlzZXMuIFNlZW1zIGxpa2UgYHNrYl90eF9lcnJvcmAsIGBza2JfemVyb2NvcHlgLCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgYXJlIGFsbCBub24tc3RhdGljLCBzbyB0aGUgY2hhbmNlcyBhcmUgdGhhdCBgRVhQT1JUX1NZTUJPTChza2JfdHhfZXJyb3IpYCBpcyBpbiBwbGFjZS4gQnV0IEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdC4gSG93ZXZlciwgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGlzIHN0YXRpYy4gU28sIGl0IG1heSBub3QgYmUgYSBnb29kIGZvY2FsIHBvaW50LlxuXG5JIHNob3VsZCBjaGVjayB0aGUgYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYCBmaWxlIGZvciBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgYXMgd2VsbC4gWXVwLCBpdCdzIHN0YXRpYy5cblxuTm93LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNrYl90eF9lcnJvcmAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCBhbmQgZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1ODo0NS41NTU4NjE5NjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NTIzNTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIHNrYl90eF9lcnJvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz0xNDEyPUVYUE9SVF9TWU1CT0woc2tiX2R1bXApO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTQyMy0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzoxNDI0OnZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2tidWZmLmMtMTQyNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU4OjQ1LjY5MjM5MTcxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2OTk3NjQ3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIEtlcm5lbCBOZXR3b3JraW5nIENvZGUqKlxuXG5Pa2F5LCBzbyBgc2tiX3R4X2Vycm9yYCBpcyBleHBvcnRlZCDigJMgdGhhdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gYSByZWxhdGVkIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYHNrYl96ZXJvY29weWAuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGVzZSBhcmUgbGlua2VkIHNvbWVob3cuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzIGhlcmUuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0ICpob3cqIHRoZXkgaW50ZXJhY3QsIGlmIHRoZXkgZG8uIFRoaXMgY291bGQgYmUgYWJvdXQgZXJyb3IgaGFuZGxpbmcgaW4gemVyby1jb3B5IHNjZW5hcmlvcywgb3IgbWF5YmUgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50LiBSZWdhcmRsZXNzLCBgc2tiX3plcm9jb3B5YCBpcyB0aGUgbmV4dCBsb2dpY2FsIGZ1bmN0aW9uIHRvIGludmVzdGlnYXRlLiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MzMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1ODo0OC4zOTIxNTg2OThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1OTA4NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgc2tiX3plcm9jb3B5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jPTE5MTM9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTE0LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5MTU6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtMTkxNi1cXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6NTg6NDguNDk4MDc2MTA5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwMzY2NTQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgc2tiX3plcm9jb3B5YCoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYHNrYl96ZXJvY29weWAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCBsaXZlcyBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBHb29kLCB0aGF0IG5hcnJvd3MgdGhlIHNlYXJjaCBjb25zaWRlcmFibHkuIExldCdzIHB1bGwgdXAgdGhlIGRlZmluaXRpb24uIEknbSBnb2luZyB0byBuZWVkIHRvIHBhcnNlIHRocm91Z2ggdGhlIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIGludGVudC4gSG9wZWZ1bGx5LCB0aGUgY29tbWVudHMgYXJlIGNsZWFyIGFuZCBjb25jaXNlLCBhbmQgdGhlIGNvZGUgZm9sbG93cyBzdGFuZGFyZCBrZXJuZWwgY29kaW5nIGNvbnZlbnRpb25zIC0gbGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpc3NlY3QuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgemVyby1jb3B5IG1lY2hhbmlzbSB3b3JrcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHNrX2J1ZmYgbGlmZWN5Y2xlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBkYXRhIHJhY2VzIGFuZCB0aGVpciBtaXRpZ2F0aW9ucy4gT2YgcGFydGljdWxhciBpbnRlcmVzdCBpcyB0aGUgaW50ZXJwbGF5IHdpdGggcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBidWZmZXIgbWFuYWdlbWVudCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGFuZCBETUEuIEknbGwga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgdW51c3VhbCBsb2NraW5nIHBhdHRlcm5zIG9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBpbiB0aGlzIGltcGxlbWVudGF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3csIGVzcGVjaWFsbHkgdGhlIGNvcHktb24td3JpdGUgYXNwZWN0cywgaXMgY3J1Y2lhbCBmb3IgYXNzZXNzaW5nIGl0cyBvdmVyYWxsIGVmZmljaWVuY3kgYW5kIHBvdGVudGlhbCBkcmF3YmFja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1ODo1MS43MDE3NDMyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDExNzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2JfemVyb2NvcHlcXFxcKHN0cnVjdCBza19idWZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jPTM4Nzg9aW50XFxubmV0L2NvcmUvc2tidWZmLmM6Mzg3OTpza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXFxubmV0L2NvcmUvc2tidWZmLmMtMzg4MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU4OjUxLjc5MTg2NjEwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODExODYzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBgc2tiX3plcm9jb3B5YCBFeHBvcnQgU3RhdHVzKipcblxuQWxyaWdodCwgdGhlIGNvZGUgc25pcHBldCBpbiBmcm9udCBvZiBtZSBpcyBgaW50IHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBmdW5jdGlvbiwgYHNrYl96ZXJvY29weWAsIGlzIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlIGZvciB1c2UuIEdpdmVuIHRoaXMgaXMgYSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24sIGl0J3MgbGlrZWx5IHBhcnQgb2YgdGhlIGtlcm5lbCdzIGludGVybmFsIEFQSS4gSG93ZXZlciwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBpdCdzIHNwZWNpZmljYWxseSBleHBvcnRlZCDigJMgZWl0aGVyIHRocm91Z2ggYSBzeW1ib2wgdGFibGUgb3Igc29tZSBvdGhlciBtZWNoYW5pc20g4oCTIHNvIHRoYXQgaXQncyBhdmFpbGFibGUgdG8gbW9kdWxlcyBhbmQgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBpZiB0aGF0IGlzIHRoZSB1c2UgY2FzZS4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSByZWFkaWx5IGNhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIG15IGN1cnJlbnQgY29udGV4dCwgb3Igd2lsbCBJIG5lZWQgdG8ganVtcCB0aHJvdWdoIGhvb3BzIGxpa2UgY2FsbGluZyBpdCBpbnRlcm5hbGx5IHRvIGEgc3BlY2lmaWMgZGV2aWNlIGRyaXZlciBmdW5jdGlvbi4gSSBuZWVkIHRvIGtub3cgdGhlIHZpc2liaWxpdHkgb2YgdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU4OjU1LjA3MzA1NDk2OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMzAxNDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnNrYl96ZXJvY29weVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz0xOTE1PWludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTk1Mi19XFxubmV0L2NvcmUvc2tidWZmLmM6MTk1MzpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTQtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0zODQxPXNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzg1Ny19XFxubmV0L2NvcmUvc2tidWZmLmM6Mzg1ODpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XFxubmV0L2NvcmUvc2tidWZmLmMtMzg1OS1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM4Nzk9c2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzkzNC19XFxubmV0L2NvcmUvc2tidWZmLmM6MzkzNTpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM5MzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU4OjU1LjE4NjM2Mjc2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTI4NjUyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBJbnZlc3RpZ2F0aW9uOiBgc2tiX3plcm9jb3B5YCBcdTAwMjYgYG92c19kcF9wcm9jZXNzX3BhY2tldGAqKlxuXG5BbHJpZ2h0LCBzbyBgc2tiX3plcm9jb3B5YCAqaXMqIGV4cG9ydGVkLCBjb25maXJtZWQuIFRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGJyb2FkZXIgZGF0YSBwYXRoIHdpdGhpbiBPVlMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBvdXIgY3VycmVudCBwcm9ibGVtLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBkZWVwbHkgZXhhbWluZSB0aGUgaW50ZXJuYWxzIG9mIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBsaW5jaHBpbi4gVW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBTS0IsIGhvdyBpdCBoYW5kbGVzIHBhY2tldCBidWZmZXJzLCBhbmQgd2hldGhlciBpdCdzICp1dGlsaXppbmcqIGBza2JfemVyb2NvcHlgIChvciAqY291bGQqIHV0aWxpemUgaXQpIGlzIGdvaW5nIHRvIGJlIGtleSB0byB3aGF0ZXZlciBJIGFtIHRyeWluZyB0byBhY2hpZXZlLiBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgZmxvdywgc2NydXRpbml6ZSBpdHMgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbG9vayBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpbmVmZmljaWVuY2llcyByZWxhdGVkIHRvIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMsIGJlY2F1c2UgaWYgYHNrYl96ZXJvY29weWAgaXMgYXZhaWxhYmxlLCBpdCB3b3VsZCBzZWVtIHJlYXNvbmFibGUgdG8gY29uc2lkZXIgZW1wbG95aW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6NTg6NTguNzM5MjMxMzE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzYxOTE4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfZHBfcHJvY2Vzc19wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjMzPXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqcClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0NC0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2suICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjQ1OnZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU4OjU4LjgwNjg1NzgzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjY1MjIwMTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlOlxuXG4qKkNvbnNpZGVyaW5nIEV4cG9ydGluZyoqXG5cbkFscmlnaHQsIHNvIHRoZSBxdWVzdGlvbiBpcywgXCJJcyBpdCBleHBvcnRlZD9cIiBUaGF0J3MgdGhlIGNydXggb2YgaXQuIFdlIG5lZWQgdG8gaW1tZWRpYXRlbHkgZGVmaW5lIFwiaXQuXCIgQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzcGVjaWZpYyBkYXRhc2V0LCBhIG1vZGVsLCB0aGUgb3V0cHV0IG9mIGEgcHJvY2Vzcywgb3IgYSBtb3JlIGFic3RyYWN0IGNvbmNlcHQgbGlrZSBhIGNhcGFiaWxpdHkgb3IgYSBwcm9kdWN0PyBUaGUgY29udGV4dCBpcyBjcnVjaWFsLiBBc3N1bWluZyB3ZSBoYXZlIHRoYXQgY29udGV4dCwgdGhlIG5leHQgbGV2ZWwgb2YgZ3JhbnVsYXJpdHkgZGVwZW5kcyBlbnRpcmVseSBvbiB0aGUgZnJhbWV3b3JrIHN1cnJvdW5kaW5nIGl0LiBcblxuSSdtIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdmFyaW91cyBzdGFnZXMuIFdlIGNhbid0IGp1c3Qgc2xhcCBhIFwieWVzXCIgb3IgXCJub1wiIG9uIHRoaXMuIFdoYXQgZG9lcyBleHBvcnRpbmcgKm1lYW4qIGluIHRoaXMgc2NlbmFyaW8/IElzIGl0IGEgc2ltcGxlIGRhdGEgZHVtcCwgb3IgYSBmb3JtYWxpemVkIHByb2Nlc3Mgd2l0aCB2ZXJzaW9uaW5nLCBtZXRhZGF0YSwgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucz8gVGhlIG1ldGhvZCBvZiB0cmFuc2ZlciBpcyBhbHNvIGNyaXRpY2FsLiBSRVNUIEFQST8gRmlsZSB0cmFuc2ZlciBwcm90b2NvbD8gU3RyZWFtaW5nPyBUaGF0IGFsb25lIGRyaXZlcyB0aGUgY29udmVyc2F0aW9uIGRvd24gYSBwYXJ0aWN1bGFyIHBhdGguXG5cblRoZW4sIHRoZSBkZXN0aW5hdGlvbiBiZWNvbWVzIHRoZSBuZXh0IGNyaXRpY2FsIHBvaW50LiBJcyBpdCBhIHdlbGwtZGVmaW5lZCBleHRlcm5hbCBzeXN0ZW0sIGFub3RoZXIgaW50ZXJuYWwgbW9kdWxlLCBvciBhIGNvbGxlY3Rpb24gb2YgZGlzcGFyYXRlIGNvbnN1bWVycz8gVGhlIGV4cGVjdGVkIGZvcm1hdCBhbmQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSB0YXJnZXQgc3lzdGVtIHdpbGwgYmUgYSBtYWpvciBkcml2ZXIgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBJcyBpdCBhIGxlZ2FjeSBzeXN0ZW0sIGFuIGluZHVzdHJ5IHN0YW5kYXJkLCBvciBhIGN1dHRpbmcgZWRnZSBwbGF0Zm9ybT8gVGhlIGFuc3dlciB0byB0aGlzIGlzIHRoZSBiaWdnZXN0IGlzc3VlLiBJdCBtYXkgYmUgdGhhdCB0aGVyZSBhcmUgbm8gc3RhbmRhcmQgZXhwb3J0IG9wdGlvbnMuXG5cblRoZSBcImlzIGl0XCIgcGFydCBhbHNvIHN1YnRseSBzdWdnZXN0cyBhIHByZXNlbnQtdGVuc2UgY29uY2Vybi4gSXMgdGhpcyBhIG5ldyByZXF1aXJlbWVudD8gT3IgaGFzIGl0IGFsd2F5cyBiZWVuIHNvPyBJcyBpdCBhIGN1cnJlbnQgZnVuY3Rpb24sIG9yIGp1c3QgYSBjb25jZXB0PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mICpub3QqIGV4cG9ydGluZz8gUG90ZW50aWFsIHJldmVudWUgbG9zcywgbGFjayBvZiBpbnRlcm9wZXJhYmlsaXR5LCBvciBqdXN0IGEgd2FzdGVkIG9wcG9ydHVuaXR5IHRvIGxldmVyYWdlIHRoZSB2YWx1ZSBvZiBvdXIgd29yaz8gXG5cblNvLCB1bHRpbWF0ZWx5LCBhbnN3ZXJpbmcgdGhpcyBzaW1wbGUgcXVlc3Rpb24gcmVxdWlyZXMgYSBkZWVwIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZSAqd2hhdCosIHRoZSAqaG93KiwgdGhlICp3aGVyZSosIGFuZCB0aGUgKndoeSouIEl0J3MgcmFyZWx5IGEgc3RyYWlnaHRmb3J3YXJkIGJpbmFyeSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQxNiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6NTk6MDMuMDcyMDgxOTQxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjM5MDUyNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qb3ZzX2RwX3Byb2Nlc3NfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1OTowMy4xMjQ0ODA5MzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5MjY2MjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbm5lciBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIE5vbi1TdGF0aWMsIEludGVybmFsIERhdGFwYXRoIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZ1bmN0aW9uIEknbSBsb29raW5nIGF0IGlzbid0ICpleHBvcnRlZCosIHdoaWNoIGlzIHRoZSBmaXJzdCBjbHVlLiBUaGF0IG1lYW5zIGl0J3MgbGlrZWx5IGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIHRoZSBtb2R1bGUgb3IgbGlicmFyeSBpdCBiZWxvbmdzIHRvLiBCdXQgdGhlIGZhY3QgdGhhdCBpdCdzICpub24tc3RhdGljKiBpcyBpbnRlcmVzdGluZy4gSXQncyBub3QgbGltaXRlZCB0byB0aGlzIGZpbGUsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXQgY291bGQgYmUgY2FsbGVkIGZyb20gb3RoZXIgZmlsZXMgaW4gdGhlIHByb2plY3QuXG5cbkdpdmVuIHRoYXQgaXQncyBsaWtlbHkgcmVsYXRlZCB0byBwYWNrZXQgcHJvY2Vzc2luZywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbGwgZXhhbWluZSB0aGUgZnVuY3Rpb24gYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZGF0YXBhdGgsIGhvdyBwYWNrZXRzIGFyZSBoYW5kbGVkLCBhbmQgd2hvIG1pZ2h0IGJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0J3MgdGhlIGRhdGEgZmxvdz8gQW5kIGhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gZml0IGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIG9mIE9wZW4gdlN3aXRjaD8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIHVzYWdlIHdpdGhpbiB0aGF0IGZpbGUgdG8gc2VlIHdoZXJlIGVsc2UgaXQgaXMgdXNlZCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBmdW5jdGlvbidzIG5vbi1zdGF0aWMgc3RhdHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODgxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6NTk6MDcuNDE3MTQ2MDE2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTMwMjY4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxdWV1ZV91c2Vyc3BhY2VfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTEyNz1zdGF0aWMgaW50IHF1ZXVlX2dzb19wYWNrZXRzKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICosXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzAtXFx0XFx0XFx0ICAgICB1aW50MzJfdCBjdXRsZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjEzMTpzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKixcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzItXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTMzMD1pbnQgb3ZzX2RwX3VwY2FsbChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzQ2LVxcdGlmICghc2tiX2lzX2dzbyhza2IpKVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjM0NzpcXHRcXHRlcnIgPSBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KGRwLCBza2IsIGtleSwgdXBjYWxsX2luZm8sIGN1dGxlbik7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzQ4LVxcdGVsc2VcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTM2Nz1zdGF0aWMgaW50IHF1ZXVlX2dzb19wYWNrZXRzKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zOTctXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6Mzk4OlxcdFxcdGVyciA9IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoZHAsIHNrYiwga2V5LCB1cGNhbGxfaW5mbywgY3V0bGVuKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zOTktXFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTQ0Mj1zdGF0aWMgdm9pZCBwYWRfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy00NTEtXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NDUyOnN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTQ1My1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1OTowNy41MDI0NTM5MjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2NzczOTMzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgU3RhdGljIE5hdHVyZSBhbmQgS2V5IFN5bWJvbHMqKlxuXG5BbHJpZ2h0LCB0aGlzIGZlZWxzIHN0YXRpYyDigJMgbm8gZHluYW1pYyBlbGVtZW50cyB0byBpbW1lZGlhdGVseSBncmFiIG15IGF0dGVudGlvbi4gTXkgaW5pdGlhbCBhbmFseXNpcyBpcyB6ZXJvaW5nIGluIG9uIGEgZmV3IGNydWNpYWwgc3ltYm9sczogYHNrYl90eF9lcnJvcmAsIGBza2JfemVyb2NvcHlgLCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIFRob3NlIGFyZSBteSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cy4gVGhlIGNvbnRleHQgcG9pbnRzIHRvIGBPUEVOVlNXSVRDSGAgY29uZmlndXJhdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcGFja2V0IHByb2Nlc3Npbmcgd2l0aGluIGFuIE9wZW4gdlN3aXRjaCBlbnZpcm9ubWVudC4gVGhlIHByZXNlbmNlIG9mIGBza2JfdHhfZXJyb3JgIGFuZCBgc2tiX3plcm9jb3B5YCBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggZWl0aGVyIHRyYW5zbWlzc2lvbiBlcnJvcnMgd2l0aGluIGFuIGBza2JgLCBwb3RlbnRpYWxseSB6ZXJvLWNvcHkgb3B0aW1pemF0aW9ucywgb3IgYm90aC4gTm93IGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLi4uIHRoYXQncyB0aGUgY29yZS4gTXkgaW5zdGluY3QgaXMgdGhhdCB3ZSBhcmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIGRhdGEgcGF0aCBwYWNrZXQgcHJvY2Vzc2luZyBpbnRlcmFjdGlvbi5cblxuTXkgbmV4dCBtb3ZlPyBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgT1BFTlZTV0lUQ0hgIGhhcyBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIHdvcnRoIG5vdGluZy4gSXQgaXMgdW5saWtlbHkgdGhhdCBhbnl0aGluZyBJIHNlZSB0aGVyZSB3aWxsIGJlIG9mIGltbWVuc2UgaGVscCwgYnV0IGluIHRoZSBjb3Vyc2Ugb2YgYW4gaW52ZXN0aWdhdGlvbiwgeW91IG11c3Qgc3RhcnQgc29tZXdoZXJlLiBNeSBnb2FsIHdpbGwgYmUgdG8gZGV2ZWxvcCBhIG1vcmUgaW5mb3JtZWQgcGVyc3BlY3RpdmUsIHNvIHRoYXQgSSBjYW4gc2VlIHRoZSBpc3N1ZSBiZXR0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1OToxMS4xNzAxOTY0NTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzY2MzgyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1BFTlZTV0lUQ0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU5OjExLjI5Mzg2NTM3NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDg0MTg0MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBPcGVuIHZTd2l0Y2ggRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBPcGVuIHZTd2l0Y2ggdG9kYXkuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGFsd2F5cyB0byBzdGFydCB3aXRoIGEgZGVwZW5kZW5jeSBhbmFseXNpcy4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBhcmNoaXRlY3R1cmUsIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgZWNvc3lzdGVtLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgdGhpbmcgKnJlYWxseSogcmVsaWVzIG9uLCBkb3duIHRvIHRoZSBjb3JlIGxpYnJhcmllcyBhbmQga2VybmVsIG1vZHVsZXMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIHZlcnNpb25zIG9mIERQREs/IERvZXMgaXQgaGVhdmlseSBsZWFuIG9uIHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlcywgbGlrZSBuYW1lc3BhY2VzIG9yIGVCUEY/IEFuZCBhcmUgdGhlcmUgYW55IGV4dGVybmFsIGxpYnJhcmllcyB0aGF0IGFyZSBjcml0aWNhbCBmb3IgaXRzIG9wZXJhdGlvbiwgb3IgYXJlIHRoZXJlIGFueSB2dWxuZXJhYmlsaXRpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmNsdWRlZCBsaWJyYXJpZXM/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIHN5c3RlbSBhbmQgaXRzIHdlYWsgcG9pbnRzLiBJdCdzIHRpbWUgdG8gc3RhcnQgcGVlbGluZyBiYWNrIHRoZSBsYXllcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1OToxNC4zNzgwNTMwMjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE9wZW4gdlN3aXRjaFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgT1BFTlZTV0lUQ0hcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxcXFxuICAxMDpcXHRcXHRcXHQgICAoTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMTpcXHRcXHRcXHRcXHRcXHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0XFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXFxuICAxNDpcXHRcXHRzZWxlY3QgTVBMU1xcbiAgMTU6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDE2OlxcdFxcdHNlbGVjdCBORVRfTVBMU19HU09cXG4gIDE3OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gIDE4OlxcdFxcdHNlbGVjdCBORVRfTlNIXFxuICAxOTpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcXG4gIDIwOlxcdFxcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBPcGVuIHZTd2l0Y2ggaXMgYSBtdWx0aWxheWVyIEV0aGVybmV0IHN3aXRjaCB0YXJnZXRlZCBhdCB2aXJ0dWFsaXplZFxcbiAgMjM6XFx0XFx0ICBlbnZpcm9ubWVudHMuICBJbiBhZGRpdGlvbiB0byBzdXBwb3J0aW5nIGEgdmFyaWV0eSBvZiBmZWF0dXJlc1xcbiAgMjQ6XFx0XFx0ICBleHBlY3RlZCBpbiBhIHRyYWRpdGlvbmFsIGhhcmR3YXJlIHN3aXRjaCwgaXQgZW5hYmxlcyBmaW5lLWdyYWluZWRcXG4gIDI1OlxcdFxcdCAgcHJvZ3JhbW1hdGljIGV4dGVuc2lvbiBhbmQgZmxvdy1iYXNlZCBjb250cm9sIG9mIHRoZSBuZXR3b3JrLiAgVGhpc1xcbiAgMjY6XFx0XFx0ICBjb250cm9sIGlzIHVzZWZ1bCBpbiBhIHdpZGUgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMgYnV0IGlzXFxuICAyNzpcXHRcXHQgIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgaW4gbXVsdGktc2VydmVyIHZpcnR1YWxpemF0aW9uIGRlcGxveW1lbnRzLFxcbiAgMjg6XFx0XFx0ICB3aGljaCBhcmUgb2Z0ZW4gY2hhcmFjdGVyaXplZCBieSBoaWdobHkgZHluYW1pYyBlbmRwb2ludHMgYW5kIHRoZVxcbiAgMjk6XFx0XFx0ICBuZWVkIHRvIG1haW50YWluIGxvZ2ljYWwgYWJzdHJhY3Rpb25zIGZvciBtdWx0aXBsZSB0ZW5hbnRzLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggcHJvdmlkZXMgYW4gaW4ta2VybmVsIGZhc3QgcGF0aCBmb3IgcGFja2V0XFxuICAzMjpcXHRcXHQgIGZvcndhcmRpbmcuICBJdCBpcyBjb21wbGVtZW50ZWQgYnkgYSB1c2Vyc3BhY2UgZGFlbW9uLCBvdnMtdnN3aXRjaGQsXFxuICAzMzpcXHRcXHQgIHdoaWNoIGlzIGFibGUgdG8gYWNjZXB0IGNvbmZpZ3VyYXRpb24gZnJvbSBhIHZhcmlldHkgb2Ygc291cmNlcyBhbmRcXG4gIDM0OlxcdFxcdCAgdHJhbnNsYXRlIGl0IGludG8gcGFja2V0IHByb2Nlc3NpbmcgcnVsZXMuXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgU2VlIGh0dHA6Ly9vcGVudnN3aXRjaC5vcmcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIHVzZXJzcGFjZVxcbiAgMzc6XFx0XFx0ICB1dGlsaXRpZXMuXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxcbiAgNDA6XFx0XFx0ICBjYWxsZWQgb3BlbnZzd2l0Y2guXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU5OjE0LjM3ODE3MDMzNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODEwMzMxNDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipPcGVuIHZTd2l0Y2ggYW5kIEVycm9yIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGBPUEVOVlNXSVRDSGAgc2l0dWF0aW9uLiBJdCBmZWVscyBsaWtlIHdlJ3JlIHplcm9pbmcgaW4gb24gYSBzb2x1dGlvbiDigJMgaG9wZWZ1bGx5LCB0aGUgZGVwbG95bWVudCB3aWxsIHdvcmsgd2l0aCBpdC4gVGhlIGNvcmUgcHJpbmNpcGxlIHNlZW1zIHNvdW5kLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLlxuXG5TcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgc2tiX3R4X2Vycm9yYCBpcyBpc29sYXRlZCBhbmQgb25seSBjYWxsZWQgd2l0aGluIHRoZSBzY29wZSB0aGF0IEkgdGhpbmsgaXQgaXMuIE5vIHNuZWFreSBzaWRlIGVmZmVjdHMgb3IgdW5leHBlY3RlZCBjYWxscyBmcm9tIGVsc2V3aGVyZS4gTGV0IG1lIGdvIG92ZXIgdGhlIGNvZGUgYWdhaW4gdG8gbWFrZSBzdXJlIHRoYXQgZnVuY3Rpb24gaXMgb25seSByZWFjaGFibGUgZnJvbSB0aGUgbG9jYXRpb25zIEkgZXhwZWN0LiBXZSBjYW4ndCBhZmZvcmQgYW55IHN1cnByaXNlcyB3aGVuIGl0IGNvbWVzIHRvIGVycm9yIGhhbmRsaW5nLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgdGhhdCBuZWVkcyBleHRyYSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxOTMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU5OjE3LjE4ODUwNTExNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2MzY4OTkxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2JfdHhfZXJyb3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L292cG4vaW8uYz0zNTY9bmV0ZGV2X3R4X3Qgb3Zwbl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTQ0My1cXHRvdnBuX2Rldl9kc3RhdHNfdHhfZHJvcHBlZChvdnBuLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L292cG4vaW8uYzo0NDQ6XFx0c2tiX3R4X2Vycm9yKHNrYik7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTQ0NS1cXHRrZnJlZV9za2JfbGlzdChza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MTAwMz1zdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMDgzLVxcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XFxuZHJpdmVycy9uZXQvdHVuLmM6MTA4NDpcXHRza2JfdHhfZXJyb3Ioc2tiKTtcXG5kcml2ZXJzL25ldC90dW4uYy0xMDg1LVxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBkcm9wX3JlYXNvbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTEzMzg9dm9pZCBza2JfZHVtcChjb25zdCBjaGFyICpsZXZlbCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBmdWxsX3BrdCk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxMzM5OnZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTM0MC1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE0MTI9RVhQT1JUX1NZTUJPTChza2JfZHVtcCk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNDE0LS8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjE0MTU6ICpcXHRza2JfdHhfZXJyb3IgLSByZXBvcnQgYW4gc2tfYnVmZiB4bWl0IGVycm9yXFxubmV0L2NvcmUvc2tidWZmLmMtMTQxNi0gKlxcdEBza2I6IGJ1ZmZlciB0aGF0IHRyaWdnZXJlZCBhbiBlcnJvclxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTQyMy0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzoxNDI0OnZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2tidWZmLmMtMTQyNS17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNDMwLX1cXG5uZXQvY29yZS9za2J1ZmYuYzoxNDMxOkVYUE9SVF9TWU1CT0woc2tiX3R4X2Vycm9yKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xNDMyLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz03MDU9bmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MDMtXFx0aWYgKCFza2IpIHtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjgwNDpcXHRcXHRza2JfdHhfZXJyb3IoZW50c2tiKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgwNS1cXHRcXHRnb3RvIG5sbXNnX2ZhaWx1cmU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgxMi1cXHRpZiAoIW5saCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6ODEzOlxcdFxcdHNrYl90eF9lcnJvcihlbnRza2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODE0LVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NjMtbmxhX3B1dF9mYWlsdXJlOlxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTY0OlxcdHNrYl90eF9lcnJvcihlbnRza2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTY1LVxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjQ1PXZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjg3LVxcdFxcdGRlZmF1bHQ6XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6Mjg4OlxcdFxcdFxcdHNrYl90eF9lcnJvcihza2IpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI4OS1cXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jPTE1MjU9aW50IHNrYl9tZXRhX2ludmFsaWRfY3R4KHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jLTE1MzQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmM6MTUzNTpTRUMoXFxcImZlbnRyeS9za2JfdHhfZXJyb3JcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jLTE1MzYtX19mYWlsdXJlIF9fbXNnKFxcXCJtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmM9MTUzNz1pbnQgQlBGX1BST0coc2tiX2ludmFsaWRfY3R4X2ZlbnRyeSwgdm9pZCAqc2tiKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMtMTU0Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYzoxNTQ3OlNFQyhcXFwiZmV4aXQvc2tiX3R4X2Vycm9yXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYy0xNTQ4LV9fZmFpbHVyZSBfX21zZyhcXFwibXVzdCBiZSByZWZlcmVuY2VkIG9yIHRydXN0ZWRcXFwiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1OToxOS41NTIyMDQ0NDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU0ODY1MDI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgaXQgdG91Y2hlcyBjb2RlIGluIGBkcml2ZXJzL25ldC90dW4uY2AsIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jYCwgYGRyaXZlcnMvbmV0L292cG4vaW8uY2AsIGFuZCBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgIOKAkyBhbGwgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMgYW5kIE9wZW4gdlN3aXRjaCwgc3BlY2lmaWNhbGx5IOKAkyByZWFsbHkgZmxhZ3MgaXQgZm9yIGNsb3NlIGV4YW1pbmF0aW9uLiBJJ20gZm9jdXNpbmcgb24gdGhlc2Uga2V5IHN5bWJvbHM6IGBza2JfdHhfZXJyb3JgLCBgc2tiX3plcm9jb3B5YCwgYW5kIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLlxuXG5UaGUgcGF0Y2gncyBtb2RpZmljYXRpb24gb2YgYHNrYl90eF9lcnJvcmAgdG8gZWZmZWN0aXZlbHkgKm5vLW9wKiBmb3IgY2xvbmVkIHNrYnMsIGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCBgc2tiX3plcm9jb3B5YCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgaXMgd2hhdCdzIGNhdGNoaW5nIG15IGV5ZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBrZXkgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIGRlYWxpbmcgd2l0aCB6ZXJvLWNvcHkgb3BlcmF0aW9ucyBhbmQsIGNyaXRpY2FsbHksIE9wZW4gdlN3aXRjaCBkYXRhIHBhdGggcGFja2V0IHByb2Nlc3NpbmcuIEkgc2VlIGEgaGlnaCByaXNrIG9mIHN1YnRsZSBtZW1vcnkgZXJyb3JzOiBsZWFrcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4geW91J3JlIG11Y2tpbmcgYXJvdW5kIHdpdGggc2hhcmVkIG1lbW9yeSBidWZmZXJzLCB3aGljaCB6ZXJvLWNvcHkgcmVsaWVzIG9uLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIGFuZCBJIHdpbGwgZW5hYmxlIHRoZSBgT1BFTlZTV0lUQ0hgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuc3VyZSB0aGUgT1ZTIGNvZGUgcGF0aHMgYXJlIGFjdGl2ZSBkdXJpbmcgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRob3JvdWdobHkgdGVzdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzI2LCJPdXRwdXRUb2tlbnMiOjE1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1OToyNS4xMDA4NTc0MjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgwNDUyMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX3R4X2Vycm9yXCIsXG4gICAgXCJza2JfemVyb2NvcHlcIixcbiAgICBcIm92c19kcF9wcm9jZXNzX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfdHhfZXJyb3JgIGluIGNvcmUgbmV0d29ya2luZyB0byBkbyBub3RoaW5nIGZvciBjbG9uZWQgc2ticywgYW5kIGNoYW5nZXMgaXRzIHVzYWdlIGluIGBza2JfemVyb2NvcHlgIGFuZCBPcGVuIHZTd2l0Y2gncyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBhbmQgT3BlbiB2U3dpdGNoIHBhdGhzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciB3aXRoIHplcm9jb3B5IHNrYnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2JfdHhfZXJyb3JcIixcbiAgICBcInNrYl96ZXJvY29weVwiLFxuICAgIFwib3ZzX2RwX3Byb2Nlc3NfcGFja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl90eF9lcnJvcmAgaW4gY29yZSBuZXR3b3JraW5nIHRvIGRvIG5vdGhpbmcgZm9yIGNsb25lZCBza2JzLCBhbmQgY2hhbmdlcyBpdHMgdXNhZ2UgaW4gYHNrYl96ZXJvY29weWAgYW5kIE9wZW4gdlN3aXRjaCdzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGFuZCBPcGVuIHZTd2l0Y2ggcGF0aHMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIHdpdGggemVyb2NvcHkgc2ticy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6NTk6MjUuMjI4OTEzMDIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkxMDY5NjQzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU5OjI1LjIyOTY3ODMyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjkwOTkyNjcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIGBza2JfdHhfZXJyb3JgIHRvIGlnbm9yZSBjbG9uZWQgc2ticywgYXMgdGhlaXIgemVyby1jb3B5IHN0YXRlIChpbiBgc2tiX3NoaW5mb2ApIGlzIHNoYXJlZCBhbW9uZyBjbG9uZXMuIEl0IGFsc28gYWRqdXN0cyB3aGVyZSBgc2tiX3R4X2Vycm9yYCBpcyBjYWxsZWQgaW4gYHNrYl96ZXJvY29weWAgYW5kIG9wZW52c3dpdGNoIGRhdGFwYXRoLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgaXNzdWVzIHdpdGggemVyby1jb3B5IHN0YXRlIG1hbmFnZW1lbnQgYW5kIHJlZmVyZW5jZSBjb3VudGluZywgd2hpY2ggdHlwaWNhbGx5IGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVncy4gU3VjaCBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYTU0ZTI2NGYzZDE4M2NkNzQ1MTkzZTZkNjkyYzFmMjAyM2NlNDNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMTYgMDc6NTg6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCBiYTNkYmFjODBmYjQ5Li4wNDc3NmExMTIzMzQyIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbisrKyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtMTQxNywxMCArMTQxNywxMyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTtcbiAgKlxuICAqXHRSZXBvcnQgeG1pdCBlcnJvciBpZiBhIGRldmljZSBjYWxsYmFjayBpcyB0cmFja2luZyB0aGlzIHNrYi5cbiAgKlx0c2tiIG11c3QgYmUgZnJlZWQgYWZ0ZXJ3YXJkcy5cbisgKlxuKyAqXHREb2VzIG5vdGhpbmcgZm9yIGEgY2xvbmVkIHNrYjogdGhlIHplcm9jb3B5IHN0YXRlIGxpdmVzIGluXG4rICpcdHNrYl9zaGluZm8oKSwgd2hpY2ggdGhlIGNsb25lcyBzaGFyZS5cbiAgKi9cbiB2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdGlmIChza2IpIHtcbitcdGlmIChza2IgXHUwMDI2XHUwMDI2ICFza2JfY2xvbmVkKHNrYikpIHtcbiBcdFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG4gXHRcdHNrYl96Y29weV9jbGVhcihza2IsIHRydWUpO1xuIFx0fVxuQEAgLTM5MDcsMTAgKzM5MTAsOSBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG4gXG4gXHRza2JfbGVuX2FkZCh0bywgbGVuICsgcGxlbik7XG4gXG4tXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpIHtcbi1cdFx0c2tiX3R4X2Vycm9yKGZyb20pO1xuK1x0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbitcbiBcdHNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBza2Jfc2hpbmZvKGZyb20pLVx1MDAzZW5yX2ZyYWdzOyBpKyspIHtcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG5pbmRleCBhZTY5YjJjYWJhYjllLi5mZmY3NWMzZWVkMTE2IDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG5AQCAtMjg1LDYgKzI4NSw3IEBAIHZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxuIFx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4rXHRcdFx0c2tiX3R4X2Vycm9yKHNrYik7XG4gXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC02MDEsOCArNjAyLDYgQEAgc3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRlcnIgPSBnZW5sbXNnX3VuaWNhc3Qob3ZzX2RwX2dldF9uZXQoZHApLCB1c2VyX3NrYiwgdXBjYWxsX2luZm8tXHUwMDNlcG9ydGlkKTtcbiBcdHVzZXJfc2tiID0gTlVMTDtcbiBvdXQ6XG4tXHRpZiAoZXJyKVxuLVx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbiBcdGNvbnN1bWVfc2tiKHVzZXJfc2tiKTtcbiBcdGNvbnN1bWVfc2tiKG5za2IpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6NTk6MjUuMjI5Njc5NzkzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTA5ODk4MTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBaZXJvLUNvcHkgRXJyb3IgSGFuZGxpbmcgYW5kIENsb25lZCBTS0JzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtb2RpZnlpbmcgYHNrYl90eF9lcnJvcmAgYW5kIGEgZmV3IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoZSBrZXJuZWwuIFRoZSBjb3JlIGNoYW5nZXMgaW52b2x2ZSBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGVycm9ycyB3aXRoIHplcm8tY29weSBTS0JzLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggY2xvbmVkIFNLQnMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIHRoaXMgaW50cm9kdWNlZCBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cblxuVGhlIGZpcnN0IHBhcnQgb2YgdGhlIHBhdGNoIG1ha2VzIGBza2JfdHhfZXJyb3JgIGEgbm8tb3AgaWYgdGhlIFNLQiBpcyBjbG9uZWQuIEl0IGFsc28gcmVtb3ZlcyBhIGNhbGwgdG8gYHNrYl90eF9lcnJvcmAgd2l0aGluIGBza2JfemVyb2NvcHlgIGFuZCBtb3ZlcyBhIGNhbGwgZnJvbSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgdG8gYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIEZyb20gdGhpcywgSSB0aGluayBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzLlxuXG5UaGUgY3JpdGljYWwgdGhpbmcgaXMgdGhlIGBza2JfY2xvbmVkKHNrYilgIGNoZWNrLiBgc2tiX3R4X2Vycm9yYCBpcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgdGhlIHplcm8tY29weSBzdGF0ZSB3aGljaCBpbmNsdWRlcyBjYWxsaW5nIGBza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKWAgYW5kIGBza2JfemNvcHlfY2xlYXIoc2tiLCB0cnVlKWAuIFRoZSBgc2tiX3NoaW5mbygpYCBzdHJ1Y3R1cmUgaG9sZHMgemVyby1jb3B5IHN0YXRlIGFuZCB0aGlzIGlzIHNoYXJlZCB3aXRoIGNsb25lcy4gVGhpcyBtYWtlcyBzZW5zZTsgaWYgYW4gZXJyb3Igb2NjdXJzIGFuZCBgc2tiX3R4X2Vycm9yYCAqZG9lcyogcnVuIG9uIG9uZSBjbG9uZSwgaXQgY291bGQgY2xlYXIgdGhlIHplcm8tY29weSBzdGF0ZSBmb3IgYWxsIG9mIHRoZW0uIFRoaXMgd291bGQgbGVhZCB0byBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBnZW5lcmFsbHkgaW5jb3JyZWN0IHN0YXRlIG1hbmFnZW1lbnQsIHJpZ2h0PyBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgZml4aW5nIHRoYXQsIHByZXZlbnRpbmcgdGhlIGNsZWFyaW5nIGlmIHRoZSBTS0IgaXMgY2xvbmVkLlxuXG5Ob3cgSSBoYXZlIHRvIHRoaW5rLCBkb2VzICpub3QqIGNhbGxpbmcgYHNrYl90eF9lcnJvcmAgbGVhdmUgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBpdCBsZWF2ZXMgdGhlIHN0YXRlIGludGFjdCBmb3IgdGhlIG90aGVyIGNsb25lcywgd2hpY2ggaXMgdGhlIGNvcnJlY3QgYmVoYXZpb3IuIENhbGxpbmcgYHNrYl90eF9lcnJvcmAgd291bGQgKmNsZWFyKiB0aGUgc3RhdGUgYW5kIHBvc3NpYmx5IGNhdXNlIGlzc3VlcyBmb3Igb3RoZXIgY2xvbmVzLiBUaGUgcmVtb3ZhbCBvZiBgc2tiX3R4X2Vycm9yKGZyb20pYCBpbiBgc2tiX3plcm9jb3B5YCBpcyBiZWNhdXNlIGBmcm9tYCBpcyBhbHNvIGxpa2VseSBjbG9uZWQsIGFuZCBzaG91bGQgbm90IGhhdmUgaXRzIHN0YXRlIGNsZWFyZWQgb24gYW4gZXJyb3IgZnJvbSB0aGlzIGZ1bmN0aW9uLiBUaGUgY2FsbGVyIG9mIGBza2JfemVyb2NvcHlgIHdpbGwgcHJvYmFibHkgZnJlZSB0aGUgU0tCcy5cblxuVGhlIGNoYW5nZSBpbiBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgbWFrZXMgbWUgdGhpbmsuIEluIHRoYXQgZnVuY3Rpb24sIGl0IGxvb2tzIGxpa2UgYHNrYl90eF9lcnJvcihza2IpYCBpcyByZW1vdmVkIG9uIGFuIGVycm9yIGFuZCBhZGRlZCB0byBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBhcyB0aGUgZGVmYXVsdCBjYXNlLlxuXG5Pa2F5LCBhZnRlciBkaWdnaW5nIGludG8gaXQsIGl0J3MgY2xlYXIgdGhpcyBpcyBub3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgYWxsLiBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBoYW5kbGluZyB0aGUgY29tcGxleGl0aWVzIG9mIHplcm8tY29weSByZWZlcmVuY2UgY291bnRpbmcgYW5kIHN0YXRlIG1hbmFnZW1lbnQsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGxpa2UgVUFGLCBkb3VibGUtZnJlZXMsIGV0Yy4sIGFuZCB0aGF0J3MgcHJlY2lzZWx5IHdoZXJlIHRvb2xzIGxpa2UgS0FTQU4gY29tZSBpbi5cblxuTGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgYHNrYl90eF9lcnJvcmAgYW5kIGBza2JfemNvcHlfY2xlYXJgLiBgc2tiX3pjb3B5X2NsZWFyYCBjYWxscyB0aGUgY2FsbGJhY2sgd2l0aGluIHRoZSBgdWJ1Zl9pbmZvYCwgZGVjcmVtZW50cyBhIHJlZmVyZW5jZSBjb3VudCwgYW5kIGNsZWFycyB0aGUgYFNLQkZMX1pFUk9DT1BZX0VOQUJMRWAgZmxhZy4gSXQgaXMgcHVyZWx5IGFib3V0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgY2FsbGJhY2tzIGZvciB6ZXJvLWNvcHkuXG5cblNvLCB0aGlzIHBhdGNoIGlzbid0IGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCdzIGZpeGluZyBhIG1lbW9yeSBjb3JydXB0aW9uIGJ1ZyByZWxhdGVkIHRvIHNoYXJlZCBzdGF0ZSBpbiBjbG9uZWQgU0tCcy4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgaGVyZS5cblxuSSB3aWxsIG1hcmsgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDgsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6NTk6MzguMTM5NTgwOTU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcmAgdG8gaWdub3JlIGNsb25lZCBza2JzLCBhcyB0aGVpciB6ZXJvLWNvcHkgc3RhdGUgKGluIGBza2Jfc2hpbmZvYCkgaXMgc2hhcmVkIGFtb25nIGNsb25lcy4gSXQgYWxzbyBhZGp1c3RzIHdoZXJlIGBza2JfdHhfZXJyb3JgIGlzIGNhbGxlZCBpbiBgc2tiX3plcm9jb3B5YCBhbmQgb3BlbnZzd2l0Y2ggZGF0YXBhdGguIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBpc3N1ZXMgd2l0aCB6ZXJvLWNvcHkgc3RhdGUgbWFuYWdlbWVudCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCB0eXBpY2FsbHkgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzLiBTdWNoIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBgc2tiX3R4X2Vycm9yYCB0byBpZ25vcmUgY2xvbmVkIHNrYnMsIGFzIHRoZWlyIHplcm8tY29weSBzdGF0ZSAoaW4gYHNrYl9zaGluZm9gKSBpcyBzaGFyZWQgYW1vbmcgY2xvbmVzLiBJdCBhbHNvIGFkanVzdHMgd2hlcmUgYHNrYl90eF9lcnJvcmAgaXMgY2FsbGVkIGluIGBza2JfemVyb2NvcHlgIGFuZCBvcGVudnN3aXRjaCBkYXRhcGF0aC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGlzc3VlcyB3aXRoIHplcm8tY29weSBzdGF0ZSBtYW5hZ2VtZW50IGFuZCByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIHR5cGljYWxseSBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Z3MuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowsrn8j[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-16 07:11:46 +0000 UTC FinishedAt: 2026-08-16 07:59:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "24ef02f934eeb48830cff6b739abc3c62b1d107b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "ad6fcfce-e22b-4928-bc57-403e9345b7da" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "skb_tx_error", "skb_zerocopy", "ovs_dp_process_packet" ], "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+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3R4X2Vycm9yJiMzNDssCiAgICAmIzM0O3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcmAgdG8gaWdub3JlIGNsb25lZCBza2JzLCBhcyB0aGVpciB6ZXJvLWNvcHkgc3RhdGUgKGluIGBza2Jfc2hpbmZvYCkgaXMgc2hhcmVkIGFtb25nIGNsb25lcy4gSXQgYWxzbyBhZGp1c3RzIHdoZXJlIGBza2JfdHhfZXJyb3JgIGlzIGNhbGxlZCBpbiBgc2tiX3plcm9jb3B5YCBhbmQgb3BlbnZzd2l0Y2ggZGF0YXBhdGguIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBpc3N1ZXMgd2l0aCB6ZXJvLWNvcHkgc3RhdGUgbWFuYWdlbWVudCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCB0eXBpY2FsbHkgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzLiBTdWNoIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2tiX3R4X2Vycm9yYCBpbiBjb3JlIG5ldHdvcmtpbmcgdG8gZG8gbm90aGluZyBmb3IgY2xvbmVkIHNrYnMsIGFuZCBjaGFuZ2VzIGl0cyB1c2FnZSBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGFuZCBPcGVuIHZTd2l0Y2ggcGF0aHMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIHdpdGggemVyb2NvcHkgc2ticy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNhNTRlMjY0ZjNkMTgzY2Q3NDUxOTNlNmQ2OTJjMWYyMDIzY2U0M2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwNzo1ODozNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCBiYTNkYmFjODBmYjQ5Li4wNDc3NmExMTIzMzQyIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtMTQxNywxMCAmIzQzOzE0MTcsMTMgQEAgRVhQT1JUX1NZTUJPTChza2JfZHVtcCk7XG4gICpcbiAgKlx0UmVwb3J0IHhtaXQgZXJyb3IgaWYgYSBkZXZpY2UgY2FsbGJhY2sgaXMgdHJhY2tpbmcgdGhpcyBza2IuXG4gICpcdHNrYiBtdXN0IGJlIGZyZWVkIGFmdGVyd2FyZHMuXG4mIzQzOyAqXG4mIzQzOyAqXHREb2VzIG5vdGhpbmcgZm9yIGEgY2xvbmVkIHNrYjogdGhlIHplcm9jb3B5IHN0YXRlIGxpdmVzIGluXG4mIzQzOyAqXHRza2Jfc2hpbmZvKCksIHdoaWNoIHRoZSBjbG9uZXMgc2hhcmUuXG4gICovXG4gdm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRpZiAoc2tiKSB7XG4mIzQzO1x0aWYgKHNrYiBcdTAwMjZcdTAwMjYgIXNrYl9jbG9uZWQoc2tiKSkge1xuIFx0XHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcbiBcdFx0c2tiX3pjb3B5X2NsZWFyKHNrYiwgdHJ1ZSk7XG4gXHR9XG5AQCAtMzkwNywxMCAmIzQzOzM5MTAsOSBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG4gXG4gXHRza2JfbGVuX2FkZCh0bywgbGVuICYjNDM7IHBsZW4pO1xuIFxuLVx0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKSB7XG4tXHRcdHNrYl90eF9lcnJvcihmcm9tKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuJiM0MztcbiBcdHNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBza2Jfc2hpbmZvKGZyb20pLVx1MDAzZW5yX2ZyYWdzOyBpJiM0MzsmIzQzOykge1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGFlNjliMmNhYmFiOWUuLmZmZjc1YzNlZWQxMTYgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0yODUsNiAmIzQzOzI4NSw3IEBAIHZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxuIFx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdHNrYl90eF9lcnJvcihza2IpO1xuIFx0XHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtNjAxLDggJiM0Mzs2MDIsNiBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGVyciA9IGdlbmxtc2dfdW5pY2FzdChvdnNfZHBfZ2V0X25ldChkcCksIHVzZXJfc2tiLCB1cGNhbGxfaW5mby1cdTAwM2Vwb3J0aWQpO1xuIFx0dXNlcl9za2IgPSBOVUxMO1xuIG91dDpcbi1cdGlmIChlcnIpXG4tXHRcdHNrYl90eF9lcnJvcihza2IpO1xuIFx0Y29uc3VtZV9za2IodXNlcl9za2IpO1xuIFx0Y29uc3VtZV9za2IobnNrYik7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2tiX3R4X2Vycm9yJiMzNDssCiAgICAmIzM0O3NrYl96ZXJvY29weSYjMzQ7LAogICAgJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl90eF9lcnJvcmAgaW4gY29yZSBuZXR3b3JraW5nIHRvIGRvIG5vdGhpbmcgZm9yIGNsb25lZCBza2JzLCBhbmQgY2hhbmdlcyBpdHMgdXNhZ2UgaW4gYHNrYl96ZXJvY29weWAgYW5kIE9wZW4gdlN3aXRjaCYjMzk7cyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBhbmQgT3BlbiB2U3dpdGNoIHBhdGhzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciB3aXRoIHplcm9jb3B5IHNrYnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYTU0ZTI2NGYzZDE4M2NkNzQ1MTkzZTZkNjkyYzFmMjAyM2NlNDNjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMDc6NTg6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IGJhM2RiYWM4MGZiNDkuLjA0Nzc2YTExMjMzNDIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC0xNDE3LDEwICYjNDM7MTQxNywxMyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTsKICAqCiAgKglSZXBvcnQgeG1pdCBlcnJvciBpZiBhIGRldmljZSBjYWxsYmFjayBpcyB0cmFja2luZyB0aGlzIHNrYi4KICAqCXNrYiBtdXN0IGJlIGZyZWVkIGFmdGVyd2FyZHMuCiYjNDM7ICoKJiM0MzsgKglEb2VzIG5vdGhpbmcgZm9yIGEgY2xvbmVkIHNrYjogdGhlIHplcm9jb3B5IHN0YXRlIGxpdmVzIGluCiYjNDM7ICoJc2tiX3NoaW5mbygpLCB3aGljaCB0aGUgY2xvbmVzIHNoYXJlLgogICovCiB2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWlmIChza2IpIHsKJiM0MzsJaWYgKHNrYiAmYW1wOyZhbXA7ICFza2JfY2xvbmVkKHNrYikpIHsKIAkJc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7CiAJCXNrYl96Y29weV9jbGVhcihza2IsIHRydWUpOwogCX0KQEAgLTM5MDcsMTAgJiM0MzszOTEwLDkgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQogCiAJc2tiX2xlbl9hZGQodG8sIGxlbiAmIzQzOyBwbGVuKTsKIAotCWlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkgewotCQlza2JfdHhfZXJyb3IoZnJvbSk7CiYjNDM7CWlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQomIzQzOwogCXNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2tiX3NoaW5mbyhmcm9tKS0mZ3Q7bnJfZnJhZ3M7IGkmIzQzOyYjNDM7KSB7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCmluZGV4IGFlNjliMmNhYmFiOWUuLmZmZjc1YzNlZWQxMTYgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCkBAIC0yODUsNiAmIzQzOzI4NSw3IEBAIHZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KQogCQkJY29uc3VtZV9za2Ioc2tiKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgomIzQzOwkJCXNrYl90eF9lcnJvcihza2IpOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlicmVhazsKIAkJfQpAQCAtNjAxLDggJiM0Mzs2MDIsNiBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAllcnIgPSBnZW5sbXNnX3VuaWNhc3Qob3ZzX2RwX2dldF9uZXQoZHApLCB1c2VyX3NrYiwgdXBjYWxsX2luZm8tJmd0O3BvcnRpZCk7CiAJdXNlcl9za2IgPSBOVUxMOwogb3V0OgotCWlmIChlcnIpCi0JCXNrYl90eF9lcnJvcihza2IpOwogCWNvbnN1bWVfc2tiKHVzZXJfc2tiKTsKIAljb25zdW1lX3NrYihuc2tiKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIFBhY2tldCBIYW5kbGluZyBDaGFuZ2VzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgaG93IHdlIGhhbmRsZSB0cmFuc21pdCBlcnJvcnMsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBuZXR3b3JrIGJ1ZmZlcnMgKGBza2JgcykuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBpdCYjMzk7cyBtb2RpZnlpbmcgYHNrYl90eF9lcnJvcmAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCB0byBlZmZlY3RpdmVseSBkbyBub3RoaW5nIGZvciBjbG9uZWQgU0tCcy4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2sgYXQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdC4gSXQgYWxzbyBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyByZW1vdmluZyBgc2tiX3R4X2Vycm9yKGZyb20pYCBjYWxscyBmcm9tIGBza2JfemVyb2NvcHlgIGluIHRoZSBzYW1lIGZpbGUgYW5kIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLCBhbmQgYWRkaW5nIGBza2JfdHhfZXJyb3Ioc2tiKWAgdG8gYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIHdoaWNoIGlzIGFsc28gaW4gdGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCBjb2RlLgoKVGhpcyB0b3VjaGVzIGNvcmUgbmV0d29ya2luZyBhbmQgT3BlbiB2U3dpdGNoLCB3aGljaCBpcyBhIGtleSBzaWduYWwgdGhhdCB0aGlzIGlzIGEgcGF0Y2ggdGhhdCYjMzk7cyBwb3RlbnRpYWxseSBpbXBhY3RmdWwgYW5kIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZyB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgcmVncmVzc2lvbiBidWdzLgoKTGV0JiMzOTtzIHF1aWNrbHkgY29uZmlybSBPcGVuIHZTd2l0Y2ggY29uZmlndXJhdGlvbiwganVzdCB0byBiZSBzdXJlLiBBbHJpZ2h0LCBgQ09ORklHX09QRU5WU1dJVENIYCBpbiBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgIHdpbGwgdGVsbCB1cyBpZiBpdCYjMzk7cyBlbmFibGVkLiBUaGUgY29yZSBuZXR3b3JraW5nIGJpdHMgYXJlIGFsd2F5cyBlbmFibGVkLCBzbyB3ZSYjMzk7cmUgZ29vZCB0aGVyZS4KCkkmIzM5O20gemVyb2luZyBpbiBvbiBhIGZldyBjcml0aWNhbCBzeW1ib2xzIGhlcmU6IGBza2JfdHhfZXJyb3JgLCBgc2tiX3plcm9jb3B5YCwgYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIEkgbmVlZCB0byB2ZXJpZnkgdGhlaXIgdmlzaWJpbGl0eSB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgbGlua2FnZSBpc3N1ZXMgb3Igc3VycHJpc2VzLiBTZWVtcyBsaWtlIGBza2JfdHhfZXJyb3JgLCBgc2tiX3plcm9jb3B5YCwgYW5kIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgIGFyZSBhbGwgbm9uLXN0YXRpYywgc28gdGhlIGNoYW5jZXMgYXJlIHRoYXQgYEVYUE9SVF9TWU1CT0woc2tiX3R4X2Vycm9yKWAgaXMgaW4gcGxhY2UuIEJ1dCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIEhvd2V2ZXIsIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpcyBzdGF0aWMuIFNvLCBpdCBtYXkgbm90IGJlIGEgZ29vZCBmb2NhbCBwb2ludC4KCkkgc2hvdWxkIGNoZWNrIHRoZSBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgIGZpbGUgZm9yIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBhcyB3ZWxsLiBZdXAsIGl0JiMzOTtzIHN0YXRpYy4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgc2tiX3R4X2Vycm9yYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgIGFuZCBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgc2tiX3R4X2Vycm9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9MTQxMj1FWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNDIzLSAqL1xubmV0L2NvcmUvc2tidWZmLmM6MTQyNDp2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L2NvcmUvc2tidWZmLmMtMTQyNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaWdnaW5nIGludG8gdGhlIEtlcm5lbCBOZXR3b3JraW5nIENvZGUqKgoKT2theSwgc28gYHNrYl90eF9lcnJvcmAgaXMgZXhwb3J0ZWQg4oCTIHRoYXQmIzM5O3MgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byBhIHJlbGF0ZWQgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBgc2tiX3plcm9jb3B5YC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoZXNlIGFyZSBsaW5rZWQgc29tZWhvdy4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzIGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCAqaG93KiB0aGV5IGludGVyYWN0LCBpZiB0aGV5IGRvLiBUaGlzIGNvdWxkIGJlIGFib3V0IGVycm9yIGhhbmRsaW5nIGluIHplcm8tY29weSBzY2VuYXJpb3MsIG9yIG1heWJlIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudC4gUmVnYXJkbGVzcywgYHNrYl96ZXJvY29weWAgaXMgdGhlIG5leHQgbG9naWNhbCBmdW5jdGlvbiB0byBpbnZlc3RpZ2F0ZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IHNrYl96ZXJvY29weSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NrYnVmZi5jPTE5MTM9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE5MTQtXG5uZXQvY29yZS9za2J1ZmYuYzoxOTE1OmludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2NvcmUvc2tidWZmLmMtMTkxNi1cdFx0XHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTcyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgc2tiX3plcm9jb3B5YCoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBza2JfemVyb2NvcHlgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0IGxpdmVzIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIEdvb2QsIHRoYXQgbmFycm93cyB0aGUgc2VhcmNoIGNvbnNpZGVyYWJseS4gTGV0JiMzOTtzIHB1bGwgdXAgdGhlIGRlZmluaXRpb24uIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBwYXJzZSB0aHJvdWdoIHRoZSBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBpbnRlbnQuIEhvcGVmdWxseSwgdGhlIGNvbW1lbnRzIGFyZSBjbGVhciBhbmQgY29uY2lzZSwgYW5kIHRoZSBjb2RlIGZvbGxvd3Mgc3RhbmRhcmQga2VybmVsIGNvZGluZyBjb252ZW50aW9ucyAtIGxldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZGlzc2VjdC4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCBob3cgdGhpcyB6ZXJvLWNvcHkgbWVjaGFuaXNtIHdvcmtzIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgc2tfYnVmZiBsaWZlY3ljbGUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBkYXRhIHJhY2VzIGFuZCB0aGVpciBtaXRpZ2F0aW9ucy4gT2YgcGFydGljdWxhciBpbnRlcmVzdCBpcyB0aGUgaW50ZXJwbGF5IHdpdGggcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBidWZmZXIgbWFuYWdlbWVudCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGFuZCBETUEuIEkmIzM5O2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgbG9ja2luZyBwYXR0ZXJucyBvciBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4gVW5kZXJzdGFuZGluZyB0aGUgZGF0YSBmbG93LCBlc3BlY2lhbGx5IHRoZSBjb3B5LW9uLXdyaXRlIGFzcGVjdHMsIGlzIGNydWNpYWwgZm9yIGFzc2Vzc2luZyBpdHMgb3ZlcmFsbCBlZmZpY2llbmN5IGFuZCBwb3RlbnRpYWwgZHJhd2JhY2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl96ZXJvY29weVxcKHN0cnVjdCBza19idWZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmM9Mzg3OD1pbnRcbm5ldC9jb3JlL3NrYnVmZi5jOjM4Nzk6c2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxubmV0L2NvcmUvc2tidWZmLmMtMzg4MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM3MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBgc2tiX3plcm9jb3B5YCBFeHBvcnQgU3RhdHVzKioKCkFscmlnaHQsIHRoZSBjb2RlIHNuaXBwZXQgaW4gZnJvbnQgb2YgbWUgaXMgYGludCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgZnVuY3Rpb24sIGBza2JfemVyb2NvcHlgLCBpcyBhY3R1YWxseSBleHBvcnRlZCBhbmQgYWNjZXNzaWJsZSBmb3IgdXNlLiBHaXZlbiB0aGlzIGlzIGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLCBpdCYjMzk7cyBsaWtlbHkgcGFydCBvZiB0aGUga2VybmVsJiMzOTtzIGludGVybmFsIEFQSS4gSG93ZXZlciwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyBzcGVjaWZpY2FsbHkgZXhwb3J0ZWQg4oCTIGVpdGhlciB0aHJvdWdoIGEgc3ltYm9sIHRhYmxlIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtIOKAkyBzbyB0aGF0IGl0JiMzOTtzIGF2YWlsYWJsZSB0byBtb2R1bGVzIGFuZCB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIGlmIHRoYXQgaXMgdGhlIHVzZSBjYXNlLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJIHJlYWRpbHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGZyb20gbXkgY3VycmVudCBjb250ZXh0LCBvciB3aWxsIEkgbmVlZCB0byBqdW1wIHRocm91Z2ggaG9vcHMgbGlrZSBjYWxsaW5nIGl0IGludGVybmFsbHkgdG8gYSBzcGVjaWZpYyBkZXZpY2UgZHJpdmVyIGZ1bmN0aW9uLiBJIG5lZWQgdG8ga25vdyB0aGUgdmlzaWJpbGl0eSBvZiB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipza2JfemVyb2NvcHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz0xOTE1PWludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTItfVxubmV0L2NvcmUvc2tidWZmLmM6MTk1MzpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0pO1xubmV0L2NvcmUvc2tidWZmLmMtMTk1NC1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0zODQxPXNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM4NTctfVxubmV0L2NvcmUvc2tidWZmLmM6Mzg1ODpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XG5uZXQvY29yZS9za2J1ZmYuYy0zODU5LVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTM4Nzk9c2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTM5MzQtfVxubmV0L2NvcmUvc2tidWZmLmM6MzkzNTpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xubmV0L2NvcmUvc2tidWZmLmMtMzkzNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk4NgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktlcm5lbCBJbnZlc3RpZ2F0aW9uOiBgc2tiX3plcm9jb3B5YCAmYW1wOyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCoqCgpBbHJpZ2h0LCBzbyBgc2tiX3plcm9jb3B5YCAqaXMqIGV4cG9ydGVkLCBjb25maXJtZWQuIFRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGJyb2FkZXIgZGF0YSBwYXRoIHdpdGhpbiBPVlMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBvdXIgY3VycmVudCBwcm9ibGVtLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gZGVlcGx5IGV4YW1pbmUgdGhlIGludGVybmFscyBvZiBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgbGluY2hwaW4uIFVuZGVyc3RhbmRpbmcgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgU0tCLCBob3cgaXQgaGFuZGxlcyBwYWNrZXQgYnVmZmVycywgYW5kIHdoZXRoZXIgaXQmIzM5O3MgKnV0aWxpemluZyogYHNrYl96ZXJvY29weWAgKG9yICpjb3VsZCogdXRpbGl6ZSBpdCkgaXMgZ29pbmcgdG8gYmUga2V5IHRvIHdoYXRldmVyIEkgYW0gdHJ5aW5nIHRvIGFjaGlldmUuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgZmxvdywgc2NydXRpbml6ZSBpdHMgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbG9vayBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpbmVmZmljaWVuY2llcyByZWxhdGVkIHRvIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMsIGJlY2F1c2UgaWYgYHNrYl96ZXJvY29weWAgaXMgYXZhaWxhYmxlLCBpdCB3b3VsZCBzZWVtIHJlYXNvbmFibGUgdG8gY29uc2lkZXIgZW1wbG95aW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yMzM9dm9pZCBvdnNfZHBfZGV0YWNoX3BvcnQoc3RydWN0IHZwb3J0ICpwKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0NC0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2suICovXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoyNDU6dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDE2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkNvbnNpZGVyaW5nIEV4cG9ydGluZyoqCgpBbHJpZ2h0LCBzbyB0aGUgcXVlc3Rpb24gaXMsICYjMzQ7SXMgaXQgZXhwb3J0ZWQ/JiMzNDsgVGhhdCYjMzk7cyB0aGUgY3J1eCBvZiBpdC4gV2UgbmVlZCB0byBpbW1lZGlhdGVseSBkZWZpbmUgJiMzNDtpdC4mIzM0OyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNwZWNpZmljIGRhdGFzZXQsIGEgbW9kZWwsIHRoZSBvdXRwdXQgb2YgYSBwcm9jZXNzLCBvciBhIG1vcmUgYWJzdHJhY3QgY29uY2VwdCBsaWtlIGEgY2FwYWJpbGl0eSBvciBhIHByb2R1Y3Q/IFRoZSBjb250ZXh0IGlzIGNydWNpYWwuIEFzc3VtaW5nIHdlIGhhdmUgdGhhdCBjb250ZXh0LCB0aGUgbmV4dCBsZXZlbCBvZiBncmFudWxhcml0eSBkZXBlbmRzIGVudGlyZWx5IG9uIHRoZSBmcmFtZXdvcmsgc3Vycm91bmRpbmcgaXQuIAoKSSYjMzk7bSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggdGhlIHZhcmlvdXMgc3RhZ2VzLiBXZSBjYW4mIzM5O3QganVzdCBzbGFwIGEgJiMzNDt5ZXMmIzM0OyBvciAmIzM0O25vJiMzNDsgb24gdGhpcy4gV2hhdCBkb2VzIGV4cG9ydGluZyAqbWVhbiogaW4gdGhpcyBzY2VuYXJpbz8gSXMgaXQgYSBzaW1wbGUgZGF0YSBkdW1wLCBvciBhIGZvcm1hbGl6ZWQgcHJvY2VzcyB3aXRoIHZlcnNpb25pbmcsIG1ldGFkYXRhLCBhbmQgc2VjdXJpdHkgaW1wbGljYXRpb25zPyBUaGUgbWV0aG9kIG9mIHRyYW5zZmVyIGlzIGFsc28gY3JpdGljYWwuIFJFU1QgQVBJPyBGaWxlIHRyYW5zZmVyIHByb3RvY29sPyBTdHJlYW1pbmc/IFRoYXQgYWxvbmUgZHJpdmVzIHRoZSBjb252ZXJzYXRpb24gZG93biBhIHBhcnRpY3VsYXIgcGF0aC4KClRoZW4sIHRoZSBkZXN0aW5hdGlvbiBiZWNvbWVzIHRoZSBuZXh0IGNyaXRpY2FsIHBvaW50LiBJcyBpdCBhIHdlbGwtZGVmaW5lZCBleHRlcm5hbCBzeXN0ZW0sIGFub3RoZXIgaW50ZXJuYWwgbW9kdWxlLCBvciBhIGNvbGxlY3Rpb24gb2YgZGlzcGFyYXRlIGNvbnN1bWVycz8gVGhlIGV4cGVjdGVkIGZvcm1hdCBhbmQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSB0YXJnZXQgc3lzdGVtIHdpbGwgYmUgYSBtYWpvciBkcml2ZXIgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBJcyBpdCBhIGxlZ2FjeSBzeXN0ZW0sIGFuIGluZHVzdHJ5IHN0YW5kYXJkLCBvciBhIGN1dHRpbmcgZWRnZSBwbGF0Zm9ybT8gVGhlIGFuc3dlciB0byB0aGlzIGlzIHRoZSBiaWdnZXN0IGlzc3VlLiBJdCBtYXkgYmUgdGhhdCB0aGVyZSBhcmUgbm8gc3RhbmRhcmQgZXhwb3J0IG9wdGlvbnMuCgpUaGUgJiMzNDtpcyBpdCYjMzQ7IHBhcnQgYWxzbyBzdWJ0bHkgc3VnZ2VzdHMgYSBwcmVzZW50LXRlbnNlIGNvbmNlcm4uIElzIHRoaXMgYSBuZXcgcmVxdWlyZW1lbnQ/IE9yIGhhcyBpdCBhbHdheXMgYmVlbiBzbz8gSXMgaXQgYSBjdXJyZW50IGZ1bmN0aW9uLCBvciBqdXN0IGEgY29uY2VwdD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiAqbm90KiBleHBvcnRpbmc/IFBvdGVudGlhbCByZXZlbnVlIGxvc3MsIGxhY2sgb2YgaW50ZXJvcGVyYWJpbGl0eSwgb3IganVzdCBhIHdhc3RlZCBvcHBvcnR1bml0eSB0byBsZXZlcmFnZSB0aGUgdmFsdWUgb2Ygb3VyIHdvcms/IAoKU28sIHVsdGltYXRlbHksIGFuc3dlcmluZyB0aGlzIHNpbXBsZSBxdWVzdGlvbiByZXF1aXJlcyBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhlICp3aGF0KiwgdGhlICpob3cqLCB0aGUgKndoZXJlKiwgYW5kIHRoZSAqd2h5Ki4gSXQmIzM5O3MgcmFyZWx5IGEgc3RyYWlnaHRmb3J3YXJkIGJpbmFyeSByZXNwb25zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipvdnNfZHBfcHJvY2Vzc19wYWNrZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4ODEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGlubmVyIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIE5vbi1TdGF0aWMsIEludGVybmFsIERhdGFwYXRoIEZ1bmN0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBmdW5jdGlvbiBJJiMzOTttIGxvb2tpbmcgYXQgaXNuJiMzOTt0ICpleHBvcnRlZCosIHdoaWNoIGlzIHRoZSBmaXJzdCBjbHVlLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGxpa2VseSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGUgbW9kdWxlIG9yIGxpYnJhcnkgaXQgYmVsb25ncyB0by4gQnV0IHRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgKm5vbi1zdGF0aWMqIGlzIGludGVyZXN0aW5nLiBJdCYjMzk7cyBub3QgbGltaXRlZCB0byB0aGlzIGZpbGUsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXQgY291bGQgYmUgY2FsbGVkIGZyb20gb3RoZXIgZmlsZXMgaW4gdGhlIHByb2plY3QuCgpHaXZlbiB0aGF0IGl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIHBhY2tldCBwcm9jZXNzaW5nLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZXhhbWluZSB0aGUgZnVuY3Rpb24gYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZGF0YXBhdGgsIGhvdyBwYWNrZXRzIGFyZSBoYW5kbGVkLCBhbmQgd2hvIG1pZ2h0IGJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gV2hhdCYjMzk7cyB0aGUgZGF0YSBmbG93PyBBbmQgaG93IGRvZXMgdGhpcyBmdW5jdGlvbiBmaXQgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgb2YgT3BlbiB2U3dpdGNoPyBJIG5lZWQgdG8gYW5hbHl6ZSBpdHMgdXNhZ2Ugd2l0aGluIHRoYXQgZmlsZSB0byBzZWUgd2hlcmUgZWxzZSBpdCBpcyB1c2VkIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGZ1bmN0aW9uJiMzOTtzIG5vbi1zdGF0aWMgc3RhdHVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtxdWV1ZV91c2Vyc3BhY2VfcGFja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MTI3PXN0YXRpYyBpbnQgcXVldWVfZ3NvX3BhY2tldHMoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzAtXHRcdFx0ICAgICB1aW50MzJfdCBjdXRsZW4pO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTMxOnN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqLFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTMyLVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0zMzA9aW50IG92c19kcF91cGNhbGwoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zNDYtXHRpZiAoIXNrYl9pc19nc28oc2tiKSlcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjM0NzpcdFx0ZXJyID0gcXVldWVfdXNlcnNwYWNlX3BhY2tldChkcCwgc2tiLCBrZXksIHVwY2FsbF9pbmZvLCBjdXRsZW4pO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzQ4LVx0ZWxzZVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTM2Nz1zdGF0aWMgaW50IHF1ZXVlX2dzb19wYWNrZXRzKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzk3LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6Mzk4Olx0XHRlcnIgPSBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KGRwLCBza2IsIGtleSwgdXBjYWxsX2luZm8sIGN1dGxlbik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zOTktXHRcdGlmIChlcnIpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NDQyPXN0YXRpYyB2b2lkIHBhZF9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy00NTEtXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo0NTI6c3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy00NTMtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzI4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgU3RhdGljIE5hdHVyZSBhbmQgS2V5IFN5bWJvbHMqKgoKQWxyaWdodCwgdGhpcyBmZWVscyBzdGF0aWMg4oCTIG5vIGR5bmFtaWMgZWxlbWVudHMgdG8gaW1tZWRpYXRlbHkgZ3JhYiBteSBhdHRlbnRpb24uIE15IGluaXRpYWwgYW5hbHlzaXMgaXMgemVyb2luZyBpbiBvbiBhIGZldyBjcnVjaWFsIHN5bWJvbHM6IGBza2JfdHhfZXJyb3JgLCBgc2tiX3plcm9jb3B5YCwgYW5kIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaG9zZSBhcmUgbXkgb2J2aW91cyBzdGFydGluZyBwb2ludHMuIFRoZSBjb250ZXh0IHBvaW50cyB0byBgT1BFTlZTV0lUQ0hgIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBhY2tldCBwcm9jZXNzaW5nIHdpdGhpbiBhbiBPcGVuIHZTd2l0Y2ggZW52aXJvbm1lbnQuIFRoZSBwcmVzZW5jZSBvZiBgc2tiX3R4X2Vycm9yYCBhbmQgYHNrYl96ZXJvY29weWAgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlaXRoZXIgdHJhbnNtaXNzaW9uIGVycm9ycyB3aXRoaW4gYW4gYHNrYmAsIHBvdGVudGlhbGx5IHplcm8tY29weSBvcHRpbWl6YXRpb25zLCBvciBib3RoLiBOb3cgYG92c19kcF9wcm9jZXNzX3BhY2tldGAuLi4gdGhhdCYjMzk7cyB0aGUgY29yZS4gTXkgaW5zdGluY3QgaXMgdGhhdCB3ZSBhcmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIGRhdGEgcGF0aCBwYWNrZXQgcHJvY2Vzc2luZyBpbnRlcmFjdGlvbi4KCk15IG5leHQgbW92ZT8gSSYjMzk7bSBnb2luZyBzdHJhaWdodCB0byBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGBPUEVOVlNXSVRDSGAgaGFzIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgd29ydGggbm90aW5nLiBJdCBpcyB1bmxpa2VseSB0aGF0IGFueXRoaW5nIEkgc2VlIHRoZXJlIHdpbGwgYmUgb2YgaW1tZW5zZSBoZWxwLCBidXQgaW4gdGhlIGNvdXJzZSBvZiBhbiBpbnZlc3RpZ2F0aW9uLCB5b3UgbXVzdCBzdGFydCBzb21ld2hlcmUuIE15IGdvYWwgd2lsbCBiZSB0byBkZXZlbG9wIGEgbW9yZSBpbmZvcm1lZCBwZXJzcGVjdGl2ZSwgc28gdGhhdCBJIGNhbiBzZWUgdGhlIGlzc3VlIGJldHRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9QRU5WU1dJVENIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDMtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTgtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY5OmNvbmZpZyBPUEVOVlNXSVRDSF9HRU5FVkVcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIEdlbmV2ZSB0dW5uZWxpbmcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzcwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgT3BlbiB2U3dpdGNoIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBPcGVuIHZTd2l0Y2ggdG9kYXkuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGFsd2F5cyB0byBzdGFydCB3aXRoIGEgZGVwZW5kZW5jeSBhbmFseXNpcy4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgYXJjaGl0ZWN0dXJlLCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBuZXR3b3JraW5nIGVjb3N5c3RlbS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCB0aGlzIHRoaW5nICpyZWFsbHkqIHJlbGllcyBvbiwgZG93biB0byB0aGUgY29yZSBsaWJyYXJpZXMgYW5kIGtlcm5lbCBtb2R1bGVzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBzcGVjaWZpYyB2ZXJzaW9ucyBvZiBEUERLPyBEb2VzIGl0IGhlYXZpbHkgbGVhbiBvbiBzcGVjaWZpYyBrZXJuZWwgZmVhdHVyZXMsIGxpa2UgbmFtZXNwYWNlcyBvciBlQlBGPyBBbmQgYXJlIHRoZXJlIGFueSBleHRlcm5hbCBsaWJyYXJpZXMgdGhhdCBhcmUgY3JpdGljYWwgZm9yIGl0cyBvcGVyYXRpb24sIG9yIGFyZSB0aGVyZSBhbnkgdnVsbmVyYWJpbGl0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5jbHVkZWQgbGlicmFyaWVzPyBJIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBzeXN0ZW0gYW5kIGl0cyB3ZWFrIHBvaW50cy4gSXQmIzM5O3MgdGltZSB0byBzdGFydCBwZWVsaW5nIGJhY2sgdGhlIGxheWVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIE9wZW4gdlN3aXRjaFxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgT1BFTlZTV0lUQ0hcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuICAgODpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gICA5Olx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgXFxcbiAgMTA6XHRcdFx0ICAgKE5GX0NPTk5UUkFDSyBcdTAwMjZcdTAwMjYgKCghTkZfREVGUkFHX0lQVjYgfHwgTkZfREVGUkFHX0lQVjYpIFx1MDAyNlx1MDAyNiBcXFxuICAxMTpcdFx0XHRcdFx0ICAgICAoIU5GX05BVCB8fCBORl9OQVQpIFx1MDAyNlx1MDAyNiBcXFxuICAxMjpcdFx0XHRcdFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxuICAxMzpcdFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXG4gIDE0Olx0XHRzZWxlY3QgTVBMU1xuICAxNTpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiAgMTY6XHRcdHNlbGVjdCBORVRfTVBMU19HU09cbiAgMTc6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAgMTg6XHRcdHNlbGVjdCBORVRfTlNIXG4gIDE5Olx0XHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcbiAgMjA6XHRcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBPcGVuIHZTd2l0Y2ggaXMgYSBtdWx0aWxheWVyIEV0aGVybmV0IHN3aXRjaCB0YXJnZXRlZCBhdCB2aXJ0dWFsaXplZFxuICAyMzpcdFx0ICBlbnZpcm9ubWVudHMuICBJbiBhZGRpdGlvbiB0byBzdXBwb3J0aW5nIGEgdmFyaWV0eSBvZiBmZWF0dXJlc1xuICAyNDpcdFx0ICBleHBlY3RlZCBpbiBhIHRyYWRpdGlvbmFsIGhhcmR3YXJlIHN3aXRjaCwgaXQgZW5hYmxlcyBmaW5lLWdyYWluZWRcbiAgMjU6XHRcdCAgcHJvZ3JhbW1hdGljIGV4dGVuc2lvbiBhbmQgZmxvdy1iYXNlZCBjb250cm9sIG9mIHRoZSBuZXR3b3JrLiAgVGhpc1xuICAyNjpcdFx0ICBjb250cm9sIGlzIHVzZWZ1bCBpbiBhIHdpZGUgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMgYnV0IGlzXG4gIDI3Olx0XHQgIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgaW4gbXVsdGktc2VydmVyIHZpcnR1YWxpemF0aW9uIGRlcGxveW1lbnRzLFxuICAyODpcdFx0ICB3aGljaCBhcmUgb2Z0ZW4gY2hhcmFjdGVyaXplZCBieSBoaWdobHkgZHluYW1pYyBlbmRwb2ludHMgYW5kIHRoZVxuICAyOTpcdFx0ICBuZWVkIHRvIG1haW50YWluIGxvZ2ljYWwgYWJzdHJhY3Rpb25zIGZvciBtdWx0aXBsZSB0ZW5hbnRzLlxuICAzMDpcdFxuICAzMTpcdFx0ICBUaGUgT3BlbiB2U3dpdGNoIGRhdGFwYXRoIHByb3ZpZGVzIGFuIGluLWtlcm5lbCBmYXN0IHBhdGggZm9yIHBhY2tldFxuICAzMjpcdFx0ICBmb3J3YXJkaW5nLiAgSXQgaXMgY29tcGxlbWVudGVkIGJ5IGEgdXNlcnNwYWNlIGRhZW1vbiwgb3ZzLXZzd2l0Y2hkLFxuICAzMzpcdFx0ICB3aGljaCBpcyBhYmxlIHRvIGFjY2VwdCBjb25maWd1cmF0aW9uIGZyb20gYSB2YXJpZXR5IG9mIHNvdXJjZXMgYW5kXG4gIDM0Olx0XHQgIHRyYW5zbGF0ZSBpdCBpbnRvIHBhY2tldCBwcm9jZXNzaW5nIHJ1bGVzLlxuICAzNTpcdFxuICAzNjpcdFx0ICBTZWUgaHR0cDovL29wZW52c3dpdGNoLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlcnNwYWNlXG4gIDM3Olx0XHQgIHV0aWxpdGllcy5cbiAgMzg6XHRcbiAgMzk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxuICA0MDpcdFx0ICBjYWxsZWQgb3BlbnZzd2l0Y2guXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxOTMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipPcGVuIHZTd2l0Y2ggYW5kIEVycm9yIEhhbmRsaW5nKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYE9QRU5WU1dJVENIYCBzaXR1YXRpb24uIEl0IGZlZWxzIGxpa2Ugd2UmIzM5O3JlIHplcm9pbmcgaW4gb24gYSBzb2x1dGlvbiDigJMgaG9wZWZ1bGx5LCB0aGUgZGVwbG95bWVudCB3aWxsIHdvcmsgd2l0aCBpdC4gVGhlIGNvcmUgcHJpbmNpcGxlIHNlZW1zIHNvdW5kLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cy4KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBza2JfdHhfZXJyb3JgIGlzIGlzb2xhdGVkIGFuZCBvbmx5IGNhbGxlZCB3aXRoaW4gdGhlIHNjb3BlIHRoYXQgSSB0aGluayBpdCBpcy4gTm8gc25lYWt5IHNpZGUgZWZmZWN0cyBvciB1bmV4cGVjdGVkIGNhbGxzIGZyb20gZWxzZXdoZXJlLiBMZXQgbWUgZ28gb3ZlciB0aGUgY29kZSBhZ2FpbiB0byBtYWtlIHN1cmUgdGhhdCBmdW5jdGlvbiBpcyBvbmx5IHJlYWNoYWJsZSBmcm9tIHRoZSBsb2NhdGlvbnMgSSBleHBlY3QuIFdlIGNhbiYjMzk7dCBhZmZvcmQgYW55IHN1cnByaXNlcyB3aGVuIGl0IGNvbWVzIHRvIGVycm9yIGhhbmRsaW5nLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgdGhhdCBuZWVkcyBleHRyYSBhdHRlbnRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYl90eF9lcnJvciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9vdnBuL2lvLmM9MzU2PW5ldGRldl90eF90IG92cG5fbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtNDQzLVx0b3Zwbl9kZXZfZHN0YXRzX3R4X2Ryb3BwZWQob3Zwbi1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjQ0NDpcdHNrYl90eF9lcnJvcihza2IpO1xuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTQ0NS1cdGtmcmVlX3NrYl9saXN0KHNrYik7XG4tLVxuZHJpdmVycy9uZXQvdHVuLmM9MTAwMz1zdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdHVuLmMtMTA4My1cdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XG5kcml2ZXJzL25ldC90dW4uYzoxMDg0Olx0c2tiX3R4X2Vycm9yKHNrYik7XG5kcml2ZXJzL25ldC90dW4uYy0xMDg1LVx0a2ZyZWVfc2tiX3JlYXNvbihza2IsIGRyb3BfcmVhc29uKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTEzMzg9dm9pZCBza2JfZHVtcChjb25zdCBjaGFyICpsZXZlbCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBmdWxsX3BrdCk7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjEzMzk6dm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTEzNDAtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MTQxMj1FWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNDE0LS8qKlxubmV0L2NvcmUvc2tidWZmLmM6MTQxNTogKlx0c2tiX3R4X2Vycm9yIC0gcmVwb3J0IGFuIHNrX2J1ZmYgeG1pdCBlcnJvclxubmV0L2NvcmUvc2tidWZmLmMtMTQxNi0gKlx0QHNrYjogYnVmZmVyIHRoYXQgdHJpZ2dlcmVkIGFuIGVycm9yXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTQyMy0gKi9cbm5ldC9jb3JlL3NrYnVmZi5jOjE0MjQ6dm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL3NrYnVmZi5jLTE0MjUte1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTE0MzAtfVxubmV0L2NvcmUvc2tidWZmLmM6MTQzMTpFWFBPUlRfU1lNQk9MKHNrYl90eF9lcnJvcik7XG5uZXQvY29yZS9za2J1ZmYuYy0xNDMyLVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM9NzA1PW5mcW5sX2J1aWxkX3BhY2tldF9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mcW5sX2luc3RhbmNlICpxdWV1ZSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgwMy1cdGlmICghc2tiKSB7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjgwNDpcdFx0c2tiX3R4X2Vycm9yKGVudHNrYik7XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgwNS1cdFx0Z290byBubG1zZ19mYWlsdXJlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODEyLVx0aWYgKCFubGgpIHtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6ODEzOlx0XHRza2JfdHhfZXJyb3IoZW50c2tiKTtcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODE0LVx0XHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTk2My1ubGFfcHV0X2ZhaWx1cmU6XG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjk2NDpcdHNrYl90eF9lcnJvcihlbnRza2IpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NjUtXHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDU9dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjg3LVx0XHRkZWZhdWx0OlxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6Mjg4Olx0XHRcdHNrYl90eF9lcnJvcihza2IpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjg5LVx0XHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jPTE1MjU9aW50IHNrYl9tZXRhX2ludmFsaWRfY3R4KHZvaWQgKmN0eClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYy0xNTM0LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmM6MTUzNTpTRUMoXCYjMzQ7ZmVudHJ5L3NrYl90eF9lcnJvclwmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jLTE1MzYtX19mYWlsdXJlIF9fbXNnKFwmIzM0O211c3QgYmUgcmVmZXJlbmNlZCBvciB0cnVzdGVkXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmM9MTUzNz1pbnQgQlBGX1BST0coc2tiX2ludmFsaWRfY3R4X2ZlbnRyeSwgdm9pZCAqc2tiKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jLTE1NDYtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYzoxNTQ3OlNFQyhcJiMzNDtmZXhpdC9za2JfdHhfZXJyb3JcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYy0xNTQ4LV9fZmFpbHVyZSBfX21zZyhcJiMzNDttdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFwmIzM0OylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcyNgoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiAyMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgaXQgdG91Y2hlcyBjb2RlIGluIGBkcml2ZXJzL25ldC90dW4uY2AsIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jYCwgYGRyaXZlcnMvbmV0L292cG4vaW8uY2AsIGFuZCBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgIOKAkyBhbGwgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMgYW5kIE9wZW4gdlN3aXRjaCwgc3BlY2lmaWNhbGx5IOKAkyByZWFsbHkgZmxhZ3MgaXQgZm9yIGNsb3NlIGV4YW1pbmF0aW9uLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIGtleSBzeW1ib2xzOiBgc2tiX3R4X2Vycm9yYCwgYHNrYl96ZXJvY29weWAsIGFuZCBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4KClRoZSBwYXRjaCYjMzk7cyBtb2RpZmljYXRpb24gb2YgYHNrYl90eF9lcnJvcmAgdG8gZWZmZWN0aXZlbHkgKm5vLW9wKiBmb3IgY2xvbmVkIHNrYnMsIGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCBgc2tiX3plcm9jb3B5YCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgaXMgd2hhdCYjMzk7cyBjYXRjaGluZyBteSBleWUuIFRoZXNlIGZ1bmN0aW9ucyBhcmUga2V5IHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBkZWFsaW5nIHdpdGggemVyby1jb3B5IG9wZXJhdGlvbnMgYW5kLCBjcml0aWNhbGx5LCBPcGVuIHZTd2l0Y2ggZGF0YSBwYXRoIHBhY2tldCBwcm9jZXNzaW5nLiBJIHNlZSBhIGhpZ2ggcmlzayBvZiBzdWJ0bGUgbWVtb3J5IGVycm9yczogbGVha3MsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIHRoZSB1c3VhbCBzdXNwZWN0cyB3aGVuIHlvdSYjMzk7cmUgbXVja2luZyBhcm91bmQgd2l0aCBzaGFyZWQgbWVtb3J5IGJ1ZmZlcnMsIHdoaWNoIHplcm8tY29weSByZWxpZXMgb24uCgpUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIGFuZCBJIHdpbGwgZW5hYmxlIHRoZSBgT1BFTlZTV0lUQ0hgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuc3VyZSB0aGUgT1ZTIGNvZGUgcGF0aHMgYXJlIGFjdGl2ZSBkdXJpbmcgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRob3JvdWdobHkgdGVzdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza2JfdHhfZXJyb3ImIzM0OywKICAgICYjMzQ7c2tiX3plcm9jb3B5JiMzNDssCiAgICAmIzM0O292c19kcF9wcm9jZXNzX3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2tiX3R4X2Vycm9yYCBpbiBjb3JlIG5ldHdvcmtpbmcgdG8gZG8gbm90aGluZyBmb3IgY2xvbmVkIHNrYnMsIGFuZCBjaGFuZ2VzIGl0cyB1c2FnZSBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGFuZCBPcGVuIHZTd2l0Y2ggcGF0aHMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIHdpdGggemVyb2NvcHkgc2ticy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtza2JfdHhfZXJyb3ImIzM0OywKICAgICYjMzQ7c2tiX3plcm9jb3B5JiMzNDssCiAgICAmIzM0O292c19kcF9wcm9jZXNzX3BhY2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2tiX3R4X2Vycm9yYCBpbiBjb3JlIG5ldHdvcmtpbmcgdG8gZG8gbm90aGluZyBmb3IgY2xvbmVkIHNrYnMsIGFuZCBjaGFuZ2VzIGl0cyB1c2FnZSBpbiBgc2tiX3plcm9jb3B5YCBhbmQgT3BlbiB2U3dpdGNoJiMzOTtzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGFuZCBPcGVuIHZTd2l0Y2ggcGF0aHMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIHdpdGggemVyb2NvcHkgc2ticy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNiAwNzo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcmAgdG8gaWdub3JlIGNsb25lZCBza2JzLCBhcyB0aGVpciB6ZXJvLWNvcHkgc3RhdGUgKGluIGBza2Jfc2hpbmZvYCkgaXMgc2hhcmVkIGFtb25nIGNsb25lcy4gSXQgYWxzbyBhZGp1c3RzIHdoZXJlIGBza2JfdHhfZXJyb3JgIGlzIGNhbGxlZCBpbiBgc2tiX3plcm9jb3B5YCBhbmQgb3BlbnZzd2l0Y2ggZGF0YXBhdGguIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBpc3N1ZXMgd2l0aCB6ZXJvLWNvcHkgc3RhdGUgbWFuYWdlbWVudCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCB0eXBpY2FsbHkgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzLiBTdWNoIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYTU0ZTI2NGYzZDE4M2NkNzQ1MTkzZTZkNjkyYzFmMjAyM2NlNDNjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMTYgMDc6NTg6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IGJhM2RiYWM4MGZiNDkuLjA0Nzc2YTExMjMzNDIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC0xNDE3LDEwICYjNDM7MTQxNywxMyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTsKICAqCiAgKglSZXBvcnQgeG1pdCBlcnJvciBpZiBhIGRldmljZSBjYWxsYmFjayBpcyB0cmFja2luZyB0aGlzIHNrYi4KICAqCXNrYiBtdXN0IGJlIGZyZWVkIGFmdGVyd2FyZHMuCiYjNDM7ICoKJiM0MzsgKglEb2VzIG5vdGhpbmcgZm9yIGEgY2xvbmVkIHNrYjogdGhlIHplcm9jb3B5IHN0YXRlIGxpdmVzIGluCiYjNDM7ICoJc2tiX3NoaW5mbygpLCB3aGljaCB0aGUgY2xvbmVzIHNoYXJlLgogICovCiB2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWlmIChza2IpIHsKJiM0MzsJaWYgKHNrYiAmYW1wOyZhbXA7ICFza2JfY2xvbmVkKHNrYikpIHsKIAkJc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7CiAJCXNrYl96Y29weV9jbGVhcihza2IsIHRydWUpOwogCX0KQEAgLTM5MDcsMTAgJiM0MzszOTEwLDkgQEAgc2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKQogCiAJc2tiX2xlbl9hZGQodG8sIGxlbiAmIzQzOyBwbGVuKTsKIAotCWlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkgewotCQlza2JfdHhfZXJyb3IoZnJvbSk7CiYjNDM7CWlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQomIzQzOwogCXNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7CiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgc2tiX3NoaW5mbyhmcm9tKS0mZ3Q7bnJfZnJhZ3M7IGkmIzQzOyYjNDM7KSB7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCmluZGV4IGFlNjliMmNhYmFiOWUuLmZmZjc1YzNlZWQxMTYgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jCkBAIC0yODUsNiAmIzQzOzI4NSw3IEBAIHZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KQogCQkJY29uc3VtZV9za2Ioc2tiKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgomIzQzOwkJCXNrYl90eF9lcnJvcihza2IpOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlicmVhazsKIAkJfQpAQCAtNjAxLDggJiM0Mzs2MDIsNiBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAllcnIgPSBnZW5sbXNnX3VuaWNhc3Qob3ZzX2RwX2dldF9uZXQoZHApLCB1c2VyX3NrYiwgdXBjYWxsX2luZm8tJmd0O3BvcnRpZCk7CiAJdXNlcl9za2IgPSBOVUxMOwogb3V0OgotCWlmIChlcnIpCi0JCXNrYl90eF9lcnJvcihza2IpOwogCWNvbnN1bWVfc2tiKHVzZXJfc2tiKTsKIAljb25zdW1lX3NrYihuc2tiKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTYgMDc6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0OAoJCQkJCQkJb3V0cHV0OiAxODAKCQkJCQkJCXRob3VnaHRzOiA4NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IFplcm8tQ29weSBFcnJvciBIYW5kbGluZyBhbmQgQ2xvbmVkIFNLQnMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1vZGlmeWluZyBgc2tiX3R4X2Vycm9yYCBhbmQgYSBmZXcgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgaW4gdGhlIGtlcm5lbC4gVGhlIGNvcmUgY2hhbmdlcyBpbnZvbHZlIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgZXJyb3JzIHdpdGggemVyby1jb3B5IFNLQnMsIHBhcnRpY3VsYXJseSB3aGVuIGRlYWxpbmcgd2l0aCBjbG9uZWQgU0tCcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBzZWUgaWYgdGhpcyBpbnRyb2R1Y2VkIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLgoKVGhlIGZpcnN0IHBhcnQgb2YgdGhlIHBhdGNoIG1ha2VzIGBza2JfdHhfZXJyb3JgIGEgbm8tb3AgaWYgdGhlIFNLQiBpcyBjbG9uZWQuIEl0IGFsc28gcmVtb3ZlcyBhIGNhbGwgdG8gYHNrYl90eF9lcnJvcmAgd2l0aGluIGBza2JfemVyb2NvcHlgIGFuZCBtb3ZlcyBhIGNhbGwgZnJvbSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgdG8gYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIEZyb20gdGhpcywgSSB0aGluayBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzLgoKVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRoZSBgc2tiX2Nsb25lZChza2IpYCBjaGVjay4gYHNrYl90eF9lcnJvcmAgaXMgcmVzcG9uc2libGUgZm9yIGNsZWFyaW5nIHRoZSB6ZXJvLWNvcHkgc3RhdGUgd2hpY2ggaW5jbHVkZXMgY2FsbGluZyBgc2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYilgIGFuZCBgc2tiX3pjb3B5X2NsZWFyKHNrYiwgdHJ1ZSlgLiBUaGUgYHNrYl9zaGluZm8oKWAgc3RydWN0dXJlIGhvbGRzIHplcm8tY29weSBzdGF0ZSBhbmQgdGhpcyBpcyBzaGFyZWQgd2l0aCBjbG9uZXMuIFRoaXMgbWFrZXMgc2Vuc2U7IGlmIGFuIGVycm9yIG9jY3VycyBhbmQgYHNrYl90eF9lcnJvcmAgKmRvZXMqIHJ1biBvbiBvbmUgY2xvbmUsIGl0IGNvdWxkIGNsZWFyIHRoZSB6ZXJvLWNvcHkgc3RhdGUgZm9yIGFsbCBvZiB0aGVtLiBUaGlzIHdvdWxkIGxlYWQgdG8gYSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgZ2VuZXJhbGx5IGluY29ycmVjdCBzdGF0ZSBtYW5hZ2VtZW50LCByaWdodD8gSXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGZpeGluZyB0aGF0LCBwcmV2ZW50aW5nIHRoZSBjbGVhcmluZyBpZiB0aGUgU0tCIGlzIGNsb25lZC4KCk5vdyBJIGhhdmUgdG8gdGhpbmssIGRvZXMgKm5vdCogY2FsbGluZyBgc2tiX3R4X2Vycm9yYCBsZWF2ZSB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIGl0IGxlYXZlcyB0aGUgc3RhdGUgaW50YWN0IGZvciB0aGUgb3RoZXIgY2xvbmVzLCB3aGljaCBpcyB0aGUgY29ycmVjdCBiZWhhdmlvci4gQ2FsbGluZyBgc2tiX3R4X2Vycm9yYCB3b3VsZCAqY2xlYXIqIHRoZSBzdGF0ZSBhbmQgcG9zc2libHkgY2F1c2UgaXNzdWVzIGZvciBvdGhlciBjbG9uZXMuIFRoZSByZW1vdmFsIG9mIGBza2JfdHhfZXJyb3IoZnJvbSlgIGluIGBza2JfemVyb2NvcHlgIGlzIGJlY2F1c2UgYGZyb21gIGlzIGFsc28gbGlrZWx5IGNsb25lZCwgYW5kIHNob3VsZCBub3QgaGF2ZSBpdHMgc3RhdGUgY2xlYXJlZCBvbiBhbiBlcnJvciBmcm9tIHRoaXMgZnVuY3Rpb24uIFRoZSBjYWxsZXIgb2YgYHNrYl96ZXJvY29weWAgd2lsbCBwcm9iYWJseSBmcmVlIHRoZSBTS0JzLgoKVGhlIGNoYW5nZSBpbiBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgbWFrZXMgbWUgdGhpbmsuIEluIHRoYXQgZnVuY3Rpb24sIGl0IGxvb2tzIGxpa2UgYHNrYl90eF9lcnJvcihza2IpYCBpcyByZW1vdmVkIG9uIGFuIGVycm9yIGFuZCBhZGRlZCB0byBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBhcyB0aGUgZGVmYXVsdCBjYXNlLgoKT2theSwgYWZ0ZXIgZGlnZ2luZyBpbnRvIGl0LCBpdCYjMzk7cyBjbGVhciB0aGlzIGlzIG5vdCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBhdCBhbGwuIFRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IGhhbmRsaW5nIHRoZSBjb21wbGV4aXRpZXMgb2YgemVyby1jb3B5IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgc3RhdGUgbWFuYWdlbWVudCwgd2hpY2ggaXMgcmVsYXRlZCB0byBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgbGlrZSBVQUYsIGRvdWJsZS1mcmVlcywgZXRjLiwgYW5kIHRoYXQmIzM5O3MgcHJlY2lzZWx5IHdoZXJlIHRvb2xzIGxpa2UgS0FTQU4gY29tZSBpbi4KCkxldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayBgc2tiX3R4X2Vycm9yYCBhbmQgYHNrYl96Y29weV9jbGVhcmAuIGBza2JfemNvcHlfY2xlYXJgIGNhbGxzIHRoZSBjYWxsYmFjayB3aXRoaW4gdGhlIGB1YnVmX2luZm9gLCBkZWNyZW1lbnRzIGEgcmVmZXJlbmNlIGNvdW50LCBhbmQgY2xlYXJzIHRoZSBgU0tCRkxfWkVST0NPUFlfRU5BQkxFYCBmbGFnLiBJdCBpcyBwdXJlbHkgYWJvdXQgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBjYWxsYmFja3MgZm9yIHplcm8tY29weS4KClNvLCB0aGlzIHBhdGNoIGlzbiYjMzk7dCBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gSXQmIzM5O3MgZml4aW5nIGEgbWVtb3J5IGNvcnJ1cHRpb24gYnVnIHJlbGF0ZWQgdG8gc2hhcmVkIHN0YXRlIGluIGNsb25lZCBTS0JzLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBoZXJlLgoKSSB3aWxsIG1hcmsgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE2IDA3OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBgc2tiX3R4X2Vycm9yYCB0byBpZ25vcmUgY2xvbmVkIHNrYnMsIGFzIHRoZWlyIHplcm8tY29weSBzdGF0ZSAoaW4gYHNrYl9zaGluZm9gKSBpcyBzaGFyZWQgYW1vbmcgY2xvbmVzLiBJdCBhbHNvIGFkanVzdHMgd2hlcmUgYHNrYl90eF9lcnJvcmAgaXMgY2FsbGVkIGluIGBza2JfemVyb2NvcHlgIGFuZCBvcGVudnN3aXRjaCBkYXRhcGF0aC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGlzc3VlcyB3aXRoIHplcm8tY29weSBzdGF0ZSBtYW5hZ2VtZW50IGFuZCByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIHR5cGljYWxseSBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Z3MuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcmAgdG8gaWdub3JlIGNsb25lZCBza2JzLCBhcyB0aGVpciB6ZXJvLWNvcHkgc3RhdGUgKGluIGBza2Jfc2hpbmZvYCkgaXMgc2hhcmVkIGFtb25nIGNsb25lcy4gSXQgYWxzbyBhZGp1c3RzIHdoZXJlIGBza2JfdHhfZXJyb3JgIGlzIGNhbGxlZCBpbiBgc2tiX3plcm9jb3B5YCBhbmQgb3BlbnZzd2l0Y2ggZGF0YXBhdGguIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBpc3N1ZXMgd2l0aCB6ZXJvLWNvcHkgc3RhdGUgbWFuYWdlbWVudCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCB0eXBpY2FsbHkgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzLiBTdWNoIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1ODozNy4xOTcyODIzMjVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDk0MjM0MTExMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNrYl90eF9lcnJvclwiLFxuICAgIFwic2tiX3plcm9jb3B5XCIsXG4gICAgXCJvdnNfZHBfcHJvY2Vzc19wYWNrZXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBgc2tiX3R4X2Vycm9yYCB0byBpZ25vcmUgY2xvbmVkIHNrYnMsIGFzIHRoZWlyIHplcm8tY29weSBzdGF0ZSAoaW4gYHNrYl9zaGluZm9gKSBpcyBzaGFyZWQgYW1vbmcgY2xvbmVzLiBJdCBhbHNvIGFkanVzdHMgd2hlcmUgYHNrYl90eF9lcnJvcmAgaXMgY2FsbGVkIGluIGBza2JfemVyb2NvcHlgIGFuZCBvcGVudnN3aXRjaCBkYXRhcGF0aC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGlzc3VlcyB3aXRoIHplcm8tY29weSBzdGF0ZSBtYW5hZ2VtZW50IGFuZCByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIHR5cGljYWxseSBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Z3MuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl90eF9lcnJvcmAgaW4gY29yZSBuZXR3b3JraW5nIHRvIGRvIG5vdGhpbmcgZm9yIGNsb25lZCBza2JzLCBhbmQgY2hhbmdlcyBpdHMgdXNhZ2UgaW4gYHNrYl96ZXJvY29weWAgYW5kIE9wZW4gdlN3aXRjaCdzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGFuZCBPcGVuIHZTd2l0Y2ggcGF0aHMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIHdpdGggemVyb2NvcHkgc2ticy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6NTg6MzcuMTk3Mjg3Nzc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU1NDU0NjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2E1NGUyNjRmM2QxODNjZDc0NTE5M2U2ZDY5MmMxZjIwMjNjZTQzY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwNzo1ODozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXFxuaW5kZXggYmEzZGJhYzgwZmI0OS4uMDQ3NzZhMTEyMzM0MiAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xcbisrKyBiL25ldC9jb3JlL3NrYnVmZi5jXFxuQEAgLTE0MTcsMTAgKzE0MTcsMTMgQEAgRVhQT1JUX1NZTUJPTChza2JfZHVtcCk7XFxuICAqXFxuICAqXFx0UmVwb3J0IHhtaXQgZXJyb3IgaWYgYSBkZXZpY2UgY2FsbGJhY2sgaXMgdHJhY2tpbmcgdGhpcyBza2IuXFxuICAqXFx0c2tiIG11c3QgYmUgZnJlZWQgYWZ0ZXJ3YXJkcy5cXG4rICpcXG4rICpcXHREb2VzIG5vdGhpbmcgZm9yIGEgY2xvbmVkIHNrYjogdGhlIHplcm9jb3B5IHN0YXRlIGxpdmVzIGluXFxuKyAqXFx0c2tiX3NoaW5mbygpLCB3aGljaCB0aGUgY2xvbmVzIHNoYXJlLlxcbiAgKi9cXG4gdm9pZCBza2JfdHhfZXJyb3Ioc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbi1cXHRpZiAoc2tiKSB7XFxuK1xcdGlmIChza2IgXFx1MDAyNlxcdTAwMjYgIXNrYl9jbG9uZWQoc2tiKSkge1xcbiBcXHRcXHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcXG4gXFx0XFx0c2tiX3pjb3B5X2NsZWFyKHNrYiwgdHJ1ZSk7XFxuIFxcdH1cXG5AQCAtMzkwNywxMCArMzkxMCw5IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcXG4gXFxuIFxcdHNrYl9sZW5fYWRkKHRvLCBsZW4gKyBwbGVuKTtcXG4gXFxuLVxcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkge1xcbi1cXHRcXHRza2JfdHhfZXJyb3IoZnJvbSk7XFxuK1xcdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdH1cXG4rXFxuIFxcdHNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7XFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2tiX3NoaW5mbyhmcm9tKS1cXHUwMDNlbnJfZnJhZ3M7IGkrKykge1xcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuaW5kZXggYWU2OWIyY2FiYWI5ZS4uZmZmNzVjM2VlZDExNiAxMDA2NDRcXG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXFxuQEAgLTI4NSw2ICsyODUsNyBAQCB2b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG4gXFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdHNrYl90eF9lcnJvcihza2IpO1xcbiBcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG5AQCAtNjAxLDggKzYwMiw2IEBAIHN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRlcnIgPSBnZW5sbXNnX3VuaWNhc3Qob3ZzX2RwX2dldF9uZXQoZHApLCB1c2VyX3NrYiwgdXBjYWxsX2luZm8tXFx1MDAzZXBvcnRpZCk7XFxuIFxcdHVzZXJfc2tiID0gTlVMTDtcXG4gb3V0Olxcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRza2JfdHhfZXJyb3Ioc2tiKTtcXG4gXFx0Y29uc3VtZV9za2IodXNlcl9za2IpO1xcbiBcXHRjb25zdW1lX3NrYihuc2tiKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU4OjM4LjY1Mzc1MTk2MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjQ2NTc1MTU1MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX3R4X2Vycm9yXCIsXG4gICAgXCJza2JfemVyb2NvcHlcIixcbiAgICBcIm92c19kcF9wcm9jZXNzX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfdHhfZXJyb3JgIGluIGNvcmUgbmV0d29ya2luZyB0byBkbyBub3RoaW5nIGZvciBjbG9uZWQgc2ticywgYW5kIGNoYW5nZXMgaXRzIHVzYWdlIGluIGBza2JfemVyb2NvcHlgIGFuZCBPcGVuIHZTd2l0Y2gncyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBhbmQgT3BlbiB2U3dpdGNoIHBhdGhzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciB3aXRoIHplcm9jb3B5IHNrYnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNhNTRlMjY0ZjNkMTgzY2Q3NDUxOTNlNmQ2OTJjMWYyMDIzY2U0M2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAxNiAwNzo1ODozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmNcbmluZGV4IGJhM2RiYWM4MGZiNDkuLjA0Nzc2YTExMjMzNDIgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9za2J1ZmYuY1xuKysrIGIvbmV0L2NvcmUvc2tidWZmLmNcbkBAIC0xNDE3LDEwICsxNDE3LDEzIEBAIEVYUE9SVF9TWU1CT0woc2tiX2R1bXApO1xuICAqXG4gICpcdFJlcG9ydCB4bWl0IGVycm9yIGlmIGEgZGV2aWNlIGNhbGxiYWNrIGlzIHRyYWNraW5nIHRoaXMgc2tiLlxuICAqXHRza2IgbXVzdCBiZSBmcmVlZCBhZnRlcndhcmRzLlxuKyAqXG4rICpcdERvZXMgbm90aGluZyBmb3IgYSBjbG9uZWQgc2tiOiB0aGUgemVyb2NvcHkgc3RhdGUgbGl2ZXMgaW5cbisgKlx0c2tiX3NoaW5mbygpLCB3aGljaCB0aGUgY2xvbmVzIHNoYXJlLlxuICAqL1xuIHZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuLVx0aWYgKHNrYikge1xuK1x0aWYgKHNrYiBcdTAwMjZcdTAwMjYgIXNrYl9jbG9uZWQoc2tiKSkge1xuIFx0XHRza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKTtcbiBcdFx0c2tiX3pjb3B5X2NsZWFyKHNrYiwgdHJ1ZSk7XG4gXHR9XG5AQCAtMzkwNywxMCArMzkxMCw5IEBAIHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilcbiBcbiBcdHNrYl9sZW5fYWRkKHRvLCBsZW4gKyBwbGVuKTtcbiBcbi1cdGlmICh1bmxpa2VseShza2Jfb3JwaGFuX2ZyYWdzKGZyb20sIEdGUF9BVE9NSUMpKSkge1xuLVx0XHRza2JfdHhfZXJyb3IoZnJvbSk7XG4rXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0fVxuK1xuIFx0c2tiX3plcm9jb3B5X2Nsb25lKHRvLCBmcm9tLCBHRlBfQVRPTUlDKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNrYl9zaGluZm8oZnJvbSktXHUwMDNlbnJfZnJhZ3M7IGkrKykge1xuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbmluZGV4IGFlNjliMmNhYmFiOWUuLmZmZjc1YzNlZWQxMTYgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbkBAIC0yODUsNiArMjg1LDcgQEAgdm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4gXHRcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbitcdFx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbiBcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTYwMSw4ICs2MDIsNiBAQCBzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGVyciA9IGdlbmxtc2dfdW5pY2FzdChvdnNfZHBfZ2V0X25ldChkcCksIHVzZXJfc2tiLCB1cGNhbGxfaW5mby1cdTAwM2Vwb3J0aWQpO1xuIFx0dXNlcl9za2IgPSBOVUxMO1xuIG91dDpcbi1cdGlmIChlcnIpXG4tXHRcdHNrYl90eF9lcnJvcihza2IpO1xuIFx0Y29uc3VtZV9za2IodXNlcl9za2IpO1xuIFx0Y29uc3VtZV9za2IobnNrYik7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1ODozOC42NTM3NTQyMzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTAyMTAzNjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIFBhY2tldCBIYW5kbGluZyBDaGFuZ2VzKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyBob3cgd2UgaGFuZGxlIHRyYW5zbWl0IGVycm9ycywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgYnVmZmVycyAoYHNrYmBzKS4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGl0J3MgbW9kaWZ5aW5nIGBza2JfdHhfZXJyb3JgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AgdG8gZWZmZWN0aXZlbHkgZG8gbm90aGluZyBmb3IgY2xvbmVkIFNLQnMuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2sgYXQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhhdC4gSXQgYWxzbyBsb29rcyBsaWtlIHRoZSBwYXRjaCBpcyByZW1vdmluZyBgc2tiX3R4X2Vycm9yKGZyb20pYCBjYWxscyBmcm9tIGBza2JfemVyb2NvcHlgIGluIHRoZSBzYW1lIGZpbGUgYW5kIGBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0YCBpbiBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgLCBhbmQgYWRkaW5nIGBza2JfdHhfZXJyb3Ioc2tiKWAgdG8gYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIHdoaWNoIGlzIGFsc28gaW4gdGhlIE9wZW4gdlN3aXRjaCBkYXRhcGF0aCBjb2RlLlxuXG5UaGlzIHRvdWNoZXMgY29yZSBuZXR3b3JraW5nIGFuZCBPcGVuIHZTd2l0Y2gsIHdoaWNoIGlzIGEga2V5IHNpZ25hbCB0aGF0IHRoaXMgaXMgYSBwYXRjaCB0aGF0J3MgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIGFuZCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcgdG8gZW5zdXJlIHRoZXJlIGFyZW4ndCBhbnkgcmVncmVzc2lvbiBidWdzLlxuXG5MZXQncyBxdWlja2x5IGNvbmZpcm0gT3BlbiB2U3dpdGNoIGNvbmZpZ3VyYXRpb24sIGp1c3QgdG8gYmUgc3VyZS4gQWxyaWdodCwgYENPTkZJR19PUEVOVlNXSVRDSGAgaW4gYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCB3aWxsIHRlbGwgdXMgaWYgaXQncyBlbmFibGVkLiBUaGUgY29yZSBuZXR3b3JraW5nIGJpdHMgYXJlIGFsd2F5cyBlbmFibGVkLCBzbyB3ZSdyZSBnb29kIHRoZXJlLlxuXG5JJ20gemVyb2luZyBpbiBvbiBhIGZldyBjcml0aWNhbCBzeW1ib2xzIGhlcmU6IGBza2JfdHhfZXJyb3JgLCBgc2tiX3plcm9jb3B5YCwgYG92c19kcF9wcm9jZXNzX3BhY2tldGAsIGFuZCBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAuIEkgbmVlZCB0byB2ZXJpZnkgdGhlaXIgdmlzaWJpbGl0eSB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBsaW5rYWdlIGlzc3VlcyBvciBzdXJwcmlzZXMuIFNlZW1zIGxpa2UgYHNrYl90eF9lcnJvcmAsIGBza2JfemVyb2NvcHlgLCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgYXJlIGFsbCBub24tc3RhdGljLCBzbyB0aGUgY2hhbmNlcyBhcmUgdGhhdCBgRVhQT1JUX1NZTUJPTChza2JfdHhfZXJyb3IpYCBpcyBpbiBwbGFjZS4gQnV0IEkgd2FudCB0byBkb3VibGUtY2hlY2sgdGhhdC4gSG93ZXZlciwgYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgIGlzIHN0YXRpYy4gU28sIGl0IG1heSBub3QgYmUgYSBnb29kIGZvY2FsIHBvaW50LlxuXG5JIHNob3VsZCBjaGVjayB0aGUgYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYCBmaWxlIGZvciBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgYXMgd2VsbC4gWXVwLCBpdCdzIHN0YXRpYy5cblxuTm93LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNrYl90eF9lcnJvcmAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYCBhbmQgZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1ODo0NS41NTU4NjE5NjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NTIzNTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIHNrYl90eF9lcnJvclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz0xNDEyPUVYUE9SVF9TWU1CT0woc2tiX2R1bXApO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTQyMy0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzoxNDI0OnZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2tidWZmLmMtMTQyNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU4OjQ1LjY5MjM5MTcxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2OTk3NjQ3NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIEtlcm5lbCBOZXR3b3JraW5nIENvZGUqKlxuXG5Pa2F5LCBzbyBgc2tiX3R4X2Vycm9yYCBpcyBleHBvcnRlZCDigJMgdGhhdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gYSByZWxhdGVkIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYHNrYl96ZXJvY29weWAuIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCB0aGVzZSBhcmUgbGlua2VkIHNvbWVob3cuIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzIGhlcmUuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0ICpob3cqIHRoZXkgaW50ZXJhY3QsIGlmIHRoZXkgZG8uIFRoaXMgY291bGQgYmUgYWJvdXQgZXJyb3IgaGFuZGxpbmcgaW4gemVyby1jb3B5IHNjZW5hcmlvcywgb3IgbWF5YmUgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50LiBSZWdhcmRsZXNzLCBgc2tiX3plcm9jb3B5YCBpcyB0aGUgbmV4dCBsb2dpY2FsIGZ1bmN0aW9uIHRvIGludmVzdGlnYXRlLiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MzMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1ODo0OC4zOTIxNTg2OThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1OTA4NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgc2tiX3plcm9jb3B5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jPTE5MTM9RVhQT1JUX1NZTUJPTF9HUEwobXNnX3plcm9jb3B5X3VidWZfb3BzKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xOTE0LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjE5MTU6aW50IHNrYl96ZXJvY29weV9pdGVyX3N0cmVhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2NvcmUvc2tidWZmLmMtMTkxNi1cXHRcXHRcXHQgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6NTg6NDguNDk4MDc2MTA5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwMzY2NTQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgc2tiX3plcm9jb3B5YCoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYHNrYl96ZXJvY29weWAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCBsaXZlcyBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBHb29kLCB0aGF0IG5hcnJvd3MgdGhlIHNlYXJjaCBjb25zaWRlcmFibHkuIExldCdzIHB1bGwgdXAgdGhlIGRlZmluaXRpb24uIEknbSBnb2luZyB0byBuZWVkIHRvIHBhcnNlIHRocm91Z2ggdGhlIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIGludGVudC4gSG9wZWZ1bGx5LCB0aGUgY29tbWVudHMgYXJlIGNsZWFyIGFuZCBjb25jaXNlLCBhbmQgdGhlIGNvZGUgZm9sbG93cyBzdGFuZGFyZCBrZXJuZWwgY29kaW5nIGNvbnZlbnRpb25zIC0gbGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpc3NlY3QuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoaXMgemVyby1jb3B5IG1lY2hhbmlzbSB3b3JrcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIHNrX2J1ZmYgbGlmZWN5Y2xlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBkYXRhIHJhY2VzIGFuZCB0aGVpciBtaXRpZ2F0aW9ucy4gT2YgcGFydGljdWxhciBpbnRlcmVzdCBpcyB0aGUgaW50ZXJwbGF5IHdpdGggcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBidWZmZXIgbWFuYWdlbWVudCwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGFuZCBETUEuIEknbGwga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgdW51c3VhbCBsb2NraW5nIHBhdHRlcm5zIG9yIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBpbiB0aGlzIGltcGxlbWVudGF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3csIGVzcGVjaWFsbHkgdGhlIGNvcHktb24td3JpdGUgYXNwZWN0cywgaXMgY3J1Y2lhbCBmb3IgYXNzZXNzaW5nIGl0cyBvdmVyYWxsIGVmZmljaWVuY3kgYW5kIHBvdGVudGlhbCBkcmF3YmFja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzIsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1ODo1MS43MDE3NDMyN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDExNzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2JfemVyb2NvcHlcXFxcKHN0cnVjdCBza19idWZmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jPTM4Nzg9aW50XFxubmV0L2NvcmUvc2tidWZmLmM6Mzg3OTpza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXFxubmV0L2NvcmUvc2tidWZmLmMtMzg4MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU4OjUxLjc5MTg2NjEwOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODExODYzMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBgc2tiX3plcm9jb3B5YCBFeHBvcnQgU3RhdHVzKipcblxuQWxyaWdodCwgdGhlIGNvZGUgc25pcHBldCBpbiBmcm9udCBvZiBtZSBpcyBgaW50IHNrYl96ZXJvY29weShzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tLCBpbnQgbGVuLCBpbnQgaGxlbilgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBmdW5jdGlvbiwgYHNrYl96ZXJvY29weWAsIGlzIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCBhY2Nlc3NpYmxlIGZvciB1c2UuIEdpdmVuIHRoaXMgaXMgYSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24sIGl0J3MgbGlrZWx5IHBhcnQgb2YgdGhlIGtlcm5lbCdzIGludGVybmFsIEFQSS4gSG93ZXZlciwgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBpdCdzIHNwZWNpZmljYWxseSBleHBvcnRlZCDigJMgZWl0aGVyIHRocm91Z2ggYSBzeW1ib2wgdGFibGUgb3Igc29tZSBvdGhlciBtZWNoYW5pc20g4oCTIHNvIHRoYXQgaXQncyBhdmFpbGFibGUgdG8gbW9kdWxlcyBhbmQgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBpZiB0aGF0IGlzIHRoZSB1c2UgY2FzZS4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSByZWFkaWx5IGNhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIG15IGN1cnJlbnQgY29udGV4dCwgb3Igd2lsbCBJIG5lZWQgdG8ganVtcCB0aHJvdWdoIGhvb3BzIGxpa2UgY2FsbGluZyBpdCBpbnRlcm5hbGx5IHRvIGEgc3BlY2lmaWMgZGV2aWNlIGRyaXZlciBmdW5jdGlvbi4gSSBuZWVkIHRvIGtub3cgdGhlIHZpc2liaWxpdHkgb2YgdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3MywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU4OjU1LjA3MzA1NDk2OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMzAxNDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnNrYl96ZXJvY29weVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz0xOTE1PWludCBza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTk1Mi19XFxubmV0L2NvcmUvc2tidWZmLmM6MTk1MzpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaXRlcl9zdHJlYW0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTE5NTQtXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz0zODQxPXNrYl96ZXJvY29weV9oZWFkbGVuKGNvbnN0IHN0cnVjdCBza19idWZmICpmcm9tKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzg1Ny19XFxubmV0L2NvcmUvc2tidWZmLmM6Mzg1ODpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHlfaGVhZGxlbik7XFxubmV0L2NvcmUvc2tidWZmLmMtMzg1OS1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM4Nzk9c2tiX3plcm9jb3B5KHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBsZW4sIGludCBobGVuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzkzNC19XFxubmV0L2NvcmUvc2tidWZmLmM6MzkzNTpFWFBPUlRfU1lNQk9MX0dQTChza2JfemVyb2NvcHkpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM5MzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU4OjU1LjE4NjM2Mjc2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTI4NjUyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktlcm5lbCBJbnZlc3RpZ2F0aW9uOiBgc2tiX3plcm9jb3B5YCBcdTAwMjYgYG92c19kcF9wcm9jZXNzX3BhY2tldGAqKlxuXG5BbHJpZ2h0LCBzbyBgc2tiX3plcm9jb3B5YCAqaXMqIGV4cG9ydGVkLCBjb25maXJtZWQuIFRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIGJyb2FkZXIgZGF0YSBwYXRoIHdpdGhpbiBPVlMsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBvdXIgY3VycmVudCBwcm9ibGVtLlxuXG5NeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBkZWVwbHkgZXhhbWluZSB0aGUgaW50ZXJuYWxzIG9mIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBsaW5jaHBpbi4gVW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBTS0IsIGhvdyBpdCBoYW5kbGVzIHBhY2tldCBidWZmZXJzLCBhbmQgd2hldGhlciBpdCdzICp1dGlsaXppbmcqIGBza2JfemVyb2NvcHlgIChvciAqY291bGQqIHV0aWxpemUgaXQpIGlzIGdvaW5nIHRvIGJlIGtleSB0byB3aGF0ZXZlciBJIGFtIHRyeWluZyB0byBhY2hpZXZlLiBJJ2xsIG5lZWQgdG8gdHJhY2UgaXRzIGNhbGwgZmxvdywgc2NydXRpbml6ZSBpdHMgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgbG9vayBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpbmVmZmljaWVuY2llcyByZWxhdGVkIHRvIG1lbW9yeSBjb3B5IG9wZXJhdGlvbnMsIGJlY2F1c2UgaWYgYHNrYl96ZXJvY29weWAgaXMgYXZhaWxhYmxlLCBpdCB3b3VsZCBzZWVtIHJlYXNvbmFibGUgdG8gY29uc2lkZXIgZW1wbG95aW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTg2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6NTg6NTguNzM5MjMxMzE2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzYxOTE4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfZHBfcHJvY2Vzc19wYWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjMzPXZvaWQgb3ZzX2RwX2RldGFjaF9wb3J0KHN0cnVjdCB2cG9ydCAqcClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0NC0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2suICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjQ1OnZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI0Ni17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU4OjU4LjgwNjg1NzgzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjY1MjIwMTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgZGVsaXZlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHBlcnNwZWN0aXZlOlxuXG4qKkNvbnNpZGVyaW5nIEV4cG9ydGluZyoqXG5cbkFscmlnaHQsIHNvIHRoZSBxdWVzdGlvbiBpcywgXCJJcyBpdCBleHBvcnRlZD9cIiBUaGF0J3MgdGhlIGNydXggb2YgaXQuIFdlIG5lZWQgdG8gaW1tZWRpYXRlbHkgZGVmaW5lIFwiaXQuXCIgQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzcGVjaWZpYyBkYXRhc2V0LCBhIG1vZGVsLCB0aGUgb3V0cHV0IG9mIGEgcHJvY2Vzcywgb3IgYSBtb3JlIGFic3RyYWN0IGNvbmNlcHQgbGlrZSBhIGNhcGFiaWxpdHkgb3IgYSBwcm9kdWN0PyBUaGUgY29udGV4dCBpcyBjcnVjaWFsLiBBc3N1bWluZyB3ZSBoYXZlIHRoYXQgY29udGV4dCwgdGhlIG5leHQgbGV2ZWwgb2YgZ3JhbnVsYXJpdHkgZGVwZW5kcyBlbnRpcmVseSBvbiB0aGUgZnJhbWV3b3JrIHN1cnJvdW5kaW5nIGl0LiBcblxuSSdtIG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdmFyaW91cyBzdGFnZXMuIFdlIGNhbid0IGp1c3Qgc2xhcCBhIFwieWVzXCIgb3IgXCJub1wiIG9uIHRoaXMuIFdoYXQgZG9lcyBleHBvcnRpbmcgKm1lYW4qIGluIHRoaXMgc2NlbmFyaW8/IElzIGl0IGEgc2ltcGxlIGRhdGEgZHVtcCwgb3IgYSBmb3JtYWxpemVkIHByb2Nlc3Mgd2l0aCB2ZXJzaW9uaW5nLCBtZXRhZGF0YSwgYW5kIHNlY3VyaXR5IGltcGxpY2F0aW9ucz8gVGhlIG1ldGhvZCBvZiB0cmFuc2ZlciBpcyBhbHNvIGNyaXRpY2FsLiBSRVNUIEFQST8gRmlsZSB0cmFuc2ZlciBwcm90b2NvbD8gU3RyZWFtaW5nPyBUaGF0IGFsb25lIGRyaXZlcyB0aGUgY29udmVyc2F0aW9uIGRvd24gYSBwYXJ0aWN1bGFyIHBhdGguXG5cblRoZW4sIHRoZSBkZXN0aW5hdGlvbiBiZWNvbWVzIHRoZSBuZXh0IGNyaXRpY2FsIHBvaW50LiBJcyBpdCBhIHdlbGwtZGVmaW5lZCBleHRlcm5hbCBzeXN0ZW0sIGFub3RoZXIgaW50ZXJuYWwgbW9kdWxlLCBvciBhIGNvbGxlY3Rpb24gb2YgZGlzcGFyYXRlIGNvbnN1bWVycz8gVGhlIGV4cGVjdGVkIGZvcm1hdCBhbmQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSB0YXJnZXQgc3lzdGVtIHdpbGwgYmUgYSBtYWpvciBkcml2ZXIgb2YgdGhlIGltcGxlbWVudGF0aW9uLiBJcyBpdCBhIGxlZ2FjeSBzeXN0ZW0sIGFuIGluZHVzdHJ5IHN0YW5kYXJkLCBvciBhIGN1dHRpbmcgZWRnZSBwbGF0Zm9ybT8gVGhlIGFuc3dlciB0byB0aGlzIGlzIHRoZSBiaWdnZXN0IGlzc3VlLiBJdCBtYXkgYmUgdGhhdCB0aGVyZSBhcmUgbm8gc3RhbmRhcmQgZXhwb3J0IG9wdGlvbnMuXG5cblRoZSBcImlzIGl0XCIgcGFydCBhbHNvIHN1YnRseSBzdWdnZXN0cyBhIHByZXNlbnQtdGVuc2UgY29uY2Vybi4gSXMgdGhpcyBhIG5ldyByZXF1aXJlbWVudD8gT3IgaGFzIGl0IGFsd2F5cyBiZWVuIHNvPyBJcyBpdCBhIGN1cnJlbnQgZnVuY3Rpb24sIG9yIGp1c3QgYSBjb25jZXB0PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mICpub3QqIGV4cG9ydGluZz8gUG90ZW50aWFsIHJldmVudWUgbG9zcywgbGFjayBvZiBpbnRlcm9wZXJhYmlsaXR5LCBvciBqdXN0IGEgd2FzdGVkIG9wcG9ydHVuaXR5IHRvIGxldmVyYWdlIHRoZSB2YWx1ZSBvZiBvdXIgd29yaz8gXG5cblNvLCB1bHRpbWF0ZWx5LCBhbnN3ZXJpbmcgdGhpcyBzaW1wbGUgcXVlc3Rpb24gcmVxdWlyZXMgYSBkZWVwIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIG9mIHRoZSAqd2hhdCosIHRoZSAqaG93KiwgdGhlICp3aGVyZSosIGFuZCB0aGUgKndoeSouIEl0J3MgcmFyZWx5IGEgc3RyYWlnaHRmb3J3YXJkIGJpbmFyeSByZXNwb25zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQxNiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6NTk6MDMuMDcyMDgxOTQxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjM5MDUyNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qb3ZzX2RwX3Byb2Nlc3NfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1OTowMy4xMjQ0ODA5MzZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5MjY2MjkwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbm5lciBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIE5vbi1TdGF0aWMsIEludGVybmFsIERhdGFwYXRoIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZ1bmN0aW9uIEknbSBsb29raW5nIGF0IGlzbid0ICpleHBvcnRlZCosIHdoaWNoIGlzIHRoZSBmaXJzdCBjbHVlLiBUaGF0IG1lYW5zIGl0J3MgbGlrZWx5IGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugd2l0aGluIHRoZSBtb2R1bGUgb3IgbGlicmFyeSBpdCBiZWxvbmdzIHRvLiBCdXQgdGhlIGZhY3QgdGhhdCBpdCdzICpub24tc3RhdGljKiBpcyBpbnRlcmVzdGluZy4gSXQncyBub3QgbGltaXRlZCB0byB0aGlzIGZpbGUsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gSXQgY291bGQgYmUgY2FsbGVkIGZyb20gb3RoZXIgZmlsZXMgaW4gdGhlIHByb2plY3QuXG5cbkdpdmVuIHRoYXQgaXQncyBsaWtlbHkgcmVsYXRlZCB0byBwYWNrZXQgcHJvY2Vzc2luZywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgYG5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbGwgZXhhbWluZSB0aGUgZnVuY3Rpb24gYHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZGF0YXBhdGgsIGhvdyBwYWNrZXRzIGFyZSBoYW5kbGVkLCBhbmQgd2hvIG1pZ2h0IGJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gV2hhdCdzIHRoZSBjb250ZXh0PyBXaGF0J3MgdGhlIGRhdGEgZmxvdz8gQW5kIGhvdyBkb2VzIHRoaXMgZnVuY3Rpb24gZml0IGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIG9mIE9wZW4gdlN3aXRjaD8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIHVzYWdlIHdpdGhpbiB0aGF0IGZpbGUgdG8gc2VlIHdoZXJlIGVsc2UgaXQgaXMgdXNlZCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBmdW5jdGlvbidzIG5vbi1zdGF0aWMgc3RhdHVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODgxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6NTk6MDcuNDE3MTQ2MDE2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTMwMjY4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJxdWV1ZV91c2Vyc3BhY2VfcGFja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTEyNz1zdGF0aWMgaW50IHF1ZXVlX2dzb19wYWNrZXRzKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICosXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzAtXFx0XFx0XFx0ICAgICB1aW50MzJfdCBjdXRsZW4pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjEzMTpzdGF0aWMgaW50IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IHNrX2J1ZmYgKixcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzItXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTMzMD1pbnQgb3ZzX2RwX3VwY2FsbChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzQ2LVxcdGlmICghc2tiX2lzX2dzbyhza2IpKVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjM0NzpcXHRcXHRlcnIgPSBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KGRwLCBza2IsIGtleSwgdXBjYWxsX2luZm8sIGN1dGxlbik7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMzQ4LVxcdGVsc2VcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTM2Nz1zdGF0aWMgaW50IHF1ZXVlX2dzb19wYWNrZXRzKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zOTctXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6Mzk4OlxcdFxcdGVyciA9IHF1ZXVlX3VzZXJzcGFjZV9wYWNrZXQoZHAsIHNrYiwga2V5LCB1cGNhbGxfaW5mbywgY3V0bGVuKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0zOTktXFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTQ0Mj1zdGF0aWMgdm9pZCBwYWRfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy00NTEtXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NDUyOnN0YXRpYyBpbnQgcXVldWVfdXNlcnNwYWNlX3BhY2tldChzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTQ1My1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1OTowNy41MDI0NTM5MjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2NzczOTMzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgU3RhdGljIE5hdHVyZSBhbmQgS2V5IFN5bWJvbHMqKlxuXG5BbHJpZ2h0LCB0aGlzIGZlZWxzIHN0YXRpYyDigJMgbm8gZHluYW1pYyBlbGVtZW50cyB0byBpbW1lZGlhdGVseSBncmFiIG15IGF0dGVudGlvbi4gTXkgaW5pdGlhbCBhbmFseXNpcyBpcyB6ZXJvaW5nIGluIG9uIGEgZmV3IGNydWNpYWwgc3ltYm9sczogYHNrYl90eF9lcnJvcmAsIGBza2JfemVyb2NvcHlgLCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIFRob3NlIGFyZSBteSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cy4gVGhlIGNvbnRleHQgcG9pbnRzIHRvIGBPUEVOVlNXSVRDSGAgY29uZmlndXJhdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcGFja2V0IHByb2Nlc3Npbmcgd2l0aGluIGFuIE9wZW4gdlN3aXRjaCBlbnZpcm9ubWVudC4gVGhlIHByZXNlbmNlIG9mIGBza2JfdHhfZXJyb3JgIGFuZCBgc2tiX3plcm9jb3B5YCBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggZWl0aGVyIHRyYW5zbWlzc2lvbiBlcnJvcnMgd2l0aGluIGFuIGBza2JgLCBwb3RlbnRpYWxseSB6ZXJvLWNvcHkgb3B0aW1pemF0aW9ucywgb3IgYm90aC4gTm93IGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLi4uIHRoYXQncyB0aGUgY29yZS4gTXkgaW5zdGluY3QgaXMgdGhhdCB3ZSBhcmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIGRhdGEgcGF0aCBwYWNrZXQgcHJvY2Vzc2luZyBpbnRlcmFjdGlvbi5cblxuTXkgbmV4dCBtb3ZlPyBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgT1BFTlZTV0lUQ0hgIGhhcyBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIHdvcnRoIG5vdGluZy4gSXQgaXMgdW5saWtlbHkgdGhhdCBhbnl0aGluZyBJIHNlZSB0aGVyZSB3aWxsIGJlIG9mIGltbWVuc2UgaGVscCwgYnV0IGluIHRoZSBjb3Vyc2Ugb2YgYW4gaW52ZXN0aWdhdGlvbiwgeW91IG11c3Qgc3RhcnQgc29tZXdoZXJlLiBNeSBnb2FsIHdpbGwgYmUgdG8gZGV2ZWxvcCBhIG1vcmUgaW5mb3JtZWQgcGVyc3BlY3RpdmUsIHNvIHRoYXQgSSBjYW4gc2VlIHRoZSBpc3N1ZSBiZXR0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1OToxMS4xNzAxOTY0NTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzY2MzgyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1BFTlZTV0lUQ0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjQ0OmNvbmZpZyBPUEVOVlNXSVRDSF9HUkVcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00NS1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIEdSRSB0dW5uZWxpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU2LVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjU3OmNvbmZpZyBPUEVOVlNXSVRDSF9WWExBTlxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggVlhMQU4gdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy02OC1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNzAtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU5OjExLjI5Mzg2NTM3NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDg0MTg0MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBPcGVuIHZTd2l0Y2ggRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBPcGVuIHZTd2l0Y2ggdG9kYXkuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGFsd2F5cyB0byBzdGFydCB3aXRoIGEgZGVwZW5kZW5jeSBhbmFseXNpcy4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBhcmNoaXRlY3R1cmUsIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIG5ldHdvcmtpbmcgZWNvc3lzdGVtLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoaXMgdGhpbmcgKnJlYWxseSogcmVsaWVzIG9uLCBkb3duIHRvIHRoZSBjb3JlIGxpYnJhcmllcyBhbmQga2VybmVsIG1vZHVsZXMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIHZlcnNpb25zIG9mIERQREs/IERvZXMgaXQgaGVhdmlseSBsZWFuIG9uIHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlcywgbGlrZSBuYW1lc3BhY2VzIG9yIGVCUEY/IEFuZCBhcmUgdGhlcmUgYW55IGV4dGVybmFsIGxpYnJhcmllcyB0aGF0IGFyZSBjcml0aWNhbCBmb3IgaXRzIG9wZXJhdGlvbiwgb3IgYXJlIHRoZXJlIGFueSB2dWxuZXJhYmlsaXRpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmNsdWRlZCBsaWJyYXJpZXM/IEkgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlIHN5c3RlbSBhbmQgaXRzIHdlYWsgcG9pbnRzLiBJdCdzIHRpbWUgdG8gc3RhcnQgcGVlbGluZyBiYWNrIHRoZSBsYXllcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1OToxNC4zNzgwNTMwMjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE9wZW4gdlN3aXRjaFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgT1BFTlZTV0lUQ0hcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxcXFxuICAxMDpcXHRcXHRcXHQgICAoTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMTpcXHRcXHRcXHRcXHRcXHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0XFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXFxuICAxNDpcXHRcXHRzZWxlY3QgTVBMU1xcbiAgMTU6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDE2OlxcdFxcdHNlbGVjdCBORVRfTVBMU19HU09cXG4gIDE3OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gIDE4OlxcdFxcdHNlbGVjdCBORVRfTlNIXFxuICAxOTpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcXG4gIDIwOlxcdFxcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBPcGVuIHZTd2l0Y2ggaXMgYSBtdWx0aWxheWVyIEV0aGVybmV0IHN3aXRjaCB0YXJnZXRlZCBhdCB2aXJ0dWFsaXplZFxcbiAgMjM6XFx0XFx0ICBlbnZpcm9ubWVudHMuICBJbiBhZGRpdGlvbiB0byBzdXBwb3J0aW5nIGEgdmFyaWV0eSBvZiBmZWF0dXJlc1xcbiAgMjQ6XFx0XFx0ICBleHBlY3RlZCBpbiBhIHRyYWRpdGlvbmFsIGhhcmR3YXJlIHN3aXRjaCwgaXQgZW5hYmxlcyBmaW5lLWdyYWluZWRcXG4gIDI1OlxcdFxcdCAgcHJvZ3JhbW1hdGljIGV4dGVuc2lvbiBhbmQgZmxvdy1iYXNlZCBjb250cm9sIG9mIHRoZSBuZXR3b3JrLiAgVGhpc1xcbiAgMjY6XFx0XFx0ICBjb250cm9sIGlzIHVzZWZ1bCBpbiBhIHdpZGUgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMgYnV0IGlzXFxuICAyNzpcXHRcXHQgIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgaW4gbXVsdGktc2VydmVyIHZpcnR1YWxpemF0aW9uIGRlcGxveW1lbnRzLFxcbiAgMjg6XFx0XFx0ICB3aGljaCBhcmUgb2Z0ZW4gY2hhcmFjdGVyaXplZCBieSBoaWdobHkgZHluYW1pYyBlbmRwb2ludHMgYW5kIHRoZVxcbiAgMjk6XFx0XFx0ICBuZWVkIHRvIG1haW50YWluIGxvZ2ljYWwgYWJzdHJhY3Rpb25zIGZvciBtdWx0aXBsZSB0ZW5hbnRzLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggcHJvdmlkZXMgYW4gaW4ta2VybmVsIGZhc3QgcGF0aCBmb3IgcGFja2V0XFxuICAzMjpcXHRcXHQgIGZvcndhcmRpbmcuICBJdCBpcyBjb21wbGVtZW50ZWQgYnkgYSB1c2Vyc3BhY2UgZGFlbW9uLCBvdnMtdnN3aXRjaGQsXFxuICAzMzpcXHRcXHQgIHdoaWNoIGlzIGFibGUgdG8gYWNjZXB0IGNvbmZpZ3VyYXRpb24gZnJvbSBhIHZhcmlldHkgb2Ygc291cmNlcyBhbmRcXG4gIDM0OlxcdFxcdCAgdHJhbnNsYXRlIGl0IGludG8gcGFja2V0IHByb2Nlc3NpbmcgcnVsZXMuXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgU2VlIGh0dHA6Ly9vcGVudnN3aXRjaC5vcmcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIHVzZXJzcGFjZVxcbiAgMzc6XFx0XFx0ICB1dGlsaXRpZXMuXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxcbiAgNDA6XFx0XFx0ICBjYWxsZWQgb3BlbnZzd2l0Y2guXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU5OjE0LjM3ODE3MDMzNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODEwMzMxNDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipPcGVuIHZTd2l0Y2ggYW5kIEVycm9yIEhhbmRsaW5nKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGBPUEVOVlNXSVRDSGAgc2l0dWF0aW9uLiBJdCBmZWVscyBsaWtlIHdlJ3JlIHplcm9pbmcgaW4gb24gYSBzb2x1dGlvbiDigJMgaG9wZWZ1bGx5LCB0aGUgZGVwbG95bWVudCB3aWxsIHdvcmsgd2l0aCBpdC4gVGhlIGNvcmUgcHJpbmNpcGxlIHNlZW1zIHNvdW5kLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLlxuXG5TcGVjaWZpY2FsbHksIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgc2tiX3R4X2Vycm9yYCBpcyBpc29sYXRlZCBhbmQgb25seSBjYWxsZWQgd2l0aGluIHRoZSBzY29wZSB0aGF0IEkgdGhpbmsgaXQgaXMuIE5vIHNuZWFreSBzaWRlIGVmZmVjdHMgb3IgdW5leHBlY3RlZCBjYWxscyBmcm9tIGVsc2V3aGVyZS4gTGV0IG1lIGdvIG92ZXIgdGhlIGNvZGUgYWdhaW4gdG8gbWFrZSBzdXJlIHRoYXQgZnVuY3Rpb24gaXMgb25seSByZWFjaGFibGUgZnJvbSB0aGUgbG9jYXRpb25zIEkgZXhwZWN0LiBXZSBjYW4ndCBhZmZvcmQgYW55IHN1cnByaXNlcyB3aGVuIGl0IGNvbWVzIHRvIGVycm9yIGhhbmRsaW5nLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQgdGhhdCBuZWVkcyBleHRyYSBhdHRlbnRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxOTMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU5OjE3LjE4ODUwNTExNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2MzY4OTkxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2JfdHhfZXJyb3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L292cG4vaW8uYz0zNTY9bmV0ZGV2X3R4X3Qgb3Zwbl9uZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTQ0My1cXHRvdnBuX2Rldl9kc3RhdHNfdHhfZHJvcHBlZChvdnBuLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L292cG4vaW8uYzo0NDQ6XFx0c2tiX3R4X2Vycm9yKHNrYik7XFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTQ0NS1cXHRrZnJlZV9za2JfbGlzdChza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvdHVuLmM9MTAwMz1zdGF0aWMgbmV0ZGV2X3R4X3QgdHVuX25ldF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC90dW4uYy0xMDgzLVxcdGRldl9jb3JlX3N0YXRzX3R4X2Ryb3BwZWRfaW5jKGRldik7XFxuZHJpdmVycy9uZXQvdHVuLmM6MTA4NDpcXHRza2JfdHhfZXJyb3Ioc2tiKTtcXG5kcml2ZXJzL25ldC90dW4uYy0xMDg1LVxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBkcm9wX3JlYXNvbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTEzMzg9dm9pZCBza2JfZHVtcChjb25zdCBjaGFyICpsZXZlbCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBmdWxsX3BrdCk7XFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDoxMzM5OnZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpO1xcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtMTM0MC1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE0MTI9RVhQT1JUX1NZTUJPTChza2JfZHVtcCk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNDE0LS8qKlxcbm5ldC9jb3JlL3NrYnVmZi5jOjE0MTU6ICpcXHRza2JfdHhfZXJyb3IgLSByZXBvcnQgYW4gc2tfYnVmZiB4bWl0IGVycm9yXFxubmV0L2NvcmUvc2tidWZmLmMtMTQxNi0gKlxcdEBza2I6IGJ1ZmZlciB0aGF0IHRyaWdnZXJlZCBhbiBlcnJvclxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTQyMy0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzoxNDI0OnZvaWQgc2tiX3R4X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2tidWZmLmMtMTQyNS17XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNDMwLX1cXG5uZXQvY29yZS9za2J1ZmYuYzoxNDMxOkVYUE9SVF9TWU1CT0woc2tiX3R4X2Vycm9yKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0xNDMyLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYz03MDU9bmZxbmxfYnVpbGRfcGFja2V0X21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZxbmxfaW5zdGFuY2UgKnF1ZXVlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy04MDMtXFx0aWYgKCFza2IpIHtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jOjgwNDpcXHRcXHRza2JfdHhfZXJyb3IoZW50c2tiKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgwNS1cXHRcXHRnb3RvIG5sbXNnX2ZhaWx1cmU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jLTgxMi1cXHRpZiAoIW5saCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6ODEzOlxcdFxcdHNrYl90eF9lcnJvcihlbnRza2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtODE0LVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYy05NjMtbmxhX3B1dF9mYWlsdXJlOlxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmM6OTY0OlxcdHNrYl90eF9lcnJvcihlbnRza2IpO1xcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMtOTY1LVxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjQ1PXZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjg3LVxcdFxcdGRlZmF1bHQ6XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6Mjg4OlxcdFxcdFxcdHNrYl90eF9lcnJvcihza2IpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI4OS1cXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jPTE1MjU9aW50IHNrYl9tZXRhX2ludmFsaWRfY3R4KHZvaWQgKmN0eClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jLTE1MzQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmM6MTUzNTpTRUMoXFxcImZlbnRyeS9za2JfdHhfZXJyb3JcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9keW5wdHJfZmFpbC5jLTE1MzYtX19mYWlsdXJlIF9fbXNnKFxcXCJtdXN0IGJlIHJlZmVyZW5jZWQgb3IgdHJ1c3RlZFxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmM9MTUzNz1pbnQgQlBGX1BST0coc2tiX2ludmFsaWRfY3R4X2ZlbnRyeSwgdm9pZCAqc2tiKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2R5bnB0cl9mYWlsLmMtMTU0Ni1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYzoxNTQ3OlNFQyhcXFwiZmV4aXQvc2tiX3R4X2Vycm9yXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZHlucHRyX2ZhaWwuYy0xNTQ4LV9fZmFpbHVyZSBfX21zZyhcXFwibXVzdCBiZSByZWZlcmVuY2VkIG9yIHRydXN0ZWRcXFwiKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1OToxOS41NTIyMDQ0NDNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU0ODY1MDI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgdGFrZW4gYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBmYWN0IHRoYXQgaXQgdG91Y2hlcyBjb2RlIGluIGBkcml2ZXJzL25ldC90dW4uY2AsIGBuZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jYCwgYGRyaXZlcnMvbmV0L292cG4vaW8uY2AsIGFuZCBgbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNgIOKAkyBhbGwgY29yZSBuZXR3b3JraW5nIGNvbXBvbmVudHMgYW5kIE9wZW4gdlN3aXRjaCwgc3BlY2lmaWNhbGx5IOKAkyByZWFsbHkgZmxhZ3MgaXQgZm9yIGNsb3NlIGV4YW1pbmF0aW9uLiBJJ20gZm9jdXNpbmcgb24gdGhlc2Uga2V5IHN5bWJvbHM6IGBza2JfdHhfZXJyb3JgLCBgc2tiX3plcm9jb3B5YCwgYW5kIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLlxuXG5UaGUgcGF0Y2gncyBtb2RpZmljYXRpb24gb2YgYHNrYl90eF9lcnJvcmAgdG8gZWZmZWN0aXZlbHkgKm5vLW9wKiBmb3IgY2xvbmVkIHNrYnMsIGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCBgc2tiX3plcm9jb3B5YCBhbmQgYG92c19kcF9wcm9jZXNzX3BhY2tldGAgaXMgd2hhdCdzIGNhdGNoaW5nIG15IGV5ZS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBrZXkgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIGRlYWxpbmcgd2l0aCB6ZXJvLWNvcHkgb3BlcmF0aW9ucyBhbmQsIGNyaXRpY2FsbHksIE9wZW4gdlN3aXRjaCBkYXRhIHBhdGggcGFja2V0IHByb2Nlc3NpbmcuIEkgc2VlIGEgaGlnaCByaXNrIG9mIHN1YnRsZSBtZW1vcnkgZXJyb3JzOiBsZWFrcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgdGhlIHVzdWFsIHN1c3BlY3RzIHdoZW4geW91J3JlIG11Y2tpbmcgYXJvdW5kIHdpdGggc2hhcmVkIG1lbW9yeSBidWZmZXJzLCB3aGljaCB6ZXJvLWNvcHkgcmVsaWVzIG9uLlxuXG5UaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIGFuZCBJIHdpbGwgZW5hYmxlIHRoZSBgT1BFTlZTV0lUQ0hgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuc3VyZSB0aGUgT1ZTIGNvZGUgcGF0aHMgYXJlIGFjdGl2ZSBkdXJpbmcgZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRob3JvdWdobHkgdGVzdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzI2LCJPdXRwdXRUb2tlbnMiOjE1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNlQwNzo1OToyNS4xMDA4NTc0MjlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjgwNDUyMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2tiX3R4X2Vycm9yXCIsXG4gICAgXCJza2JfemVyb2NvcHlcIixcbiAgICBcIm92c19kcF9wcm9jZXNzX3BhY2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBza2JfdHhfZXJyb3JgIGluIGNvcmUgbmV0d29ya2luZyB0byBkbyBub3RoaW5nIGZvciBjbG9uZWQgc2ticywgYW5kIGNoYW5nZXMgaXRzIHVzYWdlIGluIGBza2JfemVyb2NvcHlgIGFuZCBPcGVuIHZTd2l0Y2gncyBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YC4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBhbmQgT3BlbiB2U3dpdGNoIHBhdGhzIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzIG9yIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBvY2N1ciB3aXRoIHplcm9jb3B5IHNrYnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJza2JfdHhfZXJyb3JcIixcbiAgICBcInNrYl96ZXJvY29weVwiLFxuICAgIFwib3ZzX2RwX3Byb2Nlc3NfcGFja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNrYl90eF9lcnJvcmAgaW4gY29yZSBuZXR3b3JraW5nIHRvIGRvIG5vdGhpbmcgZm9yIGNsb25lZCBza2JzLCBhbmQgY2hhbmdlcyBpdHMgdXNhZ2UgaW4gYHNrYl96ZXJvY29weWAgYW5kIE9wZW4gdlN3aXRjaCdzIGBvdnNfZHBfcHJvY2Vzc19wYWNrZXRgLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGFuZCBPcGVuIHZTd2l0Y2ggcGF0aHMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3Mgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIG9jY3VyIHdpdGggemVyb2NvcHkgc2ticy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6NTk6MjUuMjI4OTEzMDIyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkxMDY5NjQzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE2VDA3OjU5OjI1LjIyOTY3ODMyMloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjkwOTkyNjcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIG9mIGBza2JfdHhfZXJyb3JgIHRvIGlnbm9yZSBjbG9uZWQgc2ticywgYXMgdGhlaXIgemVyby1jb3B5IHN0YXRlIChpbiBgc2tiX3NoaW5mb2ApIGlzIHNoYXJlZCBhbW9uZyBjbG9uZXMuIEl0IGFsc28gYWRqdXN0cyB3aGVyZSBgc2tiX3R4X2Vycm9yYCBpcyBjYWxsZWQgaW4gYHNrYl96ZXJvY29weWAgYW5kIG9wZW52c3dpdGNoIGRhdGFwYXRoLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgaXNzdWVzIHdpdGggemVyby1jb3B5IHN0YXRlIG1hbmFnZW1lbnQgYW5kIHJlZmVyZW5jZSBjb3VudGluZywgd2hpY2ggdHlwaWNhbGx5IGxlYWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYnVncy4gU3VjaCBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgbW9kaWZ5IHN0cnVjdHVyZSBwYWRkaW5nLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSBvciBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYTU0ZTI2NGYzZDE4M2NkNzQ1MTkzZTZkNjkyYzFmMjAyM2NlNDNjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMTYgMDc6NTg6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jXG5pbmRleCBiYTNkYmFjODBmYjQ5Li4wNDc3NmExMTIzMzQyIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvc2tidWZmLmNcbisrKyBiL25ldC9jb3JlL3NrYnVmZi5jXG5AQCAtMTQxNywxMCArMTQxNywxMyBAQCBFWFBPUlRfU1lNQk9MKHNrYl9kdW1wKTtcbiAgKlxuICAqXHRSZXBvcnQgeG1pdCBlcnJvciBpZiBhIGRldmljZSBjYWxsYmFjayBpcyB0cmFja2luZyB0aGlzIHNrYi5cbiAgKlx0c2tiIG11c3QgYmUgZnJlZWQgYWZ0ZXJ3YXJkcy5cbisgKlxuKyAqXHREb2VzIG5vdGhpbmcgZm9yIGEgY2xvbmVkIHNrYjogdGhlIHplcm9jb3B5IHN0YXRlIGxpdmVzIGluXG4rICpcdHNrYl9zaGluZm8oKSwgd2hpY2ggdGhlIGNsb25lcyBzaGFyZS5cbiAgKi9cbiB2b2lkIHNrYl90eF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdGlmIChza2IpIHtcbitcdGlmIChza2IgXHUwMDI2XHUwMDI2ICFza2JfY2xvbmVkKHNrYikpIHtcbiBcdFx0c2tiX3pjb3B5X2Rvd25ncmFkZV9tYW5hZ2VkKHNrYik7XG4gXHRcdHNrYl96Y29weV9jbGVhcihza2IsIHRydWUpO1xuIFx0fVxuQEAgLTM5MDcsMTAgKzM5MTAsOSBAQCBza2JfemVyb2NvcHkoc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IGxlbiwgaW50IGhsZW4pXG4gXG4gXHRza2JfbGVuX2FkZCh0bywgbGVuICsgcGxlbik7XG4gXG4tXHRpZiAodW5saWtlbHkoc2tiX29ycGhhbl9mcmFncyhmcm9tLCBHRlBfQVRPTUlDKSkpIHtcbi1cdFx0c2tiX3R4X2Vycm9yKGZyb20pO1xuK1x0aWYgKHVubGlrZWx5KHNrYl9vcnBoYW5fZnJhZ3MoZnJvbSwgR0ZQX0FUT01JQykpKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdH1cbitcbiBcdHNrYl96ZXJvY29weV9jbG9uZSh0bywgZnJvbSwgR0ZQX0FUT01JQyk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBza2Jfc2hpbmZvKGZyb20pLVx1MDAzZW5yX2ZyYWdzOyBpKyspIHtcbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG5pbmRleCBhZTY5YjJjYWJhYjllLi5mZmY3NWMzZWVkMTE2IDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmNcbisrKyBiL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jXG5AQCAtMjg1LDYgKzI4NSw3IEBAIHZvaWQgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5KVxuIFx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4rXHRcdFx0c2tiX3R4X2Vycm9yKHNrYik7XG4gXHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC02MDEsOCArNjAyLDYgQEAgc3RhdGljIGludCBxdWV1ZV91c2Vyc3BhY2VfcGFja2V0KHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRlcnIgPSBnZW5sbXNnX3VuaWNhc3Qob3ZzX2RwX2dldF9uZXQoZHApLCB1c2VyX3NrYiwgdXBjYWxsX2luZm8tXHUwMDNlcG9ydGlkKTtcbiBcdHVzZXJfc2tiID0gTlVMTDtcbiBvdXQ6XG4tXHRpZiAoZXJyKVxuLVx0XHRza2JfdHhfZXJyb3Ioc2tiKTtcbiBcdGNvbnN1bWVfc2tiKHVzZXJfc2tiKTtcbiBcdGNvbnN1bWVfc2tiKG5za2IpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6NTk6MjUuMjI5Njc5NzkzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTA5ODk4MTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEFuYWx5c2lzOiBaZXJvLUNvcHkgRXJyb3IgSGFuZGxpbmcgYW5kIENsb25lZCBTS0JzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtb2RpZnlpbmcgYHNrYl90eF9lcnJvcmAgYW5kIGEgZmV3IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoZSBrZXJuZWwuIFRoZSBjb3JlIGNoYW5nZXMgaW52b2x2ZSBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGVycm9ycyB3aXRoIHplcm8tY29weSBTS0JzLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggY2xvbmVkIFNLQnMuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gc2VlIGlmIHRoaXMgaW50cm9kdWNlZCBhbnkgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cblxuVGhlIGZpcnN0IHBhcnQgb2YgdGhlIHBhdGNoIG1ha2VzIGBza2JfdHhfZXJyb3JgIGEgbm8tb3AgaWYgdGhlIFNLQiBpcyBjbG9uZWQuIEl0IGFsc28gcmVtb3ZlcyBhIGNhbGwgdG8gYHNrYl90eF9lcnJvcmAgd2l0aGluIGBza2JfemVyb2NvcHlgIGFuZCBtb3ZlcyBhIGNhbGwgZnJvbSBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgdG8gYG92c19kcF9wcm9jZXNzX3BhY2tldGAuIEZyb20gdGhpcywgSSB0aGluayBJIGhhdmUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjaGFuZ2VzLlxuXG5UaGUgY3JpdGljYWwgdGhpbmcgaXMgdGhlIGBza2JfY2xvbmVkKHNrYilgIGNoZWNrLiBgc2tiX3R4X2Vycm9yYCBpcyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgdGhlIHplcm8tY29weSBzdGF0ZSB3aGljaCBpbmNsdWRlcyBjYWxsaW5nIGBza2JfemNvcHlfZG93bmdyYWRlX21hbmFnZWQoc2tiKWAgYW5kIGBza2JfemNvcHlfY2xlYXIoc2tiLCB0cnVlKWAuIFRoZSBgc2tiX3NoaW5mbygpYCBzdHJ1Y3R1cmUgaG9sZHMgemVyby1jb3B5IHN0YXRlIGFuZCB0aGlzIGlzIHNoYXJlZCB3aXRoIGNsb25lcy4gVGhpcyBtYWtlcyBzZW5zZTsgaWYgYW4gZXJyb3Igb2NjdXJzIGFuZCBgc2tiX3R4X2Vycm9yYCAqZG9lcyogcnVuIG9uIG9uZSBjbG9uZSwgaXQgY291bGQgY2xlYXIgdGhlIHplcm8tY29weSBzdGF0ZSBmb3IgYWxsIG9mIHRoZW0uIFRoaXMgd291bGQgbGVhZCB0byBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBnZW5lcmFsbHkgaW5jb3JyZWN0IHN0YXRlIG1hbmFnZW1lbnQsIHJpZ2h0PyBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgZml4aW5nIHRoYXQsIHByZXZlbnRpbmcgdGhlIGNsZWFyaW5nIGlmIHRoZSBTS0IgaXMgY2xvbmVkLlxuXG5Ob3cgSSBoYXZlIHRvIHRoaW5rLCBkb2VzICpub3QqIGNhbGxpbmcgYHNrYl90eF9lcnJvcmAgbGVhdmUgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBpdCBsZWF2ZXMgdGhlIHN0YXRlIGludGFjdCBmb3IgdGhlIG90aGVyIGNsb25lcywgd2hpY2ggaXMgdGhlIGNvcnJlY3QgYmVoYXZpb3IuIENhbGxpbmcgYHNrYl90eF9lcnJvcmAgd291bGQgKmNsZWFyKiB0aGUgc3RhdGUgYW5kIHBvc3NpYmx5IGNhdXNlIGlzc3VlcyBmb3Igb3RoZXIgY2xvbmVzLiBUaGUgcmVtb3ZhbCBvZiBgc2tiX3R4X2Vycm9yKGZyb20pYCBpbiBgc2tiX3plcm9jb3B5YCBpcyBiZWNhdXNlIGBmcm9tYCBpcyBhbHNvIGxpa2VseSBjbG9uZWQsIGFuZCBzaG91bGQgbm90IGhhdmUgaXRzIHN0YXRlIGNsZWFyZWQgb24gYW4gZXJyb3IgZnJvbSB0aGlzIGZ1bmN0aW9uLiBUaGUgY2FsbGVyIG9mIGBza2JfemVyb2NvcHlgIHdpbGwgcHJvYmFibHkgZnJlZSB0aGUgU0tCcy5cblxuVGhlIGNoYW5nZSBpbiBgcXVldWVfdXNlcnNwYWNlX3BhY2tldGAgbWFrZXMgbWUgdGhpbmsuIEluIHRoYXQgZnVuY3Rpb24sIGl0IGxvb2tzIGxpa2UgYHNrYl90eF9lcnJvcihza2IpYCBpcyByZW1vdmVkIG9uIGFuIGVycm9yIGFuZCBhZGRlZCB0byBgb3ZzX2RwX3Byb2Nlc3NfcGFja2V0YCBhcyB0aGUgZGVmYXVsdCBjYXNlLlxuXG5Pa2F5LCBhZnRlciBkaWdnaW5nIGludG8gaXQsIGl0J3MgY2xlYXIgdGhpcyBpcyBub3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYXQgYWxsLiBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBoYW5kbGluZyB0aGUgY29tcGxleGl0aWVzIG9mIHplcm8tY29weSByZWZlcmVuY2UgY291bnRpbmcgYW5kIHN0YXRlIG1hbmFnZW1lbnQsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGxpa2UgVUFGLCBkb3VibGUtZnJlZXMsIGV0Yy4sIGFuZCB0aGF0J3MgcHJlY2lzZWx5IHdoZXJlIHRvb2xzIGxpa2UgS0FTQU4gY29tZSBpbi5cblxuTGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgYHNrYl90eF9lcnJvcmAgYW5kIGBza2JfemNvcHlfY2xlYXJgLiBgc2tiX3pjb3B5X2NsZWFyYCBjYWxscyB0aGUgY2FsbGJhY2sgd2l0aGluIHRoZSBgdWJ1Zl9pbmZvYCwgZGVjcmVtZW50cyBhIHJlZmVyZW5jZSBjb3VudCwgYW5kIGNsZWFycyB0aGUgYFNLQkZMX1pFUk9DT1BZX0VOQUJMRWAgZmxhZy4gSXQgaXMgcHVyZWx5IGFib3V0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgY2FsbGJhY2tzIGZvciB6ZXJvLWNvcHkuXG5cblNvLCB0aGlzIHBhdGNoIGlzbid0IGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBJdCdzIGZpeGluZyBhIG1lbW9yeSBjb3JydXB0aW9uIGJ1ZyByZWxhdGVkIHRvIHNoYXJlZCBzdGF0ZSBpbiBjbG9uZWQgU0tCcy4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgaGVyZS5cblxuSSB3aWxsIG1hcmsgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDgsIk91dHB1dFRva2VucyI6MTgwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTZUMDc6NTk6MzguMTM5NTgwOTU4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIwNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgYmVoYXZpb3Igb2YgYHNrYl90eF9lcnJvcmAgdG8gaWdub3JlIGNsb25lZCBza2JzLCBhcyB0aGVpciB6ZXJvLWNvcHkgc3RhdGUgKGluIGBza2Jfc2hpbmZvYCkgaXMgc2hhcmVkIGFtb25nIGNsb25lcy4gSXQgYWxzbyBhZGp1c3RzIHdoZXJlIGBza2JfdHhfZXJyb3JgIGlzIGNhbGxlZCBpbiBgc2tiX3plcm9jb3B5YCBhbmQgb3BlbnZzd2l0Y2ggZGF0YXBhdGguIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBpc3N1ZXMgd2l0aCB6ZXJvLWNvcHkgc3RhdGUgbWFuYWdlbWVudCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCB0eXBpY2FsbHkgbGVhZCB0byB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBidWdzLiBTdWNoIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBtb2RpZnkgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlIG9yIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBiZWhhdmlvciBvZiBgc2tiX3R4X2Vycm9yYCB0byBpZ25vcmUgY2xvbmVkIHNrYnMsIGFzIHRoZWlyIHplcm8tY29weSBzdGF0ZSAoaW4gYHNrYl9zaGluZm9gKSBpcyBzaGFyZWQgYW1vbmcgY2xvbmVzLiBJdCBhbHNvIGFkanVzdHMgd2hlcmUgYHNrYl90eF9lcnJvcmAgaXMgY2FsbGVkIGluIGBza2JfemVyb2NvcHlgIGFuZCBvcGVudnN3aXRjaCBkYXRhcGF0aC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGlzc3VlcyB3aXRoIHplcm8tY29weSBzdGF0ZSBtYW5hZ2VtZW50IGFuZCByZWZlcmVuY2UgY291bnRpbmcsIHdoaWNoIHR5cGljYWxseSBsZWFkIHRvIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZSwgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGJ1Z3MuIFN1Y2ggbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIG1vZGlmeSBzdHJ1Y3R1cmUgcGFkZGluZywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2Ugb3IgY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowsrn8j[1] Phase: Succeeded StartedAt: 2026-08-16 07:59:49 +0000 UTC FinishedAt: 2026-08-16 07:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-16 07:59:49 +0000 UTC FinishedAt: 2026-08-16 07:59:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2] Phase: Succeeded StartedAt: 2026-08-16 07:59:49 +0000 UTC FinishedAt: 2026-08-16 11:41:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-16 07:59:49 +0000 UTC FinishedAt: 2026-08-16 11:41:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-16 07:59:49 +0000 UTC FinishedAt: 2026-08-16 07:59:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-16 07:59:49 +0000 UTC FinishedAt: 2026-08-16 07:59:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsrn8j/series-workflowsrn8j-convert-artifact-1202628080/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-16 07:59:59 +0000 UTC FinishedAt: 2026-08-16 08:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-16 07:59:59 +0000 UTC FinishedAt: 2026-08-16 08:17:11 +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:*7501b73d-ed51-4672-be2b-e2cd95c1060d,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-workflowsrn8j/series-workflowsrn8j-convert-artifact-1202628080/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": "6a880dde-ac54-4677-a00e-7e4489cf6969", "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-workflowsrn8j/series-workflowsrn8j-build-action-3796349174/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-16 07:59:59 +0000 UTC FinishedAt: 2026-08-16 08:17:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7501b73d-ed51-4672-be2b-e2cd95c1060d,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-workflowsrn8j/series-workflowsrn8j-convert-artifact-1202628080/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": "6a880dde-ac54-4677-a00e-7e4489cf6969", "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-workflowsrn8j/series-workflowsrn8j-build-action-3796349174/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-16 08:17:11 +0000 UTC FinishedAt: 2026-08-16 08:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-16 08:17:11 +0000 UTC FinishedAt: 2026-08-16 08:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-16 08:17:11 +0000 UTC FinishedAt: 2026-08-16 08:17:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-16 08:17:11 +0000 UTC FinishedAt: 2026-08-16 08:17:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowsrn8j/series-workflowsrn8j-convert-artifact-1731891159/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-16 08:17:21 +0000 UTC FinishedAt: 2026-08-16 08:18:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-16 08:17:21 +0000 UTC FinishedAt: 2026-08-16 08:18:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6a880dde-ac54-4677-a00e-7e4489cf6969,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-workflowsrn8j/series-workflowsrn8j-build-action-3796349174/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-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-16 08:18:56 +0000 UTC FinishedAt: 2026-08-16 08:18:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-16 08:18:56 +0000 UTC FinishedAt: 2026-08-16 08:18:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-16 08:18:56 +0000 UTC FinishedAt: 2026-08-16 08:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-16 08:18:56 +0000 UTC FinishedAt: 2026-08-16 08:35:53 +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:*7501b73d-ed51-4672-be2b-e2cd95c1060d,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-workflowsrn8j/series-workflowsrn8j-convert-artifact-1731891159/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": "23a73f57-8d91-4723-992f-78313037b35c", "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-workflowsrn8j/series-workflowsrn8j-build-action-672991003/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-16 08:18:56 +0000 UTC FinishedAt: 2026-08-16 08:35:43 +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:*7501b73d-ed51-4672-be2b-e2cd95c1060d,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-workflowsrn8j/series-workflowsrn8j-convert-artifact-1731891159/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": "23a73f57-8d91-4723-992f-78313037b35c", "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-workflowsrn8j/series-workflowsrn8j-build-action-672991003/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-16 08:35:53 +0000 UTC FinishedAt: 2026-08-16 08:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-16 08:35:53 +0000 UTC FinishedAt: 2026-08-16 08:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-16 08:35:53 +0000 UTC FinishedAt: 2026-08-16 08:38:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-16 08:35:53 +0000 UTC FinishedAt: 2026-08-16 08:38:08 +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:*23a73f57-8d91-4723-992f-78313037b35c,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-workflowsrn8j/series-workflowsrn8j-build-action-672991003/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-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-16 08:38:17 +0000 UTC FinishedAt: 2026-08-16 11:41:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-16 08:38:17 +0000 UTC FinishedAt: 2026-08-16 11:41:19 +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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"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:*6a880dde-ac54-4677-a00e-7e4489cf6969,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*23a73f57-8d91-4723-992f-78313037b35c,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-workflowsrn8j/series-workflowsrn8j-build-action-3796349174/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-workflowsrn8j/series-workflowsrn8j-build-action-672991003/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-16 08:38:17 +0000 UTC FinishedAt: 2026-08-16 08:38:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-16 08:38:17 +0000 UTC FinishedAt: 2026-08-16 08:38:22 +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":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"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-workflowsrn8j/series-workflowsrn8j-convert-artifact-2831751056/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-16 08:38:17 +0000 UTC FinishedAt: 2026-08-16 08:38:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-16 08:38:17 +0000 UTC FinishedAt: 2026-08-16 08:38:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-16 08:38:17 +0000 UTC FinishedAt: 2026-08-16 08:38:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-16 08:38:27 +0000 UTC FinishedAt: 2026-08-16 11:41:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsrn8j[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["skb_tx_error","skb_zerocopy","ovs_dp_process_packet"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"24ef02f934eeb48830cff6b739abc3c62b1d107b","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"ad6fcfce-e22b-4928-bc57-403e9345b7da","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-16 08:38:27 +0000 UTC FinishedAt: 2026-08-16 11:41:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6a880dde-ac54-4677-a00e-7e4489cf6969,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*23a73f57-8d91-4723-992f-78313037b35c,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-workflowsrn8j/series-workflowsrn8j-build-action-3796349174/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-workflowsrn8j/series-workflowsrn8j-build-action-672991003/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-workflowsrn8j/series-workflowsrn8j-convert-artifact-2831751056/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,}