Name: series-workflowp4vlh Phase: Succeeded StartedAt: 2026-08-10 20:48:18 +0000 UTC FinishedAt: 2026-08-11 01:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[0] Phase: Succeeded StartedAt: 2026-08-10 20:48:18 +0000 UTC FinishedAt: 2026-08-10 21:13:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 20:48:18 +0000 UTC FinishedAt: 2026-08-10 21:13:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VSOCKETS_LOOPBACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VSOCKETS_LOOPBACK" ], "series_id": "37ec9159-28b0-4e69-8a51-cf3b94db1e9e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vsock_connect", "vsock_accept", "vsock_pending_work" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTX0xPT1BCQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dnNvY2tfY29ubmVjdCYjMzQ7LAogICAgJiMzNDt2c29ja19hY2NlcHQmIzM0OywKICAgICYjMzQ7dnNvY2tfcGVuZGluZ193b3JrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdnNvY2tfc29ja2AgYW5kIHNpbXBsaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIGluIGB2c29ja19hY2NlcHRgIGFuZCBgdnNvY2tfY29ubmVjdGAuIEl0IG1vZGlmaWVzIHRoZSBzb2NrZXQgc3RhdGUgbWFjaGluZSBhbmQgaG93IHNvY2tldCBlcnJvcnMgKGBza19lcnJgKSBhcmUgcHJvY2Vzc2VkLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQsIG5vIGNoYW5nZXMgdG8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIG1vZGlmaWNhdGlvbnMgdG8gYnVmZmVyIGxlbmd0aHMgb3IgYm91bmRzIGNoZWNrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIHNvY2tldCBsaWZlY3ljbGUgbWFuYWdlbWVudCAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgaW5jb3JyZWN0IGVycm9yIGNvZGVzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2c29jayBjb25uZWN0aW9uIGFuZCBhY2NlcHQgbG9naWMsIHJlbW92aW5nIHRoZSAmIzM5O3JlamVjdGVkJiMzOTsgc3RhdGUgYW5kIGFsdGVyaW5nIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQgZHVyaW5nIGFjY2VwdCBhbmQgY29ubmVjdCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ2NzRjOTQxMzdjMzU2ZTllZmQ0MWQwM2M1ZDE2ZGUwYThmYTg5YjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAyMToxMjoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl92c29jay5oIGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuaW5kZXggMzAwNDZhM2MyMGY3My4uMzM1N2VlNjJkMTBiZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbkBAIC01MiwxMyAmIzQzOzUyLDEwIEBAIHN0cnVjdCB2c29ja19zb2NrIHtcbiBcdCAqIFRoZSBsaXN0ZW5pbmcgc29ja2V0IGlzIHRoZSBoZWFkIGZvciBib3RoIGxpc3RzLiAgU29ja2V0cyBjcmVhdGVkXG4gXHQgKiBmb3IgY29ubmVjdGlvbiByZXF1ZXN0cyBhcmUgcGxhY2VkIGluIHRoZSBwZW5kaW5nIGxpc3QgdW50aWwgdGhleVxuIFx0ICogYXJlIGNvbm5lY3RlZCwgYXQgd2hpY2ggcG9pbnQgdGhleSBhcmUgcHV0IGluIHRoZSBhY2NlcHQgcXVldWUgbGlzdFxuLVx0ICogc28gdGhleSBjYW4gYmUgYWNjZXB0ZWQgaW4gYWNjZXB0KCkuICBJZiBhY2NlcHQoKSBjYW5ub3QgYWNjZXB0IHRoZVxuLVx0ICogY29ubmVjdGlvbiwgaXQgaXMgbWFya2VkIGFzIHJlamVjdGVkIHNvIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGtub3dzXG4tXHQgKiB0byBjbGVhbiB1cCB0aGUgc29ja2V0LlxuJiM0MztcdCAqIHNvIHRoZXkgY2FuIGJlIGFjY2VwdGVkIGluIGFjY2VwdCgpLlxuIFx0ICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHBlbmRpbmdfbGlua3M7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGFjY2VwdF9xdWV1ZTtcbi1cdGJvb2wgcmVqZWN0ZWQ7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIGNvbm5lY3Rfd29yaztcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgcGVuZGluZ193b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBjbG9zZV93b3JrO1xuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuaW5kZXggNjIyZGJkMDQ2Nzk5NC4uMWEyODc3MTlmMjRhMyAxMDA2NDRcbi0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5AQCAtMzgsMTAgJiM0MzszOCw5IEBAXG4gICogcGVuZGluZyBzb2NrZXQuICBXaGVuIHRoYXQgc29ja2V0IHJlYWNoZXMgdGhlIGNvbm5lY3RlZCBzdGF0ZSwgaXQgaXMgcmVtb3ZlZFxuICAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCYjMzk7cyBwZW5kaW5nIGxpc3QgYW5kIGVucXVldWVkIGluIHRoZSBsaXN0ZW5lclxuICAqIHNvY2tldCYjMzk7cyBhY2NlcHQgcXVldWUuICBDYWxsZXJzIG9mIGFjY2VwdCgyKSB3aWxsIGFjY2VwdCBjb25uZWN0ZWQgc29ja2V0c1xuLSAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCYjMzk7cyBhY2NlcHQgcXVldWUuICBJZiB0aGUgc29ja2V0IGNhbm5vdCBiZSBhY2NlcHRlZFxuLSAqIGZvciBzb21lIHJlYXNvbiB0aGVuIGl0IGlzIG1hcmtlZCByZWplY3RlZC4gIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXNcbi0gKiBhY2NlcHRlZCwgaXQgaXMgb3duZWQgYnkgdGhlIHVzZXIgcHJvY2VzcyBhbmQgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBjbGVhbnVwXG4tICogZmFsbHMgd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy5cbiYjNDM7ICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0JiMzOTtzIGFjY2VwdCBxdWV1ZS4gT25jZSB0aGUgY29ubmVjdGlvbiBpcyBhY2NlcHRlZCxcbiYjNDM7ICogaXQgaXMgb3duZWQgYnkgdGhlIHVzZXIgcHJvY2VzcyBhbmQgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBjbGVhbnVwIGZhbGxzXG4mIzQzOyAqIHdpdGggdGhhdCB1c2VyIHByb2Nlc3MuXG4gICpcbiAgKiAtIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlc2UgcGVuZGluZyBzb2NrZXRzIHdpbGwgbmV2ZXIgcmVhY2ggdGhlIGNvbm5lY3RlZFxuICAqIHN0YXRlOyBpbiBmYWN0LCB3ZSBtYXkgbmV2ZXIgcmVjZWl2ZSBhbm90aGVyIHBhY2tldCBhZnRlciB0aGUgY29ubmVjdGlvblxuQEAgLTQ5LDkgJiM0Mzs0OCw3IEBAXG4gICogZnV0dXJlLCBhZnRlciBzb21lIGFtb3VudCBvZiB0aW1lIHBhc3NlcyB3aGVyZSBhIGNvbm5lY3Rpb24gc2hvdWxkIGhhdmUgYmVlblxuICAqIGVzdGFibGlzaGVkLiAgVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIHNvY2tldCBpcyBvZmYgYWxsIGxpc3RzIHNvIGl0XG4gICogY2Fubm90IGJlIHJldHJpZXZlZCwgdGhlbiBkcm9wcyBhbGwgcmVmZXJlbmNlcyB0byB0aGUgc29ja2V0IHNvIGl0IGlzIGNsZWFuZWRcbi0gKiB1cCAoc29ja19wdXQoKSAtXHUwMDNlIHNrX2ZyZWUoKSAtXHUwMDNlIG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuICBOb3RlIHRoaXNcbi0gKiBmdW5jdGlvbiB3aWxsIGFsc28gY2xlYW51cCByZWplY3RlZCBzb2NrZXRzLCB0aG9zZSB0aGF0IHJlYWNoIHRoZSBjb25uZWN0ZWRcbi0gKiBzdGF0ZSBidXQgbGVhdmUgaXQgYmVmb3JlIHRoZXkgaGF2ZSBiZWVuIGFjY2VwdGVkLlxuJiM0MzsgKiB1cCAoc29ja19wdXQoKSAtXHUwMDNlIHNrX2ZyZWUoKSAtXHUwMDNlIG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuXG4gICpcbiAgKiAtIExvY2sgb3JkZXJpbmcgZm9yIHBlbmRpbmcgb3IgYWNjZXB0IHF1ZXVlIHNvY2tldHMgaXM6XG4gICpcbkBAIC03NzQsMTEgJiM0Mzs3NzEsMTAgQEAgc3RhdGljIHZvaWQgdnNvY2tfcGVuZGluZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdGlmICh2c29ja19pc19wZW5kaW5nKHNrKSkge1xuIFx0XHR2c29ja19yZW1vdmVfcGVuZGluZyhsaXN0ZW5lciwgc2spO1xuLVx0fSBlbHNlIGlmICghdnNrLVx1MDAzZXJlamVjdGVkKSB7XG4tXHRcdC8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBhbmQgYWNjZXB0KCkgZGlkIG5vdCByZWplY3Rcbi1cdFx0ICogdXMsIHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkIGJ5IG91ciB1c2VyIHByb2Nlc3MuICBXZVxuLVx0XHQgKiBqdXN0IG5lZWQgdG8gZHJvcCBvdXIgcmVmZXJlbmNlcyB0byB0aGUgc29ja2V0cyBhbmQgYmUgb25cbi1cdFx0ICogb3VyIHdheS5cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogV2UgYXJlIG5vdCBvbiB0aGUgcGVuZGluZyBsaXN0IHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkXG4mIzQzO1x0XHQgKiBieSBvdXIgdXNlciBwcm9jZXNzLiBXZSBqdXN0IG5lZWQgdG8gZHJvcCBvdXIgcmVmZXJlbmNlcyB0b1xuJiM0MztcdFx0ICogdGhlIHNvY2tldHMgYW5kIGJlIG9uIG91ciB3YXkuXG4gXHRcdCAqL1xuIFx0XHRjbGVhbnVwID0gZmFsc2U7XG4gXHRcdGdvdG8gb3V0O1xuQEAgLTk0Miw3ICYjNDM7OTM4LDYgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpfX3Zzb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHR2c2stXHUwMDNlbGlzdGVuZXIgPSBOVUxMO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dnNrLVx1MDAzZXBlbmRpbmdfbGlua3MpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dnNrLVx1MDAzZWFjY2VwdF9xdWV1ZSk7XG4tXHR2c2stXHUwMDNlcmVqZWN0ZWQgPSBmYWxzZTtcbiBcdHZzay1cdTAwM2VzZW50X3JlcXVlc3QgPSBmYWxzZTtcbiBcdHZzay1cdTAwM2VpZ25vcmVfY29ubmVjdGluZ19yc3QgPSBmYWxzZTtcbiBcdFdSSVRFX09OQ0UodnNrLVx1MDAzZXBlZXJfc2h1dGRvd24sIDApO1xuQEAgLTE4NDcsMTIgJiM0MzsxODQyLDEwIEBAIHN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbiBcdFx0cHJlcGFyZV90b193YWl0KHNrX3NsZWVwKHNrKSwgXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcdH1cbiBcbi1cdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbi1cdFx0ZXJyID0gLXNrLVx1MDAzZXNrX2VycjtcbiYjNDM7XHRlcnIgPSBzb2NrX2Vycm9yKHNrKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gVENQX0NMT1NFO1xuIFx0XHRzb2NrLVx1MDAzZXN0YXRlID0gU1NfVU5DT05ORUNURUQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRlcnIgPSAwO1xuIFx0fVxuIFxuIG91dF93YWl0OlxuQEAgLTE4OTMsNyAmIzQzOzE4ODYsNyBAQCBzdGF0aWMgaW50IHZzb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxuIFx0dGltZW91dCA9IHNvY2tfcmN2dGltZW8obGlzdGVuZXIsIGFyZy1cdTAwM2VmbGFncyBcdTAwMjYgT19OT05CTE9DSyk7XG4gXG4gXHR3aGlsZSAoKGNvbm5lY3RlZCA9IHZzb2NrX2RlcXVldWVfYWNjZXB0KGxpc3RlbmVyKSkgPT0gTlVMTCBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICBsaXN0ZW5lci1cdTAwM2Vza19lcnIgPT0gMCBcdTAwMjZcdTAwMjYgdGltZW91dCAhPSAwKSB7XG4mIzQzO1x0XHR0aW1lb3V0ICE9IDApIHtcbiBcdFx0cHJlcGFyZV90b193YWl0KHNrX3NsZWVwKGxpc3RlbmVyKSwgXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcdFx0cmVsZWFzZV9zb2NrKGxpc3RlbmVyKTtcbiBcdFx0dGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7XG5AQCAtMTkwNiw0MSAmIzQzOzE4OTksMjYgQEAgc3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKGxpc3RlbmVyLVx1MDAzZXNrX2Vycikge1xuLVx0XHRlcnIgPSAtbGlzdGVuZXItXHUwMDNlc2tfZXJyO1xuLVx0fSBlbHNlIGlmICghY29ubmVjdGVkKSB7XG4tXHRcdGVyciA9IC1FQUdBSU47XG4tXHR9XG4tXG4gXHRpZiAoY29ubmVjdGVkKSB7XG4gXHRcdHNrX2FjY2VwdHFfcmVtb3ZlZChsaXN0ZW5lcik7XG4gXG4gXHRcdGxvY2tfc29ja19uZXN0ZWQoY29ubmVjdGVkLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gXHRcdHZjb25uZWN0ZWQgPSB2c29ja19zayhjb25uZWN0ZWQpO1xuIFxuLVx0XHQvKiBJZiB0aGUgbGlzdGVuZXIgc29ja2V0IGhhcyByZWNlaXZlZCBhbiBlcnJvciwgdGhlbiB3ZSBzaG91bGRcbi1cdFx0ICogcmVqZWN0IHRoaXMgc29ja2V0IGFuZCByZXR1cm4uICBOb3RlIHRoYXQgd2Ugc2ltcGx5IG1hcmsgdGhlXG4tXHRcdCAqIHNvY2tldCByZWplY3RlZCwgZHJvcCBvdXIgcmVmZXJlbmNlLCBhbmQgbGV0IHRoZSBjbGVhbnVwXG4tXHRcdCAqIGZ1bmN0aW9uIGhhbmRsZSB0aGUgY2xlYW51cDsgdGhlIGZhY3QgdGhhdCB3ZSBmb3VuZCBpdCBpblxuLVx0XHQgKiB0aGUgbGlzdGVuZXImIzM5O3MgYWNjZXB0IHF1ZXVlIGd1YXJhbnRlZXMgdGhhdCB0aGUgY2xlYW51cFxuLVx0XHQgKiBmdW5jdGlvbiBoYXNuJiMzOTt0IHJ1biB5ZXQuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0dmNvbm5lY3RlZC1cdTAwM2VyZWplY3RlZCA9IHRydWU7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0bmV3c29jay1cdTAwM2VzdGF0ZSA9IFNTX0NPTk5FQ1RFRDtcbi1cdFx0XHRzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7XG4mIzQzO1x0XHRuZXdzb2NrLVx1MDAzZXN0YXRlID0gU1NfQ09OTkVDVEVEO1xuJiM0MztcdFx0c29ja19ncmFmdChjb25uZWN0ZWQsIG5ld3NvY2spO1xuIFxuLVx0XHRcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCxcbi1cdFx0XHRcdFx1MDAyNmNvbm5lY3RlZC1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0c2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULFxuJiM0MztcdFx0XHRcdTAwMjZjb25uZWN0ZWQtXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbiBcbi1cdFx0XHRpZiAodnNvY2tfbXNnemVyb2NvcHlfYWxsb3codmNvbm5lY3RlZC1cdTAwM2V0cmFuc3BvcnQpKVxuLVx0XHRcdFx0c2V0X2JpdChTT0NLX1NVUFBPUlRfWkMsXG4tXHRcdFx0XHRcdFx1MDAyNmNvbm5lY3RlZC1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuLVx0XHR9XG4mIzQzO1x0XHRpZiAodnNvY2tfbXNnemVyb2NvcHlfYWxsb3codmNvbm5lY3RlZC1cdTAwM2V0cmFuc3BvcnQpKVxuJiM0MztcdFx0XHRzZXRfYml0KFNPQ0tfU1VQUE9SVF9aQyxcbiYjNDM7XHRcdFx0XHRcdTAwMjZjb25uZWN0ZWQtXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbiBcbiBcdFx0cmVsZWFzZV9zb2NrKGNvbm5lY3RlZCk7XG4gXHRcdHNvY2tfcHV0KGNvbm5lY3RlZCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVyciA9IC1FQUdBSU47XG4gXHR9XG4gXG4gb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zzb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7dnNvY2tfYWNjZXB0JiMzNDssCiAgICAmIzM0O3Zzb2NrX3BlbmRpbmdfd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2c29jayBjb25uZWN0aW9uIGFuZCBhY2NlcHQgbG9naWMsIHJlbW92aW5nIHRoZSAmIzM5O3JlamVjdGVkJiMzOTsgc3RhdGUgYW5kIGFsdGVyaW5nIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQgZHVyaW5nIGFjY2VwdCBhbmQgY29ubmVjdCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ2NzRjOTQxMzdjMzU2ZTllZmQ0MWQwM2M1ZDE2ZGUwYThmYTg5YjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAyMToxMjoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmggYi9pbmNsdWRlL25ldC9hZl92c29jay5oCmluZGV4IDMwMDQ2YTNjMjBmNzMuLjMzNTdlZTYyZDEwYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaApAQCAtNTIsMTMgJiM0Mzs1MiwxMCBAQCBzdHJ1Y3QgdnNvY2tfc29jayB7CiAJICogVGhlIGxpc3RlbmluZyBzb2NrZXQgaXMgdGhlIGhlYWQgZm9yIGJvdGggbGlzdHMuICBTb2NrZXRzIGNyZWF0ZWQKIAkgKiBmb3IgY29ubmVjdGlvbiByZXF1ZXN0cyBhcmUgcGxhY2VkIGluIHRoZSBwZW5kaW5nIGxpc3QgdW50aWwgdGhleQogCSAqIGFyZSBjb25uZWN0ZWQsIGF0IHdoaWNoIHBvaW50IHRoZXkgYXJlIHB1dCBpbiB0aGUgYWNjZXB0IHF1ZXVlIGxpc3QKLQkgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS4gIElmIGFjY2VwdCgpIGNhbm5vdCBhY2NlcHQgdGhlCi0JICogY29ubmVjdGlvbiwgaXQgaXMgbWFya2VkIGFzIHJlamVjdGVkIHNvIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGtub3dzCi0JICogdG8gY2xlYW4gdXAgdGhlIHNvY2tldC4KJiM0MzsJICogc28gdGhleSBjYW4gYmUgYWNjZXB0ZWQgaW4gYWNjZXB0KCkuCiAJICovCiAJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpbmtzOwogCXN0cnVjdCBsaXN0X2hlYWQgYWNjZXB0X3F1ZXVlOwotCWJvb2wgcmVqZWN0ZWQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBjb25uZWN0X3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBwZW5kaW5nX3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBjbG9zZV93b3JrOwpkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCmluZGV4IDYyMmRiZDA0Njc5OTQuLjFhMjg3NzE5ZjI0YTMgMTAwNjQ0Ci0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKQEAgLTM4LDEwICYjNDM7MzgsOSBAQAogICogcGVuZGluZyBzb2NrZXQuICBXaGVuIHRoYXQgc29ja2V0IHJlYWNoZXMgdGhlIGNvbm5lY3RlZCBzdGF0ZSwgaXQgaXMgcmVtb3ZlZAogICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0JiMzOTtzIHBlbmRpbmcgbGlzdCBhbmQgZW5xdWV1ZWQgaW4gdGhlIGxpc3RlbmVyCiAgKiBzb2NrZXQmIzM5O3MgYWNjZXB0IHF1ZXVlLiAgQ2FsbGVycyBvZiBhY2NlcHQoMikgd2lsbCBhY2NlcHQgY29ubmVjdGVkIHNvY2tldHMKLSAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCYjMzk7cyBhY2NlcHQgcXVldWUuICBJZiB0aGUgc29ja2V0IGNhbm5vdCBiZSBhY2NlcHRlZAotICogZm9yIHNvbWUgcmVhc29uIHRoZW4gaXQgaXMgbWFya2VkIHJlamVjdGVkLiAgT25jZSB0aGUgY29ubmVjdGlvbiBpcwotICogYWNjZXB0ZWQsIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cAotICogZmFsbHMgd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy4KJiM0MzsgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQmIzM5O3MgYWNjZXB0IHF1ZXVlLiBPbmNlIHRoZSBjb25uZWN0aW9uIGlzIGFjY2VwdGVkLAomIzQzOyAqIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cCBmYWxscwomIzQzOyAqIHdpdGggdGhhdCB1c2VyIHByb2Nlc3MuCiAgKgogICogLSBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXNlIHBlbmRpbmcgc29ja2V0cyB3aWxsIG5ldmVyIHJlYWNoIHRoZSBjb25uZWN0ZWQKICAqIHN0YXRlOyBpbiBmYWN0LCB3ZSBtYXkgbmV2ZXIgcmVjZWl2ZSBhbm90aGVyIHBhY2tldCBhZnRlciB0aGUgY29ubmVjdGlvbgpAQCAtNDksOSAmIzQzOzQ4LDcgQEAKICAqIGZ1dHVyZSwgYWZ0ZXIgc29tZSBhbW91bnQgb2YgdGltZSBwYXNzZXMgd2hlcmUgYSBjb25uZWN0aW9uIHNob3VsZCBoYXZlIGJlZW4KICAqIGVzdGFibGlzaGVkLiAgVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIHNvY2tldCBpcyBvZmYgYWxsIGxpc3RzIHNvIGl0CiAgKiBjYW5ub3QgYmUgcmV0cmlldmVkLCB0aGVuIGRyb3BzIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBzb2NrZXQgc28gaXQgaXMgY2xlYW5lZAotICogdXAgKHNvY2tfcHV0KCkgLSZndDsgc2tfZnJlZSgpIC0mZ3Q7IG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuICBOb3RlIHRoaXMKLSAqIGZ1bmN0aW9uIHdpbGwgYWxzbyBjbGVhbnVwIHJlamVjdGVkIHNvY2tldHMsIHRob3NlIHRoYXQgcmVhY2ggdGhlIGNvbm5lY3RlZAotICogc3RhdGUgYnV0IGxlYXZlIGl0IGJlZm9yZSB0aGV5IGhhdmUgYmVlbiBhY2NlcHRlZC4KJiM0MzsgKiB1cCAoc29ja19wdXQoKSAtJmd0OyBza19mcmVlKCkgLSZndDsgb3VyIHNrX2Rlc3RydWN0IGltcGxlbWVudGF0aW9uKS4KICAqCiAgKiAtIExvY2sgb3JkZXJpbmcgZm9yIHBlbmRpbmcgb3IgYWNjZXB0IHF1ZXVlIHNvY2tldHMgaXM6CiAgKgpAQCAtNzc0LDExICYjNDM7NzcxLDEwIEBAIHN0YXRpYyB2b2lkIHZzb2NrX3BlbmRpbmdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAKIAlpZiAodnNvY2tfaXNfcGVuZGluZyhzaykpIHsKIAkJdnNvY2tfcmVtb3ZlX3BlbmRpbmcobGlzdGVuZXIsIHNrKTsKLQl9IGVsc2UgaWYgKCF2c2stJmd0O3JlamVjdGVkKSB7Ci0JCS8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBhbmQgYWNjZXB0KCkgZGlkIG5vdCByZWplY3QKLQkJICogdXMsIHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkIGJ5IG91ciB1c2VyIHByb2Nlc3MuICBXZQotCQkgKiBqdXN0IG5lZWQgdG8gZHJvcCBvdXIgcmVmZXJlbmNlcyB0byB0aGUgc29ja2V0cyBhbmQgYmUgb24KLQkJICogb3VyIHdheS4KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBzbyB3ZSBtdXN0IGhhdmUgYmVlbiBhY2NlcHRlZAomIzQzOwkJICogYnkgb3VyIHVzZXIgcHJvY2Vzcy4gV2UganVzdCBuZWVkIHRvIGRyb3Agb3VyIHJlZmVyZW5jZXMgdG8KJiM0MzsJCSAqIHRoZSBzb2NrZXRzIGFuZCBiZSBvbiBvdXIgd2F5LgogCQkgKi8KIAkJY2xlYW51cCA9IGZhbHNlOwogCQlnb3RvIG91dDsKQEAgLTk0Miw3ICYjNDM7OTM4LDYgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpfX3Zzb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJdnNrLSZndDtsaXN0ZW5lciA9IE5VTEw7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDt2c2stJmd0O3BlbmRpbmdfbGlua3MpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7dnNrLSZndDthY2NlcHRfcXVldWUpOwotCXZzay0mZ3Q7cmVqZWN0ZWQgPSBmYWxzZTsKIAl2c2stJmd0O3NlbnRfcmVxdWVzdCA9IGZhbHNlOwogCXZzay0mZ3Q7aWdub3JlX2Nvbm5lY3RpbmdfcnN0ID0gZmFsc2U7CiAJV1JJVEVfT05DRSh2c2stJmd0O3BlZXJfc2h1dGRvd24sIDApOwpAQCAtMTg0NywxMiAmIzQzOzE4NDIsMTAgQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLAogCQlwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCAmYW1wO3dhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJfQogCi0JaWYgKHNrLSZndDtza19lcnIpIHsKLQkJZXJyID0gLXNrLSZndDtza19lcnI7CiYjNDM7CWVyciA9IHNvY2tfZXJyb3Ioc2spOwomIzQzOwlpZiAoZXJyKSB7CiAJCXNrLSZndDtza19zdGF0ZSA9IFRDUF9DTE9TRTsKIAkJc29jay0mZ3Q7c3RhdGUgPSBTU19VTkNPTk5FQ1RFRDsKLQl9IGVsc2UgewotCQllcnIgPSAwOwogCX0KIAogb3V0X3dhaXQ6CkBAIC0xODkzLDcgJiM0MzsxODg2LDcgQEAgc3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywKIAl0aW1lb3V0ID0gc29ja19yY3Z0aW1lbyhsaXN0ZW5lciwgYXJnLSZndDtmbGFncyAmYW1wOyBPX05PTkJMT0NLKTsKIAogCXdoaWxlICgoY29ubmVjdGVkID0gdnNvY2tfZGVxdWV1ZV9hY2NlcHQobGlzdGVuZXIpKSA9PSBOVUxMICZhbXA7JmFtcDsKLQkgICAgICAgbGlzdGVuZXItJmd0O3NrX2VyciA9PSAwICZhbXA7JmFtcDsgdGltZW91dCAhPSAwKSB7CiYjNDM7CQl0aW1lb3V0ICE9IDApIHsKIAkJcHJlcGFyZV90b193YWl0KHNrX3NsZWVwKGxpc3RlbmVyKSwgJmFtcDt3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlyZWxlYXNlX3NvY2sobGlzdGVuZXIpOwogCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKQEAgLTE5MDYsNDEgJiM0MzsxODk5LDI2IEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssCiAJCX0KIAl9CiAKLQlpZiAobGlzdGVuZXItJmd0O3NrX2VycikgewotCQllcnIgPSAtbGlzdGVuZXItJmd0O3NrX2VycjsKLQl9IGVsc2UgaWYgKCFjb25uZWN0ZWQpIHsKLQkJZXJyID0gLUVBR0FJTjsKLQl9Ci0KIAlpZiAoY29ubmVjdGVkKSB7CiAJCXNrX2FjY2VwdHFfcmVtb3ZlZChsaXN0ZW5lcik7CiAKIAkJbG9ja19zb2NrX25lc3RlZChjb25uZWN0ZWQsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAkJdmNvbm5lY3RlZCA9IHZzb2NrX3NrKGNvbm5lY3RlZCk7CiAKLQkJLyogSWYgdGhlIGxpc3RlbmVyIHNvY2tldCBoYXMgcmVjZWl2ZWQgYW4gZXJyb3IsIHRoZW4gd2Ugc2hvdWxkCi0JCSAqIHJlamVjdCB0aGlzIHNvY2tldCBhbmQgcmV0dXJuLiAgTm90ZSB0aGF0IHdlIHNpbXBseSBtYXJrIHRoZQotCQkgKiBzb2NrZXQgcmVqZWN0ZWQsIGRyb3Agb3VyIHJlZmVyZW5jZSwgYW5kIGxldCB0aGUgY2xlYW51cAotCQkgKiBmdW5jdGlvbiBoYW5kbGUgdGhlIGNsZWFudXA7IHRoZSBmYWN0IHRoYXQgd2UgZm91bmQgaXQgaW4KLQkJICogdGhlIGxpc3RlbmVyJiMzOTtzIGFjY2VwdCBxdWV1ZSBndWFyYW50ZWVzIHRoYXQgdGhlIGNsZWFudXAKLQkJICogZnVuY3Rpb24gaGFzbiYjMzk7dCBydW4geWV0LgotCQkgKi8KLQkJaWYgKGVycikgewotCQkJdmNvbm5lY3RlZC0mZ3Q7cmVqZWN0ZWQgPSB0cnVlOwotCQl9IGVsc2UgewotCQkJbmV3c29jay0mZ3Q7c3RhdGUgPSBTU19DT05ORUNURUQ7Ci0JCQlzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7CiYjNDM7CQluZXdzb2NrLSZndDtzdGF0ZSA9IFNTX0NPTk5FQ1RFRDsKJiM0MzsJCXNvY2tfZ3JhZnQoY29ubmVjdGVkLCBuZXdzb2NrKTsKIAotCQkJc2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULAotCQkJCSZhbXA7Y29ubmVjdGVkLSZndDtza19zb2NrZXQtJmd0O2ZsYWdzKTsKJiM0MzsJCXNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwKJiM0MzsJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7CiAKLQkJCWlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLSZndDt0cmFuc3BvcnQpKQotCQkJCXNldF9iaXQoU09DS19TVVBQT1JUX1pDLAotCQkJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7Ci0JCX0KJiM0MzsJCWlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLSZndDt0cmFuc3BvcnQpKQomIzQzOwkJCXNldF9iaXQoU09DS19TVVBQT1JUX1pDLAomIzQzOwkJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7CiAKIAkJcmVsZWFzZV9zb2NrKGNvbm5lY3RlZCk7CiAJCXNvY2tfcHV0KGNvbm5lY3RlZCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllcnIgPSAtRUFHQUlOOwogCX0KIAogb3V0Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzA0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFZTb2NrIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSB2c29jayBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AgYW5kIGBpbmNsdWRlL25ldC9hZl92c29jay5oYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgdnNvY2sgbG9naWMuIEl0JiMzOTtzIHJlbW92aW5nIHRoZSBgcmVqZWN0ZWRgIGZpZWxkIGZyb20gYHN0cnVjdCB2c29ja19zb2NrYCwgd2hpY2ggc291bmRzIHByZXR0eSBmdW5kYW1lbnRhbCwgYW5kIHRoZW4gaXQmIzM5O3MgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIG9mIGB2c29ja19wZW5kaW5nX3dvcmtgLCBgdnNvY2tfY29ubmVjdGAsIGFuZCBgdnNvY2tfYWNjZXB0YC4gU3BlY2lmaWNhbGx5LCBpbiBgdnNvY2tfYWNjZXB0YCwgdGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgY2hhbmdpbmcgaG93IGVycm9ycyBvbiB0aGUgbGlzdGVuZXIgc29ja2V0IGFyZSBoYW5kbGVkIHdoZW4gZGVxdWV1aW5nIGFuIGFjY2VwdGVkIHNvY2tldC4gQWxzbywgYHZzb2NrX2Nvbm5lY3RgIGlzIG5vdyB1c2luZyBgc29ja19lcnJvcihzaylgIGluc3RlYWQgb2YgYHNrLSZndDtza19lcnJgLCBzbyB0aGF0JiMzOTtzIGEgZGlmZmVyZW50IGFwcHJvYWNoIHRvIGVycm9yIGNoZWNraW5nIGR1cmluZyBjb25uZWN0aW9uLgoKVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2sgYmVjYXVzZSB0aGVzZSBhcmUgY3JpdGljYWwgYXJlYXMgYW5kIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9ucyBhbHdheXMgcmVxdWlyZSB0aG9yb3VnaCBzY3J1dGlueS4gVGhpcyBjaGFuZ2UgZGVmaW5pdGVseSBoYXMgcG90ZW50aWFsIGZ1bmN0aW9uYWwgaW1wYWN0cywgYW5kIEkmIzM5O20gdGhpbmtpbmcgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIHJvYnVzdC4KCkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGV4YWN0IGltcGxpY2F0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnM6IGB2c29ja19wZW5kaW5nX3dvcmtgLCBgdnNvY2tfY29ubmVjdGAsIGFuZCBgdnNvY2tfYWNjZXB0YC4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzbyBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBuZXQvdm13X3Zzb2NrL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNldHRpbmdzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoaXMuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBLY29uZmlnIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZTT0NLRVRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZy01LVxubmV0L3Ztd192c29jay9LY29uZmlnOjY6Y29uZmlnIFZTT0NLRVRTXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0IHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTE4LVxubmV0L3Ztd192c29jay9LY29uZmlnOjE5OmNvbmZpZyBWU09DS0VUU19ESUFHXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjgtXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6Mjk6Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMzAtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldHMgbG9vcGJhY2sgdHJhbnNwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU4NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHByb2Nlc3Npbmc6CgoqKlZTT0NLRVRTIENvbmZpZ3VyYXRpb24gQ2hlY2sqKgoKQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHRvIGBWU09DS0VUU2AuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSAqb25seSogdGhpbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gTm8gcG9pbnQgaW4gbWFraW5nIGFzc3VtcHRpb25zLiBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIGFuZCB2ZXJpZnkgdGhhdCB0aGVyZSBhcmVuJiMzOTt0ICphbnkqIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgaW4gcGxheSBvciBwb3RlbnRpYWxseSBvdmVycmlkZSBgVlNPQ0tFVFNgLCBvciBpbnRlcmFjdCB3aXRoIGl0IGluIGEgd2F5IHRoYXQgSSBuZWVkIHRvIGFjY291bnQgZm9yLiBObyBwb2ludCBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUgYmFzZWQgb24gYSBzaW5nbGUgdmFyaWFibGUuIFNvLCB0aGUgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIGEgc3lzdGVtcy1sZXZlbCBjaGVjay4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBvbmx5IHRoaW5nIHdlIG5lZWQgdG8gY29uc2lkZXIgaW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlL3N5c3RlbS4gQSBxdWljayBsb29rIGFyb3VuZCB0aGUgY29kZSBiYXNlIHRvIGZpbmQgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9LY29uZmlnPTE5PWNvbmZpZyBWU09DS0VUU19ESUFHXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbm5ldC92bXdfdnNvY2svS2NvbmZpZzoyMTpcdGRlcGVuZHMgb24gVlNPQ0tFVFNcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yMi1cdGRlZmF1bHQgeVxuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZz0yOT1jb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zMC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0cyBsb29wYmFjayB0cmFuc3BvcnRcJiMzNDtcbm5ldC92bXdfdnNvY2svS2NvbmZpZzozMTpcdGRlcGVuZHMgb24gVlNPQ0tFVFNcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zMi1cdGRlZmF1bHQgeVxuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZz00MT1jb25maWcgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNcbm5ldC92bXdfdnNvY2svS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O1ZNd2FyZSBWTUNJIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXCYjMzQ7XG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NDM6XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBWTVdBUkVfVk1DSVxubmV0L3Ztd192c29jay9LY29uZmlnLTQ0LVx0aGVscFxuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZz01Mz1jb25maWcgVklSVElPX1ZTT0NLRVRTXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDt2aXJ0aW8gdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHNcJiMzNDtcbm5ldC92bXdfdnNvY2svS2NvbmZpZzo1NTpcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXHUwMDI2XHUwMDI2IFZJUlRJT1xubmV0L3Ztd192c29jay9LY29uZmlnLTU2LVx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWc9NzM9Y29uZmlnIEhZUEVSVl9WU09DS0VUU1xubmV0L3Ztd192c29jay9LY29uZmlnLTc0LVx0dHJpc3RhdGUgXCYjMzQ7SHlwZXItViB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0c1wmIzM0O1xubmV0L3Ztd192c29jay9LY29uZmlnOjc1Olx0ZGVwZW5kcyBvbiBWU09DS0VUUyBcdTAwMjZcdTAwMjYgSFlQRVJWX1ZNQlVTXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNzYtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMyNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uc2lkZXJhdGlvbnM6CgoqKlZTT0NLIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgVlNPQ0sgY29uZmlndXJhdGlvbnMuIE9idmlvdXNseSwgdGhlIGNvcmUgaXMgdGhlIGBWU09DS0VUU2Agb3B0aW9uLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIGZvdW5kYXRpb24uIEkgYWxzbyBrbm93IHRoYXQgYFZTT0NLRVRTX0xPT1BCQUNLYCBpcyByZWFsbHkgdmFsdWFibGUgZm9yIGxvY2FsIHRlc3RpbmcgYW5kIGRlYnVnZ2luZy4gSXQmIzM5O3MgYSBsaWZlc2F2ZXIsIGJlaW5nIGFibGUgdG8gc2ltdWxhdGUgYSBjb25uZWN0aW9uIHdpdGhpbiB0aGUgc2FtZSBob3N0LgoKTm93LCBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgIHRoZXJlLiBVbmRlcnN0YW5kaW5nIHRob3NlIHR3byBmdW5jdGlvbnMgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgY29ubmVjdGlvbiBsaWZlY3ljbGUgZnVuY3Rpb25zIGFuZCB0aGUgaGFuZHNoYWtlIGlzIHNldCB1cC4gVGhleSYjMzk7cmUgZ29pbmcgdG8gdGVsbCBtZSBhIGxvdCBhYm91dCB0aGUgY29yZSBtZWNoYW5pY3MgSSYjMzk7bSBkZWFsaW5nIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnNvY2tfYWNjZXB0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9hZl92c29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svYWZfdnNvY2suYz0xNjcyPXN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTg1Ny1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxODU4OnN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTg1OS1cdFx0XHRzdHJ1Y3QgcHJvdG9fYWNjZXB0X2FyZyAqYXJnKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHZzb2NrX3N0cmVhbV9vcHMgPSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MjgtXHQuc29ja2V0cGFpciA9IHNvY2tfbm9fc29ja2V0cGFpcixcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjI5Olx0LmFjY2VwdCA9IHZzb2NrX2FjY2VwdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjMwLVx0LmdldG5hbWUgPSB2c29ja19nZXRuYW1lLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHZzb2NrX3NlcXBhY2tldF9vcHMgPSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NTAtXHQuc29ja2V0cGFpciA9IHNvY2tfbm9fc29ja2V0cGFpcixcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjUxOlx0LmFjY2VwdCA9IHZzb2NrX2FjY2VwdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjUyLVx0LmdldG5hbWUgPSB2c29ja19nZXRuYW1lLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNDAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUmVjZW50IEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGlzIHBhdGNoIGFuZCBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2YgbXkgdGhpbmtpbmcuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgY2hhbmdlcyB0byB0aGUgYHZzb2NrYCBtb2R1bGUsIHNwZWNpZmljYWxseSBpbiB0aGUgYHZzb2NrX2Nvbm5lY3RgIGFuZCBgdnNvY2tfYWNjZXB0YCBmdW5jdGlvbnMuIEl0IGFwcGVhcnMgdG8gcmVtb3ZlIHRoZSBgcmVqZWN0ZWRgIGZpZWxkIGZyb20gYHZzb2NrX3NvY2tgIGFuZCBhbHNvIHNpbXBsaWZpZXMgdGhlIGB2c29ja19wZW5kaW5nX3dvcmtgIGxvZ2ljLiBUaGUgZmFjdCB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIHdpdGhpbiB0aGUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIHZzb2NrIGNvZGUsIG1ha2VzIHRoaXMgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpHaXZlbiB0aGUgc2NvcGUgYW5kIGltcGFjdCB3aXRoaW4gdGhlIGB2c29ja2AgbW9kdWxlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJJiMzOTtsbCBmbGFnIGl0IHdpdGggYFdvcnRoRnV6emluZz10cnVlYC4KCkZvciBmb2N1c2VkIGZ1enppbmcgZWZmb3J0cywgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uIGFyZSBkZWZpbml0ZWx5IGB2c29ja19jb25uZWN0YCwgYHZzb2NrX2FjY2VwdGAsIGFuZCBgdnNvY2tfcGVuZGluZ193b3JrYC4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLCBzcGVjaWZpY2FsbHkgYFZTT0NLRVRTYCBhbmQgYFZTT0NLRVRTX0xPT1BCQUNLYC4KCk5vdywgYmVmb3JlIEkgY29tbWl0IHRvIGEgZnVsbC1ibG93biBmdXp6aW5nIGNhbXBhaWduLCBJIHdhbnQgdG8gcXVpY2tseSBkb3VibGUgY2hlY2sgdGhlIG5hdHVyZSBvZiBgdnNvY2tfcGVuZGluZ193b3JrYC4gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGl0JiMzOTtzIGRlY2xhcmVkIGFzIHN0YXRpYywgYW5kIGlmIGl0JiMzOTtzIGlubGluZWQuIFRoaXMgd2lsbCBhZmZlY3QgaG93IGFjY2Vzc2libGUgaXQgaXMgYW5kIHdoYXQga2luZCBvZiBpbnN0cnVtZW50YXRpb24gSSBtaWdodCBuZWVkIHRvIGFwcGx5IGZvciBlZmZlY3RpdmUgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnNvY2tfcGVuZGluZ193b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9hZl92c29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svYWZfdnNvY2suYz03NDc9c3RhdGljIGludCB2c29ja19zZW5kX3NodXRkb3duKHN0cnVjdCBzb2NrICpzaywgaW50IG1vZGUpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTc1Ni1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo3NTc6c3RhdGljIHZvaWQgdnNvY2tfcGVuZGluZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy03NTgte1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz05MDQ9c3RhdGljIHN0cnVjdCBzb2NrICpfX3Zzb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk0NC1cdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnZzay1cdTAwM2Vjb25uZWN0X3dvcmssIHZzb2NrX2Nvbm5lY3RfdGltZW91dCk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6OTQ1Olx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2dnNrLVx1MDAzZXBlbmRpbmdfd29yaywgdnNvY2tfcGVuZGluZ193b3JrKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy05NDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3ODUKCQkJCQkJCW91dHB1dDogMTA5CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGgga2VybmVsIGludGVybmFsczoKCioqQW5hbHl6aW5nIHZzb2NrX3BlbmRpbmdfd29yayBhbmQgQ29kZSBGbG93KioKClJpZ2h0LCBzbyBgdnNvY2tfcGVuZGluZ193b3JrYCBpcyBhIHdvcmtxdWV1ZSBjYWxsYmFjay4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBhIGZldyB0aGluZ3MuIEZpcnN0LCBpdCYjMzk7cyBub3QgZ29pbmcgdG8gYmUgaW5saW5lZCDigJMgd29ya3F1ZXVlIGNhbGxiYWNrcyBhcmUgZGVzaWduZWQgdG8gYmUgcnVuIGFzeW5jaHJvbm91c2x5LCBvZmYgdGhlIGNyaXRpY2FsIHBhdGguIFNlY29uZCwgdGhhdCBhbHNvIG1lYW5zIHdlJiMzOTtyZSBsaWtlbHkgZ3JhYmJpbmcgaXRzIGFkZHJlc3Mgc29tZXdoZXJlLiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIGZvciBsYXRlciwgcG90ZW50aWFsbHkgZm9yIGRlYnVnZ2luZyBvciB0cmFjaW5nLiBJdCBnaXZlcyBtZSBhIGNydWNpYWwgY2x1ZSBhYm91dCBob3cgdGhpcyBjb2RlIHdpbGwgYmUgb3JnYW5pemVkIGFuZCBjYWxsZWQgYnkgdGhlIHdvcmtxdWV1ZSBtYWNoaW5lcnkuCgpNeSBuZXh0IHN0ZXAsIGxvb2tpbmcgYXQgdGhpcyBjb250ZXh0LCBpcyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTX0xPT1BCQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dnNvY2tfY29ubmVjdCYjMzQ7LAogICAgJiMzNDt2c29ja19hY2NlcHQmIzM0OywKICAgICYjMzQ7dnNvY2tfcGVuZGluZ193b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHZzb2NrIGNvbm5lY3Rpb24gYW5kIGFjY2VwdCBsb2dpYywgcmVtb3ZpbmcgdGhlICYjMzk7cmVqZWN0ZWQmIzM5OyBzdGF0ZSBhbmQgYWx0ZXJpbmcgaG93IGVycm9ycyBhcmUgaGFuZGxlZCBkdXJpbmcgYWNjZXB0IGFuZCBjb25uZWN0IG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbmV0d29ya2luZyBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zzb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7dnNvY2tfYWNjZXB0JiMzNDssCiAgICAmIzM0O3Zzb2NrX3BlbmRpbmdfd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2c29jayBjb25uZWN0aW9uIGFuZCBhY2NlcHQgbG9naWMsIHJlbW92aW5nIHRoZSAmIzM5O3JlamVjdGVkJiMzOTsgc3RhdGUgYW5kIGFsdGVyaW5nIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQgZHVyaW5nIGFjY2VwdCBhbmQgY29ubmVjdCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBgcmVqZWN0ZWRgIGZpZWxkIGZyb20gYHN0cnVjdCB2c29ja19zb2NrYCBhbmQgc2ltcGxpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YC4gSXQgbW9kaWZpZXMgdGhlIHNvY2tldCBzdGF0ZSBtYWNoaW5lIGFuZCBob3cgc29ja2V0IGVycm9ycyAoYHNrX2VycmApIGFyZSBwcm9jZXNzZWQuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCwgbm8gY2hhbmdlcyB0byBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbW9kaWZpY2F0aW9ucyB0byBidWZmZXIgbGVuZ3RocyBvciBib3VuZHMgY2hlY2tzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gc29ja2V0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBpbmNvcnJlY3QgZXJyb3IgY29kZXMpLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ2NzRjOTQxMzdjMzU2ZTllZmQ0MWQwM2M1ZDE2ZGUwYThmYTg5YjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAyMToxMjoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmggYi9pbmNsdWRlL25ldC9hZl92c29jay5oCmluZGV4IDMwMDQ2YTNjMjBmNzMuLjMzNTdlZTYyZDEwYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaApAQCAtNTIsMTMgJiM0Mzs1MiwxMCBAQCBzdHJ1Y3QgdnNvY2tfc29jayB7CiAJICogVGhlIGxpc3RlbmluZyBzb2NrZXQgaXMgdGhlIGhlYWQgZm9yIGJvdGggbGlzdHMuICBTb2NrZXRzIGNyZWF0ZWQKIAkgKiBmb3IgY29ubmVjdGlvbiByZXF1ZXN0cyBhcmUgcGxhY2VkIGluIHRoZSBwZW5kaW5nIGxpc3QgdW50aWwgdGhleQogCSAqIGFyZSBjb25uZWN0ZWQsIGF0IHdoaWNoIHBvaW50IHRoZXkgYXJlIHB1dCBpbiB0aGUgYWNjZXB0IHF1ZXVlIGxpc3QKLQkgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS4gIElmIGFjY2VwdCgpIGNhbm5vdCBhY2NlcHQgdGhlCi0JICogY29ubmVjdGlvbiwgaXQgaXMgbWFya2VkIGFzIHJlamVjdGVkIHNvIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGtub3dzCi0JICogdG8gY2xlYW4gdXAgdGhlIHNvY2tldC4KJiM0MzsJICogc28gdGhleSBjYW4gYmUgYWNjZXB0ZWQgaW4gYWNjZXB0KCkuCiAJICovCiAJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpbmtzOwogCXN0cnVjdCBsaXN0X2hlYWQgYWNjZXB0X3F1ZXVlOwotCWJvb2wgcmVqZWN0ZWQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBjb25uZWN0X3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBwZW5kaW5nX3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBjbG9zZV93b3JrOwpkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCmluZGV4IDYyMmRiZDA0Njc5OTQuLjFhMjg3NzE5ZjI0YTMgMTAwNjQ0Ci0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKQEAgLTM4LDEwICYjNDM7MzgsOSBAQAogICogcGVuZGluZyBzb2NrZXQuICBXaGVuIHRoYXQgc29ja2V0IHJlYWNoZXMgdGhlIGNvbm5lY3RlZCBzdGF0ZSwgaXQgaXMgcmVtb3ZlZAogICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0JiMzOTtzIHBlbmRpbmcgbGlzdCBhbmQgZW5xdWV1ZWQgaW4gdGhlIGxpc3RlbmVyCiAgKiBzb2NrZXQmIzM5O3MgYWNjZXB0IHF1ZXVlLiAgQ2FsbGVycyBvZiBhY2NlcHQoMikgd2lsbCBhY2NlcHQgY29ubmVjdGVkIHNvY2tldHMKLSAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCYjMzk7cyBhY2NlcHQgcXVldWUuICBJZiB0aGUgc29ja2V0IGNhbm5vdCBiZSBhY2NlcHRlZAotICogZm9yIHNvbWUgcmVhc29uIHRoZW4gaXQgaXMgbWFya2VkIHJlamVjdGVkLiAgT25jZSB0aGUgY29ubmVjdGlvbiBpcwotICogYWNjZXB0ZWQsIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cAotICogZmFsbHMgd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy4KJiM0MzsgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQmIzM5O3MgYWNjZXB0IHF1ZXVlLiBPbmNlIHRoZSBjb25uZWN0aW9uIGlzIGFjY2VwdGVkLAomIzQzOyAqIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cCBmYWxscwomIzQzOyAqIHdpdGggdGhhdCB1c2VyIHByb2Nlc3MuCiAgKgogICogLSBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXNlIHBlbmRpbmcgc29ja2V0cyB3aWxsIG5ldmVyIHJlYWNoIHRoZSBjb25uZWN0ZWQKICAqIHN0YXRlOyBpbiBmYWN0LCB3ZSBtYXkgbmV2ZXIgcmVjZWl2ZSBhbm90aGVyIHBhY2tldCBhZnRlciB0aGUgY29ubmVjdGlvbgpAQCAtNDksOSAmIzQzOzQ4LDcgQEAKICAqIGZ1dHVyZSwgYWZ0ZXIgc29tZSBhbW91bnQgb2YgdGltZSBwYXNzZXMgd2hlcmUgYSBjb25uZWN0aW9uIHNob3VsZCBoYXZlIGJlZW4KICAqIGVzdGFibGlzaGVkLiAgVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIHNvY2tldCBpcyBvZmYgYWxsIGxpc3RzIHNvIGl0CiAgKiBjYW5ub3QgYmUgcmV0cmlldmVkLCB0aGVuIGRyb3BzIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBzb2NrZXQgc28gaXQgaXMgY2xlYW5lZAotICogdXAgKHNvY2tfcHV0KCkgLSZndDsgc2tfZnJlZSgpIC0mZ3Q7IG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuICBOb3RlIHRoaXMKLSAqIGZ1bmN0aW9uIHdpbGwgYWxzbyBjbGVhbnVwIHJlamVjdGVkIHNvY2tldHMsIHRob3NlIHRoYXQgcmVhY2ggdGhlIGNvbm5lY3RlZAotICogc3RhdGUgYnV0IGxlYXZlIGl0IGJlZm9yZSB0aGV5IGhhdmUgYmVlbiBhY2NlcHRlZC4KJiM0MzsgKiB1cCAoc29ja19wdXQoKSAtJmd0OyBza19mcmVlKCkgLSZndDsgb3VyIHNrX2Rlc3RydWN0IGltcGxlbWVudGF0aW9uKS4KICAqCiAgKiAtIExvY2sgb3JkZXJpbmcgZm9yIHBlbmRpbmcgb3IgYWNjZXB0IHF1ZXVlIHNvY2tldHMgaXM6CiAgKgpAQCAtNzc0LDExICYjNDM7NzcxLDEwIEBAIHN0YXRpYyB2b2lkIHZzb2NrX3BlbmRpbmdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAKIAlpZiAodnNvY2tfaXNfcGVuZGluZyhzaykpIHsKIAkJdnNvY2tfcmVtb3ZlX3BlbmRpbmcobGlzdGVuZXIsIHNrKTsKLQl9IGVsc2UgaWYgKCF2c2stJmd0O3JlamVjdGVkKSB7Ci0JCS8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBhbmQgYWNjZXB0KCkgZGlkIG5vdCByZWplY3QKLQkJICogdXMsIHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkIGJ5IG91ciB1c2VyIHByb2Nlc3MuICBXZQotCQkgKiBqdXN0IG5lZWQgdG8gZHJvcCBvdXIgcmVmZXJlbmNlcyB0byB0aGUgc29ja2V0cyBhbmQgYmUgb24KLQkJICogb3VyIHdheS4KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBzbyB3ZSBtdXN0IGhhdmUgYmVlbiBhY2NlcHRlZAomIzQzOwkJICogYnkgb3VyIHVzZXIgcHJvY2Vzcy4gV2UganVzdCBuZWVkIHRvIGRyb3Agb3VyIHJlZmVyZW5jZXMgdG8KJiM0MzsJCSAqIHRoZSBzb2NrZXRzIGFuZCBiZSBvbiBvdXIgd2F5LgogCQkgKi8KIAkJY2xlYW51cCA9IGZhbHNlOwogCQlnb3RvIG91dDsKQEAgLTk0Miw3ICYjNDM7OTM4LDYgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpfX3Zzb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJdnNrLSZndDtsaXN0ZW5lciA9IE5VTEw7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDt2c2stJmd0O3BlbmRpbmdfbGlua3MpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7dnNrLSZndDthY2NlcHRfcXVldWUpOwotCXZzay0mZ3Q7cmVqZWN0ZWQgPSBmYWxzZTsKIAl2c2stJmd0O3NlbnRfcmVxdWVzdCA9IGZhbHNlOwogCXZzay0mZ3Q7aWdub3JlX2Nvbm5lY3RpbmdfcnN0ID0gZmFsc2U7CiAJV1JJVEVfT05DRSh2c2stJmd0O3BlZXJfc2h1dGRvd24sIDApOwpAQCAtMTg0NywxMiAmIzQzOzE4NDIsMTAgQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLAogCQlwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCAmYW1wO3dhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJfQogCi0JaWYgKHNrLSZndDtza19lcnIpIHsKLQkJZXJyID0gLXNrLSZndDtza19lcnI7CiYjNDM7CWVyciA9IHNvY2tfZXJyb3Ioc2spOwomIzQzOwlpZiAoZXJyKSB7CiAJCXNrLSZndDtza19zdGF0ZSA9IFRDUF9DTE9TRTsKIAkJc29jay0mZ3Q7c3RhdGUgPSBTU19VTkNPTk5FQ1RFRDsKLQl9IGVsc2UgewotCQllcnIgPSAwOwogCX0KIAogb3V0X3dhaXQ6CkBAIC0xODkzLDcgJiM0MzsxODg2LDcgQEAgc3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywKIAl0aW1lb3V0ID0gc29ja19yY3Z0aW1lbyhsaXN0ZW5lciwgYXJnLSZndDtmbGFncyAmYW1wOyBPX05PTkJMT0NLKTsKIAogCXdoaWxlICgoY29ubmVjdGVkID0gdnNvY2tfZGVxdWV1ZV9hY2NlcHQobGlzdGVuZXIpKSA9PSBOVUxMICZhbXA7JmFtcDsKLQkgICAgICAgbGlzdGVuZXItJmd0O3NrX2VyciA9PSAwICZhbXA7JmFtcDsgdGltZW91dCAhPSAwKSB7CiYjNDM7CQl0aW1lb3V0ICE9IDApIHsKIAkJcHJlcGFyZV90b193YWl0KHNrX3NsZWVwKGxpc3RlbmVyKSwgJmFtcDt3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlyZWxlYXNlX3NvY2sobGlzdGVuZXIpOwogCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKQEAgLTE5MDYsNDEgJiM0MzsxODk5LDI2IEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssCiAJCX0KIAl9CiAKLQlpZiAobGlzdGVuZXItJmd0O3NrX2VycikgewotCQllcnIgPSAtbGlzdGVuZXItJmd0O3NrX2VycjsKLQl9IGVsc2UgaWYgKCFjb25uZWN0ZWQpIHsKLQkJZXJyID0gLUVBR0FJTjsKLQl9Ci0KIAlpZiAoY29ubmVjdGVkKSB7CiAJCXNrX2FjY2VwdHFfcmVtb3ZlZChsaXN0ZW5lcik7CiAKIAkJbG9ja19zb2NrX25lc3RlZChjb25uZWN0ZWQsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAkJdmNvbm5lY3RlZCA9IHZzb2NrX3NrKGNvbm5lY3RlZCk7CiAKLQkJLyogSWYgdGhlIGxpc3RlbmVyIHNvY2tldCBoYXMgcmVjZWl2ZWQgYW4gZXJyb3IsIHRoZW4gd2Ugc2hvdWxkCi0JCSAqIHJlamVjdCB0aGlzIHNvY2tldCBhbmQgcmV0dXJuLiAgTm90ZSB0aGF0IHdlIHNpbXBseSBtYXJrIHRoZQotCQkgKiBzb2NrZXQgcmVqZWN0ZWQsIGRyb3Agb3VyIHJlZmVyZW5jZSwgYW5kIGxldCB0aGUgY2xlYW51cAotCQkgKiBmdW5jdGlvbiBoYW5kbGUgdGhlIGNsZWFudXA7IHRoZSBmYWN0IHRoYXQgd2UgZm91bmQgaXQgaW4KLQkJICogdGhlIGxpc3RlbmVyJiMzOTtzIGFjY2VwdCBxdWV1ZSBndWFyYW50ZWVzIHRoYXQgdGhlIGNsZWFudXAKLQkJICogZnVuY3Rpb24gaGFzbiYjMzk7dCBydW4geWV0LgotCQkgKi8KLQkJaWYgKGVycikgewotCQkJdmNvbm5lY3RlZC0mZ3Q7cmVqZWN0ZWQgPSB0cnVlOwotCQl9IGVsc2UgewotCQkJbmV3c29jay0mZ3Q7c3RhdGUgPSBTU19DT05ORUNURUQ7Ci0JCQlzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7CiYjNDM7CQluZXdzb2NrLSZndDtzdGF0ZSA9IFNTX0NPTk5FQ1RFRDsKJiM0MzsJCXNvY2tfZ3JhZnQoY29ubmVjdGVkLCBuZXdzb2NrKTsKIAotCQkJc2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULAotCQkJCSZhbXA7Y29ubmVjdGVkLSZndDtza19zb2NrZXQtJmd0O2ZsYWdzKTsKJiM0MzsJCXNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwKJiM0MzsJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7CiAKLQkJCWlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLSZndDt0cmFuc3BvcnQpKQotCQkJCXNldF9iaXQoU09DS19TVVBQT1JUX1pDLAotCQkJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7Ci0JCX0KJiM0MzsJCWlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLSZndDt0cmFuc3BvcnQpKQomIzQzOwkJCXNldF9iaXQoU09DS19TVVBQT1JUX1pDLAomIzQzOwkJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7CiAKIAkJcmVsZWFzZV9zb2NrKGNvbm5lY3RlZCk7CiAJCXNvY2tfcHV0KGNvbm5lY3RlZCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllcnIgPSAtRUFHQUlOOwogCX0KIAogb3V0Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwMQoJCQkJCQkJb3V0cHV0OiAxNzkKCQkJCQkJCXRob3VnaHRzOiAxMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSB2c29jayBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRvdWNoaW5nIGBhZl92c29jay5jYCBhbmQgYGFmX3Zzb2NrLmhgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlcywgc28gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSBuZXcgbWVtb3J5IG1pZ2h0IGJlIGFsbG9jYXRlZCBvciBkYXRhIGNvdWxkIGJlIG1pc2hhbmRsZWQuCgpGaXJzdCwgdGhlIGByZWplY3RlZGAgZmllbGQgaXMgYmVpbmcgKnJlbW92ZWQqIGZyb20gYHN0cnVjdCB2c29ja19zb2NrYC4gVGhhdCBhbG9uZSBkb2VzbiYjMzk7dCBzY3JlYW0gJiMzNDt1bmluaXRpYWxpemVkIG1lbW9yeSwmIzM0OyBidXQgaXQgZG9lcyBmb3JjZSBtZSB0byBsb29rIGF0IGhvdyB0aGF0IGZpZWxkIHdhcyB1c2VkLiBJZiBpdCB3YXMgZ3VhcmRpbmcgYWdhaW5zdCBhY2Nlc3NpbmcgbWVtb3J5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZXBsYWNlbWVudCBsb2dpYyBpcyBzb3VuZC4KClRoZSBwYXRjaCBjaGFuZ2VzIGB2c29ja19wZW5kaW5nX3dvcmtgLCBgdnNvY2tfY29ubmVjdGAsIGFuZCBgdnNvY2tfYWNjZXB0YC4gTGV0JiMzOTtzIHN0ZXAgdGhyb3VnaCBgdnNvY2tfYWNjZXB0YC4gVGhlIGNvZGUgdXNlZCB0byBjaGVjayBgbGlzdGVuZXItJmd0O3NrX2VycmAgaW4gdGhlIGB3aGlsZWAgbG9vcCwgYW5kIG5vdyBpdCBkb2VzbiYjMzk7dC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGRpZCB0aGlzIGludHJvZHVjZSBhIHJhY2UgY29uZGl0aW9uIG9yIGEgcG90ZW50aWFsIGZvciByZXR1cm5pbmcgYW4gJiMzNDtpbnZhbGlkJiMzNDsgc29ja2V0PyBUaGUgb2xkIGxvZ2ljIHdhcyBtb3JlIGNvbnNlcnZhdGl2ZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIG5ldyBwYXRoIHN0aWxsIGhhbmRsZXMgZXJyb3JzIGdyYWNlZnVsbHkuCgpUaGUgb2xkIGxvZ2ljICphbHNvKiBoYWQgYSBgbGlzdGVuZXItJmd0O3NrX2VycmAgY2hlY2sgKmFmdGVyKiB0aGUgbG9vcCwgYW5kIGlmIGl0IHdhcyBzZXQgKmFuZCogYSBgY29ubmVjdGVkYCBzb2NrZXQgaGFkIGJlZW4gZGVxdWV1ZWQsIGl0IHdvdWxkIG1hcmsgdGhlIGBjb25uZWN0ZWRgIHNvY2tldCBhcyByZWplY3RlZC4gIE5vdyB0aGUgcGF0Y2ggcmVtb3ZlcyB0aGF0IGNoZWNrIGFuZCBwcm9jZXNzZXMgYW4gZXJyb3IgaW4gYHZzb2NrX2FjY2VwdGAuIFByZXZpb3VzbHkgaWYgdGhlcmUgd2FzIGFuIGVycm9yIG9uIHRoZSBsaXN0ZW5lciBzb2NrZXQsIGl0IHdvdWxkIHJlamVjdCB0aGUgYWNjZXB0IHNvY2tldC4gSXQgbG9va3MgbGlrZSBpdCBzdGlsbCB3YWtlcyB1cCB0aGUgc2xlZXAgcXVldWUsIGFuZCBqdXN0IGxvb3BzIGFnYWluIGlmIG5vdGhpbmcgaXMgZGVxdWV1ZWQuIFRoaXMgbG9va3MgbGlrZSBhIGNoYW5nZSB0byBob3cgZXJyb3JzIGFyZSBoYW5kbGVkLCBidXQgZG9lc24mIzM5O3QgKmRpcmVjdGx5KiBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpgdnNvY2tfY29ubmVjdGAgbm93IHVzZXMgYHNvY2tfZXJyb3Ioc2spYCBpbnN0ZWFkIG9mIGRpcmVjdGx5IGNoZWNraW5nIGBzay0mZ3Q7c2tfZXJyYC4gIFRoaXMgaXMgYSBnb29kLCBzdGFuZGFyZCBwcmFjdGljZS4gIGBzb2NrX2Vycm9yYCBnZXRzIGFuZCBjbGVhcnMgdGhlIGVycm9yIGNvZGUuIFRoaXMgaXMgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0IHRvIHNlZSBpbiBlcnJvciBoYW5kbGluZy4gVGhhdCYjMzk7cyBhIHJlZmFjdG9yaW5nLCBub3QgYSByaXNrLgoKU28sIGlzIHRoZXJlIGFuICphY3R1YWwqIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBjcml0aWNhbCB0aGluZyBpcyB0aGF0IHRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGxlbmd0aHMuIEl0JiMzOTtzIGFsbCBhYm91dCBzdGF0ZSBtYWNoaW5lIGxvZ2ljIGFuZCBlcnJvciBoYW5kbGluZy4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBuZXcgcGxhY2VzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGNvdWxkIGJlIGludHJvZHVjZWQuCgpPa2F5LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrLiBUaGUgcmVtb3ZhbCBvZiBgdmNvbm5lY3RlZC0mZ3Q7cmVqZWN0ZWRgIGlzIGEgY3JpdGljYWwgY2hhbmdlLiBBbmQgdGhhdCYjMzk7cyBubyBsb25nZXIgY2hlY2tlZCBieSBgdnNvY2tfcGVuZGluZ193b3JrYC4gSWYgdGhlcmUgd2FzIGFueSBhY2Nlc3MgdG8gdGhpcyB2YXJpYWJsZSwgaXQgY2FuIGNhdXNlIHVzZS1hZnRlci1mcmVlIG9yIGxlYWssIGJ1dCBLQVNBTiB3aWxsIGRldGVjdCB0aGlzLiBLTVNBTiBpcyBmb3IgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSwgd2hpY2ggSSBkb24mIzM5O3Qgc2VlIGhlcmUuCgpUaGlzIHBhdGNoIGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZy4gSXQgcmVtb3ZlcyBhIGZpZWxkLCBzaW1wbGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCB0aGUgdmFyaWFibGVzIGJlaW5nIHVzZWQgYXJlIGBlcnJgLCBgY29ubmVjdGVkYCwgYW5kIGB0aW1lb3V0YCwgd2hpY2ggYXJlIGluaXRpYWxpemVkLiBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgaGVyZSB0aGF0IGNvdWxkIGRpcmVjdGx5IGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZC4gTm8gbmV3IHBvaW50ZXJzLiBObyBuZXcgYWxsb2NhdGlvbnMuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgbmVlZCBLTVNBTiB0ZXN0aW5nLiBJJiMzOTtsbCBtYXJrIGBOZWVkc0tNU0FOPWZhbHNlYC4gSXQmIzM5O3MgYSBsb2dpYyBjaGFuZ2Ugd2hpY2ggY2FuIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgdGVzdGluZywgYW5kIEtBU0FOIHNob3VsZCBwaWNrIHVwIGFueSBsaWZlY3ljbGUgbWFuYWdlbWVudCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgIGFuZCBzaW1wbGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgLiBJdCBtb2RpZmllcyB0aGUgc29ja2V0IHN0YXRlIG1hY2hpbmUgYW5kIGhvdyBzb2NrZXQgZXJyb3JzIChgc2tfZXJyYCkgYXJlIHByb2Nlc3NlZC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBjaGFuZ2VzIHRvIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBsZW5ndGhzIG9yIGJvdW5kcyBjaGVja3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCBlcnJvciBjb2RlcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgIGFuZCBzaW1wbGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgLiBJdCBtb2RpZmllcyB0aGUgc29ja2V0IHN0YXRlIG1hY2hpbmUgYW5kIGhvdyBzb2NrZXQgZXJyb3JzIChgc2tfZXJyYCkgYXJlIHByb2Nlc3NlZC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBjaGFuZ2VzIHRvIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBsZW5ndGhzIG9yIGJvdW5kcyBjaGVja3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCBlcnJvciBjb2RlcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTI6MTkuNzQ0MzE2MTQ0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ5NTY5MjI1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnNvY2tfY29ubmVjdFwiLFxuICAgIFwidnNvY2tfYWNjZXB0XCIsXG4gICAgXCJ2c29ja19wZW5kaW5nX3dvcmtcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgIGFuZCBzaW1wbGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgLiBJdCBtb2RpZmllcyB0aGUgc29ja2V0IHN0YXRlIG1hY2hpbmUgYW5kIGhvdyBzb2NrZXQgZXJyb3JzIChgc2tfZXJyYCkgYXJlIHByb2Nlc3NlZC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBjaGFuZ2VzIHRvIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBsZW5ndGhzIG9yIGJvdW5kcyBjaGVja3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCBlcnJvciBjb2RlcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2c29jayBjb25uZWN0aW9uIGFuZCBhY2NlcHQgbG9naWMsIHJlbW92aW5nIHRoZSAncmVqZWN0ZWQnIHN0YXRlIGFuZCBhbHRlcmluZyBob3cgZXJyb3JzIGFyZSBoYW5kbGVkIGR1cmluZyBhY2NlcHQgYW5kIGNvbm5lY3Qgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEyOjE5Ljc0NDMyMDkxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEzNTA4ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDY3NGM5NDEzN2MzNTZlOWVmZDQxZDAzYzVkMTZkZTBhOGZhODliMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAyMToxMjoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl92c29jay5oIGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxcbmluZGV4IDMwMDQ2YTNjMjBmNzMuLjMzNTdlZTYyZDEwYmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxcbisrKyBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcXG5AQCAtNTIsMTMgKzUyLDEwIEBAIHN0cnVjdCB2c29ja19zb2NrIHtcXG4gXFx0ICogVGhlIGxpc3RlbmluZyBzb2NrZXQgaXMgdGhlIGhlYWQgZm9yIGJvdGggbGlzdHMuICBTb2NrZXRzIGNyZWF0ZWRcXG4gXFx0ICogZm9yIGNvbm5lY3Rpb24gcmVxdWVzdHMgYXJlIHBsYWNlZCBpbiB0aGUgcGVuZGluZyBsaXN0IHVudGlsIHRoZXlcXG4gXFx0ICogYXJlIGNvbm5lY3RlZCwgYXQgd2hpY2ggcG9pbnQgdGhleSBhcmUgcHV0IGluIHRoZSBhY2NlcHQgcXVldWUgbGlzdFxcbi1cXHQgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS4gIElmIGFjY2VwdCgpIGNhbm5vdCBhY2NlcHQgdGhlXFxuLVxcdCAqIGNvbm5lY3Rpb24sIGl0IGlzIG1hcmtlZCBhcyByZWplY3RlZCBzbyB0aGUgY2xlYW51cCBmdW5jdGlvbiBrbm93c1xcbi1cXHQgKiB0byBjbGVhbiB1cCB0aGUgc29ja2V0LlxcbitcXHQgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS5cXG4gXFx0ICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ19saW5rcztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBhY2NlcHRfcXVldWU7XFxuLVxcdGJvb2wgcmVqZWN0ZWQ7XFxuIFxcdHN0cnVjdCBkZWxheWVkX3dvcmsgY29ubmVjdF93b3JrO1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHBlbmRpbmdfd29yaztcXG4gXFx0c3RydWN0IGRlbGF5ZWRfd29yayBjbG9zZV93b3JrO1xcbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcXG5pbmRleCA2MjJkYmQwNDY3OTk0Li4xYTI4NzcxOWYyNGEzIDEwMDY0NFxcbi0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xcbisrKyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xcbkBAIC0zOCwxMCArMzgsOSBAQFxcbiAgKiBwZW5kaW5nIHNvY2tldC4gIFdoZW4gdGhhdCBzb2NrZXQgcmVhY2hlcyB0aGUgY29ubmVjdGVkIHN0YXRlLCBpdCBpcyByZW1vdmVkXFxuICAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCdzIHBlbmRpbmcgbGlzdCBhbmQgZW5xdWV1ZWQgaW4gdGhlIGxpc3RlbmVyXFxuICAqIHNvY2tldCdzIGFjY2VwdCBxdWV1ZS4gIENhbGxlcnMgb2YgYWNjZXB0KDIpIHdpbGwgYWNjZXB0IGNvbm5lY3RlZCBzb2NrZXRzXFxuLSAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCdzIGFjY2VwdCBxdWV1ZS4gIElmIHRoZSBzb2NrZXQgY2Fubm90IGJlIGFjY2VwdGVkXFxuLSAqIGZvciBzb21lIHJlYXNvbiB0aGVuIGl0IGlzIG1hcmtlZCByZWplY3RlZC4gIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXNcXG4tICogYWNjZXB0ZWQsIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cFxcbi0gKiBmYWxscyB3aXRoIHRoYXQgdXNlciBwcm9jZXNzLlxcbisgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQncyBhY2NlcHQgcXVldWUuIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgYWNjZXB0ZWQsXFxuKyAqIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cCBmYWxsc1xcbisgKiB3aXRoIHRoYXQgdXNlciBwcm9jZXNzLlxcbiAgKlxcbiAgKiAtIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlc2UgcGVuZGluZyBzb2NrZXRzIHdpbGwgbmV2ZXIgcmVhY2ggdGhlIGNvbm5lY3RlZFxcbiAgKiBzdGF0ZTsgaW4gZmFjdCwgd2UgbWF5IG5ldmVyIHJlY2VpdmUgYW5vdGhlciBwYWNrZXQgYWZ0ZXIgdGhlIGNvbm5lY3Rpb25cXG5AQCAtNDksOSArNDgsNyBAQFxcbiAgKiBmdXR1cmUsIGFmdGVyIHNvbWUgYW1vdW50IG9mIHRpbWUgcGFzc2VzIHdoZXJlIGEgY29ubmVjdGlvbiBzaG91bGQgaGF2ZSBiZWVuXFxuICAqIGVzdGFibGlzaGVkLiAgVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIHNvY2tldCBpcyBvZmYgYWxsIGxpc3RzIHNvIGl0XFxuICAqIGNhbm5vdCBiZSByZXRyaWV2ZWQsIHRoZW4gZHJvcHMgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIHNvY2tldCBzbyBpdCBpcyBjbGVhbmVkXFxuLSAqIHVwIChzb2NrX3B1dCgpIC1cXHUwMDNlIHNrX2ZyZWUoKSAtXFx1MDAzZSBvdXIgc2tfZGVzdHJ1Y3QgaW1wbGVtZW50YXRpb24pLiAgTm90ZSB0aGlzXFxuLSAqIGZ1bmN0aW9uIHdpbGwgYWxzbyBjbGVhbnVwIHJlamVjdGVkIHNvY2tldHMsIHRob3NlIHRoYXQgcmVhY2ggdGhlIGNvbm5lY3RlZFxcbi0gKiBzdGF0ZSBidXQgbGVhdmUgaXQgYmVmb3JlIHRoZXkgaGF2ZSBiZWVuIGFjY2VwdGVkLlxcbisgKiB1cCAoc29ja19wdXQoKSAtXFx1MDAzZSBza19mcmVlKCkgLVxcdTAwM2Ugb3VyIHNrX2Rlc3RydWN0IGltcGxlbWVudGF0aW9uKS5cXG4gICpcXG4gICogLSBMb2NrIG9yZGVyaW5nIGZvciBwZW5kaW5nIG9yIGFjY2VwdCBxdWV1ZSBzb2NrZXRzIGlzOlxcbiAgKlxcbkBAIC03NzQsMTEgKzc3MSwxMCBAQCBzdGF0aWMgdm9pZCB2c29ja19wZW5kaW5nX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXG4gXFx0aWYgKHZzb2NrX2lzX3BlbmRpbmcoc2spKSB7XFxuIFxcdFxcdHZzb2NrX3JlbW92ZV9wZW5kaW5nKGxpc3RlbmVyLCBzayk7XFxuLVxcdH0gZWxzZSBpZiAoIXZzay1cXHUwMDNlcmVqZWN0ZWQpIHtcXG4tXFx0XFx0LyogV2UgYXJlIG5vdCBvbiB0aGUgcGVuZGluZyBsaXN0IGFuZCBhY2NlcHQoKSBkaWQgbm90IHJlamVjdFxcbi1cXHRcXHQgKiB1cywgc28gd2UgbXVzdCBoYXZlIGJlZW4gYWNjZXB0ZWQgYnkgb3VyIHVzZXIgcHJvY2Vzcy4gIFdlXFxuLVxcdFxcdCAqIGp1c3QgbmVlZCB0byBkcm9wIG91ciByZWZlcmVuY2VzIHRvIHRoZSBzb2NrZXRzIGFuZCBiZSBvblxcbi1cXHRcXHQgKiBvdXIgd2F5LlxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBXZSBhcmUgbm90IG9uIHRoZSBwZW5kaW5nIGxpc3Qgc28gd2UgbXVzdCBoYXZlIGJlZW4gYWNjZXB0ZWRcXG4rXFx0XFx0ICogYnkgb3VyIHVzZXIgcHJvY2Vzcy4gV2UganVzdCBuZWVkIHRvIGRyb3Agb3VyIHJlZmVyZW5jZXMgdG9cXG4rXFx0XFx0ICogdGhlIHNvY2tldHMgYW5kIGJlIG9uIG91ciB3YXkuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRjbGVhbnVwID0gZmFsc2U7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbkBAIC05NDIsNyArOTM4LDYgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpfX3Zzb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHZzay1cXHUwMDNlbGlzdGVuZXIgPSBOVUxMO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dnNrLVxcdTAwM2VwZW5kaW5nX2xpbmtzKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnZzay1cXHUwMDNlYWNjZXB0X3F1ZXVlKTtcXG4tXFx0dnNrLVxcdTAwM2VyZWplY3RlZCA9IGZhbHNlO1xcbiBcXHR2c2stXFx1MDAzZXNlbnRfcmVxdWVzdCA9IGZhbHNlO1xcbiBcXHR2c2stXFx1MDAzZWlnbm9yZV9jb25uZWN0aW5nX3JzdCA9IGZhbHNlO1xcbiBcXHRXUklURV9PTkNFKHZzay1cXHUwMDNlcGVlcl9zaHV0ZG93biwgMCk7XFxuQEAgLTE4NDcsMTIgKzE4NDIsMTAgQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbiBcXHRcXHRwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCBcXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHNrLVxcdTAwM2Vza19lcnIpIHtcXG4tXFx0XFx0ZXJyID0gLXNrLVxcdTAwM2Vza19lcnI7XFxuK1xcdGVyciA9IHNvY2tfZXJyb3Ioc2spO1xcbitcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IFRDUF9DTE9TRTtcXG4gXFx0XFx0c29jay1cXHUwMDNlc3RhdGUgPSBTU19VTkNPTk5FQ1RFRDtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0ZXJyID0gMDtcXG4gXFx0fVxcbiBcXG4gb3V0X3dhaXQ6XFxuQEAgLTE4OTMsNyArMTg4Niw3IEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxuIFxcdHRpbWVvdXQgPSBzb2NrX3JjdnRpbWVvKGxpc3RlbmVyLCBhcmctXFx1MDAzZWZsYWdzIFxcdTAwMjYgT19OT05CTE9DSyk7XFxuIFxcbiBcXHR3aGlsZSAoKGNvbm5lY3RlZCA9IHZzb2NrX2RlcXVldWVfYWNjZXB0KGxpc3RlbmVyKSkgPT0gTlVMTCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgICAgbGlzdGVuZXItXFx1MDAzZXNrX2VyciA9PSAwIFxcdTAwMjZcXHUwMDI2IHRpbWVvdXQgIT0gMCkge1xcbitcXHRcXHR0aW1lb3V0ICE9IDApIHtcXG4gXFx0XFx0cHJlcGFyZV90b193YWl0KHNrX3NsZWVwKGxpc3RlbmVyKSwgXFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuIFxcdFxcdHJlbGVhc2Vfc29jayhsaXN0ZW5lcik7XFxuIFxcdFxcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xcbkBAIC0xOTA2LDQxICsxODk5LDI2IEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGxpc3RlbmVyLVxcdTAwM2Vza19lcnIpIHtcXG4tXFx0XFx0ZXJyID0gLWxpc3RlbmVyLVxcdTAwM2Vza19lcnI7XFxuLVxcdH0gZWxzZSBpZiAoIWNvbm5lY3RlZCkge1xcbi1cXHRcXHRlcnIgPSAtRUFHQUlOO1xcbi1cXHR9XFxuLVxcbiBcXHRpZiAoY29ubmVjdGVkKSB7XFxuIFxcdFxcdHNrX2FjY2VwdHFfcmVtb3ZlZChsaXN0ZW5lcik7XFxuIFxcbiBcXHRcXHRsb2NrX3NvY2tfbmVzdGVkKGNvbm5lY3RlZCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbiBcXHRcXHR2Y29ubmVjdGVkID0gdnNvY2tfc2soY29ubmVjdGVkKTtcXG4gXFxuLVxcdFxcdC8qIElmIHRoZSBsaXN0ZW5lciBzb2NrZXQgaGFzIHJlY2VpdmVkIGFuIGVycm9yLCB0aGVuIHdlIHNob3VsZFxcbi1cXHRcXHQgKiByZWplY3QgdGhpcyBzb2NrZXQgYW5kIHJldHVybi4gIE5vdGUgdGhhdCB3ZSBzaW1wbHkgbWFyayB0aGVcXG4tXFx0XFx0ICogc29ja2V0IHJlamVjdGVkLCBkcm9wIG91ciByZWZlcmVuY2UsIGFuZCBsZXQgdGhlIGNsZWFudXBcXG4tXFx0XFx0ICogZnVuY3Rpb24gaGFuZGxlIHRoZSBjbGVhbnVwOyB0aGUgZmFjdCB0aGF0IHdlIGZvdW5kIGl0IGluXFxuLVxcdFxcdCAqIHRoZSBsaXN0ZW5lcidzIGFjY2VwdCBxdWV1ZSBndWFyYW50ZWVzIHRoYXQgdGhlIGNsZWFudXBcXG4tXFx0XFx0ICogZnVuY3Rpb24gaGFzbid0IHJ1biB5ZXQuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdHZjb25uZWN0ZWQtXFx1MDAzZXJlamVjdGVkID0gdHJ1ZTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0bmV3c29jay1cXHUwMDNlc3RhdGUgPSBTU19DT05ORUNURUQ7XFxuLVxcdFxcdFxcdHNvY2tfZ3JhZnQoY29ubmVjdGVkLCBuZXdzb2NrKTtcXG4rXFx0XFx0bmV3c29jay1cXHUwMDNlc3RhdGUgPSBTU19DT05ORUNURUQ7XFxuK1xcdFxcdHNvY2tfZ3JhZnQoY29ubmVjdGVkLCBuZXdzb2NrKTtcXG4gXFxuLVxcdFxcdFxcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCxcXG4tXFx0XFx0XFx0XFx0XFx1MDAyNmNvbm5lY3RlZC1cXHUwMDNlc2tfc29ja2V0LVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCxcXG4rXFx0XFx0XFx0XFx1MDAyNmNvbm5lY3RlZC1cXHUwMDNlc2tfc29ja2V0LVxcdTAwM2VmbGFncyk7XFxuIFxcbi1cXHRcXHRcXHRpZiAodnNvY2tfbXNnemVyb2NvcHlfYWxsb3codmNvbm5lY3RlZC1cXHUwMDNldHJhbnNwb3J0KSlcXG4tXFx0XFx0XFx0XFx0c2V0X2JpdChTT0NLX1NVUFBPUlRfWkMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjb25uZWN0ZWQtXFx1MDAzZXNrX3NvY2tldC1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLVxcdTAwM2V0cmFuc3BvcnQpKVxcbitcXHRcXHRcXHRzZXRfYml0KFNPQ0tfU1VQUE9SVF9aQyxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNmNvbm5lY3RlZC1cXHUwMDNlc2tfc29ja2V0LVxcdTAwM2VmbGFncyk7XFxuIFxcbiBcXHRcXHRyZWxlYXNlX3NvY2soY29ubmVjdGVkKTtcXG4gXFx0XFx0c29ja19wdXQoY29ubmVjdGVkKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZXJyID0gLUVBR0FJTjtcXG4gXFx0fVxcbiBcXG4gb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMjoyMC4xNTg1MzA0MjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTgzMDIwNDYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiVlNPQ0tFVFNfTE9PUEJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2c29ja19jb25uZWN0XCIsXG4gICAgXCJ2c29ja19hY2NlcHRcIixcbiAgICBcInZzb2NrX3BlbmRpbmdfd29ya1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHZzb2NrIGNvbm5lY3Rpb24gYW5kIGFjY2VwdCBsb2dpYywgcmVtb3ZpbmcgdGhlICdyZWplY3RlZCcgc3RhdGUgYW5kIGFsdGVyaW5nIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQgZHVyaW5nIGFjY2VwdCBhbmQgY29ubmVjdCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDY3NGM5NDEzN2MzNTZlOWVmZDQxZDAzYzVkMTZkZTBhOGZhODliMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDIxOjEyOjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaCBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbmluZGV4IDMwMDQ2YTNjMjBmNzMuLjMzNTdlZTYyZDEwYmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9hZl92c29jay5oXG4rKysgYi9pbmNsdWRlL25ldC9hZl92c29jay5oXG5AQCAtNTIsMTMgKzUyLDEwIEBAIHN0cnVjdCB2c29ja19zb2NrIHtcbiBcdCAqIFRoZSBsaXN0ZW5pbmcgc29ja2V0IGlzIHRoZSBoZWFkIGZvciBib3RoIGxpc3RzLiAgU29ja2V0cyBjcmVhdGVkXG4gXHQgKiBmb3IgY29ubmVjdGlvbiByZXF1ZXN0cyBhcmUgcGxhY2VkIGluIHRoZSBwZW5kaW5nIGxpc3QgdW50aWwgdGhleVxuIFx0ICogYXJlIGNvbm5lY3RlZCwgYXQgd2hpY2ggcG9pbnQgdGhleSBhcmUgcHV0IGluIHRoZSBhY2NlcHQgcXVldWUgbGlzdFxuLVx0ICogc28gdGhleSBjYW4gYmUgYWNjZXB0ZWQgaW4gYWNjZXB0KCkuICBJZiBhY2NlcHQoKSBjYW5ub3QgYWNjZXB0IHRoZVxuLVx0ICogY29ubmVjdGlvbiwgaXQgaXMgbWFya2VkIGFzIHJlamVjdGVkIHNvIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGtub3dzXG4tXHQgKiB0byBjbGVhbiB1cCB0aGUgc29ja2V0LlxuK1x0ICogc28gdGhleSBjYW4gYmUgYWNjZXB0ZWQgaW4gYWNjZXB0KCkuXG4gXHQgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ19saW5rcztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgYWNjZXB0X3F1ZXVlO1xuLVx0Ym9vbCByZWplY3RlZDtcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgY29ubmVjdF93b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBwZW5kaW5nX3dvcms7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIGNsb3NlX3dvcms7XG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5pbmRleCA2MjJkYmQwNDY3OTk0Li4xYTI4NzcxOWYyNGEzIDEwMDY0NFxuLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jXG4rKysgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbkBAIC0zOCwxMCArMzgsOSBAQFxuICAqIHBlbmRpbmcgc29ja2V0LiAgV2hlbiB0aGF0IHNvY2tldCByZWFjaGVzIHRoZSBjb25uZWN0ZWQgc3RhdGUsIGl0IGlzIHJlbW92ZWRcbiAgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQncyBwZW5kaW5nIGxpc3QgYW5kIGVucXVldWVkIGluIHRoZSBsaXN0ZW5lclxuICAqIHNvY2tldCdzIGFjY2VwdCBxdWV1ZS4gIENhbGxlcnMgb2YgYWNjZXB0KDIpIHdpbGwgYWNjZXB0IGNvbm5lY3RlZCBzb2NrZXRzXG4tICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0J3MgYWNjZXB0IHF1ZXVlLiAgSWYgdGhlIHNvY2tldCBjYW5ub3QgYmUgYWNjZXB0ZWRcbi0gKiBmb3Igc29tZSByZWFzb24gdGhlbiBpdCBpcyBtYXJrZWQgcmVqZWN0ZWQuICBPbmNlIHRoZSBjb25uZWN0aW9uIGlzXG4tICogYWNjZXB0ZWQsIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cFxuLSAqIGZhbGxzIHdpdGggdGhhdCB1c2VyIHByb2Nlc3MuXG4rICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0J3MgYWNjZXB0IHF1ZXVlLiBPbmNlIHRoZSBjb25uZWN0aW9uIGlzIGFjY2VwdGVkLFxuKyAqIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cCBmYWxsc1xuKyAqIHdpdGggdGhhdCB1c2VyIHByb2Nlc3MuXG4gICpcbiAgKiAtIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlc2UgcGVuZGluZyBzb2NrZXRzIHdpbGwgbmV2ZXIgcmVhY2ggdGhlIGNvbm5lY3RlZFxuICAqIHN0YXRlOyBpbiBmYWN0LCB3ZSBtYXkgbmV2ZXIgcmVjZWl2ZSBhbm90aGVyIHBhY2tldCBhZnRlciB0aGUgY29ubmVjdGlvblxuQEAgLTQ5LDkgKzQ4LDcgQEBcbiAgKiBmdXR1cmUsIGFmdGVyIHNvbWUgYW1vdW50IG9mIHRpbWUgcGFzc2VzIHdoZXJlIGEgY29ubmVjdGlvbiBzaG91bGQgaGF2ZSBiZWVuXG4gICogZXN0YWJsaXNoZWQuICBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB0aGUgc29ja2V0IGlzIG9mZiBhbGwgbGlzdHMgc28gaXRcbiAgKiBjYW5ub3QgYmUgcmV0cmlldmVkLCB0aGVuIGRyb3BzIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBzb2NrZXQgc28gaXQgaXMgY2xlYW5lZFxuLSAqIHVwIChzb2NrX3B1dCgpIC1cdTAwM2Ugc2tfZnJlZSgpIC1cdTAwM2Ugb3VyIHNrX2Rlc3RydWN0IGltcGxlbWVudGF0aW9uKS4gIE5vdGUgdGhpc1xuLSAqIGZ1bmN0aW9uIHdpbGwgYWxzbyBjbGVhbnVwIHJlamVjdGVkIHNvY2tldHMsIHRob3NlIHRoYXQgcmVhY2ggdGhlIGNvbm5lY3RlZFxuLSAqIHN0YXRlIGJ1dCBsZWF2ZSBpdCBiZWZvcmUgdGhleSBoYXZlIGJlZW4gYWNjZXB0ZWQuXG4rICogdXAgKHNvY2tfcHV0KCkgLVx1MDAzZSBza19mcmVlKCkgLVx1MDAzZSBvdXIgc2tfZGVzdHJ1Y3QgaW1wbGVtZW50YXRpb24pLlxuICAqXG4gICogLSBMb2NrIG9yZGVyaW5nIGZvciBwZW5kaW5nIG9yIGFjY2VwdCBxdWV1ZSBzb2NrZXRzIGlzOlxuICAqXG5AQCAtNzc0LDExICs3NzEsMTAgQEAgc3RhdGljIHZvaWQgdnNvY2tfcGVuZGluZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdGlmICh2c29ja19pc19wZW5kaW5nKHNrKSkge1xuIFx0XHR2c29ja19yZW1vdmVfcGVuZGluZyhsaXN0ZW5lciwgc2spO1xuLVx0fSBlbHNlIGlmICghdnNrLVx1MDAzZXJlamVjdGVkKSB7XG4tXHRcdC8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBhbmQgYWNjZXB0KCkgZGlkIG5vdCByZWplY3Rcbi1cdFx0ICogdXMsIHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkIGJ5IG91ciB1c2VyIHByb2Nlc3MuICBXZVxuLVx0XHQgKiBqdXN0IG5lZWQgdG8gZHJvcCBvdXIgcmVmZXJlbmNlcyB0byB0aGUgc29ja2V0cyBhbmQgYmUgb25cbi1cdFx0ICogb3VyIHdheS5cbitcdH0gZWxzZSB7XG4rXHRcdC8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBzbyB3ZSBtdXN0IGhhdmUgYmVlbiBhY2NlcHRlZFxuK1x0XHQgKiBieSBvdXIgdXNlciBwcm9jZXNzLiBXZSBqdXN0IG5lZWQgdG8gZHJvcCBvdXIgcmVmZXJlbmNlcyB0b1xuK1x0XHQgKiB0aGUgc29ja2V0cyBhbmQgYmUgb24gb3VyIHdheS5cbiBcdFx0ICovXG4gXHRcdGNsZWFudXAgPSBmYWxzZTtcbiBcdFx0Z290byBvdXQ7XG5AQCAtOTQyLDcgKzkzOCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0dnNrLVx1MDAzZWxpc3RlbmVyID0gTlVMTDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZzay1cdTAwM2VwZW5kaW5nX2xpbmtzKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZzay1cdTAwM2VhY2NlcHRfcXVldWUpO1xuLVx0dnNrLVx1MDAzZXJlamVjdGVkID0gZmFsc2U7XG4gXHR2c2stXHUwMDNlc2VudF9yZXF1ZXN0ID0gZmFsc2U7XG4gXHR2c2stXHUwMDNlaWdub3JlX2Nvbm5lY3RpbmdfcnN0ID0gZmFsc2U7XG4gXHRXUklURV9PTkNFKHZzay1cdTAwM2VwZWVyX3NodXRkb3duLCAwKTtcbkBAIC0xODQ3LDEyICsxODQyLDEwIEBAIHN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbiBcdFx0cHJlcGFyZV90b193YWl0KHNrX3NsZWVwKHNrKSwgXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcdH1cbiBcbi1cdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbi1cdFx0ZXJyID0gLXNrLVx1MDAzZXNrX2VycjtcbitcdGVyciA9IHNvY2tfZXJyb3Ioc2spO1xuK1x0aWYgKGVycikge1xuIFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IFRDUF9DTE9TRTtcbiBcdFx0c29jay1cdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xuLVx0fSBlbHNlIHtcbi1cdFx0ZXJyID0gMDtcbiBcdH1cbiBcbiBvdXRfd2FpdDpcbkBAIC0xODkzLDcgKzE4ODYsNyBAQCBzdGF0aWMgaW50IHZzb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxuIFx0dGltZW91dCA9IHNvY2tfcmN2dGltZW8obGlzdGVuZXIsIGFyZy1cdTAwM2VmbGFncyBcdTAwMjYgT19OT05CTE9DSyk7XG4gXG4gXHR3aGlsZSAoKGNvbm5lY3RlZCA9IHZzb2NrX2RlcXVldWVfYWNjZXB0KGxpc3RlbmVyKSkgPT0gTlVMTCBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICBsaXN0ZW5lci1cdTAwM2Vza19lcnIgPT0gMCBcdTAwMjZcdTAwMjYgdGltZW91dCAhPSAwKSB7XG4rXHRcdHRpbWVvdXQgIT0gMCkge1xuIFx0XHRwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAobGlzdGVuZXIpLCBcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xuIFx0XHRyZWxlYXNlX3NvY2sobGlzdGVuZXIpO1xuIFx0XHR0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTtcbkBAIC0xOTA2LDQxICsxODk5LDI2IEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChsaXN0ZW5lci1cdTAwM2Vza19lcnIpIHtcbi1cdFx0ZXJyID0gLWxpc3RlbmVyLVx1MDAzZXNrX2Vycjtcbi1cdH0gZWxzZSBpZiAoIWNvbm5lY3RlZCkge1xuLVx0XHRlcnIgPSAtRUFHQUlOO1xuLVx0fVxuLVxuIFx0aWYgKGNvbm5lY3RlZCkge1xuIFx0XHRza19hY2NlcHRxX3JlbW92ZWQobGlzdGVuZXIpO1xuIFxuIFx0XHRsb2NrX3NvY2tfbmVzdGVkKGNvbm5lY3RlZCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuIFx0XHR2Y29ubmVjdGVkID0gdnNvY2tfc2soY29ubmVjdGVkKTtcbiBcbi1cdFx0LyogSWYgdGhlIGxpc3RlbmVyIHNvY2tldCBoYXMgcmVjZWl2ZWQgYW4gZXJyb3IsIHRoZW4gd2Ugc2hvdWxkXG4tXHRcdCAqIHJlamVjdCB0aGlzIHNvY2tldCBhbmQgcmV0dXJuLiAgTm90ZSB0aGF0IHdlIHNpbXBseSBtYXJrIHRoZVxuLVx0XHQgKiBzb2NrZXQgcmVqZWN0ZWQsIGRyb3Agb3VyIHJlZmVyZW5jZSwgYW5kIGxldCB0aGUgY2xlYW51cFxuLVx0XHQgKiBmdW5jdGlvbiBoYW5kbGUgdGhlIGNsZWFudXA7IHRoZSBmYWN0IHRoYXQgd2UgZm91bmQgaXQgaW5cbi1cdFx0ICogdGhlIGxpc3RlbmVyJ3MgYWNjZXB0IHF1ZXVlIGd1YXJhbnRlZXMgdGhhdCB0aGUgY2xlYW51cFxuLVx0XHQgKiBmdW5jdGlvbiBoYXNuJ3QgcnVuIHlldC5cbi1cdFx0ICovXG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHR2Y29ubmVjdGVkLVx1MDAzZXJlamVjdGVkID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRuZXdzb2NrLVx1MDAzZXN0YXRlID0gU1NfQ09OTkVDVEVEO1xuLVx0XHRcdHNvY2tfZ3JhZnQoY29ubmVjdGVkLCBuZXdzb2NrKTtcbitcdFx0bmV3c29jay1cdTAwM2VzdGF0ZSA9IFNTX0NPTk5FQ1RFRDtcbitcdFx0c29ja19ncmFmdChjb25uZWN0ZWQsIG5ld3NvY2spO1xuIFxuLVx0XHRcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCxcbi1cdFx0XHRcdFx1MDAyNmNvbm5lY3RlZC1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuK1x0XHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsXG4rXHRcdFx0XHUwMDI2Y29ubmVjdGVkLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmbGFncyk7XG4gXG4tXHRcdFx0aWYgKHZzb2NrX21zZ3plcm9jb3B5X2FsbG93KHZjb25uZWN0ZWQtXHUwMDNldHJhbnNwb3J0KSlcbi1cdFx0XHRcdHNldF9iaXQoU09DS19TVVBQT1JUX1pDLFxuLVx0XHRcdFx0XHRcdTAwMjZjb25uZWN0ZWQtXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbi1cdFx0fVxuK1x0XHRpZiAodnNvY2tfbXNnemVyb2NvcHlfYWxsb3codmNvbm5lY3RlZC1cdTAwM2V0cmFuc3BvcnQpKVxuK1x0XHRcdHNldF9iaXQoU09DS19TVVBQT1JUX1pDLFxuK1x0XHRcdFx0XHUwMDI2Y29ubmVjdGVkLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmbGFncyk7XG4gXG4gXHRcdHJlbGVhc2Vfc29jayhjb25uZWN0ZWQpO1xuIFx0XHRzb2NrX3B1dChjb25uZWN0ZWQpO1xuK1x0fSBlbHNlIHtcbitcdFx0ZXJyID0gLUVBR0FJTjtcbiBcdH1cbiBcbiBvdXQ6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMjoyMC4xNTg1MzE4NTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjYxNzY1NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFZTb2NrIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgdnNvY2sgY29kZSwgc3BlY2lmaWNhbGx5IGBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNgIGFuZCBgaW5jbHVkZS9uZXQvYWZfdnNvY2suaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBpdCdzIHRvdWNoaW5nIGNvcmUgdnNvY2sgbG9naWMuIEl0J3MgcmVtb3ZpbmcgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgLCB3aGljaCBzb3VuZHMgcHJldHR5IGZ1bmRhbWVudGFsLCBhbmQgdGhlbiBpdCdzIGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiBgdnNvY2tfcGVuZGluZ193b3JrYCwgYHZzb2NrX2Nvbm5lY3RgLCBhbmQgYHZzb2NrX2FjY2VwdGAuIFNwZWNpZmljYWxseSwgaW4gYHZzb2NrX2FjY2VwdGAsIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGNoYW5naW5nIGhvdyBlcnJvcnMgb24gdGhlIGxpc3RlbmVyIHNvY2tldCBhcmUgaGFuZGxlZCB3aGVuIGRlcXVldWluZyBhbiBhY2NlcHRlZCBzb2NrZXQuIEFsc28sIGB2c29ja19jb25uZWN0YCBpcyBub3cgdXNpbmcgYHNvY2tfZXJyb3Ioc2spYCBpbnN0ZWFkIG9mIGBzay1cdTAwM2Vza19lcnJgLCBzbyB0aGF0J3MgYSBkaWZmZXJlbnQgYXBwcm9hY2ggdG8gZXJyb3IgY2hlY2tpbmcgZHVyaW5nIGNvbm5lY3Rpb24uXG5cblRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGNsb3NlciBsb29rIGJlY2F1c2UgdGhlc2UgYXJlIGNyaXRpY2FsIGFyZWFzIGFuZCBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbnMgYWx3YXlzIHJlcXVpcmUgdGhvcm91Z2ggc2NydXRpbnkuIFRoaXMgY2hhbmdlIGRlZmluaXRlbHkgaGFzIHBvdGVudGlhbCBmdW5jdGlvbmFsIGltcGFjdHMsIGFuZCBJJ20gdGhpbmtpbmcgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gbWFrZSBzdXJlIGl0J3Mgcm9idXN0LlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBleGFjdCBpbXBsaWNhdGlvbnMuIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnM6IGB2c29ja19wZW5kaW5nX3dvcmtgLCBgdnNvY2tfY29ubmVjdGAsIGFuZCBgdnNvY2tfYWNjZXB0YC4gSSdsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBgbmV0L3Ztd192c29jay9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzZXR0aW5ncyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGlzLiBJJ2xsIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBLY29uZmlnIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMjoyNS40MjAzMDI1MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0MzMwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZTT0NLRVRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC92bXdfdnNvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL0tjb25maWctNS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6Njpjb25maWcgVlNPQ0tFVFNcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXQgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMTgtXFxubmV0L3Ztd192c29jay9LY29uZmlnOjE5OmNvbmZpZyBWU09DS0VUU19ESUFHXFxubmV0L3Ztd192c29jay9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjgtXFxubmV0L3Ztd192c29jay9LY29uZmlnOjI5OmNvbmZpZyBWU09DS0VUU19MT09QQkFDS1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zMC1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXRzIGxvb3BiYWNrIHRyYW5zcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTI6MjUuNDcwNzQyMzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTg5MjY0NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93biBpbW1lZGlhdGUgcHJvY2Vzc2luZzpcblxuKipWU09DS0VUUyBDb25maWd1cmF0aW9uIENoZWNrKipcblxuQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHRvIGBWU09DS0VUU2AuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGhlICpvbmx5KiB0aGluZyB3ZSdyZSBkZWFsaW5nIHdpdGguIE5vIHBvaW50IGluIG1ha2luZyBhc3N1bXB0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBhbmQgdmVyaWZ5IHRoYXQgdGhlcmUgYXJlbid0ICphbnkqIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgaW4gcGxheSBvciBwb3RlbnRpYWxseSBvdmVycmlkZSBgVlNPQ0tFVFNgLCBvciBpbnRlcmFjdCB3aXRoIGl0IGluIGEgd2F5IHRoYXQgSSBuZWVkIHRvIGFjY291bnQgZm9yLiBObyBwb2ludCBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUgYmFzZWQgb24gYSBzaW5nbGUgdmFyaWFibGUuIFNvLCB0aGUgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIGEgc3lzdGVtcy1sZXZlbCBjaGVjay4gTGV0J3MgbWFrZSBzdXJlIHRoaXMgaXMgdGhlIG9ubHkgdGhpbmcgd2UgbmVlZCB0byBjb25zaWRlciBpbiB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUvc3lzdGVtLiBBIHF1aWNrIGxvb2sgYXJvdW5kIHRoZSBjb2RlIGJhc2UgdG8gZmluZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1ODcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMjoyOC40NjAwMTA3NjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4ODMyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay9LY29uZmlnPTE5PWNvbmZpZyBWU09DS0VUU19ESUFHXFxubmV0L3Ztd192c29jay9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxubmV0L3Ztd192c29jay9LY29uZmlnOjIxOlxcdGRlcGVuZHMgb24gVlNPQ0tFVFNcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjItXFx0ZGVmYXVsdCB5XFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc9Mjk9Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXFxubmV0L3Ztd192c29jay9LY29uZmlnLTMwLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldHMgbG9vcGJhY2sgdHJhbnNwb3J0XFxcIlxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzozMTpcXHRkZXBlbmRzIG9uIFZTT0NLRVRTXFxubmV0L3Ztd192c29jay9LY29uZmlnLTMyLVxcdGRlZmF1bHQgeVxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnPTQxPWNvbmZpZyBWTVdBUkVfVk1DSV9WU09DS0VUU1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiVk13YXJlIFZNQ0kgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHNcXFwiXFxubmV0L3Ztd192c29jay9LY29uZmlnOjQzOlxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgVk1XQVJFX1ZNQ0lcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNDQtXFx0aGVscFxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnPTUzPWNvbmZpZyBWSVJUSU9fVlNPQ0tFVFNcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTQtXFx0dHJpc3RhdGUgXFxcInZpcnRpbyB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0c1xcXCJcXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NTU6XFx0ZGVwZW5kcyBvbiBWU09DS0VUUyBcXHUwMDI2XFx1MDAyNiBWSVJUSU9cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTYtXFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZz03Mz1jb25maWcgSFlQRVJWX1ZTT0NLRVRTXFxubmV0L3Ztd192c29jay9LY29uZmlnLTc0LVxcdHRyaXN0YXRlIFxcXCJIeXBlci1WIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXFxcIlxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzo3NTpcXHRkZXBlbmRzIG9uIFZTT0NLRVRTIFxcdTAwMjZcXHUwMDI2IEhZUEVSVl9WTUJVU1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03Ni1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEyOjI4LjUwNjkwMTU4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzM0NjY2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbnNpZGVyYXRpb25zOlxuXG4qKlZTT0NLIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IFZTT0NLIGNvbmZpZ3VyYXRpb25zLiBPYnZpb3VzbHksIHRoZSBjb3JlIGlzIHRoZSBgVlNPQ0tFVFNgIG9wdGlvbi4gVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIGZvdW5kYXRpb24uIEkgYWxzbyBrbm93IHRoYXQgYFZTT0NLRVRTX0xPT1BCQUNLYCBpcyByZWFsbHkgdmFsdWFibGUgZm9yIGxvY2FsIHRlc3RpbmcgYW5kIGRlYnVnZ2luZy4gSXQncyBhIGxpZmVzYXZlciwgYmVpbmcgYWJsZSB0byBzaW11bGF0ZSBhIGNvbm5lY3Rpb24gd2l0aGluIHRoZSBzYW1lIGhvc3QuXG5cbk5vdywgSSBuZWVkIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29kZSwgc3BlY2lmaWNhbGx5IGBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNgLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgIHRoZXJlLiBVbmRlcnN0YW5kaW5nIHRob3NlIHR3byBmdW5jdGlvbnMgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgY29ubmVjdGlvbiBsaWZlY3ljbGUgZnVuY3Rpb25zIGFuZCB0aGUgaGFuZHNoYWtlIGlzIHNldCB1cC4gVGhleSdyZSBnb2luZyB0byB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZSBjb3JlIG1lY2hhbmljcyBJJ20gZGVhbGluZyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzI3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTI6MzEuODgwMzcwOTA2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjYzNTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZzb2NrX2FjY2VwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay9hZl92c29jay5jPTE2NzI9c3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE4NTctXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE4NTg6c3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTg1OS1cXHRcXHRcXHRzdHJ1Y3QgcHJvdG9fYWNjZXB0X2FyZyAqYXJnKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI2MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdnNvY2tfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjI4LVxcdC5zb2NrZXRwYWlyID0gc29ja19ub19zb2NrZXRwYWlyLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjI5OlxcdC5hY2NlcHQgPSB2c29ja19hY2NlcHQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MzAtXFx0LmdldG5hbWUgPSB2c29ja19nZXRuYW1lLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI2NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdnNvY2tfc2VxcGFja2V0X29wcyA9IHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjUwLVxcdC5zb2NrZXRwYWlyID0gc29ja19ub19zb2NrZXRwYWlyLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjUxOlxcdC5hY2NlcHQgPSB2c29ja19hY2NlcHQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NTItXFx0LmdldG5hbWUgPSB2c29ja19nZXRuYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMjozMS45MjU2NDExMzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjg0MDMwODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlY2VudCBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gcmV2aWV3aW5nIHRoaXMgcGF0Y2ggYW5kIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIG15IHRoaW5raW5nLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGNoYW5nZXMgdG8gdGhlIGB2c29ja2AgbW9kdWxlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGB2c29ja19jb25uZWN0YCBhbmQgYHZzb2NrX2FjY2VwdGAgZnVuY3Rpb25zLiBJdCBhcHBlYXJzIHRvIHJlbW92ZSB0aGUgYHJlamVjdGVkYCBmaWVsZCBmcm9tIGB2c29ja19zb2NrYCBhbmQgYWxzbyBzaW1wbGlmaWVzIHRoZSBgdnNvY2tfcGVuZGluZ193b3JrYCBsb2dpYy4gVGhlIGZhY3QgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSB3aXRoaW4gdGhlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSB2c29jayBjb2RlLCBtYWtlcyB0aGlzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5HaXZlbiB0aGUgc2NvcGUgYW5kIGltcGFjdCB3aXRoaW4gdGhlIGB2c29ja2AgbW9kdWxlLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEknbGwgZmxhZyBpdCB3aXRoIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkZvciBmb2N1c2VkIGZ1enppbmcgZWZmb3J0cywgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uIGFyZSBkZWZpbml0ZWx5IGB2c29ja19jb25uZWN0YCwgYHZzb2NrX2FjY2VwdGAsIGFuZCBgdnNvY2tfcGVuZGluZ193b3JrYC4gSSdsbCBhbHNvIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQsIHNwZWNpZmljYWxseSBgVlNPQ0tFVFNgIGFuZCBgVlNPQ0tFVFNfTE9PUEJBQ0tgLlxuXG5Ob3csIGJlZm9yZSBJIGNvbW1pdCB0byBhIGZ1bGwtYmxvd24gZnV6emluZyBjYW1wYWlnbiwgSSB3YW50IHRvIHF1aWNrbHkgZG91YmxlIGNoZWNrIHRoZSBuYXR1cmUgb2YgYHZzb2NrX3BlbmRpbmdfd29ya2AuIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBpdCdzIGRlY2xhcmVkIGFzIHN0YXRpYywgYW5kIGlmIGl0J3MgaW5saW5lZC4gVGhpcyB3aWxsIGFmZmVjdCBob3cgYWNjZXNzaWJsZSBpdCBpcyBhbmQgd2hhdCBraW5kIG9mIGluc3RydW1lbnRhdGlvbiBJIG1pZ2h0IG5lZWQgdG8gYXBwbHkgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDQwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEyOjM2LjIwOTY3NDYyN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3NjIzNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnNvY2tfcGVuZGluZ193b3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC92bXdfdnNvY2svYWZfdnNvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9NzQ3PXN0YXRpYyBpbnQgdnNvY2tfc2VuZF9zaHV0ZG93bihzdHJ1Y3Qgc29jayAqc2ssIGludCBtb2RlKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTc1Ni1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6NzU3OnN0YXRpYyB2b2lkIHZzb2NrX3BlbmRpbmdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTc1OC17XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9OTA0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk0NC1cXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2dnNrLVxcdTAwM2Vjb25uZWN0X3dvcmssIHZzb2NrX2Nvbm5lY3RfdGltZW91dCk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjk0NTpcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2dnNrLVxcdTAwM2VwZW5kaW5nX3dvcmssIHZzb2NrX3BlbmRpbmdfd29yayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk0Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTI6MzYuMjYxNDQwODAyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDYyMzU1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKkFuYWx5emluZyB2c29ja19wZW5kaW5nX3dvcmsgYW5kIENvZGUgRmxvdyoqXG5cblJpZ2h0LCBzbyBgdnNvY2tfcGVuZGluZ193b3JrYCBpcyBhIHdvcmtxdWV1ZSBjYWxsYmFjay4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBhIGZldyB0aGluZ3MuIEZpcnN0LCBpdCdzIG5vdCBnb2luZyB0byBiZSBpbmxpbmVkIOKAkyB3b3JrcXVldWUgY2FsbGJhY2tzIGFyZSBkZXNpZ25lZCB0byBiZSBydW4gYXN5bmNocm9ub3VzbHksIG9mZiB0aGUgY3JpdGljYWwgcGF0aC4gU2Vjb25kLCB0aGF0IGFsc28gbWVhbnMgd2UncmUgbGlrZWx5IGdyYWJiaW5nIGl0cyBhZGRyZXNzIHNvbWV3aGVyZS4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZSBmb3IgbGF0ZXIsIHBvdGVudGlhbGx5IGZvciBkZWJ1Z2dpbmcgb3IgdHJhY2luZy4gSXQgZ2l2ZXMgbWUgYSBjcnVjaWFsIGNsdWUgYWJvdXQgaG93IHRoaXMgY29kZSB3aWxsIGJlIG9yZ2FuaXplZCBhbmQgY2FsbGVkIGJ5IHRoZSB3b3JrcXVldWUgbWFjaGluZXJ5LlxuXG5NeSBuZXh0IHN0ZXAsIGxvb2tpbmcgYXQgdGhpcyBjb250ZXh0LCBpcyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc4NSwiT3V0cHV0VG9rZW5zIjoxMDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMjozOS45MDc2Nzg5MDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTA1Mjk1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnNvY2tfY29ubmVjdFwiLFxuICAgIFwidnNvY2tfYWNjZXB0XCIsXG4gICAgXCJ2c29ja19wZW5kaW5nX3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2c29jayBjb25uZWN0aW9uIGFuZCBhY2NlcHQgbG9naWMsIHJlbW92aW5nIHRoZSAncmVqZWN0ZWQnIHN0YXRlIGFuZCBhbHRlcmluZyBob3cgZXJyb3JzIGFyZSBoYW5kbGVkIGR1cmluZyBhY2NlcHQgYW5kIGNvbm5lY3Qgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnNvY2tfY29ubmVjdFwiLFxuICAgIFwidnNvY2tfYWNjZXB0XCIsXG4gICAgXCJ2c29ja19wZW5kaW5nX3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2c29jayBjb25uZWN0aW9uIGFuZCBhY2NlcHQgbG9naWMsIHJlbW92aW5nIHRoZSAncmVqZWN0ZWQnIHN0YXRlIGFuZCBhbHRlcmluZyBob3cgZXJyb3JzIGFyZSBoYW5kbGVkIGR1cmluZyBhY2NlcHQgYW5kIGNvbm5lY3Qgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEyOjM5Ljk4ODczOTcxNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MTI0ODk5NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMjozOS45ODkyNjE3MDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQ3MTE5NjQ1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgIGFuZCBzaW1wbGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgLiBJdCBtb2RpZmllcyB0aGUgc29ja2V0IHN0YXRlIG1hY2hpbmUgYW5kIGhvdyBzb2NrZXQgZXJyb3JzIChgc2tfZXJyYCkgYXJlIHByb2Nlc3NlZC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBjaGFuZ2VzIHRvIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBsZW5ndGhzIG9yIGJvdW5kcyBjaGVja3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCBlcnJvciBjb2RlcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0Njc0Yzk0MTM3YzM1NmU5ZWZkNDFkMDNjNWQxNmRlMGE4ZmE4OWIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjE6MTI6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl92c29jay5oIGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuaW5kZXggMzAwNDZhM2MyMGY3My4uMzM1N2VlNjJkMTBiZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbisrKyBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbkBAIC01MiwxMyArNTIsMTAgQEAgc3RydWN0IHZzb2NrX3NvY2sge1xuIFx0ICogVGhlIGxpc3RlbmluZyBzb2NrZXQgaXMgdGhlIGhlYWQgZm9yIGJvdGggbGlzdHMuICBTb2NrZXRzIGNyZWF0ZWRcbiBcdCAqIGZvciBjb25uZWN0aW9uIHJlcXVlc3RzIGFyZSBwbGFjZWQgaW4gdGhlIHBlbmRpbmcgbGlzdCB1bnRpbCB0aGV5XG4gXHQgKiBhcmUgY29ubmVjdGVkLCBhdCB3aGljaCBwb2ludCB0aGV5IGFyZSBwdXQgaW4gdGhlIGFjY2VwdCBxdWV1ZSBsaXN0XG4tXHQgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS4gIElmIGFjY2VwdCgpIGNhbm5vdCBhY2NlcHQgdGhlXG4tXHQgKiBjb25uZWN0aW9uLCBpdCBpcyBtYXJrZWQgYXMgcmVqZWN0ZWQgc28gdGhlIGNsZWFudXAgZnVuY3Rpb24ga25vd3Ncbi1cdCAqIHRvIGNsZWFuIHVwIHRoZSBzb2NrZXQuXG4rXHQgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS5cbiBcdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpbmtzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBhY2NlcHRfcXVldWU7XG4tXHRib29sIHJlamVjdGVkO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBjb25uZWN0X3dvcms7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHBlbmRpbmdfd29yaztcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgY2xvc2Vfd29yaztcbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbmluZGV4IDYyMmRiZDA0Njc5OTQuLjFhMjg3NzE5ZjI0YTMgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbisrKyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuQEAgLTM4LDEwICszOCw5IEBAXG4gICogcGVuZGluZyBzb2NrZXQuICBXaGVuIHRoYXQgc29ja2V0IHJlYWNoZXMgdGhlIGNvbm5lY3RlZCBzdGF0ZSwgaXQgaXMgcmVtb3ZlZFxuICAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCdzIHBlbmRpbmcgbGlzdCBhbmQgZW5xdWV1ZWQgaW4gdGhlIGxpc3RlbmVyXG4gICogc29ja2V0J3MgYWNjZXB0IHF1ZXVlLiAgQ2FsbGVycyBvZiBhY2NlcHQoMikgd2lsbCBhY2NlcHQgY29ubmVjdGVkIHNvY2tldHNcbi0gKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQncyBhY2NlcHQgcXVldWUuICBJZiB0aGUgc29ja2V0IGNhbm5vdCBiZSBhY2NlcHRlZFxuLSAqIGZvciBzb21lIHJlYXNvbiB0aGVuIGl0IGlzIG1hcmtlZCByZWplY3RlZC4gIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXNcbi0gKiBhY2NlcHRlZCwgaXQgaXMgb3duZWQgYnkgdGhlIHVzZXIgcHJvY2VzcyBhbmQgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBjbGVhbnVwXG4tICogZmFsbHMgd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy5cbisgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQncyBhY2NlcHQgcXVldWUuIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgYWNjZXB0ZWQsXG4rICogaXQgaXMgb3duZWQgYnkgdGhlIHVzZXIgcHJvY2VzcyBhbmQgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBjbGVhbnVwIGZhbGxzXG4rICogd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy5cbiAgKlxuICAqIC0gSXQgaXMgcG9zc2libGUgdGhhdCB0aGVzZSBwZW5kaW5nIHNvY2tldHMgd2lsbCBuZXZlciByZWFjaCB0aGUgY29ubmVjdGVkXG4gICogc3RhdGU7IGluIGZhY3QsIHdlIG1heSBuZXZlciByZWNlaXZlIGFub3RoZXIgcGFja2V0IGFmdGVyIHRoZSBjb25uZWN0aW9uXG5AQCAtNDksOSArNDgsNyBAQFxuICAqIGZ1dHVyZSwgYWZ0ZXIgc29tZSBhbW91bnQgb2YgdGltZSBwYXNzZXMgd2hlcmUgYSBjb25uZWN0aW9uIHNob3VsZCBoYXZlIGJlZW5cbiAgKiBlc3RhYmxpc2hlZC4gIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBzb2NrZXQgaXMgb2ZmIGFsbCBsaXN0cyBzbyBpdFxuICAqIGNhbm5vdCBiZSByZXRyaWV2ZWQsIHRoZW4gZHJvcHMgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIHNvY2tldCBzbyBpdCBpcyBjbGVhbmVkXG4tICogdXAgKHNvY2tfcHV0KCkgLVx1MDAzZSBza19mcmVlKCkgLVx1MDAzZSBvdXIgc2tfZGVzdHJ1Y3QgaW1wbGVtZW50YXRpb24pLiAgTm90ZSB0aGlzXG4tICogZnVuY3Rpb24gd2lsbCBhbHNvIGNsZWFudXAgcmVqZWN0ZWQgc29ja2V0cywgdGhvc2UgdGhhdCByZWFjaCB0aGUgY29ubmVjdGVkXG4tICogc3RhdGUgYnV0IGxlYXZlIGl0IGJlZm9yZSB0aGV5IGhhdmUgYmVlbiBhY2NlcHRlZC5cbisgKiB1cCAoc29ja19wdXQoKSAtXHUwMDNlIHNrX2ZyZWUoKSAtXHUwMDNlIG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuXG4gICpcbiAgKiAtIExvY2sgb3JkZXJpbmcgZm9yIHBlbmRpbmcgb3IgYWNjZXB0IHF1ZXVlIHNvY2tldHMgaXM6XG4gICpcbkBAIC03NzQsMTEgKzc3MSwxMCBAQCBzdGF0aWMgdm9pZCB2c29ja19wZW5kaW5nX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIFx0aWYgKHZzb2NrX2lzX3BlbmRpbmcoc2spKSB7XG4gXHRcdHZzb2NrX3JlbW92ZV9wZW5kaW5nKGxpc3RlbmVyLCBzayk7XG4tXHR9IGVsc2UgaWYgKCF2c2stXHUwMDNlcmVqZWN0ZWQpIHtcbi1cdFx0LyogV2UgYXJlIG5vdCBvbiB0aGUgcGVuZGluZyBsaXN0IGFuZCBhY2NlcHQoKSBkaWQgbm90IHJlamVjdFxuLVx0XHQgKiB1cywgc28gd2UgbXVzdCBoYXZlIGJlZW4gYWNjZXB0ZWQgYnkgb3VyIHVzZXIgcHJvY2Vzcy4gIFdlXG4tXHRcdCAqIGp1c3QgbmVlZCB0byBkcm9wIG91ciByZWZlcmVuY2VzIHRvIHRoZSBzb2NrZXRzIGFuZCBiZSBvblxuLVx0XHQgKiBvdXIgd2F5LlxuK1x0fSBlbHNlIHtcbitcdFx0LyogV2UgYXJlIG5vdCBvbiB0aGUgcGVuZGluZyBsaXN0IHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkXG4rXHRcdCAqIGJ5IG91ciB1c2VyIHByb2Nlc3MuIFdlIGp1c3QgbmVlZCB0byBkcm9wIG91ciByZWZlcmVuY2VzIHRvXG4rXHRcdCAqIHRoZSBzb2NrZXRzIGFuZCBiZSBvbiBvdXIgd2F5LlxuIFx0XHQgKi9cbiBcdFx0Y2xlYW51cCA9IGZhbHNlO1xuIFx0XHRnb3RvIG91dDtcbkBAIC05NDIsNyArOTM4LDYgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpfX3Zzb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHR2c2stXHUwMDNlbGlzdGVuZXIgPSBOVUxMO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dnNrLVx1MDAzZXBlbmRpbmdfbGlua3MpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dnNrLVx1MDAzZWFjY2VwdF9xdWV1ZSk7XG4tXHR2c2stXHUwMDNlcmVqZWN0ZWQgPSBmYWxzZTtcbiBcdHZzay1cdTAwM2VzZW50X3JlcXVlc3QgPSBmYWxzZTtcbiBcdHZzay1cdTAwM2VpZ25vcmVfY29ubmVjdGluZ19yc3QgPSBmYWxzZTtcbiBcdFdSSVRFX09OQ0UodnNrLVx1MDAzZXBlZXJfc2h1dGRvd24sIDApO1xuQEAgLTE4NDcsMTIgKzE4NDIsMTAgQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuIFx0XHRwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCBcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xuIFx0fVxuIFxuLVx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuLVx0XHRlcnIgPSAtc2stXHUwMDNlc2tfZXJyO1xuK1x0ZXJyID0gc29ja19lcnJvcihzayk7XG4rXHRpZiAoZXJyKSB7XG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gVENQX0NMT1NFO1xuIFx0XHRzb2NrLVx1MDAzZXN0YXRlID0gU1NfVU5DT05ORUNURUQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRlcnIgPSAwO1xuIFx0fVxuIFxuIG91dF93YWl0OlxuQEAgLTE4OTMsNyArMTg4Niw3IEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHR0aW1lb3V0ID0gc29ja19yY3Z0aW1lbyhsaXN0ZW5lciwgYXJnLVx1MDAzZWZsYWdzIFx1MDAyNiBPX05PTkJMT0NLKTtcbiBcbiBcdHdoaWxlICgoY29ubmVjdGVkID0gdnNvY2tfZGVxdWV1ZV9hY2NlcHQobGlzdGVuZXIpKSA9PSBOVUxMIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIGxpc3RlbmVyLVx1MDAzZXNrX2VyciA9PSAwIFx1MDAyNlx1MDAyNiB0aW1lb3V0ICE9IDApIHtcbitcdFx0dGltZW91dCAhPSAwKSB7XG4gXHRcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChsaXN0ZW5lciksIFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gXHRcdHJlbGVhc2Vfc29jayhsaXN0ZW5lcik7XG4gXHRcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xuQEAgLTE5MDYsNDEgKzE4OTksMjYgQEAgc3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKGxpc3RlbmVyLVx1MDAzZXNrX2Vycikge1xuLVx0XHRlcnIgPSAtbGlzdGVuZXItXHUwMDNlc2tfZXJyO1xuLVx0fSBlbHNlIGlmICghY29ubmVjdGVkKSB7XG4tXHRcdGVyciA9IC1FQUdBSU47XG4tXHR9XG4tXG4gXHRpZiAoY29ubmVjdGVkKSB7XG4gXHRcdHNrX2FjY2VwdHFfcmVtb3ZlZChsaXN0ZW5lcik7XG4gXG4gXHRcdGxvY2tfc29ja19uZXN0ZWQoY29ubmVjdGVkLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gXHRcdHZjb25uZWN0ZWQgPSB2c29ja19zayhjb25uZWN0ZWQpO1xuIFxuLVx0XHQvKiBJZiB0aGUgbGlzdGVuZXIgc29ja2V0IGhhcyByZWNlaXZlZCBhbiBlcnJvciwgdGhlbiB3ZSBzaG91bGRcbi1cdFx0ICogcmVqZWN0IHRoaXMgc29ja2V0IGFuZCByZXR1cm4uICBOb3RlIHRoYXQgd2Ugc2ltcGx5IG1hcmsgdGhlXG4tXHRcdCAqIHNvY2tldCByZWplY3RlZCwgZHJvcCBvdXIgcmVmZXJlbmNlLCBhbmQgbGV0IHRoZSBjbGVhbnVwXG4tXHRcdCAqIGZ1bmN0aW9uIGhhbmRsZSB0aGUgY2xlYW51cDsgdGhlIGZhY3QgdGhhdCB3ZSBmb3VuZCBpdCBpblxuLVx0XHQgKiB0aGUgbGlzdGVuZXIncyBhY2NlcHQgcXVldWUgZ3VhcmFudGVlcyB0aGF0IHRoZSBjbGVhbnVwXG4tXHRcdCAqIGZ1bmN0aW9uIGhhc24ndCBydW4geWV0LlxuLVx0XHQgKi9cbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdHZjb25uZWN0ZWQtXHUwMDNlcmVqZWN0ZWQgPSB0cnVlO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdG5ld3NvY2stXHUwMDNlc3RhdGUgPSBTU19DT05ORUNURUQ7XG4tXHRcdFx0c29ja19ncmFmdChjb25uZWN0ZWQsIG5ld3NvY2spO1xuK1x0XHRuZXdzb2NrLVx1MDAzZXN0YXRlID0gU1NfQ09OTkVDVEVEO1xuK1x0XHRzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7XG4gXG4tXHRcdFx0c2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULFxuLVx0XHRcdFx0XHUwMDI2Y29ubmVjdGVkLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmbGFncyk7XG4rXHRcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCxcbitcdFx0XHRcdTAwMjZjb25uZWN0ZWQtXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbiBcbi1cdFx0XHRpZiAodnNvY2tfbXNnemVyb2NvcHlfYWxsb3codmNvbm5lY3RlZC1cdTAwM2V0cmFuc3BvcnQpKVxuLVx0XHRcdFx0c2V0X2JpdChTT0NLX1NVUFBPUlRfWkMsXG4tXHRcdFx0XHRcdFx1MDAyNmNvbm5lY3RlZC1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuLVx0XHR9XG4rXHRcdGlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLVx1MDAzZXRyYW5zcG9ydCkpXG4rXHRcdFx0c2V0X2JpdChTT0NLX1NVUFBPUlRfWkMsXG4rXHRcdFx0XHRcdTAwMjZjb25uZWN0ZWQtXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbiBcbiBcdFx0cmVsZWFzZV9zb2NrKGNvbm5lY3RlZCk7XG4gXHRcdHNvY2tfcHV0KGNvbm5lY3RlZCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRlcnIgPSAtRUFHQUlOO1xuIFx0fVxuIFxuIG91dDpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEyOjM5Ljk4OTI2NDE0NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDcxMTk0MzU5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgdnNvY2sgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdG91Y2hpbmcgYGFmX3Zzb2NrLmNgIGFuZCBgYWZfdnNvY2suaGAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzLCBzbyBJJ20gbG9va2luZyBmb3Igd2hlcmUgbmV3IG1lbW9yeSBtaWdodCBiZSBhbGxvY2F0ZWQgb3IgZGF0YSBjb3VsZCBiZSBtaXNoYW5kbGVkLlxuXG5GaXJzdCwgdGhlIGByZWplY3RlZGAgZmllbGQgaXMgYmVpbmcgKnJlbW92ZWQqIGZyb20gYHN0cnVjdCB2c29ja19zb2NrYC4gVGhhdCBhbG9uZSBkb2Vzbid0IHNjcmVhbSBcInVuaW5pdGlhbGl6ZWQgbWVtb3J5LFwiIGJ1dCBpdCBkb2VzIGZvcmNlIG1lIHRvIGxvb2sgYXQgaG93IHRoYXQgZmllbGQgd2FzIHVzZWQuIElmIGl0IHdhcyBndWFyZGluZyBhZ2FpbnN0IGFjY2Vzc2luZyBtZW1vcnksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlcGxhY2VtZW50IGxvZ2ljIGlzIHNvdW5kLlxuXG5UaGUgcGF0Y2ggY2hhbmdlcyBgdnNvY2tfcGVuZGluZ193b3JrYCwgYHZzb2NrX2Nvbm5lY3RgLCBhbmQgYHZzb2NrX2FjY2VwdGAuIExldCdzIHN0ZXAgdGhyb3VnaCBgdnNvY2tfYWNjZXB0YC4gVGhlIGNvZGUgdXNlZCB0byBjaGVjayBgbGlzdGVuZXItXHUwMDNlc2tfZXJyYCBpbiB0aGUgYHdoaWxlYCBsb29wLCBhbmQgbm93IGl0IGRvZXNuJ3QuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBkaWQgdGhpcyBpbnRyb2R1Y2UgYSByYWNlIGNvbmRpdGlvbiBvciBhIHBvdGVudGlhbCBmb3IgcmV0dXJuaW5nIGFuIFwiaW52YWxpZFwiIHNvY2tldD8gVGhlIG9sZCBsb2dpYyB3YXMgbW9yZSBjb25zZXJ2YXRpdmUuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBuZXcgcGF0aCBzdGlsbCBoYW5kbGVzIGVycm9ycyBncmFjZWZ1bGx5LlxuXG5UaGUgb2xkIGxvZ2ljICphbHNvKiBoYWQgYSBgbGlzdGVuZXItXHUwMDNlc2tfZXJyYCBjaGVjayAqYWZ0ZXIqIHRoZSBsb29wLCBhbmQgaWYgaXQgd2FzIHNldCAqYW5kKiBhIGBjb25uZWN0ZWRgIHNvY2tldCBoYWQgYmVlbiBkZXF1ZXVlZCwgaXQgd291bGQgbWFyayB0aGUgYGNvbm5lY3RlZGAgc29ja2V0IGFzIHJlamVjdGVkLiAgTm93IHRoZSBwYXRjaCByZW1vdmVzIHRoYXQgY2hlY2sgYW5kIHByb2Nlc3NlcyBhbiBlcnJvciBpbiBgdnNvY2tfYWNjZXB0YC4gUHJldmlvdXNseSBpZiB0aGVyZSB3YXMgYW4gZXJyb3Igb24gdGhlIGxpc3RlbmVyIHNvY2tldCwgaXQgd291bGQgcmVqZWN0IHRoZSBhY2NlcHQgc29ja2V0LiBJdCBsb29rcyBsaWtlIGl0IHN0aWxsIHdha2VzIHVwIHRoZSBzbGVlcCBxdWV1ZSwgYW5kIGp1c3QgbG9vcHMgYWdhaW4gaWYgbm90aGluZyBpcyBkZXF1ZXVlZC4gVGhpcyBsb29rcyBsaWtlIGEgY2hhbmdlIHRvIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQsIGJ1dCBkb2Vzbid0ICpkaXJlY3RseSogaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5gdnNvY2tfY29ubmVjdGAgbm93IHVzZXMgYHNvY2tfZXJyb3Ioc2spYCBpbnN0ZWFkIG9mIGRpcmVjdGx5IGNoZWNraW5nIGBzay1cdTAwM2Vza19lcnJgLiAgVGhpcyBpcyBhIGdvb2QsIHN0YW5kYXJkIHByYWN0aWNlLiAgYHNvY2tfZXJyb3JgIGdldHMgYW5kIGNsZWFycyB0aGUgZXJyb3IgY29kZS4gVGhpcyBpcyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdCB0byBzZWUgaW4gZXJyb3IgaGFuZGxpbmcuIFRoYXQncyBhIHJlZmFjdG9yaW5nLCBub3QgYSByaXNrLlxuXG5TbywgaXMgdGhlcmUgYW4gKmFjdHVhbCogcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRoYXQgdGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBubyBuZXcgbGVuZ3Rocy4gSXQncyBhbGwgYWJvdXQgc3RhdGUgbWFjaGluZSBsb2dpYyBhbmQgZXJyb3IgaGFuZGxpbmcuIEknbSBub3Qgc2VlaW5nIGFueSBuZXcgcGxhY2VzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGNvdWxkIGJlIGludHJvZHVjZWQuXG5cbk9rYXksIGxldCdzIGRvdWJsZS1jaGVjay4gVGhlIHJlbW92YWwgb2YgYHZjb25uZWN0ZWQtXHUwMDNlcmVqZWN0ZWRgIGlzIGEgY3JpdGljYWwgY2hhbmdlLiBBbmQgdGhhdCdzIG5vIGxvbmdlciBjaGVja2VkIGJ5IGB2c29ja19wZW5kaW5nX3dvcmtgLiBJZiB0aGVyZSB3YXMgYW55IGFjY2VzcyB0byB0aGlzIHZhcmlhYmxlLCBpdCBjYW4gY2F1c2UgdXNlLWFmdGVyLWZyZWUgb3IgbGVhaywgYnV0IEtBU0FOIHdpbGwgZGV0ZWN0IHRoaXMuIEtNU0FOIGlzIGZvciAqdW5pbml0aWFsaXplZCogbWVtb3J5LCB3aGljaCBJIGRvbid0IHNlZSBoZXJlLlxuXG5UaGlzIHBhdGNoIGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZy4gSXQgcmVtb3ZlcyBhIGZpZWxkLCBzaW1wbGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCB0aGUgdmFyaWFibGVzIGJlaW5nIHVzZWQgYXJlIGBlcnJgLCBgY29ubmVjdGVkYCwgYW5kIGB0aW1lb3V0YCwgd2hpY2ggYXJlIGluaXRpYWxpemVkLiBJIGRvbid0IHNlZSBhbnl0aGluZyBoZXJlIHRoYXQgY291bGQgZGlyZWN0bHkgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBObyBuZXcgcG9pbnRlcnMuIE5vIG5ldyBhbGxvY2F0aW9ucy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJ3QgbmVlZCBLTVNBTiB0ZXN0aW5nLiBJJ2xsIG1hcmsgYE5lZWRzS01TQU49ZmFsc2VgLiBJdCdzIGEgbG9naWMgY2hhbmdlIHdoaWNoIGNhbiBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcsIGFuZCBLQVNBTiBzaG91bGQgcGljayB1cCBhbnkgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzAxLCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMjo1NC43MDEyMTAwMzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgIGFuZCBzaW1wbGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgLiBJdCBtb2RpZmllcyB0aGUgc29ja2V0IHN0YXRlIG1hY2hpbmUgYW5kIGhvdyBzb2NrZXQgZXJyb3JzIChgc2tfZXJyYCkgYXJlIHByb2Nlc3NlZC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBjaGFuZ2VzIHRvIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBsZW5ndGhzIG9yIGJvdW5kcyBjaGVja3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCBlcnJvciBjb2RlcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBgcmVqZWN0ZWRgIGZpZWxkIGZyb20gYHN0cnVjdCB2c29ja19zb2NrYCBhbmQgc2ltcGxpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YC4gSXQgbW9kaWZpZXMgdGhlIHNvY2tldCBzdGF0ZSBtYWNoaW5lIGFuZCBob3cgc29ja2V0IGVycm9ycyAoYHNrX2VycmApIGFyZSBwcm9jZXNzZWQuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCwgbm8gY2hhbmdlcyB0byBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbW9kaWZpY2F0aW9ucyB0byBidWZmZXIgbGVuZ3RocyBvciBib3VuZHMgY2hlY2tzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gc29ja2V0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBpbmNvcnJlY3QgZXJyb3IgY29kZXMpLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowp4vlh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 20:48:18 +0000 UTC FinishedAt: 2026-08-10 21:12:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VSOCKETS_LOOPBACK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "001b5d347d8ba39b2dccaefcc57967b18caec8fe", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VSOCKETS_LOOPBACK" ], "series_id": "37ec9159-28b0-4e69-8a51-cf3b94db1e9e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vsock_connect", "vsock_accept", "vsock_pending_work" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTX0xPT1BCQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dnNvY2tfY29ubmVjdCYjMzQ7LAogICAgJiMzNDt2c29ja19hY2NlcHQmIzM0OywKICAgICYjMzQ7dnNvY2tfcGVuZGluZ193b3JrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyB0aGUgYHJlamVjdGVkYCBmaWVsZCBmcm9tIGBzdHJ1Y3QgdnNvY2tfc29ja2AgYW5kIHNpbXBsaWZpZXMgdGhlIGVycm9yIGhhbmRsaW5nIGluIGB2c29ja19hY2NlcHRgIGFuZCBgdnNvY2tfY29ubmVjdGAuIEl0IG1vZGlmaWVzIHRoZSBzb2NrZXQgc3RhdGUgbWFjaGluZSBhbmQgaG93IHNvY2tldCBlcnJvcnMgKGBza19lcnJgKSBhcmUgcHJvY2Vzc2VkLiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQsIG5vIGNoYW5nZXMgdG8gZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIG5vIG1vZGlmaWNhdGlvbnMgdG8gYnVmZmVyIGxlbmd0aHMgb3IgYm91bmRzIGNoZWNrcy4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSByZWxhdGVkIHRvIHNvY2tldCBsaWZlY3ljbGUgbWFuYWdlbWVudCAoZS5nLiwgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgaW5jb3JyZWN0IGVycm9yIGNvZGVzKSwgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2c29jayBjb25uZWN0aW9uIGFuZCBhY2NlcHQgbG9naWMsIHJlbW92aW5nIHRoZSAmIzM5O3JlamVjdGVkJiMzOTsgc3RhdGUgYW5kIGFsdGVyaW5nIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQgZHVyaW5nIGFjY2VwdCBhbmQgY29ubmVjdCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ2NzRjOTQxMzdjMzU2ZTllZmQ0MWQwM2M1ZDE2ZGUwYThmYTg5YjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAyMToxMjoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl92c29jay5oIGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuaW5kZXggMzAwNDZhM2MyMGY3My4uMzM1N2VlNjJkMTBiZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbkBAIC01MiwxMyAmIzQzOzUyLDEwIEBAIHN0cnVjdCB2c29ja19zb2NrIHtcbiBcdCAqIFRoZSBsaXN0ZW5pbmcgc29ja2V0IGlzIHRoZSBoZWFkIGZvciBib3RoIGxpc3RzLiAgU29ja2V0cyBjcmVhdGVkXG4gXHQgKiBmb3IgY29ubmVjdGlvbiByZXF1ZXN0cyBhcmUgcGxhY2VkIGluIHRoZSBwZW5kaW5nIGxpc3QgdW50aWwgdGhleVxuIFx0ICogYXJlIGNvbm5lY3RlZCwgYXQgd2hpY2ggcG9pbnQgdGhleSBhcmUgcHV0IGluIHRoZSBhY2NlcHQgcXVldWUgbGlzdFxuLVx0ICogc28gdGhleSBjYW4gYmUgYWNjZXB0ZWQgaW4gYWNjZXB0KCkuICBJZiBhY2NlcHQoKSBjYW5ub3QgYWNjZXB0IHRoZVxuLVx0ICogY29ubmVjdGlvbiwgaXQgaXMgbWFya2VkIGFzIHJlamVjdGVkIHNvIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGtub3dzXG4tXHQgKiB0byBjbGVhbiB1cCB0aGUgc29ja2V0LlxuJiM0MztcdCAqIHNvIHRoZXkgY2FuIGJlIGFjY2VwdGVkIGluIGFjY2VwdCgpLlxuIFx0ICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIHBlbmRpbmdfbGlua3M7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGFjY2VwdF9xdWV1ZTtcbi1cdGJvb2wgcmVqZWN0ZWQ7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIGNvbm5lY3Rfd29yaztcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgcGVuZGluZ193b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBjbG9zZV93b3JrO1xuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuaW5kZXggNjIyZGJkMDQ2Nzk5NC4uMWEyODc3MTlmMjRhMyAxMDA2NDRcbi0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5AQCAtMzgsMTAgJiM0MzszOCw5IEBAXG4gICogcGVuZGluZyBzb2NrZXQuICBXaGVuIHRoYXQgc29ja2V0IHJlYWNoZXMgdGhlIGNvbm5lY3RlZCBzdGF0ZSwgaXQgaXMgcmVtb3ZlZFxuICAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCYjMzk7cyBwZW5kaW5nIGxpc3QgYW5kIGVucXVldWVkIGluIHRoZSBsaXN0ZW5lclxuICAqIHNvY2tldCYjMzk7cyBhY2NlcHQgcXVldWUuICBDYWxsZXJzIG9mIGFjY2VwdCgyKSB3aWxsIGFjY2VwdCBjb25uZWN0ZWQgc29ja2V0c1xuLSAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCYjMzk7cyBhY2NlcHQgcXVldWUuICBJZiB0aGUgc29ja2V0IGNhbm5vdCBiZSBhY2NlcHRlZFxuLSAqIGZvciBzb21lIHJlYXNvbiB0aGVuIGl0IGlzIG1hcmtlZCByZWplY3RlZC4gIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXNcbi0gKiBhY2NlcHRlZCwgaXQgaXMgb3duZWQgYnkgdGhlIHVzZXIgcHJvY2VzcyBhbmQgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBjbGVhbnVwXG4tICogZmFsbHMgd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy5cbiYjNDM7ICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0JiMzOTtzIGFjY2VwdCBxdWV1ZS4gT25jZSB0aGUgY29ubmVjdGlvbiBpcyBhY2NlcHRlZCxcbiYjNDM7ICogaXQgaXMgb3duZWQgYnkgdGhlIHVzZXIgcHJvY2VzcyBhbmQgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBjbGVhbnVwIGZhbGxzXG4mIzQzOyAqIHdpdGggdGhhdCB1c2VyIHByb2Nlc3MuXG4gICpcbiAgKiAtIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlc2UgcGVuZGluZyBzb2NrZXRzIHdpbGwgbmV2ZXIgcmVhY2ggdGhlIGNvbm5lY3RlZFxuICAqIHN0YXRlOyBpbiBmYWN0LCB3ZSBtYXkgbmV2ZXIgcmVjZWl2ZSBhbm90aGVyIHBhY2tldCBhZnRlciB0aGUgY29ubmVjdGlvblxuQEAgLTQ5LDkgJiM0Mzs0OCw3IEBAXG4gICogZnV0dXJlLCBhZnRlciBzb21lIGFtb3VudCBvZiB0aW1lIHBhc3NlcyB3aGVyZSBhIGNvbm5lY3Rpb24gc2hvdWxkIGhhdmUgYmVlblxuICAqIGVzdGFibGlzaGVkLiAgVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIHNvY2tldCBpcyBvZmYgYWxsIGxpc3RzIHNvIGl0XG4gICogY2Fubm90IGJlIHJldHJpZXZlZCwgdGhlbiBkcm9wcyBhbGwgcmVmZXJlbmNlcyB0byB0aGUgc29ja2V0IHNvIGl0IGlzIGNsZWFuZWRcbi0gKiB1cCAoc29ja19wdXQoKSAtXHUwMDNlIHNrX2ZyZWUoKSAtXHUwMDNlIG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuICBOb3RlIHRoaXNcbi0gKiBmdW5jdGlvbiB3aWxsIGFsc28gY2xlYW51cCByZWplY3RlZCBzb2NrZXRzLCB0aG9zZSB0aGF0IHJlYWNoIHRoZSBjb25uZWN0ZWRcbi0gKiBzdGF0ZSBidXQgbGVhdmUgaXQgYmVmb3JlIHRoZXkgaGF2ZSBiZWVuIGFjY2VwdGVkLlxuJiM0MzsgKiB1cCAoc29ja19wdXQoKSAtXHUwMDNlIHNrX2ZyZWUoKSAtXHUwMDNlIG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuXG4gICpcbiAgKiAtIExvY2sgb3JkZXJpbmcgZm9yIHBlbmRpbmcgb3IgYWNjZXB0IHF1ZXVlIHNvY2tldHMgaXM6XG4gICpcbkBAIC03NzQsMTEgJiM0Mzs3NzEsMTAgQEAgc3RhdGljIHZvaWQgdnNvY2tfcGVuZGluZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdGlmICh2c29ja19pc19wZW5kaW5nKHNrKSkge1xuIFx0XHR2c29ja19yZW1vdmVfcGVuZGluZyhsaXN0ZW5lciwgc2spO1xuLVx0fSBlbHNlIGlmICghdnNrLVx1MDAzZXJlamVjdGVkKSB7XG4tXHRcdC8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBhbmQgYWNjZXB0KCkgZGlkIG5vdCByZWplY3Rcbi1cdFx0ICogdXMsIHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkIGJ5IG91ciB1c2VyIHByb2Nlc3MuICBXZVxuLVx0XHQgKiBqdXN0IG5lZWQgdG8gZHJvcCBvdXIgcmVmZXJlbmNlcyB0byB0aGUgc29ja2V0cyBhbmQgYmUgb25cbi1cdFx0ICogb3VyIHdheS5cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogV2UgYXJlIG5vdCBvbiB0aGUgcGVuZGluZyBsaXN0IHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkXG4mIzQzO1x0XHQgKiBieSBvdXIgdXNlciBwcm9jZXNzLiBXZSBqdXN0IG5lZWQgdG8gZHJvcCBvdXIgcmVmZXJlbmNlcyB0b1xuJiM0MztcdFx0ICogdGhlIHNvY2tldHMgYW5kIGJlIG9uIG91ciB3YXkuXG4gXHRcdCAqL1xuIFx0XHRjbGVhbnVwID0gZmFsc2U7XG4gXHRcdGdvdG8gb3V0O1xuQEAgLTk0Miw3ICYjNDM7OTM4LDYgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpfX3Zzb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHR2c2stXHUwMDNlbGlzdGVuZXIgPSBOVUxMO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dnNrLVx1MDAzZXBlbmRpbmdfbGlua3MpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dnNrLVx1MDAzZWFjY2VwdF9xdWV1ZSk7XG4tXHR2c2stXHUwMDNlcmVqZWN0ZWQgPSBmYWxzZTtcbiBcdHZzay1cdTAwM2VzZW50X3JlcXVlc3QgPSBmYWxzZTtcbiBcdHZzay1cdTAwM2VpZ25vcmVfY29ubmVjdGluZ19yc3QgPSBmYWxzZTtcbiBcdFdSSVRFX09OQ0UodnNrLVx1MDAzZXBlZXJfc2h1dGRvd24sIDApO1xuQEAgLTE4NDcsMTIgJiM0MzsxODQyLDEwIEBAIHN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbiBcdFx0cHJlcGFyZV90b193YWl0KHNrX3NsZWVwKHNrKSwgXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcdH1cbiBcbi1cdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbi1cdFx0ZXJyID0gLXNrLVx1MDAzZXNrX2VycjtcbiYjNDM7XHRlcnIgPSBzb2NrX2Vycm9yKHNrKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gVENQX0NMT1NFO1xuIFx0XHRzb2NrLVx1MDAzZXN0YXRlID0gU1NfVU5DT05ORUNURUQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRlcnIgPSAwO1xuIFx0fVxuIFxuIG91dF93YWl0OlxuQEAgLTE4OTMsNyAmIzQzOzE4ODYsNyBAQCBzdGF0aWMgaW50IHZzb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxuIFx0dGltZW91dCA9IHNvY2tfcmN2dGltZW8obGlzdGVuZXIsIGFyZy1cdTAwM2VmbGFncyBcdTAwMjYgT19OT05CTE9DSyk7XG4gXG4gXHR3aGlsZSAoKGNvbm5lY3RlZCA9IHZzb2NrX2RlcXVldWVfYWNjZXB0KGxpc3RlbmVyKSkgPT0gTlVMTCBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICBsaXN0ZW5lci1cdTAwM2Vza19lcnIgPT0gMCBcdTAwMjZcdTAwMjYgdGltZW91dCAhPSAwKSB7XG4mIzQzO1x0XHR0aW1lb3V0ICE9IDApIHtcbiBcdFx0cHJlcGFyZV90b193YWl0KHNrX3NsZWVwKGxpc3RlbmVyKSwgXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcdFx0cmVsZWFzZV9zb2NrKGxpc3RlbmVyKTtcbiBcdFx0dGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7XG5AQCAtMTkwNiw0MSAmIzQzOzE4OTksMjYgQEAgc3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKGxpc3RlbmVyLVx1MDAzZXNrX2Vycikge1xuLVx0XHRlcnIgPSAtbGlzdGVuZXItXHUwMDNlc2tfZXJyO1xuLVx0fSBlbHNlIGlmICghY29ubmVjdGVkKSB7XG4tXHRcdGVyciA9IC1FQUdBSU47XG4tXHR9XG4tXG4gXHRpZiAoY29ubmVjdGVkKSB7XG4gXHRcdHNrX2FjY2VwdHFfcmVtb3ZlZChsaXN0ZW5lcik7XG4gXG4gXHRcdGxvY2tfc29ja19uZXN0ZWQoY29ubmVjdGVkLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gXHRcdHZjb25uZWN0ZWQgPSB2c29ja19zayhjb25uZWN0ZWQpO1xuIFxuLVx0XHQvKiBJZiB0aGUgbGlzdGVuZXIgc29ja2V0IGhhcyByZWNlaXZlZCBhbiBlcnJvciwgdGhlbiB3ZSBzaG91bGRcbi1cdFx0ICogcmVqZWN0IHRoaXMgc29ja2V0IGFuZCByZXR1cm4uICBOb3RlIHRoYXQgd2Ugc2ltcGx5IG1hcmsgdGhlXG4tXHRcdCAqIHNvY2tldCByZWplY3RlZCwgZHJvcCBvdXIgcmVmZXJlbmNlLCBhbmQgbGV0IHRoZSBjbGVhbnVwXG4tXHRcdCAqIGZ1bmN0aW9uIGhhbmRsZSB0aGUgY2xlYW51cDsgdGhlIGZhY3QgdGhhdCB3ZSBmb3VuZCBpdCBpblxuLVx0XHQgKiB0aGUgbGlzdGVuZXImIzM5O3MgYWNjZXB0IHF1ZXVlIGd1YXJhbnRlZXMgdGhhdCB0aGUgY2xlYW51cFxuLVx0XHQgKiBmdW5jdGlvbiBoYXNuJiMzOTt0IHJ1biB5ZXQuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0dmNvbm5lY3RlZC1cdTAwM2VyZWplY3RlZCA9IHRydWU7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0bmV3c29jay1cdTAwM2VzdGF0ZSA9IFNTX0NPTk5FQ1RFRDtcbi1cdFx0XHRzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7XG4mIzQzO1x0XHRuZXdzb2NrLVx1MDAzZXN0YXRlID0gU1NfQ09OTkVDVEVEO1xuJiM0MztcdFx0c29ja19ncmFmdChjb25uZWN0ZWQsIG5ld3NvY2spO1xuIFxuLVx0XHRcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCxcbi1cdFx0XHRcdFx1MDAyNmNvbm5lY3RlZC1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuJiM0MztcdFx0c2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULFxuJiM0MztcdFx0XHRcdTAwMjZjb25uZWN0ZWQtXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbiBcbi1cdFx0XHRpZiAodnNvY2tfbXNnemVyb2NvcHlfYWxsb3codmNvbm5lY3RlZC1cdTAwM2V0cmFuc3BvcnQpKVxuLVx0XHRcdFx0c2V0X2JpdChTT0NLX1NVUFBPUlRfWkMsXG4tXHRcdFx0XHRcdFx1MDAyNmNvbm5lY3RlZC1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuLVx0XHR9XG4mIzQzO1x0XHRpZiAodnNvY2tfbXNnemVyb2NvcHlfYWxsb3codmNvbm5lY3RlZC1cdTAwM2V0cmFuc3BvcnQpKVxuJiM0MztcdFx0XHRzZXRfYml0KFNPQ0tfU1VQUE9SVF9aQyxcbiYjNDM7XHRcdFx0XHRcdTAwMjZjb25uZWN0ZWQtXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbiBcbiBcdFx0cmVsZWFzZV9zb2NrKGNvbm5lY3RlZCk7XG4gXHRcdHNvY2tfcHV0KGNvbm5lY3RlZCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGVyciA9IC1FQUdBSU47XG4gXHR9XG4gXG4gb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zzb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7dnNvY2tfYWNjZXB0JiMzNDssCiAgICAmIzM0O3Zzb2NrX3BlbmRpbmdfd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2c29jayBjb25uZWN0aW9uIGFuZCBhY2NlcHQgbG9naWMsIHJlbW92aW5nIHRoZSAmIzM5O3JlamVjdGVkJiMzOTsgc3RhdGUgYW5kIGFsdGVyaW5nIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQgZHVyaW5nIGFjY2VwdCBhbmQgY29ubmVjdCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ2NzRjOTQxMzdjMzU2ZTllZmQ0MWQwM2M1ZDE2ZGUwYThmYTg5YjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAyMToxMjoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmggYi9pbmNsdWRlL25ldC9hZl92c29jay5oCmluZGV4IDMwMDQ2YTNjMjBmNzMuLjMzNTdlZTYyZDEwYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaApAQCAtNTIsMTMgJiM0Mzs1MiwxMCBAQCBzdHJ1Y3QgdnNvY2tfc29jayB7CiAJICogVGhlIGxpc3RlbmluZyBzb2NrZXQgaXMgdGhlIGhlYWQgZm9yIGJvdGggbGlzdHMuICBTb2NrZXRzIGNyZWF0ZWQKIAkgKiBmb3IgY29ubmVjdGlvbiByZXF1ZXN0cyBhcmUgcGxhY2VkIGluIHRoZSBwZW5kaW5nIGxpc3QgdW50aWwgdGhleQogCSAqIGFyZSBjb25uZWN0ZWQsIGF0IHdoaWNoIHBvaW50IHRoZXkgYXJlIHB1dCBpbiB0aGUgYWNjZXB0IHF1ZXVlIGxpc3QKLQkgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS4gIElmIGFjY2VwdCgpIGNhbm5vdCBhY2NlcHQgdGhlCi0JICogY29ubmVjdGlvbiwgaXQgaXMgbWFya2VkIGFzIHJlamVjdGVkIHNvIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGtub3dzCi0JICogdG8gY2xlYW4gdXAgdGhlIHNvY2tldC4KJiM0MzsJICogc28gdGhleSBjYW4gYmUgYWNjZXB0ZWQgaW4gYWNjZXB0KCkuCiAJICovCiAJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpbmtzOwogCXN0cnVjdCBsaXN0X2hlYWQgYWNjZXB0X3F1ZXVlOwotCWJvb2wgcmVqZWN0ZWQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBjb25uZWN0X3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBwZW5kaW5nX3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBjbG9zZV93b3JrOwpkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCmluZGV4IDYyMmRiZDA0Njc5OTQuLjFhMjg3NzE5ZjI0YTMgMTAwNjQ0Ci0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKQEAgLTM4LDEwICYjNDM7MzgsOSBAQAogICogcGVuZGluZyBzb2NrZXQuICBXaGVuIHRoYXQgc29ja2V0IHJlYWNoZXMgdGhlIGNvbm5lY3RlZCBzdGF0ZSwgaXQgaXMgcmVtb3ZlZAogICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0JiMzOTtzIHBlbmRpbmcgbGlzdCBhbmQgZW5xdWV1ZWQgaW4gdGhlIGxpc3RlbmVyCiAgKiBzb2NrZXQmIzM5O3MgYWNjZXB0IHF1ZXVlLiAgQ2FsbGVycyBvZiBhY2NlcHQoMikgd2lsbCBhY2NlcHQgY29ubmVjdGVkIHNvY2tldHMKLSAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCYjMzk7cyBhY2NlcHQgcXVldWUuICBJZiB0aGUgc29ja2V0IGNhbm5vdCBiZSBhY2NlcHRlZAotICogZm9yIHNvbWUgcmVhc29uIHRoZW4gaXQgaXMgbWFya2VkIHJlamVjdGVkLiAgT25jZSB0aGUgY29ubmVjdGlvbiBpcwotICogYWNjZXB0ZWQsIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cAotICogZmFsbHMgd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy4KJiM0MzsgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQmIzM5O3MgYWNjZXB0IHF1ZXVlLiBPbmNlIHRoZSBjb25uZWN0aW9uIGlzIGFjY2VwdGVkLAomIzQzOyAqIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cCBmYWxscwomIzQzOyAqIHdpdGggdGhhdCB1c2VyIHByb2Nlc3MuCiAgKgogICogLSBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXNlIHBlbmRpbmcgc29ja2V0cyB3aWxsIG5ldmVyIHJlYWNoIHRoZSBjb25uZWN0ZWQKICAqIHN0YXRlOyBpbiBmYWN0LCB3ZSBtYXkgbmV2ZXIgcmVjZWl2ZSBhbm90aGVyIHBhY2tldCBhZnRlciB0aGUgY29ubmVjdGlvbgpAQCAtNDksOSAmIzQzOzQ4LDcgQEAKICAqIGZ1dHVyZSwgYWZ0ZXIgc29tZSBhbW91bnQgb2YgdGltZSBwYXNzZXMgd2hlcmUgYSBjb25uZWN0aW9uIHNob3VsZCBoYXZlIGJlZW4KICAqIGVzdGFibGlzaGVkLiAgVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIHNvY2tldCBpcyBvZmYgYWxsIGxpc3RzIHNvIGl0CiAgKiBjYW5ub3QgYmUgcmV0cmlldmVkLCB0aGVuIGRyb3BzIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBzb2NrZXQgc28gaXQgaXMgY2xlYW5lZAotICogdXAgKHNvY2tfcHV0KCkgLSZndDsgc2tfZnJlZSgpIC0mZ3Q7IG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuICBOb3RlIHRoaXMKLSAqIGZ1bmN0aW9uIHdpbGwgYWxzbyBjbGVhbnVwIHJlamVjdGVkIHNvY2tldHMsIHRob3NlIHRoYXQgcmVhY2ggdGhlIGNvbm5lY3RlZAotICogc3RhdGUgYnV0IGxlYXZlIGl0IGJlZm9yZSB0aGV5IGhhdmUgYmVlbiBhY2NlcHRlZC4KJiM0MzsgKiB1cCAoc29ja19wdXQoKSAtJmd0OyBza19mcmVlKCkgLSZndDsgb3VyIHNrX2Rlc3RydWN0IGltcGxlbWVudGF0aW9uKS4KICAqCiAgKiAtIExvY2sgb3JkZXJpbmcgZm9yIHBlbmRpbmcgb3IgYWNjZXB0IHF1ZXVlIHNvY2tldHMgaXM6CiAgKgpAQCAtNzc0LDExICYjNDM7NzcxLDEwIEBAIHN0YXRpYyB2b2lkIHZzb2NrX3BlbmRpbmdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAKIAlpZiAodnNvY2tfaXNfcGVuZGluZyhzaykpIHsKIAkJdnNvY2tfcmVtb3ZlX3BlbmRpbmcobGlzdGVuZXIsIHNrKTsKLQl9IGVsc2UgaWYgKCF2c2stJmd0O3JlamVjdGVkKSB7Ci0JCS8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBhbmQgYWNjZXB0KCkgZGlkIG5vdCByZWplY3QKLQkJICogdXMsIHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkIGJ5IG91ciB1c2VyIHByb2Nlc3MuICBXZQotCQkgKiBqdXN0IG5lZWQgdG8gZHJvcCBvdXIgcmVmZXJlbmNlcyB0byB0aGUgc29ja2V0cyBhbmQgYmUgb24KLQkJICogb3VyIHdheS4KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBzbyB3ZSBtdXN0IGhhdmUgYmVlbiBhY2NlcHRlZAomIzQzOwkJICogYnkgb3VyIHVzZXIgcHJvY2Vzcy4gV2UganVzdCBuZWVkIHRvIGRyb3Agb3VyIHJlZmVyZW5jZXMgdG8KJiM0MzsJCSAqIHRoZSBzb2NrZXRzIGFuZCBiZSBvbiBvdXIgd2F5LgogCQkgKi8KIAkJY2xlYW51cCA9IGZhbHNlOwogCQlnb3RvIG91dDsKQEAgLTk0Miw3ICYjNDM7OTM4LDYgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpfX3Zzb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJdnNrLSZndDtsaXN0ZW5lciA9IE5VTEw7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDt2c2stJmd0O3BlbmRpbmdfbGlua3MpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7dnNrLSZndDthY2NlcHRfcXVldWUpOwotCXZzay0mZ3Q7cmVqZWN0ZWQgPSBmYWxzZTsKIAl2c2stJmd0O3NlbnRfcmVxdWVzdCA9IGZhbHNlOwogCXZzay0mZ3Q7aWdub3JlX2Nvbm5lY3RpbmdfcnN0ID0gZmFsc2U7CiAJV1JJVEVfT05DRSh2c2stJmd0O3BlZXJfc2h1dGRvd24sIDApOwpAQCAtMTg0NywxMiAmIzQzOzE4NDIsMTAgQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLAogCQlwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCAmYW1wO3dhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJfQogCi0JaWYgKHNrLSZndDtza19lcnIpIHsKLQkJZXJyID0gLXNrLSZndDtza19lcnI7CiYjNDM7CWVyciA9IHNvY2tfZXJyb3Ioc2spOwomIzQzOwlpZiAoZXJyKSB7CiAJCXNrLSZndDtza19zdGF0ZSA9IFRDUF9DTE9TRTsKIAkJc29jay0mZ3Q7c3RhdGUgPSBTU19VTkNPTk5FQ1RFRDsKLQl9IGVsc2UgewotCQllcnIgPSAwOwogCX0KIAogb3V0X3dhaXQ6CkBAIC0xODkzLDcgJiM0MzsxODg2LDcgQEAgc3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywKIAl0aW1lb3V0ID0gc29ja19yY3Z0aW1lbyhsaXN0ZW5lciwgYXJnLSZndDtmbGFncyAmYW1wOyBPX05PTkJMT0NLKTsKIAogCXdoaWxlICgoY29ubmVjdGVkID0gdnNvY2tfZGVxdWV1ZV9hY2NlcHQobGlzdGVuZXIpKSA9PSBOVUxMICZhbXA7JmFtcDsKLQkgICAgICAgbGlzdGVuZXItJmd0O3NrX2VyciA9PSAwICZhbXA7JmFtcDsgdGltZW91dCAhPSAwKSB7CiYjNDM7CQl0aW1lb3V0ICE9IDApIHsKIAkJcHJlcGFyZV90b193YWl0KHNrX3NsZWVwKGxpc3RlbmVyKSwgJmFtcDt3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlyZWxlYXNlX3NvY2sobGlzdGVuZXIpOwogCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKQEAgLTE5MDYsNDEgJiM0MzsxODk5LDI2IEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssCiAJCX0KIAl9CiAKLQlpZiAobGlzdGVuZXItJmd0O3NrX2VycikgewotCQllcnIgPSAtbGlzdGVuZXItJmd0O3NrX2VycjsKLQl9IGVsc2UgaWYgKCFjb25uZWN0ZWQpIHsKLQkJZXJyID0gLUVBR0FJTjsKLQl9Ci0KIAlpZiAoY29ubmVjdGVkKSB7CiAJCXNrX2FjY2VwdHFfcmVtb3ZlZChsaXN0ZW5lcik7CiAKIAkJbG9ja19zb2NrX25lc3RlZChjb25uZWN0ZWQsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAkJdmNvbm5lY3RlZCA9IHZzb2NrX3NrKGNvbm5lY3RlZCk7CiAKLQkJLyogSWYgdGhlIGxpc3RlbmVyIHNvY2tldCBoYXMgcmVjZWl2ZWQgYW4gZXJyb3IsIHRoZW4gd2Ugc2hvdWxkCi0JCSAqIHJlamVjdCB0aGlzIHNvY2tldCBhbmQgcmV0dXJuLiAgTm90ZSB0aGF0IHdlIHNpbXBseSBtYXJrIHRoZQotCQkgKiBzb2NrZXQgcmVqZWN0ZWQsIGRyb3Agb3VyIHJlZmVyZW5jZSwgYW5kIGxldCB0aGUgY2xlYW51cAotCQkgKiBmdW5jdGlvbiBoYW5kbGUgdGhlIGNsZWFudXA7IHRoZSBmYWN0IHRoYXQgd2UgZm91bmQgaXQgaW4KLQkJICogdGhlIGxpc3RlbmVyJiMzOTtzIGFjY2VwdCBxdWV1ZSBndWFyYW50ZWVzIHRoYXQgdGhlIGNsZWFudXAKLQkJICogZnVuY3Rpb24gaGFzbiYjMzk7dCBydW4geWV0LgotCQkgKi8KLQkJaWYgKGVycikgewotCQkJdmNvbm5lY3RlZC0mZ3Q7cmVqZWN0ZWQgPSB0cnVlOwotCQl9IGVsc2UgewotCQkJbmV3c29jay0mZ3Q7c3RhdGUgPSBTU19DT05ORUNURUQ7Ci0JCQlzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7CiYjNDM7CQluZXdzb2NrLSZndDtzdGF0ZSA9IFNTX0NPTk5FQ1RFRDsKJiM0MzsJCXNvY2tfZ3JhZnQoY29ubmVjdGVkLCBuZXdzb2NrKTsKIAotCQkJc2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULAotCQkJCSZhbXA7Y29ubmVjdGVkLSZndDtza19zb2NrZXQtJmd0O2ZsYWdzKTsKJiM0MzsJCXNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwKJiM0MzsJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7CiAKLQkJCWlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLSZndDt0cmFuc3BvcnQpKQotCQkJCXNldF9iaXQoU09DS19TVVBQT1JUX1pDLAotCQkJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7Ci0JCX0KJiM0MzsJCWlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLSZndDt0cmFuc3BvcnQpKQomIzQzOwkJCXNldF9iaXQoU09DS19TVVBQT1JUX1pDLAomIzQzOwkJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7CiAKIAkJcmVsZWFzZV9zb2NrKGNvbm5lY3RlZCk7CiAJCXNvY2tfcHV0KGNvbm5lY3RlZCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllcnIgPSAtRUFHQUlOOwogCX0KIAogb3V0Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzA0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFZTb2NrIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSB2c29jayBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AgYW5kIGBpbmNsdWRlL25ldC9hZl92c29jay5oYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgdnNvY2sgbG9naWMuIEl0JiMzOTtzIHJlbW92aW5nIHRoZSBgcmVqZWN0ZWRgIGZpZWxkIGZyb20gYHN0cnVjdCB2c29ja19zb2NrYCwgd2hpY2ggc291bmRzIHByZXR0eSBmdW5kYW1lbnRhbCwgYW5kIHRoZW4gaXQmIzM5O3MgY2hhbmdpbmcgdGhlIGJlaGF2aW9yIG9mIGB2c29ja19wZW5kaW5nX3dvcmtgLCBgdnNvY2tfY29ubmVjdGAsIGFuZCBgdnNvY2tfYWNjZXB0YC4gU3BlY2lmaWNhbGx5LCBpbiBgdnNvY2tfYWNjZXB0YCwgdGhlIHBhdGNoIGFwcGVhcnMgdG8gYmUgY2hhbmdpbmcgaG93IGVycm9ycyBvbiB0aGUgbGlzdGVuZXIgc29ja2V0IGFyZSBoYW5kbGVkIHdoZW4gZGVxdWV1aW5nIGFuIGFjY2VwdGVkIHNvY2tldC4gQWxzbywgYHZzb2NrX2Nvbm5lY3RgIGlzIG5vdyB1c2luZyBgc29ja19lcnJvcihzaylgIGluc3RlYWQgb2YgYHNrLSZndDtza19lcnJgLCBzbyB0aGF0JiMzOTtzIGEgZGlmZmVyZW50IGFwcHJvYWNoIHRvIGVycm9yIGNoZWNraW5nIGR1cmluZyBjb25uZWN0aW9uLgoKVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2sgYmVjYXVzZSB0aGVzZSBhcmUgY3JpdGljYWwgYXJlYXMgYW5kIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9ucyBhbHdheXMgcmVxdWlyZSB0aG9yb3VnaCBzY3J1dGlueS4gVGhpcyBjaGFuZ2UgZGVmaW5pdGVseSBoYXMgcG90ZW50aWFsIGZ1bmN0aW9uYWwgaW1wYWN0cywgYW5kIEkmIzM5O20gdGhpbmtpbmcgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIHJvYnVzdC4KCkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGV4YWN0IGltcGxpY2F0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnM6IGB2c29ja19wZW5kaW5nX3dvcmtgLCBgdnNvY2tfY29ubmVjdGAsIGFuZCBgdnNvY2tfYWNjZXB0YC4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzbyBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBuZXQvdm13X3Zzb2NrL0tjb25maWdgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNldHRpbmdzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoaXMuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBLY29uZmlnIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZTT0NLRVRTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZy01LVxubmV0L3Ztd192c29jay9LY29uZmlnOjY6Y29uZmlnIFZTT0NLRVRTXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0IHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTE4LVxubmV0L3Ztd192c29jay9LY29uZmlnOjE5OmNvbmZpZyBWU09DS0VUU19ESUFHXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjgtXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6Mjk6Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMzAtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldHMgbG9vcGJhY2sgdHJhbnNwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU4NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gaW1tZWRpYXRlIHByb2Nlc3Npbmc6CgoqKlZTT0NLRVRTIENvbmZpZ3VyYXRpb24gQ2hlY2sqKgoKQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHRvIGBWU09DS0VUU2AuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSAqb25seSogdGhpbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gTm8gcG9pbnQgaW4gbWFraW5nIGFzc3VtcHRpb25zLiBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIGFuZCB2ZXJpZnkgdGhhdCB0aGVyZSBhcmVuJiMzOTt0ICphbnkqIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgaW4gcGxheSBvciBwb3RlbnRpYWxseSBvdmVycmlkZSBgVlNPQ0tFVFNgLCBvciBpbnRlcmFjdCB3aXRoIGl0IGluIGEgd2F5IHRoYXQgSSBuZWVkIHRvIGFjY291bnQgZm9yLiBObyBwb2ludCBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUgYmFzZWQgb24gYSBzaW5nbGUgdmFyaWFibGUuIFNvLCB0aGUgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIGEgc3lzdGVtcy1sZXZlbCBjaGVjay4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGlzIGlzIHRoZSBvbmx5IHRoaW5nIHdlIG5lZWQgdG8gY29uc2lkZXIgaW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlL3N5c3RlbS4gQSBxdWljayBsb29rIGFyb3VuZCB0aGUgY29kZSBiYXNlIHRvIGZpbmQgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9LY29uZmlnPTE5PWNvbmZpZyBWU09DS0VUU19ESUFHXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjAtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcJiMzNDtcbm5ldC92bXdfdnNvY2svS2NvbmZpZzoyMTpcdGRlcGVuZHMgb24gVlNPQ0tFVFNcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0yMi1cdGRlZmF1bHQgeVxuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZz0yOT1jb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zMC1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgU29ja2V0cyBsb29wYmFjayB0cmFuc3BvcnRcJiMzNDtcbm5ldC92bXdfdnNvY2svS2NvbmZpZzozMTpcdGRlcGVuZHMgb24gVlNPQ0tFVFNcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zMi1cdGRlZmF1bHQgeVxuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZz00MT1jb25maWcgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNcbm5ldC92bXdfdnNvY2svS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O1ZNd2FyZSBWTUNJIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXCYjMzQ7XG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NDM6XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBWTVdBUkVfVk1DSVxubmV0L3Ztd192c29jay9LY29uZmlnLTQ0LVx0aGVscFxuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZz01Mz1jb25maWcgVklSVElPX1ZTT0NLRVRTXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTQtXHR0cmlzdGF0ZSBcJiMzNDt2aXJ0aW8gdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHNcJiMzNDtcbm5ldC92bXdfdnNvY2svS2NvbmZpZzo1NTpcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXHUwMDI2XHUwMDI2IFZJUlRJT1xubmV0L3Ztd192c29jay9LY29uZmlnLTU2LVx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cbi0tXG5uZXQvdm13X3Zzb2NrL0tjb25maWc9NzM9Y29uZmlnIEhZUEVSVl9WU09DS0VUU1xubmV0L3Ztd192c29jay9LY29uZmlnLTc0LVx0dHJpc3RhdGUgXCYjMzQ7SHlwZXItViB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0c1wmIzM0O1xubmV0L3Ztd192c29jay9LY29uZmlnOjc1Olx0ZGVwZW5kcyBvbiBWU09DS0VUUyBcdTAwMjZcdTAwMjYgSFlQRVJWX1ZNQlVTXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNzYtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMyNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29uc2lkZXJhdGlvbnM6CgoqKlZTT0NLIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgVlNPQ0sgY29uZmlndXJhdGlvbnMuIE9idmlvdXNseSwgdGhlIGNvcmUgaXMgdGhlIGBWU09DS0VUU2Agb3B0aW9uLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZSwgdGhlIGZvdW5kYXRpb24uIEkgYWxzbyBrbm93IHRoYXQgYFZTT0NLRVRTX0xPT1BCQUNLYCBpcyByZWFsbHkgdmFsdWFibGUgZm9yIGxvY2FsIHRlc3RpbmcgYW5kIGRlYnVnZ2luZy4gSXQmIzM5O3MgYSBsaWZlc2F2ZXIsIGJlaW5nIGFibGUgdG8gc2ltdWxhdGUgYSBjb25uZWN0aW9uIHdpdGhpbiB0aGUgc2FtZSBob3N0LgoKTm93LCBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC92bXdfdnNvY2svYWZfdnNvY2suY2AuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgIHRoZXJlLiBVbmRlcnN0YW5kaW5nIHRob3NlIHR3byBmdW5jdGlvbnMgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgY29ubmVjdGlvbiBsaWZlY3ljbGUgZnVuY3Rpb25zIGFuZCB0aGUgaGFuZHNoYWtlIGlzIHNldCB1cC4gVGhleSYjMzk7cmUgZ29pbmcgdG8gdGVsbCBtZSBhIGxvdCBhYm91dCB0aGUgY29yZSBtZWNoYW5pY3MgSSYjMzk7bSBkZWFsaW5nIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnNvY2tfYWNjZXB0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9hZl92c29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svYWZfdnNvY2suYz0xNjcyPXN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbi0tXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTg1Ny1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoxODU4OnN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTg1OS1cdFx0XHRzdHJ1Y3QgcHJvdG9fYWNjZXB0X2FyZyAqYXJnKVxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjIyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHZzb2NrX3N0cmVhbV9vcHMgPSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MjgtXHQuc29ja2V0cGFpciA9IHNvY2tfbm9fc29ja2V0cGFpcixcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjI5Olx0LmFjY2VwdCA9IHZzb2NrX2FjY2VwdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjMwLVx0LmdldG5hbWUgPSB2c29ja19nZXRuYW1lLFxuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz0yNjQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHZzb2NrX3NlcXBhY2tldF9vcHMgPSB7XG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NTAtXHQuc29ja2V0cGFpciA9IHNvY2tfbm9fc29ja2V0cGFpcixcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjUxOlx0LmFjY2VwdCA9IHZzb2NrX2FjY2VwdCxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjUyLVx0LmdldG5hbWUgPSB2c29ja19nZXRuYW1lLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNDAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUmVjZW50IEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGlzIHBhdGNoIGFuZCBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2YgbXkgdGhpbmtpbmcuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgY2hhbmdlcyB0byB0aGUgYHZzb2NrYCBtb2R1bGUsIHNwZWNpZmljYWxseSBpbiB0aGUgYHZzb2NrX2Nvbm5lY3RgIGFuZCBgdnNvY2tfYWNjZXB0YCBmdW5jdGlvbnMuIEl0IGFwcGVhcnMgdG8gcmVtb3ZlIHRoZSBgcmVqZWN0ZWRgIGZpZWxkIGZyb20gYHZzb2NrX3NvY2tgIGFuZCBhbHNvIHNpbXBsaWZpZXMgdGhlIGB2c29ja19wZW5kaW5nX3dvcmtgIGxvZ2ljLiBUaGUgZmFjdCB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIHdpdGhpbiB0aGUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIHZzb2NrIGNvZGUsIG1ha2VzIHRoaXMgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpHaXZlbiB0aGUgc2NvcGUgYW5kIGltcGFjdCB3aXRoaW4gdGhlIGB2c29ja2AgbW9kdWxlLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJJiMzOTtsbCBmbGFnIGl0IHdpdGggYFdvcnRoRnV6emluZz10cnVlYC4KCkZvciBmb2N1c2VkIGZ1enppbmcgZWZmb3J0cywgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uIGFyZSBkZWZpbml0ZWx5IGB2c29ja19jb25uZWN0YCwgYHZzb2NrX2FjY2VwdGAsIGFuZCBgdnNvY2tfcGVuZGluZ193b3JrYC4gSSYjMzk7bGwgYWxzbyB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkLCBzcGVjaWZpY2FsbHkgYFZTT0NLRVRTYCBhbmQgYFZTT0NLRVRTX0xPT1BCQUNLYC4KCk5vdywgYmVmb3JlIEkgY29tbWl0IHRvIGEgZnVsbC1ibG93biBmdXp6aW5nIGNhbXBhaWduLCBJIHdhbnQgdG8gcXVpY2tseSBkb3VibGUgY2hlY2sgdGhlIG5hdHVyZSBvZiBgdnNvY2tfcGVuZGluZ193b3JrYC4gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGl0JiMzOTtzIGRlY2xhcmVkIGFzIHN0YXRpYywgYW5kIGlmIGl0JiMzOTtzIGlubGluZWQuIFRoaXMgd2lsbCBhZmZlY3QgaG93IGFjY2Vzc2libGUgaXQgaXMgYW5kIHdoYXQga2luZCBvZiBpbnN0cnVtZW50YXRpb24gSSBtaWdodCBuZWVkIHRvIGFwcGx5IGZvciBlZmZlY3RpdmUgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnNvY2tfcGVuZGluZ193b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay9hZl92c29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svYWZfdnNvY2suYz03NDc9c3RhdGljIGludCB2c29ja19zZW5kX3NodXRkb3duKHN0cnVjdCBzb2NrICpzaywgaW50IG1vZGUpXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTc1Ni1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzo3NTc6c3RhdGljIHZvaWQgdnNvY2tfcGVuZGluZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy03NTgte1xuLS1cbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYz05MDQ9c3RhdGljIHN0cnVjdCBzb2NrICpfX3Zzb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk0NC1cdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnZzay1cdTAwM2Vjb25uZWN0X3dvcmssIHZzb2NrX2Nvbm5lY3RfdGltZW91dCk7XG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6OTQ1Olx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2dnNrLVx1MDAzZXBlbmRpbmdfd29yaywgdnNvY2tfcGVuZGluZ193b3JrKTtcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy05NDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3ODUKCQkJCQkJCW91dHB1dDogMTA5CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGgga2VybmVsIGludGVybmFsczoKCioqQW5hbHl6aW5nIHZzb2NrX3BlbmRpbmdfd29yayBhbmQgQ29kZSBGbG93KioKClJpZ2h0LCBzbyBgdnNvY2tfcGVuZGluZ193b3JrYCBpcyBhIHdvcmtxdWV1ZSBjYWxsYmFjay4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBhIGZldyB0aGluZ3MuIEZpcnN0LCBpdCYjMzk7cyBub3QgZ29pbmcgdG8gYmUgaW5saW5lZCDigJMgd29ya3F1ZXVlIGNhbGxiYWNrcyBhcmUgZGVzaWduZWQgdG8gYmUgcnVuIGFzeW5jaHJvbm91c2x5LCBvZmYgdGhlIGNyaXRpY2FsIHBhdGguIFNlY29uZCwgdGhhdCBhbHNvIG1lYW5zIHdlJiMzOTtyZSBsaWtlbHkgZ3JhYmJpbmcgaXRzIGFkZHJlc3Mgc29tZXdoZXJlLiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIGZvciBsYXRlciwgcG90ZW50aWFsbHkgZm9yIGRlYnVnZ2luZyBvciB0cmFjaW5nLiBJdCBnaXZlcyBtZSBhIGNydWNpYWwgY2x1ZSBhYm91dCBob3cgdGhpcyBjb2RlIHdpbGwgYmUgb3JnYW5pemVkIGFuZCBjYWxsZWQgYnkgdGhlIHdvcmtxdWV1ZSBtYWNoaW5lcnkuCgpNeSBuZXh0IHN0ZXAsIGxvb2tpbmcgYXQgdGhpcyBjb250ZXh0LCBpcyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTX0xPT1BCQUNLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dnNvY2tfY29ubmVjdCYjMzQ7LAogICAgJiMzNDt2c29ja19hY2NlcHQmIzM0OywKICAgICYjMzQ7dnNvY2tfcGVuZGluZ193b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHZzb2NrIGNvbm5lY3Rpb24gYW5kIGFjY2VwdCBsb2dpYywgcmVtb3ZpbmcgdGhlICYjMzk7cmVqZWN0ZWQmIzM5OyBzdGF0ZSBhbmQgYWx0ZXJpbmcgaG93IGVycm9ycyBhcmUgaGFuZGxlZCBkdXJpbmcgYWNjZXB0IGFuZCBjb25uZWN0IG9wZXJhdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbmV0d29ya2luZyBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zzb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7dnNvY2tfYWNjZXB0JiMzNDssCiAgICAmIzM0O3Zzb2NrX3BlbmRpbmdfd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2c29jayBjb25uZWN0aW9uIGFuZCBhY2NlcHQgbG9naWMsIHJlbW92aW5nIHRoZSAmIzM5O3JlamVjdGVkJiMzOTsgc3RhdGUgYW5kIGFsdGVyaW5nIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQgZHVyaW5nIGFjY2VwdCBhbmQgY29ubmVjdCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAyMToxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIHRoZSBgcmVqZWN0ZWRgIGZpZWxkIGZyb20gYHN0cnVjdCB2c29ja19zb2NrYCBhbmQgc2ltcGxpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YC4gSXQgbW9kaWZpZXMgdGhlIHNvY2tldCBzdGF0ZSBtYWNoaW5lIGFuZCBob3cgc29ja2V0IGVycm9ycyAoYHNrX2VycmApIGFyZSBwcm9jZXNzZWQuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCwgbm8gY2hhbmdlcyB0byBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbW9kaWZpY2F0aW9ucyB0byBidWZmZXIgbGVuZ3RocyBvciBib3VuZHMgY2hlY2tzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gc29ja2V0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBpbmNvcnJlY3QgZXJyb3IgY29kZXMpLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ2NzRjOTQxMzdjMzU2ZTllZmQ0MWQwM2M1ZDE2ZGUwYThmYTg5YjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAyMToxMjoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmggYi9pbmNsdWRlL25ldC9hZl92c29jay5oCmluZGV4IDMwMDQ2YTNjMjBmNzMuLjMzNTdlZTYyZDEwYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaApAQCAtNTIsMTMgJiM0Mzs1MiwxMCBAQCBzdHJ1Y3QgdnNvY2tfc29jayB7CiAJICogVGhlIGxpc3RlbmluZyBzb2NrZXQgaXMgdGhlIGhlYWQgZm9yIGJvdGggbGlzdHMuICBTb2NrZXRzIGNyZWF0ZWQKIAkgKiBmb3IgY29ubmVjdGlvbiByZXF1ZXN0cyBhcmUgcGxhY2VkIGluIHRoZSBwZW5kaW5nIGxpc3QgdW50aWwgdGhleQogCSAqIGFyZSBjb25uZWN0ZWQsIGF0IHdoaWNoIHBvaW50IHRoZXkgYXJlIHB1dCBpbiB0aGUgYWNjZXB0IHF1ZXVlIGxpc3QKLQkgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS4gIElmIGFjY2VwdCgpIGNhbm5vdCBhY2NlcHQgdGhlCi0JICogY29ubmVjdGlvbiwgaXQgaXMgbWFya2VkIGFzIHJlamVjdGVkIHNvIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGtub3dzCi0JICogdG8gY2xlYW4gdXAgdGhlIHNvY2tldC4KJiM0MzsJICogc28gdGhleSBjYW4gYmUgYWNjZXB0ZWQgaW4gYWNjZXB0KCkuCiAJICovCiAJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpbmtzOwogCXN0cnVjdCBsaXN0X2hlYWQgYWNjZXB0X3F1ZXVlOwotCWJvb2wgcmVqZWN0ZWQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBjb25uZWN0X3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBwZW5kaW5nX3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBjbG9zZV93b3JrOwpkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jCmluZGV4IDYyMmRiZDA0Njc5OTQuLjFhMjg3NzE5ZjI0YTMgMTAwNjQ0Ci0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKQEAgLTM4LDEwICYjNDM7MzgsOSBAQAogICogcGVuZGluZyBzb2NrZXQuICBXaGVuIHRoYXQgc29ja2V0IHJlYWNoZXMgdGhlIGNvbm5lY3RlZCBzdGF0ZSwgaXQgaXMgcmVtb3ZlZAogICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0JiMzOTtzIHBlbmRpbmcgbGlzdCBhbmQgZW5xdWV1ZWQgaW4gdGhlIGxpc3RlbmVyCiAgKiBzb2NrZXQmIzM5O3MgYWNjZXB0IHF1ZXVlLiAgQ2FsbGVycyBvZiBhY2NlcHQoMikgd2lsbCBhY2NlcHQgY29ubmVjdGVkIHNvY2tldHMKLSAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCYjMzk7cyBhY2NlcHQgcXVldWUuICBJZiB0aGUgc29ja2V0IGNhbm5vdCBiZSBhY2NlcHRlZAotICogZm9yIHNvbWUgcmVhc29uIHRoZW4gaXQgaXMgbWFya2VkIHJlamVjdGVkLiAgT25jZSB0aGUgY29ubmVjdGlvbiBpcwotICogYWNjZXB0ZWQsIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cAotICogZmFsbHMgd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy4KJiM0MzsgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQmIzM5O3MgYWNjZXB0IHF1ZXVlLiBPbmNlIHRoZSBjb25uZWN0aW9uIGlzIGFjY2VwdGVkLAomIzQzOyAqIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cCBmYWxscwomIzQzOyAqIHdpdGggdGhhdCB1c2VyIHByb2Nlc3MuCiAgKgogICogLSBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXNlIHBlbmRpbmcgc29ja2V0cyB3aWxsIG5ldmVyIHJlYWNoIHRoZSBjb25uZWN0ZWQKICAqIHN0YXRlOyBpbiBmYWN0LCB3ZSBtYXkgbmV2ZXIgcmVjZWl2ZSBhbm90aGVyIHBhY2tldCBhZnRlciB0aGUgY29ubmVjdGlvbgpAQCAtNDksOSAmIzQzOzQ4LDcgQEAKICAqIGZ1dHVyZSwgYWZ0ZXIgc29tZSBhbW91bnQgb2YgdGltZSBwYXNzZXMgd2hlcmUgYSBjb25uZWN0aW9uIHNob3VsZCBoYXZlIGJlZW4KICAqIGVzdGFibGlzaGVkLiAgVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIHNvY2tldCBpcyBvZmYgYWxsIGxpc3RzIHNvIGl0CiAgKiBjYW5ub3QgYmUgcmV0cmlldmVkLCB0aGVuIGRyb3BzIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBzb2NrZXQgc28gaXQgaXMgY2xlYW5lZAotICogdXAgKHNvY2tfcHV0KCkgLSZndDsgc2tfZnJlZSgpIC0mZ3Q7IG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuICBOb3RlIHRoaXMKLSAqIGZ1bmN0aW9uIHdpbGwgYWxzbyBjbGVhbnVwIHJlamVjdGVkIHNvY2tldHMsIHRob3NlIHRoYXQgcmVhY2ggdGhlIGNvbm5lY3RlZAotICogc3RhdGUgYnV0IGxlYXZlIGl0IGJlZm9yZSB0aGV5IGhhdmUgYmVlbiBhY2NlcHRlZC4KJiM0MzsgKiB1cCAoc29ja19wdXQoKSAtJmd0OyBza19mcmVlKCkgLSZndDsgb3VyIHNrX2Rlc3RydWN0IGltcGxlbWVudGF0aW9uKS4KICAqCiAgKiAtIExvY2sgb3JkZXJpbmcgZm9yIHBlbmRpbmcgb3IgYWNjZXB0IHF1ZXVlIHNvY2tldHMgaXM6CiAgKgpAQCAtNzc0LDExICYjNDM7NzcxLDEwIEBAIHN0YXRpYyB2b2lkIHZzb2NrX3BlbmRpbmdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAKIAlpZiAodnNvY2tfaXNfcGVuZGluZyhzaykpIHsKIAkJdnNvY2tfcmVtb3ZlX3BlbmRpbmcobGlzdGVuZXIsIHNrKTsKLQl9IGVsc2UgaWYgKCF2c2stJmd0O3JlamVjdGVkKSB7Ci0JCS8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBhbmQgYWNjZXB0KCkgZGlkIG5vdCByZWplY3QKLQkJICogdXMsIHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkIGJ5IG91ciB1c2VyIHByb2Nlc3MuICBXZQotCQkgKiBqdXN0IG5lZWQgdG8gZHJvcCBvdXIgcmVmZXJlbmNlcyB0byB0aGUgc29ja2V0cyBhbmQgYmUgb24KLQkJICogb3VyIHdheS4KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBzbyB3ZSBtdXN0IGhhdmUgYmVlbiBhY2NlcHRlZAomIzQzOwkJICogYnkgb3VyIHVzZXIgcHJvY2Vzcy4gV2UganVzdCBuZWVkIHRvIGRyb3Agb3VyIHJlZmVyZW5jZXMgdG8KJiM0MzsJCSAqIHRoZSBzb2NrZXRzIGFuZCBiZSBvbiBvdXIgd2F5LgogCQkgKi8KIAkJY2xlYW51cCA9IGZhbHNlOwogCQlnb3RvIG91dDsKQEAgLTk0Miw3ICYjNDM7OTM4LDYgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpfX3Zzb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJdnNrLSZndDtsaXN0ZW5lciA9IE5VTEw7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDt2c2stJmd0O3BlbmRpbmdfbGlua3MpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7dnNrLSZndDthY2NlcHRfcXVldWUpOwotCXZzay0mZ3Q7cmVqZWN0ZWQgPSBmYWxzZTsKIAl2c2stJmd0O3NlbnRfcmVxdWVzdCA9IGZhbHNlOwogCXZzay0mZ3Q7aWdub3JlX2Nvbm5lY3RpbmdfcnN0ID0gZmFsc2U7CiAJV1JJVEVfT05DRSh2c2stJmd0O3BlZXJfc2h1dGRvd24sIDApOwpAQCAtMTg0NywxMiAmIzQzOzE4NDIsMTAgQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLAogCQlwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCAmYW1wO3dhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJfQogCi0JaWYgKHNrLSZndDtza19lcnIpIHsKLQkJZXJyID0gLXNrLSZndDtza19lcnI7CiYjNDM7CWVyciA9IHNvY2tfZXJyb3Ioc2spOwomIzQzOwlpZiAoZXJyKSB7CiAJCXNrLSZndDtza19zdGF0ZSA9IFRDUF9DTE9TRTsKIAkJc29jay0mZ3Q7c3RhdGUgPSBTU19VTkNPTk5FQ1RFRDsKLQl9IGVsc2UgewotCQllcnIgPSAwOwogCX0KIAogb3V0X3dhaXQ6CkBAIC0xODkzLDcgJiM0MzsxODg2LDcgQEAgc3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywKIAl0aW1lb3V0ID0gc29ja19yY3Z0aW1lbyhsaXN0ZW5lciwgYXJnLSZndDtmbGFncyAmYW1wOyBPX05PTkJMT0NLKTsKIAogCXdoaWxlICgoY29ubmVjdGVkID0gdnNvY2tfZGVxdWV1ZV9hY2NlcHQobGlzdGVuZXIpKSA9PSBOVUxMICZhbXA7JmFtcDsKLQkgICAgICAgbGlzdGVuZXItJmd0O3NrX2VyciA9PSAwICZhbXA7JmFtcDsgdGltZW91dCAhPSAwKSB7CiYjNDM7CQl0aW1lb3V0ICE9IDApIHsKIAkJcHJlcGFyZV90b193YWl0KHNrX3NsZWVwKGxpc3RlbmVyKSwgJmFtcDt3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlyZWxlYXNlX3NvY2sobGlzdGVuZXIpOwogCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKQEAgLTE5MDYsNDEgJiM0MzsxODk5LDI2IEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssCiAJCX0KIAl9CiAKLQlpZiAobGlzdGVuZXItJmd0O3NrX2VycikgewotCQllcnIgPSAtbGlzdGVuZXItJmd0O3NrX2VycjsKLQl9IGVsc2UgaWYgKCFjb25uZWN0ZWQpIHsKLQkJZXJyID0gLUVBR0FJTjsKLQl9Ci0KIAlpZiAoY29ubmVjdGVkKSB7CiAJCXNrX2FjY2VwdHFfcmVtb3ZlZChsaXN0ZW5lcik7CiAKIAkJbG9ja19zb2NrX25lc3RlZChjb25uZWN0ZWQsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAkJdmNvbm5lY3RlZCA9IHZzb2NrX3NrKGNvbm5lY3RlZCk7CiAKLQkJLyogSWYgdGhlIGxpc3RlbmVyIHNvY2tldCBoYXMgcmVjZWl2ZWQgYW4gZXJyb3IsIHRoZW4gd2Ugc2hvdWxkCi0JCSAqIHJlamVjdCB0aGlzIHNvY2tldCBhbmQgcmV0dXJuLiAgTm90ZSB0aGF0IHdlIHNpbXBseSBtYXJrIHRoZQotCQkgKiBzb2NrZXQgcmVqZWN0ZWQsIGRyb3Agb3VyIHJlZmVyZW5jZSwgYW5kIGxldCB0aGUgY2xlYW51cAotCQkgKiBmdW5jdGlvbiBoYW5kbGUgdGhlIGNsZWFudXA7IHRoZSBmYWN0IHRoYXQgd2UgZm91bmQgaXQgaW4KLQkJICogdGhlIGxpc3RlbmVyJiMzOTtzIGFjY2VwdCBxdWV1ZSBndWFyYW50ZWVzIHRoYXQgdGhlIGNsZWFudXAKLQkJICogZnVuY3Rpb24gaGFzbiYjMzk7dCBydW4geWV0LgotCQkgKi8KLQkJaWYgKGVycikgewotCQkJdmNvbm5lY3RlZC0mZ3Q7cmVqZWN0ZWQgPSB0cnVlOwotCQl9IGVsc2UgewotCQkJbmV3c29jay0mZ3Q7c3RhdGUgPSBTU19DT05ORUNURUQ7Ci0JCQlzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7CiYjNDM7CQluZXdzb2NrLSZndDtzdGF0ZSA9IFNTX0NPTk5FQ1RFRDsKJiM0MzsJCXNvY2tfZ3JhZnQoY29ubmVjdGVkLCBuZXdzb2NrKTsKIAotCQkJc2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULAotCQkJCSZhbXA7Y29ubmVjdGVkLSZndDtza19zb2NrZXQtJmd0O2ZsYWdzKTsKJiM0MzsJCXNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCwKJiM0MzsJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7CiAKLQkJCWlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLSZndDt0cmFuc3BvcnQpKQotCQkJCXNldF9iaXQoU09DS19TVVBQT1JUX1pDLAotCQkJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7Ci0JCX0KJiM0MzsJCWlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLSZndDt0cmFuc3BvcnQpKQomIzQzOwkJCXNldF9iaXQoU09DS19TVVBQT1JUX1pDLAomIzQzOwkJCQkmYW1wO2Nvbm5lY3RlZC0mZ3Q7c2tfc29ja2V0LSZndDtmbGFncyk7CiAKIAkJcmVsZWFzZV9zb2NrKGNvbm5lY3RlZCk7CiAJCXNvY2tfcHV0KGNvbm5lY3RlZCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllcnIgPSAtRUFHQUlOOwogCX0KIAogb3V0Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMjE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwMQoJCQkJCQkJb3V0cHV0OiAxNzkKCQkJCQkJCXRob3VnaHRzOiAxMTU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSB2c29jayBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHRvdWNoaW5nIGBhZl92c29jay5jYCBhbmQgYGFmX3Zzb2NrLmhgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlcywgc28gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSBuZXcgbWVtb3J5IG1pZ2h0IGJlIGFsbG9jYXRlZCBvciBkYXRhIGNvdWxkIGJlIG1pc2hhbmRsZWQuCgpGaXJzdCwgdGhlIGByZWplY3RlZGAgZmllbGQgaXMgYmVpbmcgKnJlbW92ZWQqIGZyb20gYHN0cnVjdCB2c29ja19zb2NrYC4gVGhhdCBhbG9uZSBkb2VzbiYjMzk7dCBzY3JlYW0gJiMzNDt1bmluaXRpYWxpemVkIG1lbW9yeSwmIzM0OyBidXQgaXQgZG9lcyBmb3JjZSBtZSB0byBsb29rIGF0IGhvdyB0aGF0IGZpZWxkIHdhcyB1c2VkLiBJZiBpdCB3YXMgZ3VhcmRpbmcgYWdhaW5zdCBhY2Nlc3NpbmcgbWVtb3J5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZXBsYWNlbWVudCBsb2dpYyBpcyBzb3VuZC4KClRoZSBwYXRjaCBjaGFuZ2VzIGB2c29ja19wZW5kaW5nX3dvcmtgLCBgdnNvY2tfY29ubmVjdGAsIGFuZCBgdnNvY2tfYWNjZXB0YC4gTGV0JiMzOTtzIHN0ZXAgdGhyb3VnaCBgdnNvY2tfYWNjZXB0YC4gVGhlIGNvZGUgdXNlZCB0byBjaGVjayBgbGlzdGVuZXItJmd0O3NrX2VycmAgaW4gdGhlIGB3aGlsZWAgbG9vcCwgYW5kIG5vdyBpdCBkb2VzbiYjMzk7dC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGRpZCB0aGlzIGludHJvZHVjZSBhIHJhY2UgY29uZGl0aW9uIG9yIGEgcG90ZW50aWFsIGZvciByZXR1cm5pbmcgYW4gJiMzNDtpbnZhbGlkJiMzNDsgc29ja2V0PyBUaGUgb2xkIGxvZ2ljIHdhcyBtb3JlIGNvbnNlcnZhdGl2ZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIG5ldyBwYXRoIHN0aWxsIGhhbmRsZXMgZXJyb3JzIGdyYWNlZnVsbHkuCgpUaGUgb2xkIGxvZ2ljICphbHNvKiBoYWQgYSBgbGlzdGVuZXItJmd0O3NrX2VycmAgY2hlY2sgKmFmdGVyKiB0aGUgbG9vcCwgYW5kIGlmIGl0IHdhcyBzZXQgKmFuZCogYSBgY29ubmVjdGVkYCBzb2NrZXQgaGFkIGJlZW4gZGVxdWV1ZWQsIGl0IHdvdWxkIG1hcmsgdGhlIGBjb25uZWN0ZWRgIHNvY2tldCBhcyByZWplY3RlZC4gIE5vdyB0aGUgcGF0Y2ggcmVtb3ZlcyB0aGF0IGNoZWNrIGFuZCBwcm9jZXNzZXMgYW4gZXJyb3IgaW4gYHZzb2NrX2FjY2VwdGAuIFByZXZpb3VzbHkgaWYgdGhlcmUgd2FzIGFuIGVycm9yIG9uIHRoZSBsaXN0ZW5lciBzb2NrZXQsIGl0IHdvdWxkIHJlamVjdCB0aGUgYWNjZXB0IHNvY2tldC4gSXQgbG9va3MgbGlrZSBpdCBzdGlsbCB3YWtlcyB1cCB0aGUgc2xlZXAgcXVldWUsIGFuZCBqdXN0IGxvb3BzIGFnYWluIGlmIG5vdGhpbmcgaXMgZGVxdWV1ZWQuIFRoaXMgbG9va3MgbGlrZSBhIGNoYW5nZSB0byBob3cgZXJyb3JzIGFyZSBoYW5kbGVkLCBidXQgZG9lc24mIzM5O3QgKmRpcmVjdGx5KiBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpgdnNvY2tfY29ubmVjdGAgbm93IHVzZXMgYHNvY2tfZXJyb3Ioc2spYCBpbnN0ZWFkIG9mIGRpcmVjdGx5IGNoZWNraW5nIGBzay0mZ3Q7c2tfZXJyYC4gIFRoaXMgaXMgYSBnb29kLCBzdGFuZGFyZCBwcmFjdGljZS4gIGBzb2NrX2Vycm9yYCBnZXRzIGFuZCBjbGVhcnMgdGhlIGVycm9yIGNvZGUuIFRoaXMgaXMgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0IHRvIHNlZSBpbiBlcnJvciBoYW5kbGluZy4gVGhhdCYjMzk7cyBhIHJlZmFjdG9yaW5nLCBub3QgYSByaXNrLgoKU28sIGlzIHRoZXJlIGFuICphY3R1YWwqIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnk/IFRoZSBjcml0aWNhbCB0aGluZyBpcyB0aGF0IHRoZXJlIGFyZSBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGxlbmd0aHMuIEl0JiMzOTtzIGFsbCBhYm91dCBzdGF0ZSBtYWNoaW5lIGxvZ2ljIGFuZCBlcnJvciBoYW5kbGluZy4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBuZXcgcGxhY2VzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGNvdWxkIGJlIGludHJvZHVjZWQuCgpPa2F5LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrLiBUaGUgcmVtb3ZhbCBvZiBgdmNvbm5lY3RlZC0mZ3Q7cmVqZWN0ZWRgIGlzIGEgY3JpdGljYWwgY2hhbmdlLiBBbmQgdGhhdCYjMzk7cyBubyBsb25nZXIgY2hlY2tlZCBieSBgdnNvY2tfcGVuZGluZ193b3JrYC4gSWYgdGhlcmUgd2FzIGFueSBhY2Nlc3MgdG8gdGhpcyB2YXJpYWJsZSwgaXQgY2FuIGNhdXNlIHVzZS1hZnRlci1mcmVlIG9yIGxlYWssIGJ1dCBLQVNBTiB3aWxsIGRldGVjdCB0aGlzLiBLTVNBTiBpcyBmb3IgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSwgd2hpY2ggSSBkb24mIzM5O3Qgc2VlIGhlcmUuCgpUaGlzIHBhdGNoIGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZy4gSXQgcmVtb3ZlcyBhIGZpZWxkLCBzaW1wbGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCB0aGUgdmFyaWFibGVzIGJlaW5nIHVzZWQgYXJlIGBlcnJgLCBgY29ubmVjdGVkYCwgYW5kIGB0aW1lb3V0YCwgd2hpY2ggYXJlIGluaXRpYWxpemVkLiBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgaGVyZSB0aGF0IGNvdWxkIGRpcmVjdGx5IGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZC4gTm8gbmV3IHBvaW50ZXJzLiBObyBuZXcgYWxsb2NhdGlvbnMuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgbmVlZCBLTVNBTiB0ZXN0aW5nLiBJJiMzOTtsbCBtYXJrIGBOZWVkc0tNU0FOPWZhbHNlYC4gSXQmIzM5O3MgYSBsb2dpYyBjaGFuZ2Ugd2hpY2ggY2FuIGJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgdGVzdGluZywgYW5kIEtBU0FOIHNob3VsZCBwaWNrIHVwIGFueSBsaWZlY3ljbGUgbWFuYWdlbWVudCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDIxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgIGFuZCBzaW1wbGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgLiBJdCBtb2RpZmllcyB0aGUgc29ja2V0IHN0YXRlIG1hY2hpbmUgYW5kIGhvdyBzb2NrZXQgZXJyb3JzIChgc2tfZXJyYCkgYXJlIHByb2Nlc3NlZC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBjaGFuZ2VzIHRvIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBsZW5ndGhzIG9yIGJvdW5kcyBjaGVja3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCBlcnJvciBjb2RlcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgIGFuZCBzaW1wbGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgLiBJdCBtb2RpZmllcyB0aGUgc29ja2V0IHN0YXRlIG1hY2hpbmUgYW5kIGhvdyBzb2NrZXQgZXJyb3JzIChgc2tfZXJyYCkgYXJlIHByb2Nlc3NlZC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBjaGFuZ2VzIHRvIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBsZW5ndGhzIG9yIGJvdW5kcyBjaGVja3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCBlcnJvciBjb2RlcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTI6MTkuNzQ0MzE2MTQ0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ5NTY5MjI1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnNvY2tfY29ubmVjdFwiLFxuICAgIFwidnNvY2tfYWNjZXB0XCIsXG4gICAgXCJ2c29ja19wZW5kaW5nX3dvcmtcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgIGFuZCBzaW1wbGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgLiBJdCBtb2RpZmllcyB0aGUgc29ja2V0IHN0YXRlIG1hY2hpbmUgYW5kIGhvdyBzb2NrZXQgZXJyb3JzIChgc2tfZXJyYCkgYXJlIHByb2Nlc3NlZC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBjaGFuZ2VzIHRvIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBsZW5ndGhzIG9yIGJvdW5kcyBjaGVja3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCBlcnJvciBjb2RlcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2c29jayBjb25uZWN0aW9uIGFuZCBhY2NlcHQgbG9naWMsIHJlbW92aW5nIHRoZSAncmVqZWN0ZWQnIHN0YXRlIGFuZCBhbHRlcmluZyBob3cgZXJyb3JzIGFyZSBoYW5kbGVkIGR1cmluZyBhY2NlcHQgYW5kIGNvbm5lY3Qgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEyOjE5Ljc0NDMyMDkxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEzNTA4ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDY3NGM5NDEzN2MzNTZlOWVmZDQxZDAzYzVkMTZkZTBhOGZhODliMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAxMCAyMToxMjoxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl92c29jay5oIGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxcbmluZGV4IDMwMDQ2YTNjMjBmNzMuLjMzNTdlZTYyZDEwYmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxcbisrKyBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcXG5AQCAtNTIsMTMgKzUyLDEwIEBAIHN0cnVjdCB2c29ja19zb2NrIHtcXG4gXFx0ICogVGhlIGxpc3RlbmluZyBzb2NrZXQgaXMgdGhlIGhlYWQgZm9yIGJvdGggbGlzdHMuICBTb2NrZXRzIGNyZWF0ZWRcXG4gXFx0ICogZm9yIGNvbm5lY3Rpb24gcmVxdWVzdHMgYXJlIHBsYWNlZCBpbiB0aGUgcGVuZGluZyBsaXN0IHVudGlsIHRoZXlcXG4gXFx0ICogYXJlIGNvbm5lY3RlZCwgYXQgd2hpY2ggcG9pbnQgdGhleSBhcmUgcHV0IGluIHRoZSBhY2NlcHQgcXVldWUgbGlzdFxcbi1cXHQgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS4gIElmIGFjY2VwdCgpIGNhbm5vdCBhY2NlcHQgdGhlXFxuLVxcdCAqIGNvbm5lY3Rpb24sIGl0IGlzIG1hcmtlZCBhcyByZWplY3RlZCBzbyB0aGUgY2xlYW51cCBmdW5jdGlvbiBrbm93c1xcbi1cXHQgKiB0byBjbGVhbiB1cCB0aGUgc29ja2V0LlxcbitcXHQgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS5cXG4gXFx0ICovXFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ19saW5rcztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBhY2NlcHRfcXVldWU7XFxuLVxcdGJvb2wgcmVqZWN0ZWQ7XFxuIFxcdHN0cnVjdCBkZWxheWVkX3dvcmsgY29ubmVjdF93b3JrO1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHBlbmRpbmdfd29yaztcXG4gXFx0c3RydWN0IGRlbGF5ZWRfd29yayBjbG9zZV93b3JrO1xcbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcXG5pbmRleCA2MjJkYmQwNDY3OTk0Li4xYTI4NzcxOWYyNGEzIDEwMDY0NFxcbi0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xcbisrKyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xcbkBAIC0zOCwxMCArMzgsOSBAQFxcbiAgKiBwZW5kaW5nIHNvY2tldC4gIFdoZW4gdGhhdCBzb2NrZXQgcmVhY2hlcyB0aGUgY29ubmVjdGVkIHN0YXRlLCBpdCBpcyByZW1vdmVkXFxuICAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCdzIHBlbmRpbmcgbGlzdCBhbmQgZW5xdWV1ZWQgaW4gdGhlIGxpc3RlbmVyXFxuICAqIHNvY2tldCdzIGFjY2VwdCBxdWV1ZS4gIENhbGxlcnMgb2YgYWNjZXB0KDIpIHdpbGwgYWNjZXB0IGNvbm5lY3RlZCBzb2NrZXRzXFxuLSAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCdzIGFjY2VwdCBxdWV1ZS4gIElmIHRoZSBzb2NrZXQgY2Fubm90IGJlIGFjY2VwdGVkXFxuLSAqIGZvciBzb21lIHJlYXNvbiB0aGVuIGl0IGlzIG1hcmtlZCByZWplY3RlZC4gIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXNcXG4tICogYWNjZXB0ZWQsIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cFxcbi0gKiBmYWxscyB3aXRoIHRoYXQgdXNlciBwcm9jZXNzLlxcbisgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQncyBhY2NlcHQgcXVldWUuIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgYWNjZXB0ZWQsXFxuKyAqIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cCBmYWxsc1xcbisgKiB3aXRoIHRoYXQgdXNlciBwcm9jZXNzLlxcbiAgKlxcbiAgKiAtIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlc2UgcGVuZGluZyBzb2NrZXRzIHdpbGwgbmV2ZXIgcmVhY2ggdGhlIGNvbm5lY3RlZFxcbiAgKiBzdGF0ZTsgaW4gZmFjdCwgd2UgbWF5IG5ldmVyIHJlY2VpdmUgYW5vdGhlciBwYWNrZXQgYWZ0ZXIgdGhlIGNvbm5lY3Rpb25cXG5AQCAtNDksOSArNDgsNyBAQFxcbiAgKiBmdXR1cmUsIGFmdGVyIHNvbWUgYW1vdW50IG9mIHRpbWUgcGFzc2VzIHdoZXJlIGEgY29ubmVjdGlvbiBzaG91bGQgaGF2ZSBiZWVuXFxuICAqIGVzdGFibGlzaGVkLiAgVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIHNvY2tldCBpcyBvZmYgYWxsIGxpc3RzIHNvIGl0XFxuICAqIGNhbm5vdCBiZSByZXRyaWV2ZWQsIHRoZW4gZHJvcHMgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIHNvY2tldCBzbyBpdCBpcyBjbGVhbmVkXFxuLSAqIHVwIChzb2NrX3B1dCgpIC1cXHUwMDNlIHNrX2ZyZWUoKSAtXFx1MDAzZSBvdXIgc2tfZGVzdHJ1Y3QgaW1wbGVtZW50YXRpb24pLiAgTm90ZSB0aGlzXFxuLSAqIGZ1bmN0aW9uIHdpbGwgYWxzbyBjbGVhbnVwIHJlamVjdGVkIHNvY2tldHMsIHRob3NlIHRoYXQgcmVhY2ggdGhlIGNvbm5lY3RlZFxcbi0gKiBzdGF0ZSBidXQgbGVhdmUgaXQgYmVmb3JlIHRoZXkgaGF2ZSBiZWVuIGFjY2VwdGVkLlxcbisgKiB1cCAoc29ja19wdXQoKSAtXFx1MDAzZSBza19mcmVlKCkgLVxcdTAwM2Ugb3VyIHNrX2Rlc3RydWN0IGltcGxlbWVudGF0aW9uKS5cXG4gICpcXG4gICogLSBMb2NrIG9yZGVyaW5nIGZvciBwZW5kaW5nIG9yIGFjY2VwdCBxdWV1ZSBzb2NrZXRzIGlzOlxcbiAgKlxcbkBAIC03NzQsMTEgKzc3MSwxMCBAQCBzdGF0aWMgdm9pZCB2c29ja19wZW5kaW5nX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXG4gXFx0aWYgKHZzb2NrX2lzX3BlbmRpbmcoc2spKSB7XFxuIFxcdFxcdHZzb2NrX3JlbW92ZV9wZW5kaW5nKGxpc3RlbmVyLCBzayk7XFxuLVxcdH0gZWxzZSBpZiAoIXZzay1cXHUwMDNlcmVqZWN0ZWQpIHtcXG4tXFx0XFx0LyogV2UgYXJlIG5vdCBvbiB0aGUgcGVuZGluZyBsaXN0IGFuZCBhY2NlcHQoKSBkaWQgbm90IHJlamVjdFxcbi1cXHRcXHQgKiB1cywgc28gd2UgbXVzdCBoYXZlIGJlZW4gYWNjZXB0ZWQgYnkgb3VyIHVzZXIgcHJvY2Vzcy4gIFdlXFxuLVxcdFxcdCAqIGp1c3QgbmVlZCB0byBkcm9wIG91ciByZWZlcmVuY2VzIHRvIHRoZSBzb2NrZXRzIGFuZCBiZSBvblxcbi1cXHRcXHQgKiBvdXIgd2F5LlxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBXZSBhcmUgbm90IG9uIHRoZSBwZW5kaW5nIGxpc3Qgc28gd2UgbXVzdCBoYXZlIGJlZW4gYWNjZXB0ZWRcXG4rXFx0XFx0ICogYnkgb3VyIHVzZXIgcHJvY2Vzcy4gV2UganVzdCBuZWVkIHRvIGRyb3Agb3VyIHJlZmVyZW5jZXMgdG9cXG4rXFx0XFx0ICogdGhlIHNvY2tldHMgYW5kIGJlIG9uIG91ciB3YXkuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRjbGVhbnVwID0gZmFsc2U7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbkBAIC05NDIsNyArOTM4LDYgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpfX3Zzb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdHZzay1cXHUwMDNlbGlzdGVuZXIgPSBOVUxMO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dnNrLVxcdTAwM2VwZW5kaW5nX2xpbmtzKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnZzay1cXHUwMDNlYWNjZXB0X3F1ZXVlKTtcXG4tXFx0dnNrLVxcdTAwM2VyZWplY3RlZCA9IGZhbHNlO1xcbiBcXHR2c2stXFx1MDAzZXNlbnRfcmVxdWVzdCA9IGZhbHNlO1xcbiBcXHR2c2stXFx1MDAzZWlnbm9yZV9jb25uZWN0aW5nX3JzdCA9IGZhbHNlO1xcbiBcXHRXUklURV9PTkNFKHZzay1cXHUwMDNlcGVlcl9zaHV0ZG93biwgMCk7XFxuQEAgLTE4NDcsMTIgKzE4NDIsMTAgQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbiBcXHRcXHRwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCBcXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHNrLVxcdTAwM2Vza19lcnIpIHtcXG4tXFx0XFx0ZXJyID0gLXNrLVxcdTAwM2Vza19lcnI7XFxuK1xcdGVyciA9IHNvY2tfZXJyb3Ioc2spO1xcbitcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdHNrLVxcdTAwM2Vza19zdGF0ZSA9IFRDUF9DTE9TRTtcXG4gXFx0XFx0c29jay1cXHUwMDNlc3RhdGUgPSBTU19VTkNPTk5FQ1RFRDtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0ZXJyID0gMDtcXG4gXFx0fVxcbiBcXG4gb3V0X3dhaXQ6XFxuQEAgLTE4OTMsNyArMTg4Niw3IEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxuIFxcdHRpbWVvdXQgPSBzb2NrX3JjdnRpbWVvKGxpc3RlbmVyLCBhcmctXFx1MDAzZWZsYWdzIFxcdTAwMjYgT19OT05CTE9DSyk7XFxuIFxcbiBcXHR3aGlsZSAoKGNvbm5lY3RlZCA9IHZzb2NrX2RlcXVldWVfYWNjZXB0KGxpc3RlbmVyKSkgPT0gTlVMTCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgICAgbGlzdGVuZXItXFx1MDAzZXNrX2VyciA9PSAwIFxcdTAwMjZcXHUwMDI2IHRpbWVvdXQgIT0gMCkge1xcbitcXHRcXHR0aW1lb3V0ICE9IDApIHtcXG4gXFx0XFx0cHJlcGFyZV90b193YWl0KHNrX3NsZWVwKGxpc3RlbmVyKSwgXFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuIFxcdFxcdHJlbGVhc2Vfc29jayhsaXN0ZW5lcik7XFxuIFxcdFxcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xcbkBAIC0xOTA2LDQxICsxODk5LDI2IEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGxpc3RlbmVyLVxcdTAwM2Vza19lcnIpIHtcXG4tXFx0XFx0ZXJyID0gLWxpc3RlbmVyLVxcdTAwM2Vza19lcnI7XFxuLVxcdH0gZWxzZSBpZiAoIWNvbm5lY3RlZCkge1xcbi1cXHRcXHRlcnIgPSAtRUFHQUlOO1xcbi1cXHR9XFxuLVxcbiBcXHRpZiAoY29ubmVjdGVkKSB7XFxuIFxcdFxcdHNrX2FjY2VwdHFfcmVtb3ZlZChsaXN0ZW5lcik7XFxuIFxcbiBcXHRcXHRsb2NrX3NvY2tfbmVzdGVkKGNvbm5lY3RlZCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xcbiBcXHRcXHR2Y29ubmVjdGVkID0gdnNvY2tfc2soY29ubmVjdGVkKTtcXG4gXFxuLVxcdFxcdC8qIElmIHRoZSBsaXN0ZW5lciBzb2NrZXQgaGFzIHJlY2VpdmVkIGFuIGVycm9yLCB0aGVuIHdlIHNob3VsZFxcbi1cXHRcXHQgKiByZWplY3QgdGhpcyBzb2NrZXQgYW5kIHJldHVybi4gIE5vdGUgdGhhdCB3ZSBzaW1wbHkgbWFyayB0aGVcXG4tXFx0XFx0ICogc29ja2V0IHJlamVjdGVkLCBkcm9wIG91ciByZWZlcmVuY2UsIGFuZCBsZXQgdGhlIGNsZWFudXBcXG4tXFx0XFx0ICogZnVuY3Rpb24gaGFuZGxlIHRoZSBjbGVhbnVwOyB0aGUgZmFjdCB0aGF0IHdlIGZvdW5kIGl0IGluXFxuLVxcdFxcdCAqIHRoZSBsaXN0ZW5lcidzIGFjY2VwdCBxdWV1ZSBndWFyYW50ZWVzIHRoYXQgdGhlIGNsZWFudXBcXG4tXFx0XFx0ICogZnVuY3Rpb24gaGFzbid0IHJ1biB5ZXQuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdHZjb25uZWN0ZWQtXFx1MDAzZXJlamVjdGVkID0gdHJ1ZTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0bmV3c29jay1cXHUwMDNlc3RhdGUgPSBTU19DT05ORUNURUQ7XFxuLVxcdFxcdFxcdHNvY2tfZ3JhZnQoY29ubmVjdGVkLCBuZXdzb2NrKTtcXG4rXFx0XFx0bmV3c29jay1cXHUwMDNlc3RhdGUgPSBTU19DT05ORUNURUQ7XFxuK1xcdFxcdHNvY2tfZ3JhZnQoY29ubmVjdGVkLCBuZXdzb2NrKTtcXG4gXFxuLVxcdFxcdFxcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCxcXG4tXFx0XFx0XFx0XFx0XFx1MDAyNmNvbm5lY3RlZC1cXHUwMDNlc2tfc29ja2V0LVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCxcXG4rXFx0XFx0XFx0XFx1MDAyNmNvbm5lY3RlZC1cXHUwMDNlc2tfc29ja2V0LVxcdTAwM2VmbGFncyk7XFxuIFxcbi1cXHRcXHRcXHRpZiAodnNvY2tfbXNnemVyb2NvcHlfYWxsb3codmNvbm5lY3RlZC1cXHUwMDNldHJhbnNwb3J0KSlcXG4tXFx0XFx0XFx0XFx0c2V0X2JpdChTT0NLX1NVUFBPUlRfWkMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjb25uZWN0ZWQtXFx1MDAzZXNrX3NvY2tldC1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRcXHR9XFxuK1xcdFxcdGlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLVxcdTAwM2V0cmFuc3BvcnQpKVxcbitcXHRcXHRcXHRzZXRfYml0KFNPQ0tfU1VQUE9SVF9aQyxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNmNvbm5lY3RlZC1cXHUwMDNlc2tfc29ja2V0LVxcdTAwM2VmbGFncyk7XFxuIFxcbiBcXHRcXHRyZWxlYXNlX3NvY2soY29ubmVjdGVkKTtcXG4gXFx0XFx0c29ja19wdXQoY29ubmVjdGVkKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZXJyID0gLUVBR0FJTjtcXG4gXFx0fVxcbiBcXG4gb3V0OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMjoyMC4xNTg1MzA0MjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxOTgzMDIwNDYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiVlNPQ0tFVFNfTE9PUEJBQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2c29ja19jb25uZWN0XCIsXG4gICAgXCJ2c29ja19hY2NlcHRcIixcbiAgICBcInZzb2NrX3BlbmRpbmdfd29ya1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHZzb2NrIGNvbm5lY3Rpb24gYW5kIGFjY2VwdCBsb2dpYywgcmVtb3ZpbmcgdGhlICdyZWplY3RlZCcgc3RhdGUgYW5kIGFsdGVyaW5nIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQgZHVyaW5nIGFjY2VwdCBhbmQgY29ubmVjdCBvcGVyYXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDY3NGM5NDEzN2MzNTZlOWVmZDQxZDAzYzVkMTZkZTBhOGZhODliMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDIxOjEyOjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaCBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbmluZGV4IDMwMDQ2YTNjMjBmNzMuLjMzNTdlZTYyZDEwYmYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9hZl92c29jay5oXG4rKysgYi9pbmNsdWRlL25ldC9hZl92c29jay5oXG5AQCAtNTIsMTMgKzUyLDEwIEBAIHN0cnVjdCB2c29ja19zb2NrIHtcbiBcdCAqIFRoZSBsaXN0ZW5pbmcgc29ja2V0IGlzIHRoZSBoZWFkIGZvciBib3RoIGxpc3RzLiAgU29ja2V0cyBjcmVhdGVkXG4gXHQgKiBmb3IgY29ubmVjdGlvbiByZXF1ZXN0cyBhcmUgcGxhY2VkIGluIHRoZSBwZW5kaW5nIGxpc3QgdW50aWwgdGhleVxuIFx0ICogYXJlIGNvbm5lY3RlZCwgYXQgd2hpY2ggcG9pbnQgdGhleSBhcmUgcHV0IGluIHRoZSBhY2NlcHQgcXVldWUgbGlzdFxuLVx0ICogc28gdGhleSBjYW4gYmUgYWNjZXB0ZWQgaW4gYWNjZXB0KCkuICBJZiBhY2NlcHQoKSBjYW5ub3QgYWNjZXB0IHRoZVxuLVx0ICogY29ubmVjdGlvbiwgaXQgaXMgbWFya2VkIGFzIHJlamVjdGVkIHNvIHRoZSBjbGVhbnVwIGZ1bmN0aW9uIGtub3dzXG4tXHQgKiB0byBjbGVhbiB1cCB0aGUgc29ja2V0LlxuK1x0ICogc28gdGhleSBjYW4gYmUgYWNjZXB0ZWQgaW4gYWNjZXB0KCkuXG4gXHQgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ19saW5rcztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgYWNjZXB0X3F1ZXVlO1xuLVx0Ym9vbCByZWplY3RlZDtcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgY29ubmVjdF93b3JrO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBwZW5kaW5nX3dvcms7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIGNsb3NlX3dvcms7XG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5pbmRleCA2MjJkYmQwNDY3OTk0Li4xYTI4NzcxOWYyNGEzIDEwMDY0NFxuLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jXG4rKysgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbkBAIC0zOCwxMCArMzgsOSBAQFxuICAqIHBlbmRpbmcgc29ja2V0LiAgV2hlbiB0aGF0IHNvY2tldCByZWFjaGVzIHRoZSBjb25uZWN0ZWQgc3RhdGUsIGl0IGlzIHJlbW92ZWRcbiAgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQncyBwZW5kaW5nIGxpc3QgYW5kIGVucXVldWVkIGluIHRoZSBsaXN0ZW5lclxuICAqIHNvY2tldCdzIGFjY2VwdCBxdWV1ZS4gIENhbGxlcnMgb2YgYWNjZXB0KDIpIHdpbGwgYWNjZXB0IGNvbm5lY3RlZCBzb2NrZXRzXG4tICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0J3MgYWNjZXB0IHF1ZXVlLiAgSWYgdGhlIHNvY2tldCBjYW5ub3QgYmUgYWNjZXB0ZWRcbi0gKiBmb3Igc29tZSByZWFzb24gdGhlbiBpdCBpcyBtYXJrZWQgcmVqZWN0ZWQuICBPbmNlIHRoZSBjb25uZWN0aW9uIGlzXG4tICogYWNjZXB0ZWQsIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cFxuLSAqIGZhbGxzIHdpdGggdGhhdCB1c2VyIHByb2Nlc3MuXG4rICogZnJvbSB0aGUgbGlzdGVuZXIgc29ja2V0J3MgYWNjZXB0IHF1ZXVlLiBPbmNlIHRoZSBjb25uZWN0aW9uIGlzIGFjY2VwdGVkLFxuKyAqIGl0IGlzIG93bmVkIGJ5IHRoZSB1c2VyIHByb2Nlc3MgYW5kIHRoZSByZXNwb25zaWJpbGl0eSBmb3IgY2xlYW51cCBmYWxsc1xuKyAqIHdpdGggdGhhdCB1c2VyIHByb2Nlc3MuXG4gICpcbiAgKiAtIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlc2UgcGVuZGluZyBzb2NrZXRzIHdpbGwgbmV2ZXIgcmVhY2ggdGhlIGNvbm5lY3RlZFxuICAqIHN0YXRlOyBpbiBmYWN0LCB3ZSBtYXkgbmV2ZXIgcmVjZWl2ZSBhbm90aGVyIHBhY2tldCBhZnRlciB0aGUgY29ubmVjdGlvblxuQEAgLTQ5LDkgKzQ4LDcgQEBcbiAgKiBmdXR1cmUsIGFmdGVyIHNvbWUgYW1vdW50IG9mIHRpbWUgcGFzc2VzIHdoZXJlIGEgY29ubmVjdGlvbiBzaG91bGQgaGF2ZSBiZWVuXG4gICogZXN0YWJsaXNoZWQuICBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB0aGUgc29ja2V0IGlzIG9mZiBhbGwgbGlzdHMgc28gaXRcbiAgKiBjYW5ub3QgYmUgcmV0cmlldmVkLCB0aGVuIGRyb3BzIGFsbCByZWZlcmVuY2VzIHRvIHRoZSBzb2NrZXQgc28gaXQgaXMgY2xlYW5lZFxuLSAqIHVwIChzb2NrX3B1dCgpIC1cdTAwM2Ugc2tfZnJlZSgpIC1cdTAwM2Ugb3VyIHNrX2Rlc3RydWN0IGltcGxlbWVudGF0aW9uKS4gIE5vdGUgdGhpc1xuLSAqIGZ1bmN0aW9uIHdpbGwgYWxzbyBjbGVhbnVwIHJlamVjdGVkIHNvY2tldHMsIHRob3NlIHRoYXQgcmVhY2ggdGhlIGNvbm5lY3RlZFxuLSAqIHN0YXRlIGJ1dCBsZWF2ZSBpdCBiZWZvcmUgdGhleSBoYXZlIGJlZW4gYWNjZXB0ZWQuXG4rICogdXAgKHNvY2tfcHV0KCkgLVx1MDAzZSBza19mcmVlKCkgLVx1MDAzZSBvdXIgc2tfZGVzdHJ1Y3QgaW1wbGVtZW50YXRpb24pLlxuICAqXG4gICogLSBMb2NrIG9yZGVyaW5nIGZvciBwZW5kaW5nIG9yIGFjY2VwdCBxdWV1ZSBzb2NrZXRzIGlzOlxuICAqXG5AQCAtNzc0LDExICs3NzEsMTAgQEAgc3RhdGljIHZvaWQgdnNvY2tfcGVuZGluZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdGlmICh2c29ja19pc19wZW5kaW5nKHNrKSkge1xuIFx0XHR2c29ja19yZW1vdmVfcGVuZGluZyhsaXN0ZW5lciwgc2spO1xuLVx0fSBlbHNlIGlmICghdnNrLVx1MDAzZXJlamVjdGVkKSB7XG4tXHRcdC8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBhbmQgYWNjZXB0KCkgZGlkIG5vdCByZWplY3Rcbi1cdFx0ICogdXMsIHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkIGJ5IG91ciB1c2VyIHByb2Nlc3MuICBXZVxuLVx0XHQgKiBqdXN0IG5lZWQgdG8gZHJvcCBvdXIgcmVmZXJlbmNlcyB0byB0aGUgc29ja2V0cyBhbmQgYmUgb25cbi1cdFx0ICogb3VyIHdheS5cbitcdH0gZWxzZSB7XG4rXHRcdC8qIFdlIGFyZSBub3Qgb24gdGhlIHBlbmRpbmcgbGlzdCBzbyB3ZSBtdXN0IGhhdmUgYmVlbiBhY2NlcHRlZFxuK1x0XHQgKiBieSBvdXIgdXNlciBwcm9jZXNzLiBXZSBqdXN0IG5lZWQgdG8gZHJvcCBvdXIgcmVmZXJlbmNlcyB0b1xuK1x0XHQgKiB0aGUgc29ja2V0cyBhbmQgYmUgb24gb3VyIHdheS5cbiBcdFx0ICovXG4gXHRcdGNsZWFudXAgPSBmYWxzZTtcbiBcdFx0Z290byBvdXQ7XG5AQCAtOTQyLDcgKzkzOCw2IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0dnNrLVx1MDAzZWxpc3RlbmVyID0gTlVMTDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZzay1cdTAwM2VwZW5kaW5nX2xpbmtzKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnZzay1cdTAwM2VhY2NlcHRfcXVldWUpO1xuLVx0dnNrLVx1MDAzZXJlamVjdGVkID0gZmFsc2U7XG4gXHR2c2stXHUwMDNlc2VudF9yZXF1ZXN0ID0gZmFsc2U7XG4gXHR2c2stXHUwMDNlaWdub3JlX2Nvbm5lY3RpbmdfcnN0ID0gZmFsc2U7XG4gXHRXUklURV9PTkNFKHZzay1cdTAwM2VwZWVyX3NodXRkb3duLCAwKTtcbkBAIC0xODQ3LDEyICsxODQyLDEwIEBAIHN0YXRpYyBpbnQgdnNvY2tfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqYWRkcixcbiBcdFx0cHJlcGFyZV90b193YWl0KHNrX3NsZWVwKHNrKSwgXHUwMDI2d2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcdH1cbiBcbi1cdGlmIChzay1cdTAwM2Vza19lcnIpIHtcbi1cdFx0ZXJyID0gLXNrLVx1MDAzZXNrX2VycjtcbitcdGVyciA9IHNvY2tfZXJyb3Ioc2spO1xuK1x0aWYgKGVycikge1xuIFx0XHRzay1cdTAwM2Vza19zdGF0ZSA9IFRDUF9DTE9TRTtcbiBcdFx0c29jay1cdTAwM2VzdGF0ZSA9IFNTX1VOQ09OTkVDVEVEO1xuLVx0fSBlbHNlIHtcbi1cdFx0ZXJyID0gMDtcbiBcdH1cbiBcbiBvdXRfd2FpdDpcbkBAIC0xODkzLDcgKzE4ODYsNyBAQCBzdGF0aWMgaW50IHZzb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLFxuIFx0dGltZW91dCA9IHNvY2tfcmN2dGltZW8obGlzdGVuZXIsIGFyZy1cdTAwM2VmbGFncyBcdTAwMjYgT19OT05CTE9DSyk7XG4gXG4gXHR3aGlsZSAoKGNvbm5lY3RlZCA9IHZzb2NrX2RlcXVldWVfYWNjZXB0KGxpc3RlbmVyKSkgPT0gTlVMTCBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICBsaXN0ZW5lci1cdTAwM2Vza19lcnIgPT0gMCBcdTAwMjZcdTAwMjYgdGltZW91dCAhPSAwKSB7XG4rXHRcdHRpbWVvdXQgIT0gMCkge1xuIFx0XHRwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAobGlzdGVuZXIpLCBcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xuIFx0XHRyZWxlYXNlX3NvY2sobGlzdGVuZXIpO1xuIFx0XHR0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTtcbkBAIC0xOTA2LDQxICsxODk5LDI2IEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChsaXN0ZW5lci1cdTAwM2Vza19lcnIpIHtcbi1cdFx0ZXJyID0gLWxpc3RlbmVyLVx1MDAzZXNrX2Vycjtcbi1cdH0gZWxzZSBpZiAoIWNvbm5lY3RlZCkge1xuLVx0XHRlcnIgPSAtRUFHQUlOO1xuLVx0fVxuLVxuIFx0aWYgKGNvbm5lY3RlZCkge1xuIFx0XHRza19hY2NlcHRxX3JlbW92ZWQobGlzdGVuZXIpO1xuIFxuIFx0XHRsb2NrX3NvY2tfbmVzdGVkKGNvbm5lY3RlZCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpO1xuIFx0XHR2Y29ubmVjdGVkID0gdnNvY2tfc2soY29ubmVjdGVkKTtcbiBcbi1cdFx0LyogSWYgdGhlIGxpc3RlbmVyIHNvY2tldCBoYXMgcmVjZWl2ZWQgYW4gZXJyb3IsIHRoZW4gd2Ugc2hvdWxkXG4tXHRcdCAqIHJlamVjdCB0aGlzIHNvY2tldCBhbmQgcmV0dXJuLiAgTm90ZSB0aGF0IHdlIHNpbXBseSBtYXJrIHRoZVxuLVx0XHQgKiBzb2NrZXQgcmVqZWN0ZWQsIGRyb3Agb3VyIHJlZmVyZW5jZSwgYW5kIGxldCB0aGUgY2xlYW51cFxuLVx0XHQgKiBmdW5jdGlvbiBoYW5kbGUgdGhlIGNsZWFudXA7IHRoZSBmYWN0IHRoYXQgd2UgZm91bmQgaXQgaW5cbi1cdFx0ICogdGhlIGxpc3RlbmVyJ3MgYWNjZXB0IHF1ZXVlIGd1YXJhbnRlZXMgdGhhdCB0aGUgY2xlYW51cFxuLVx0XHQgKiBmdW5jdGlvbiBoYXNuJ3QgcnVuIHlldC5cbi1cdFx0ICovXG4tXHRcdGlmIChlcnIpIHtcbi1cdFx0XHR2Y29ubmVjdGVkLVx1MDAzZXJlamVjdGVkID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRuZXdzb2NrLVx1MDAzZXN0YXRlID0gU1NfQ09OTkVDVEVEO1xuLVx0XHRcdHNvY2tfZ3JhZnQoY29ubmVjdGVkLCBuZXdzb2NrKTtcbitcdFx0bmV3c29jay1cdTAwM2VzdGF0ZSA9IFNTX0NPTk5FQ1RFRDtcbitcdFx0c29ja19ncmFmdChjb25uZWN0ZWQsIG5ld3NvY2spO1xuIFxuLVx0XHRcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCxcbi1cdFx0XHRcdFx1MDAyNmNvbm5lY3RlZC1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuK1x0XHRzZXRfYml0KFNPQ0tfQ1VTVE9NX1NPQ0tPUFQsXG4rXHRcdFx0XHUwMDI2Y29ubmVjdGVkLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmbGFncyk7XG4gXG4tXHRcdFx0aWYgKHZzb2NrX21zZ3plcm9jb3B5X2FsbG93KHZjb25uZWN0ZWQtXHUwMDNldHJhbnNwb3J0KSlcbi1cdFx0XHRcdHNldF9iaXQoU09DS19TVVBQT1JUX1pDLFxuLVx0XHRcdFx0XHRcdTAwMjZjb25uZWN0ZWQtXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbi1cdFx0fVxuK1x0XHRpZiAodnNvY2tfbXNnemVyb2NvcHlfYWxsb3codmNvbm5lY3RlZC1cdTAwM2V0cmFuc3BvcnQpKVxuK1x0XHRcdHNldF9iaXQoU09DS19TVVBQT1JUX1pDLFxuK1x0XHRcdFx0XHUwMDI2Y29ubmVjdGVkLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmbGFncyk7XG4gXG4gXHRcdHJlbGVhc2Vfc29jayhjb25uZWN0ZWQpO1xuIFx0XHRzb2NrX3B1dChjb25uZWN0ZWQpO1xuK1x0fSBlbHNlIHtcbitcdFx0ZXJyID0gLUVBR0FJTjtcbiBcdH1cbiBcbiBvdXQ6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMjoyMC4xNTg1MzE4NTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjYxNzY1NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFZTb2NrIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyB0aGUgdnNvY2sgY29kZSwgc3BlY2lmaWNhbGx5IGBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNgIGFuZCBgaW5jbHVkZS9uZXQvYWZfdnNvY2suaGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBpdCdzIHRvdWNoaW5nIGNvcmUgdnNvY2sgbG9naWMuIEl0J3MgcmVtb3ZpbmcgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgLCB3aGljaCBzb3VuZHMgcHJldHR5IGZ1bmRhbWVudGFsLCBhbmQgdGhlbiBpdCdzIGNoYW5naW5nIHRoZSBiZWhhdmlvciBvZiBgdnNvY2tfcGVuZGluZ193b3JrYCwgYHZzb2NrX2Nvbm5lY3RgLCBhbmQgYHZzb2NrX2FjY2VwdGAuIFNwZWNpZmljYWxseSwgaW4gYHZzb2NrX2FjY2VwdGAsIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGNoYW5naW5nIGhvdyBlcnJvcnMgb24gdGhlIGxpc3RlbmVyIHNvY2tldCBhcmUgaGFuZGxlZCB3aGVuIGRlcXVldWluZyBhbiBhY2NlcHRlZCBzb2NrZXQuIEFsc28sIGB2c29ja19jb25uZWN0YCBpcyBub3cgdXNpbmcgYHNvY2tfZXJyb3Ioc2spYCBpbnN0ZWFkIG9mIGBzay1cdTAwM2Vza19lcnJgLCBzbyB0aGF0J3MgYSBkaWZmZXJlbnQgYXBwcm9hY2ggdG8gZXJyb3IgY2hlY2tpbmcgZHVyaW5nIGNvbm5lY3Rpb24uXG5cblRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGNsb3NlciBsb29rIGJlY2F1c2UgdGhlc2UgYXJlIGNyaXRpY2FsIGFyZWFzIGFuZCBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbnMgYWx3YXlzIHJlcXVpcmUgdGhvcm91Z2ggc2NydXRpbnkuIFRoaXMgY2hhbmdlIGRlZmluaXRlbHkgaGFzIHBvdGVudGlhbCBmdW5jdGlvbmFsIGltcGFjdHMsIGFuZCBJJ20gdGhpbmtpbmcgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gbWFrZSBzdXJlIGl0J3Mgcm9idXN0LlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBleGFjdCBpbXBsaWNhdGlvbnMuIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBmdW5jdGlvbnM6IGB2c29ja19wZW5kaW5nX3dvcmtgLCBgdnNvY2tfY29ubmVjdGAsIGFuZCBgdnNvY2tfYWNjZXB0YC4gSSdsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHNvIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCBgbmV0L3Ztd192c29jay9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzZXR0aW5ncyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSB0aGlzLiBJJ2xsIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBLY29uZmlnIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMjoyNS40MjAzMDI1MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA0MzMwODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZTT0NLRVRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC92bXdfdnNvY2svS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL0tjb25maWctNS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6Njpjb25maWcgVlNPQ0tFVFNcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXQgcHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMTgtXFxubmV0L3Ztd192c29jay9LY29uZmlnOjE5OmNvbmZpZyBWU09DS0VUU19ESUFHXFxubmV0L3Ztd192c29jay9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjgtXFxubmV0L3Ztd192c29jay9LY29uZmlnOjI5OmNvbmZpZyBWU09DS0VUU19MT09QQkFDS1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy0zMC1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXRzIGxvb3BiYWNrIHRyYW5zcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTI6MjUuNDcwNzQyMzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTg5MjY0NjExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93biBpbW1lZGlhdGUgcHJvY2Vzc2luZzpcblxuKipWU09DS0VUUyBDb25maWd1cmF0aW9uIENoZWNrKipcblxuQWxyaWdodCwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHRvIGBWU09DS0VUU2AuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGhlICpvbmx5KiB0aGluZyB3ZSdyZSBkZWFsaW5nIHdpdGguIE5vIHBvaW50IGluIG1ha2luZyBhc3N1bXB0aW9ucy4gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBhbmQgdmVyaWZ5IHRoYXQgdGhlcmUgYXJlbid0ICphbnkqIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgaW4gcGxheSBvciBwb3RlbnRpYWxseSBvdmVycmlkZSBgVlNPQ0tFVFNgLCBvciBpbnRlcmFjdCB3aXRoIGl0IGluIGEgd2F5IHRoYXQgSSBuZWVkIHRvIGFjY291bnQgZm9yLiBObyBwb2ludCBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUgYmFzZWQgb24gYSBzaW5nbGUgdmFyaWFibGUuIFNvLCB0aGUgbmV4dCBzdGVwLCBhcyBhbHdheXMsIGlzIGEgc3lzdGVtcy1sZXZlbCBjaGVjay4gTGV0J3MgbWFrZSBzdXJlIHRoaXMgaXMgdGhlIG9ubHkgdGhpbmcgd2UgbmVlZCB0byBjb25zaWRlciBpbiB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUvc3lzdGVtLiBBIHF1aWNrIGxvb2sgYXJvdW5kIHRoZSBjb2RlIGJhc2UgdG8gZmluZCBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1ODcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMjoyOC40NjAwMTA3NjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4ODMyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay9LY29uZmlnPTE5PWNvbmZpZyBWU09DS0VUU19ESUFHXFxubmV0L3Ztd192c29jay9LY29uZmlnLTIwLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2VcXFwiXFxubmV0L3Ztd192c29jay9LY29uZmlnOjIxOlxcdGRlcGVuZHMgb24gVlNPQ0tFVFNcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctMjItXFx0ZGVmYXVsdCB5XFxuLS1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc9Mjk9Y29uZmlnIFZTT0NLRVRTX0xPT1BCQUNLXFxubmV0L3Ztd192c29jay9LY29uZmlnLTMwLVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldHMgbG9vcGJhY2sgdHJhbnNwb3J0XFxcIlxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzozMTpcXHRkZXBlbmRzIG9uIFZTT0NLRVRTXFxubmV0L3Ztd192c29jay9LY29uZmlnLTMyLVxcdGRlZmF1bHQgeVxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnPTQxPWNvbmZpZyBWTVdBUkVfVk1DSV9WU09DS0VUU1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiVk13YXJlIFZNQ0kgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHNcXFwiXFxubmV0L3Ztd192c29jay9LY29uZmlnOjQzOlxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgVk1XQVJFX1ZNQ0lcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNDQtXFx0aGVscFxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnPTUzPWNvbmZpZyBWSVJUSU9fVlNPQ0tFVFNcXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTQtXFx0dHJpc3RhdGUgXFxcInZpcnRpbyB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0c1xcXCJcXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NTU6XFx0ZGVwZW5kcyBvbiBWU09DS0VUUyBcXHUwMDI2XFx1MDAyNiBWSVJUSU9cXG5uZXQvdm13X3Zzb2NrL0tjb25maWctNTYtXFx0c2VsZWN0IFZJUlRJT19WU09DS0VUU19DT01NT05cXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZz03Mz1jb25maWcgSFlQRVJWX1ZTT0NLRVRTXFxubmV0L3Ztd192c29jay9LY29uZmlnLTc0LVxcdHRyaXN0YXRlIFxcXCJIeXBlci1WIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXFxcIlxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzo3NTpcXHRkZXBlbmRzIG9uIFZTT0NLRVRTIFxcdTAwMjZcXHUwMDI2IEhZUEVSVl9WTUJVU1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy03Ni1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEyOjI4LjUwNjkwMTU4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzM0NjY2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbnNpZGVyYXRpb25zOlxuXG4qKlZTT0NLIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IFZTT0NLIGNvbmZpZ3VyYXRpb25zLiBPYnZpb3VzbHksIHRoZSBjb3JlIGlzIHRoZSBgVlNPQ0tFVFNgIG9wdGlvbi4gVGhhdCdzIHRoZSBiYXNlbGluZSwgdGhlIGZvdW5kYXRpb24uIEkgYWxzbyBrbm93IHRoYXQgYFZTT0NLRVRTX0xPT1BCQUNLYCBpcyByZWFsbHkgdmFsdWFibGUgZm9yIGxvY2FsIHRlc3RpbmcgYW5kIGRlYnVnZ2luZy4gSXQncyBhIGxpZmVzYXZlciwgYmVpbmcgYWJsZSB0byBzaW11bGF0ZSBhIGNvbm5lY3Rpb24gd2l0aGluIHRoZSBzYW1lIGhvc3QuXG5cbk5vdywgSSBuZWVkIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29kZSwgc3BlY2lmaWNhbGx5IGBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNgLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgIHRoZXJlLiBVbmRlcnN0YW5kaW5nIHRob3NlIHR3byBmdW5jdGlvbnMgaXMgYWJzb2x1dGVseSBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgY29ubmVjdGlvbiBsaWZlY3ljbGUgZnVuY3Rpb25zIGFuZCB0aGUgaGFuZHNoYWtlIGlzIHNldCB1cC4gVGhleSdyZSBnb2luZyB0byB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZSBjb3JlIG1lY2hhbmljcyBJJ20gZGVhbGluZyB3aXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzI3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTI6MzEuODgwMzcwOTA2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjYzNTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZzb2NrX2FjY2VwdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay9hZl92c29jay5jPTE2NzI9c3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTE4NTctXFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjE4NTg6c3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMtMTg1OS1cXHRcXHRcXHRzdHJ1Y3QgcHJvdG9fYWNjZXB0X2FyZyAqYXJnKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI2MjI9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdnNvY2tfc3RyZWFtX29wcyA9IHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjI4LVxcdC5zb2NrZXRwYWlyID0gc29ja19ub19zb2NrZXRwYWlyLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjI5OlxcdC5hY2NlcHQgPSB2c29ja19hY2NlcHQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2MzAtXFx0LmdldG5hbWUgPSB2c29ja19nZXRuYW1lLFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jPTI2NDQ9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdnNvY2tfc2VxcGFja2V0X29wcyA9IHtcXG4tLVxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYy0yNjUwLVxcdC5zb2NrZXRwYWlyID0gc29ja19ub19zb2NrZXRwYWlyLFxcbm5ldC92bXdfdnNvY2svYWZfdnNvY2suYzoyNjUxOlxcdC5hY2NlcHQgPSB2c29ja19hY2NlcHQsXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTI2NTItXFx0LmdldG5hbWUgPSB2c29ja19nZXRuYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMjozMS45MjU2NDExMzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjg0MDMwODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlY2VudCBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gcmV2aWV3aW5nIHRoaXMgcGF0Y2ggYW5kIGhlcmUncyB0aGUgYnJlYWtkb3duIG9mIG15IHRoaW5raW5nLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGNoYW5nZXMgdG8gdGhlIGB2c29ja2AgbW9kdWxlLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGB2c29ja19jb25uZWN0YCBhbmQgYHZzb2NrX2FjY2VwdGAgZnVuY3Rpb25zLiBJdCBhcHBlYXJzIHRvIHJlbW92ZSB0aGUgYHJlamVjdGVkYCBmaWVsZCBmcm9tIGB2c29ja19zb2NrYCBhbmQgYWxzbyBzaW1wbGlmaWVzIHRoZSBgdnNvY2tfcGVuZGluZ193b3JrYCBsb2dpYy4gVGhlIGZhY3QgdGhhdCB0aGVzZSBjaGFuZ2VzIGFyZSB3aXRoaW4gdGhlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IHRoZSB2c29jayBjb2RlLCBtYWtlcyB0aGlzIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5HaXZlbiB0aGUgc2NvcGUgYW5kIGltcGFjdCB3aXRoaW4gdGhlIGB2c29ja2AgbW9kdWxlLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEknbGwgZmxhZyBpdCB3aXRoIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbkZvciBmb2N1c2VkIGZ1enppbmcgZWZmb3J0cywgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uIGFyZSBkZWZpbml0ZWx5IGB2c29ja19jb25uZWN0YCwgYHZzb2NrX2FjY2VwdGAsIGFuZCBgdnNvY2tfcGVuZGluZ193b3JrYC4gSSdsbCBhbHNvIHdhbnQgdG8gZW5zdXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBrZXJuZWwgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQsIHNwZWNpZmljYWxseSBgVlNPQ0tFVFNgIGFuZCBgVlNPQ0tFVFNfTE9PUEJBQ0tgLlxuXG5Ob3csIGJlZm9yZSBJIGNvbW1pdCB0byBhIGZ1bGwtYmxvd24gZnV6emluZyBjYW1wYWlnbiwgSSB3YW50IHRvIHF1aWNrbHkgZG91YmxlIGNoZWNrIHRoZSBuYXR1cmUgb2YgYHZzb2NrX3BlbmRpbmdfd29ya2AuIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBpdCdzIGRlY2xhcmVkIGFzIHN0YXRpYywgYW5kIGlmIGl0J3MgaW5saW5lZC4gVGhpcyB3aWxsIGFmZmVjdCBob3cgYWNjZXNzaWJsZSBpdCBpcyBhbmQgd2hhdCBraW5kIG9mIGluc3RydW1lbnRhdGlvbiBJIG1pZ2h0IG5lZWQgdG8gYXBwbHkgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDQwLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEyOjM2LjIwOTY3NDYyN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3NjIzNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnNvY2tfcGVuZGluZ193b3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC92bXdfdnNvY2svYWZfdnNvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9NzQ3PXN0YXRpYyBpbnQgdnNvY2tfc2VuZF9zaHV0ZG93bihzdHJ1Y3Qgc29jayAqc2ssIGludCBtb2RlKVxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTc1Ni1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM6NzU3OnN0YXRpYyB2b2lkIHZzb2NrX3BlbmRpbmdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTc1OC17XFxuLS1cXG5uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmM9OTA0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqX192c29ja19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk0NC1cXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2dnNrLVxcdTAwM2Vjb25uZWN0X3dvcmssIHZzb2NrX2Nvbm5lY3RfdGltZW91dCk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jOjk0NTpcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2dnNrLVxcdTAwM2VwZW5kaW5nX3dvcmssIHZzb2NrX3BlbmRpbmdfd29yayk7XFxubmV0L3Ztd192c29jay9hZl92c29jay5jLTk0Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMjE6MTI6MzYuMjYxNDQwODAyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDYyMzU1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKkFuYWx5emluZyB2c29ja19wZW5kaW5nX3dvcmsgYW5kIENvZGUgRmxvdyoqXG5cblJpZ2h0LCBzbyBgdnNvY2tfcGVuZGluZ193b3JrYCBpcyBhIHdvcmtxdWV1ZSBjYWxsYmFjay4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBhIGZldyB0aGluZ3MuIEZpcnN0LCBpdCdzIG5vdCBnb2luZyB0byBiZSBpbmxpbmVkIOKAkyB3b3JrcXVldWUgY2FsbGJhY2tzIGFyZSBkZXNpZ25lZCB0byBiZSBydW4gYXN5bmNocm9ub3VzbHksIG9mZiB0aGUgY3JpdGljYWwgcGF0aC4gU2Vjb25kLCB0aGF0IGFsc28gbWVhbnMgd2UncmUgbGlrZWx5IGdyYWJiaW5nIGl0cyBhZGRyZXNzIHNvbWV3aGVyZS4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gbm90ZSBmb3IgbGF0ZXIsIHBvdGVudGlhbGx5IGZvciBkZWJ1Z2dpbmcgb3IgdHJhY2luZy4gSXQgZ2l2ZXMgbWUgYSBjcnVjaWFsIGNsdWUgYWJvdXQgaG93IHRoaXMgY29kZSB3aWxsIGJlIG9yZ2FuaXplZCBhbmQgY2FsbGVkIGJ5IHRoZSB3b3JrcXVldWUgbWFjaGluZXJ5LlxuXG5NeSBuZXh0IHN0ZXAsIGxvb2tpbmcgYXQgdGhpcyBjb250ZXh0LCBpcyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc4NSwiT3V0cHV0VG9rZW5zIjoxMDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMjozOS45MDc2Nzg5MDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTA1Mjk1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnNvY2tfY29ubmVjdFwiLFxuICAgIFwidnNvY2tfYWNjZXB0XCIsXG4gICAgXCJ2c29ja19wZW5kaW5nX3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2c29jayBjb25uZWN0aW9uIGFuZCBhY2NlcHQgbG9naWMsIHJlbW92aW5nIHRoZSAncmVqZWN0ZWQnIHN0YXRlIGFuZCBhbHRlcmluZyBob3cgZXJyb3JzIGFyZSBoYW5kbGVkIGR1cmluZyBhY2NlcHQgYW5kIGNvbm5lY3Qgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlNPQ0tFVFNcIixcbiAgICBcIlZTT0NLRVRTX0xPT1BCQUNLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnNvY2tfY29ubmVjdFwiLFxuICAgIFwidnNvY2tfYWNjZXB0XCIsXG4gICAgXCJ2c29ja19wZW5kaW5nX3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2c29jayBjb25uZWN0aW9uIGFuZCBhY2NlcHQgbG9naWMsIHJlbW92aW5nIHRoZSAncmVqZWN0ZWQnIHN0YXRlIGFuZCBhbHRlcmluZyBob3cgZXJyb3JzIGFyZSBoYW5kbGVkIGR1cmluZyBhY2NlcHQgYW5kIGNvbm5lY3Qgb3BlcmF0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEyOjM5Ljk4ODczOTcxNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MTI0ODk5NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMjozOS45ODkyNjE3MDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQ3MTE5NjQ1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgIGFuZCBzaW1wbGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgLiBJdCBtb2RpZmllcyB0aGUgc29ja2V0IHN0YXRlIG1hY2hpbmUgYW5kIGhvdyBzb2NrZXQgZXJyb3JzIChgc2tfZXJyYCkgYXJlIHByb2Nlc3NlZC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBjaGFuZ2VzIHRvIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBsZW5ndGhzIG9yIGJvdW5kcyBjaGVja3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCBlcnJvciBjb2RlcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0Njc0Yzk0MTM3YzM1NmU5ZWZkNDFkMDNjNWQxNmRlMGE4ZmE4OWIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMjE6MTI6MTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl92c29jay5oIGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuaW5kZXggMzAwNDZhM2MyMGY3My4uMzM1N2VlNjJkMTBiZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbisrKyBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbkBAIC01MiwxMyArNTIsMTAgQEAgc3RydWN0IHZzb2NrX3NvY2sge1xuIFx0ICogVGhlIGxpc3RlbmluZyBzb2NrZXQgaXMgdGhlIGhlYWQgZm9yIGJvdGggbGlzdHMuICBTb2NrZXRzIGNyZWF0ZWRcbiBcdCAqIGZvciBjb25uZWN0aW9uIHJlcXVlc3RzIGFyZSBwbGFjZWQgaW4gdGhlIHBlbmRpbmcgbGlzdCB1bnRpbCB0aGV5XG4gXHQgKiBhcmUgY29ubmVjdGVkLCBhdCB3aGljaCBwb2ludCB0aGV5IGFyZSBwdXQgaW4gdGhlIGFjY2VwdCBxdWV1ZSBsaXN0XG4tXHQgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS4gIElmIGFjY2VwdCgpIGNhbm5vdCBhY2NlcHQgdGhlXG4tXHQgKiBjb25uZWN0aW9uLCBpdCBpcyBtYXJrZWQgYXMgcmVqZWN0ZWQgc28gdGhlIGNsZWFudXAgZnVuY3Rpb24ga25vd3Ncbi1cdCAqIHRvIGNsZWFuIHVwIHRoZSBzb2NrZXQuXG4rXHQgKiBzbyB0aGV5IGNhbiBiZSBhY2NlcHRlZCBpbiBhY2NlcHQoKS5cbiBcdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpbmtzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBhY2NlcHRfcXVldWU7XG4tXHRib29sIHJlamVjdGVkO1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBjb25uZWN0X3dvcms7XG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHBlbmRpbmdfd29yaztcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgY2xvc2Vfd29yaztcbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbmluZGV4IDYyMmRiZDA0Njc5OTQuLjFhMjg3NzE5ZjI0YTMgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbisrKyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuQEAgLTM4LDEwICszOCw5IEBAXG4gICogcGVuZGluZyBzb2NrZXQuICBXaGVuIHRoYXQgc29ja2V0IHJlYWNoZXMgdGhlIGNvbm5lY3RlZCBzdGF0ZSwgaXQgaXMgcmVtb3ZlZFxuICAqIGZyb20gdGhlIGxpc3RlbmVyIHNvY2tldCdzIHBlbmRpbmcgbGlzdCBhbmQgZW5xdWV1ZWQgaW4gdGhlIGxpc3RlbmVyXG4gICogc29ja2V0J3MgYWNjZXB0IHF1ZXVlLiAgQ2FsbGVycyBvZiBhY2NlcHQoMikgd2lsbCBhY2NlcHQgY29ubmVjdGVkIHNvY2tldHNcbi0gKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQncyBhY2NlcHQgcXVldWUuICBJZiB0aGUgc29ja2V0IGNhbm5vdCBiZSBhY2NlcHRlZFxuLSAqIGZvciBzb21lIHJlYXNvbiB0aGVuIGl0IGlzIG1hcmtlZCByZWplY3RlZC4gIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXNcbi0gKiBhY2NlcHRlZCwgaXQgaXMgb3duZWQgYnkgdGhlIHVzZXIgcHJvY2VzcyBhbmQgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBjbGVhbnVwXG4tICogZmFsbHMgd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy5cbisgKiBmcm9tIHRoZSBsaXN0ZW5lciBzb2NrZXQncyBhY2NlcHQgcXVldWUuIE9uY2UgdGhlIGNvbm5lY3Rpb24gaXMgYWNjZXB0ZWQsXG4rICogaXQgaXMgb3duZWQgYnkgdGhlIHVzZXIgcHJvY2VzcyBhbmQgdGhlIHJlc3BvbnNpYmlsaXR5IGZvciBjbGVhbnVwIGZhbGxzXG4rICogd2l0aCB0aGF0IHVzZXIgcHJvY2Vzcy5cbiAgKlxuICAqIC0gSXQgaXMgcG9zc2libGUgdGhhdCB0aGVzZSBwZW5kaW5nIHNvY2tldHMgd2lsbCBuZXZlciByZWFjaCB0aGUgY29ubmVjdGVkXG4gICogc3RhdGU7IGluIGZhY3QsIHdlIG1heSBuZXZlciByZWNlaXZlIGFub3RoZXIgcGFja2V0IGFmdGVyIHRoZSBjb25uZWN0aW9uXG5AQCAtNDksOSArNDgsNyBAQFxuICAqIGZ1dHVyZSwgYWZ0ZXIgc29tZSBhbW91bnQgb2YgdGltZSBwYXNzZXMgd2hlcmUgYSBjb25uZWN0aW9uIHNob3VsZCBoYXZlIGJlZW5cbiAgKiBlc3RhYmxpc2hlZC4gIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBzb2NrZXQgaXMgb2ZmIGFsbCBsaXN0cyBzbyBpdFxuICAqIGNhbm5vdCBiZSByZXRyaWV2ZWQsIHRoZW4gZHJvcHMgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIHNvY2tldCBzbyBpdCBpcyBjbGVhbmVkXG4tICogdXAgKHNvY2tfcHV0KCkgLVx1MDAzZSBza19mcmVlKCkgLVx1MDAzZSBvdXIgc2tfZGVzdHJ1Y3QgaW1wbGVtZW50YXRpb24pLiAgTm90ZSB0aGlzXG4tICogZnVuY3Rpb24gd2lsbCBhbHNvIGNsZWFudXAgcmVqZWN0ZWQgc29ja2V0cywgdGhvc2UgdGhhdCByZWFjaCB0aGUgY29ubmVjdGVkXG4tICogc3RhdGUgYnV0IGxlYXZlIGl0IGJlZm9yZSB0aGV5IGhhdmUgYmVlbiBhY2NlcHRlZC5cbisgKiB1cCAoc29ja19wdXQoKSAtXHUwMDNlIHNrX2ZyZWUoKSAtXHUwMDNlIG91ciBza19kZXN0cnVjdCBpbXBsZW1lbnRhdGlvbikuXG4gICpcbiAgKiAtIExvY2sgb3JkZXJpbmcgZm9yIHBlbmRpbmcgb3IgYWNjZXB0IHF1ZXVlIHNvY2tldHMgaXM6XG4gICpcbkBAIC03NzQsMTEgKzc3MSwxMCBAQCBzdGF0aWMgdm9pZCB2c29ja19wZW5kaW5nX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIFx0aWYgKHZzb2NrX2lzX3BlbmRpbmcoc2spKSB7XG4gXHRcdHZzb2NrX3JlbW92ZV9wZW5kaW5nKGxpc3RlbmVyLCBzayk7XG4tXHR9IGVsc2UgaWYgKCF2c2stXHUwMDNlcmVqZWN0ZWQpIHtcbi1cdFx0LyogV2UgYXJlIG5vdCBvbiB0aGUgcGVuZGluZyBsaXN0IGFuZCBhY2NlcHQoKSBkaWQgbm90IHJlamVjdFxuLVx0XHQgKiB1cywgc28gd2UgbXVzdCBoYXZlIGJlZW4gYWNjZXB0ZWQgYnkgb3VyIHVzZXIgcHJvY2Vzcy4gIFdlXG4tXHRcdCAqIGp1c3QgbmVlZCB0byBkcm9wIG91ciByZWZlcmVuY2VzIHRvIHRoZSBzb2NrZXRzIGFuZCBiZSBvblxuLVx0XHQgKiBvdXIgd2F5LlxuK1x0fSBlbHNlIHtcbitcdFx0LyogV2UgYXJlIG5vdCBvbiB0aGUgcGVuZGluZyBsaXN0IHNvIHdlIG11c3QgaGF2ZSBiZWVuIGFjY2VwdGVkXG4rXHRcdCAqIGJ5IG91ciB1c2VyIHByb2Nlc3MuIFdlIGp1c3QgbmVlZCB0byBkcm9wIG91ciByZWZlcmVuY2VzIHRvXG4rXHRcdCAqIHRoZSBzb2NrZXRzIGFuZCBiZSBvbiBvdXIgd2F5LlxuIFx0XHQgKi9cbiBcdFx0Y2xlYW51cCA9IGZhbHNlO1xuIFx0XHRnb3RvIG91dDtcbkBAIC05NDIsNyArOTM4LDYgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpfX3Zzb2NrX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHR2c2stXHUwMDNlbGlzdGVuZXIgPSBOVUxMO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dnNrLVx1MDAzZXBlbmRpbmdfbGlua3MpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dnNrLVx1MDAzZWFjY2VwdF9xdWV1ZSk7XG4tXHR2c2stXHUwMDNlcmVqZWN0ZWQgPSBmYWxzZTtcbiBcdHZzay1cdTAwM2VzZW50X3JlcXVlc3QgPSBmYWxzZTtcbiBcdHZzay1cdTAwM2VpZ25vcmVfY29ubmVjdGluZ19yc3QgPSBmYWxzZTtcbiBcdFdSSVRFX09OQ0UodnNrLVx1MDAzZXBlZXJfc2h1dGRvd24sIDApO1xuQEAgLTE4NDcsMTIgKzE4NDIsMTAgQEAgc3RhdGljIGludCB2c29ja19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICphZGRyLFxuIFx0XHRwcmVwYXJlX3RvX3dhaXQoc2tfc2xlZXAoc2spLCBcdTAwMjZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpO1xuIFx0fVxuIFxuLVx0aWYgKHNrLVx1MDAzZXNrX2Vycikge1xuLVx0XHRlcnIgPSAtc2stXHUwMDNlc2tfZXJyO1xuK1x0ZXJyID0gc29ja19lcnJvcihzayk7XG4rXHRpZiAoZXJyKSB7XG4gXHRcdHNrLVx1MDAzZXNrX3N0YXRlID0gVENQX0NMT1NFO1xuIFx0XHRzb2NrLVx1MDAzZXN0YXRlID0gU1NfVU5DT05ORUNURUQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRlcnIgPSAwO1xuIFx0fVxuIFxuIG91dF93YWl0OlxuQEAgLTE4OTMsNyArMTg4Niw3IEBAIHN0YXRpYyBpbnQgdnNvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssXG4gXHR0aW1lb3V0ID0gc29ja19yY3Z0aW1lbyhsaXN0ZW5lciwgYXJnLVx1MDAzZWZsYWdzIFx1MDAyNiBPX05PTkJMT0NLKTtcbiBcbiBcdHdoaWxlICgoY29ubmVjdGVkID0gdnNvY2tfZGVxdWV1ZV9hY2NlcHQobGlzdGVuZXIpKSA9PSBOVUxMIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAgIGxpc3RlbmVyLVx1MDAzZXNrX2VyciA9PSAwIFx1MDAyNlx1MDAyNiB0aW1lb3V0ICE9IDApIHtcbitcdFx0dGltZW91dCAhPSAwKSB7XG4gXHRcdHByZXBhcmVfdG9fd2FpdChza19zbGVlcChsaXN0ZW5lciksIFx1MDAyNndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gXHRcdHJlbGVhc2Vfc29jayhsaXN0ZW5lcik7XG4gXHRcdHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpO1xuQEAgLTE5MDYsNDEgKzE4OTksMjYgQEAgc3RhdGljIGludCB2c29ja19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jayxcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKGxpc3RlbmVyLVx1MDAzZXNrX2Vycikge1xuLVx0XHRlcnIgPSAtbGlzdGVuZXItXHUwMDNlc2tfZXJyO1xuLVx0fSBlbHNlIGlmICghY29ubmVjdGVkKSB7XG4tXHRcdGVyciA9IC1FQUdBSU47XG4tXHR9XG4tXG4gXHRpZiAoY29ubmVjdGVkKSB7XG4gXHRcdHNrX2FjY2VwdHFfcmVtb3ZlZChsaXN0ZW5lcik7XG4gXG4gXHRcdGxvY2tfc29ja19uZXN0ZWQoY29ubmVjdGVkLCBTSU5HTEVfREVQVEhfTkVTVElORyk7XG4gXHRcdHZjb25uZWN0ZWQgPSB2c29ja19zayhjb25uZWN0ZWQpO1xuIFxuLVx0XHQvKiBJZiB0aGUgbGlzdGVuZXIgc29ja2V0IGhhcyByZWNlaXZlZCBhbiBlcnJvciwgdGhlbiB3ZSBzaG91bGRcbi1cdFx0ICogcmVqZWN0IHRoaXMgc29ja2V0IGFuZCByZXR1cm4uICBOb3RlIHRoYXQgd2Ugc2ltcGx5IG1hcmsgdGhlXG4tXHRcdCAqIHNvY2tldCByZWplY3RlZCwgZHJvcCBvdXIgcmVmZXJlbmNlLCBhbmQgbGV0IHRoZSBjbGVhbnVwXG4tXHRcdCAqIGZ1bmN0aW9uIGhhbmRsZSB0aGUgY2xlYW51cDsgdGhlIGZhY3QgdGhhdCB3ZSBmb3VuZCBpdCBpblxuLVx0XHQgKiB0aGUgbGlzdGVuZXIncyBhY2NlcHQgcXVldWUgZ3VhcmFudGVlcyB0aGF0IHRoZSBjbGVhbnVwXG4tXHRcdCAqIGZ1bmN0aW9uIGhhc24ndCBydW4geWV0LlxuLVx0XHQgKi9cbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdHZjb25uZWN0ZWQtXHUwMDNlcmVqZWN0ZWQgPSB0cnVlO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdG5ld3NvY2stXHUwMDNlc3RhdGUgPSBTU19DT05ORUNURUQ7XG4tXHRcdFx0c29ja19ncmFmdChjb25uZWN0ZWQsIG5ld3NvY2spO1xuK1x0XHRuZXdzb2NrLVx1MDAzZXN0YXRlID0gU1NfQ09OTkVDVEVEO1xuK1x0XHRzb2NrX2dyYWZ0KGNvbm5lY3RlZCwgbmV3c29jayk7XG4gXG4tXHRcdFx0c2V0X2JpdChTT0NLX0NVU1RPTV9TT0NLT1BULFxuLVx0XHRcdFx0XHUwMDI2Y29ubmVjdGVkLVx1MDAzZXNrX3NvY2tldC1cdTAwM2VmbGFncyk7XG4rXHRcdHNldF9iaXQoU09DS19DVVNUT01fU09DS09QVCxcbitcdFx0XHRcdTAwMjZjb25uZWN0ZWQtXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbiBcbi1cdFx0XHRpZiAodnNvY2tfbXNnemVyb2NvcHlfYWxsb3codmNvbm5lY3RlZC1cdTAwM2V0cmFuc3BvcnQpKVxuLVx0XHRcdFx0c2V0X2JpdChTT0NLX1NVUFBPUlRfWkMsXG4tXHRcdFx0XHRcdFx1MDAyNmNvbm5lY3RlZC1cdTAwM2Vza19zb2NrZXQtXHUwMDNlZmxhZ3MpO1xuLVx0XHR9XG4rXHRcdGlmICh2c29ja19tc2d6ZXJvY29weV9hbGxvdyh2Y29ubmVjdGVkLVx1MDAzZXRyYW5zcG9ydCkpXG4rXHRcdFx0c2V0X2JpdChTT0NLX1NVUFBPUlRfWkMsXG4rXHRcdFx0XHRcdTAwMjZjb25uZWN0ZWQtXHUwMDNlc2tfc29ja2V0LVx1MDAzZWZsYWdzKTtcbiBcbiBcdFx0cmVsZWFzZV9zb2NrKGNvbm5lY3RlZCk7XG4gXHRcdHNvY2tfcHV0KGNvbm5lY3RlZCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRlcnIgPSAtRUFHQUlOO1xuIFx0fVxuIFxuIG91dDpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDIxOjEyOjM5Ljk4OTI2NDE0NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDcxMTk0MzU5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgdnNvY2sgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdG91Y2hpbmcgYGFmX3Zzb2NrLmNgIGFuZCBgYWZfdnNvY2suaGAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzLCBzbyBJJ20gbG9va2luZyBmb3Igd2hlcmUgbmV3IG1lbW9yeSBtaWdodCBiZSBhbGxvY2F0ZWQgb3IgZGF0YSBjb3VsZCBiZSBtaXNoYW5kbGVkLlxuXG5GaXJzdCwgdGhlIGByZWplY3RlZGAgZmllbGQgaXMgYmVpbmcgKnJlbW92ZWQqIGZyb20gYHN0cnVjdCB2c29ja19zb2NrYC4gVGhhdCBhbG9uZSBkb2Vzbid0IHNjcmVhbSBcInVuaW5pdGlhbGl6ZWQgbWVtb3J5LFwiIGJ1dCBpdCBkb2VzIGZvcmNlIG1lIHRvIGxvb2sgYXQgaG93IHRoYXQgZmllbGQgd2FzIHVzZWQuIElmIGl0IHdhcyBndWFyZGluZyBhZ2FpbnN0IGFjY2Vzc2luZyBtZW1vcnksIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlcGxhY2VtZW50IGxvZ2ljIGlzIHNvdW5kLlxuXG5UaGUgcGF0Y2ggY2hhbmdlcyBgdnNvY2tfcGVuZGluZ193b3JrYCwgYHZzb2NrX2Nvbm5lY3RgLCBhbmQgYHZzb2NrX2FjY2VwdGAuIExldCdzIHN0ZXAgdGhyb3VnaCBgdnNvY2tfYWNjZXB0YC4gVGhlIGNvZGUgdXNlZCB0byBjaGVjayBgbGlzdGVuZXItXHUwMDNlc2tfZXJyYCBpbiB0aGUgYHdoaWxlYCBsb29wLCBhbmQgbm93IGl0IGRvZXNuJ3QuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBkaWQgdGhpcyBpbnRyb2R1Y2UgYSByYWNlIGNvbmRpdGlvbiBvciBhIHBvdGVudGlhbCBmb3IgcmV0dXJuaW5nIGFuIFwiaW52YWxpZFwiIHNvY2tldD8gVGhlIG9sZCBsb2dpYyB3YXMgbW9yZSBjb25zZXJ2YXRpdmUuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBuZXcgcGF0aCBzdGlsbCBoYW5kbGVzIGVycm9ycyBncmFjZWZ1bGx5LlxuXG5UaGUgb2xkIGxvZ2ljICphbHNvKiBoYWQgYSBgbGlzdGVuZXItXHUwMDNlc2tfZXJyYCBjaGVjayAqYWZ0ZXIqIHRoZSBsb29wLCBhbmQgaWYgaXQgd2FzIHNldCAqYW5kKiBhIGBjb25uZWN0ZWRgIHNvY2tldCBoYWQgYmVlbiBkZXF1ZXVlZCwgaXQgd291bGQgbWFyayB0aGUgYGNvbm5lY3RlZGAgc29ja2V0IGFzIHJlamVjdGVkLiAgTm93IHRoZSBwYXRjaCByZW1vdmVzIHRoYXQgY2hlY2sgYW5kIHByb2Nlc3NlcyBhbiBlcnJvciBpbiBgdnNvY2tfYWNjZXB0YC4gUHJldmlvdXNseSBpZiB0aGVyZSB3YXMgYW4gZXJyb3Igb24gdGhlIGxpc3RlbmVyIHNvY2tldCwgaXQgd291bGQgcmVqZWN0IHRoZSBhY2NlcHQgc29ja2V0LiBJdCBsb29rcyBsaWtlIGl0IHN0aWxsIHdha2VzIHVwIHRoZSBzbGVlcCBxdWV1ZSwgYW5kIGp1c3QgbG9vcHMgYWdhaW4gaWYgbm90aGluZyBpcyBkZXF1ZXVlZC4gVGhpcyBsb29rcyBsaWtlIGEgY2hhbmdlIHRvIGhvdyBlcnJvcnMgYXJlIGhhbmRsZWQsIGJ1dCBkb2Vzbid0ICpkaXJlY3RseSogaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5gdnNvY2tfY29ubmVjdGAgbm93IHVzZXMgYHNvY2tfZXJyb3Ioc2spYCBpbnN0ZWFkIG9mIGRpcmVjdGx5IGNoZWNraW5nIGBzay1cdTAwM2Vza19lcnJgLiAgVGhpcyBpcyBhIGdvb2QsIHN0YW5kYXJkIHByYWN0aWNlLiAgYHNvY2tfZXJyb3JgIGdldHMgYW5kIGNsZWFycyB0aGUgZXJyb3IgY29kZS4gVGhpcyBpcyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdCB0byBzZWUgaW4gZXJyb3IgaGFuZGxpbmcuIFRoYXQncyBhIHJlZmFjdG9yaW5nLCBub3QgYSByaXNrLlxuXG5TbywgaXMgdGhlcmUgYW4gKmFjdHVhbCogcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gVGhlIGNyaXRpY2FsIHRoaW5nIGlzIHRoYXQgdGhlcmUgYXJlIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBubyBuZXcgbGVuZ3Rocy4gSXQncyBhbGwgYWJvdXQgc3RhdGUgbWFjaGluZSBsb2dpYyBhbmQgZXJyb3IgaGFuZGxpbmcuIEknbSBub3Qgc2VlaW5nIGFueSBuZXcgcGxhY2VzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGNvdWxkIGJlIGludHJvZHVjZWQuXG5cbk9rYXksIGxldCdzIGRvdWJsZS1jaGVjay4gVGhlIHJlbW92YWwgb2YgYHZjb25uZWN0ZWQtXHUwMDNlcmVqZWN0ZWRgIGlzIGEgY3JpdGljYWwgY2hhbmdlLiBBbmQgdGhhdCdzIG5vIGxvbmdlciBjaGVja2VkIGJ5IGB2c29ja19wZW5kaW5nX3dvcmtgLiBJZiB0aGVyZSB3YXMgYW55IGFjY2VzcyB0byB0aGlzIHZhcmlhYmxlLCBpdCBjYW4gY2F1c2UgdXNlLWFmdGVyLWZyZWUgb3IgbGVhaywgYnV0IEtBU0FOIHdpbGwgZGV0ZWN0IHRoaXMuIEtNU0FOIGlzIGZvciAqdW5pbml0aWFsaXplZCogbWVtb3J5LCB3aGljaCBJIGRvbid0IHNlZSBoZXJlLlxuXG5UaGlzIHBhdGNoIGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZy4gSXQgcmVtb3ZlcyBhIGZpZWxkLCBzaW1wbGlmaWVzIGVycm9yIGhhbmRsaW5nIGFuZCB0aGUgdmFyaWFibGVzIGJlaW5nIHVzZWQgYXJlIGBlcnJgLCBgY29ubmVjdGVkYCwgYW5kIGB0aW1lb3V0YCwgd2hpY2ggYXJlIGluaXRpYWxpemVkLiBJIGRvbid0IHNlZSBhbnl0aGluZyBoZXJlIHRoYXQgY291bGQgZGlyZWN0bHkgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkLiBObyBuZXcgcG9pbnRlcnMuIE5vIG5ldyBhbGxvY2F0aW9ucy5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJ3QgbmVlZCBLTVNBTiB0ZXN0aW5nLiBJJ2xsIG1hcmsgYE5lZWRzS01TQU49ZmFsc2VgLiBJdCdzIGEgbG9naWMgY2hhbmdlIHdoaWNoIGNhbiBiZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIHRlc3RpbmcsIGFuZCBLQVNBTiBzaG91bGQgcGljayB1cCBhbnkgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzAxLCJPdXRwdXRUb2tlbnMiOjE3OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQyMToxMjo1NC43MDEyMTAwMzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgdGhlIGByZWplY3RlZGAgZmllbGQgZnJvbSBgc3RydWN0IHZzb2NrX3NvY2tgIGFuZCBzaW1wbGlmaWVzIHRoZSBlcnJvciBoYW5kbGluZyBpbiBgdnNvY2tfYWNjZXB0YCBhbmQgYHZzb2NrX2Nvbm5lY3RgLiBJdCBtb2RpZmllcyB0aGUgc29ja2V0IHN0YXRlIG1hY2hpbmUgYW5kIGhvdyBzb2NrZXQgZXJyb3JzIChgc2tfZXJyYCkgYXJlIHByb2Nlc3NlZC4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYWxsb2NhdGVkLCBubyBjaGFuZ2VzIHRvIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGJ1ZmZlciBsZW5ndGhzIG9yIGJvdW5kcyBjaGVja3MuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgcmVsYXRlZCB0byBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgKGUuZy4sIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGluY29ycmVjdCBlcnJvciBjb2RlcyksIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW1vdmVzIHRoZSBgcmVqZWN0ZWRgIGZpZWxkIGZyb20gYHN0cnVjdCB2c29ja19zb2NrYCBhbmQgc2ltcGxpZmllcyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYHZzb2NrX2FjY2VwdGAgYW5kIGB2c29ja19jb25uZWN0YC4gSXQgbW9kaWZpZXMgdGhlIHNvY2tldCBzdGF0ZSBtYWNoaW5lIGFuZCBob3cgc29ja2V0IGVycm9ycyAoYHNrX2VycmApIGFyZSBwcm9jZXNzZWQuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZCwgbm8gY2hhbmdlcyB0byBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgbm8gbW9kaWZpY2F0aW9ucyB0byBidWZmZXIgbGVuZ3RocyBvciBib3VuZHMgY2hlY2tzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gc29ja2V0IGxpZmVjeWNsZSBtYW5hZ2VtZW50IChlLmcuLCB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBpbmNvcnJlY3QgZXJyb3IgY29kZXMpLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowp4vlh[1] Phase: Succeeded StartedAt: 2026-08-10 21:13:06 +0000 UTC FinishedAt: 2026-08-10 21:13:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 21:13:06 +0000 UTC FinishedAt: 2026-08-10 21:13:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2] Phase: Succeeded StartedAt: 2026-08-10 21:13:06 +0000 UTC FinishedAt: 2026-08-11 01:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 21:13:06 +0000 UTC FinishedAt: 2026-08-11 01:00:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 21:13:06 +0000 UTC FinishedAt: 2026-08-10 21:13:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 21:13:06 +0000 UTC FinishedAt: 2026-08-10 21:13:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp4vlh/series-workflowp4vlh-convert-artifact-3464365213/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 21:13:41 +0000 UTC FinishedAt: 2026-08-10 21:29:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 21:13:41 +0000 UTC FinishedAt: 2026-08-10 21:29:46 +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:*c539b3c2-6caf-4c3b-afb9-dd6dfb55633c,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-workflowp4vlh/series-workflowp4vlh-convert-artifact-3464365213/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": "890365c3-4409-4707-b280-a2128076c282", "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-workflowp4vlh/series-workflowp4vlh-build-action-3476190675/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 21:13:41 +0000 UTC FinishedAt: 2026-08-10 21:29:36 +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:*c539b3c2-6caf-4c3b-afb9-dd6dfb55633c,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-workflowp4vlh/series-workflowp4vlh-convert-artifact-3464365213/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": "890365c3-4409-4707-b280-a2128076c282", "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-workflowp4vlh/series-workflowp4vlh-build-action-3476190675/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 21:29:46 +0000 UTC FinishedAt: 2026-08-10 21:29:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 21:29:46 +0000 UTC FinishedAt: 2026-08-10 21:29:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 21:29:46 +0000 UTC FinishedAt: 2026-08-10 21:29:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 21:29:46 +0000 UTC FinishedAt: 2026-08-10 21:29:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp4vlh/series-workflowp4vlh-convert-artifact-282228088/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 21:29:56 +0000 UTC FinishedAt: 2026-08-10 21:32:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 21:29:56 +0000 UTC FinishedAt: 2026-08-10 21:32:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*890365c3-4409-4707-b280-a2128076c282,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-workflowp4vlh/series-workflowp4vlh-build-action-3476190675/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-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 21:32:13 +0000 UTC FinishedAt: 2026-08-10 21:32:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 21:32:13 +0000 UTC FinishedAt: 2026-08-10 21:32:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 21:32:13 +0000 UTC FinishedAt: 2026-08-10 21:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 21:32:13 +0000 UTC FinishedAt: 2026-08-10 21:50:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c539b3c2-6caf-4c3b-afb9-dd6dfb55633c,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-workflowp4vlh/series-workflowp4vlh-convert-artifact-282228088/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": "2d3659c5-f830-426f-a0dd-83a272ce0560", "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-workflowp4vlh/series-workflowp4vlh-build-action-2591824484/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 21:32:13 +0000 UTC FinishedAt: 2026-08-10 21:49:54 +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:*c539b3c2-6caf-4c3b-afb9-dd6dfb55633c,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-workflowp4vlh/series-workflowp4vlh-convert-artifact-282228088/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": "2d3659c5-f830-426f-a0dd-83a272ce0560", "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-workflowp4vlh/series-workflowp4vlh-build-action-2591824484/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 21:50:04 +0000 UTC FinishedAt: 2026-08-10 21:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 21:50:04 +0000 UTC FinishedAt: 2026-08-10 21:50:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 21:50:04 +0000 UTC FinishedAt: 2026-08-10 21:52:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 21:50:04 +0000 UTC FinishedAt: 2026-08-10 21:51:56 +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:*2d3659c5-f830-426f-a0dd-83a272ce0560,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-workflowp4vlh/series-workflowp4vlh-build-action-2591824484/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-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 21:52:06 +0000 UTC FinishedAt: 2026-08-11 01:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 21:52:06 +0000 UTC FinishedAt: 2026-08-11 01:00:07 +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":["vsock_connect","vsock_accept","vsock_pending_work"],"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:*890365c3-4409-4707-b280-a2128076c282,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2d3659c5-f830-426f-a0dd-83a272ce0560,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-workflowp4vlh/series-workflowp4vlh-build-action-3476190675/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-workflowp4vlh/series-workflowp4vlh-build-action-2591824484/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 21:52:06 +0000 UTC FinishedAt: 2026-08-10 21:52:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 21:52:06 +0000 UTC FinishedAt: 2026-08-10 21:52:11 +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":["vsock_connect","vsock_accept","vsock_pending_work"],"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-workflowp4vlh/series-workflowp4vlh-convert-artifact-2693190865/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 21:52:06 +0000 UTC FinishedAt: 2026-08-10 21:52:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 21:52:06 +0000 UTC FinishedAt: 2026-08-10 21:52:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 21:52:06 +0000 UTC FinishedAt: 2026-08-10 21:52:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 21:52:16 +0000 UTC FinishedAt: 2026-08-11 01:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4vlh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vsock_connect","vsock_accept","vsock_pending_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"001b5d347d8ba39b2dccaefcc57967b18caec8fe","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VSOCKETS_LOOPBACK"],"series_id":"37ec9159-28b0-4e69-8a51-cf3b94db1e9e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 21:52:16 +0000 UTC FinishedAt: 2026-08-11 00:59:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*890365c3-4409-4707-b280-a2128076c282,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2d3659c5-f830-426f-a0dd-83a272ce0560,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-workflowp4vlh/series-workflowp4vlh-build-action-3476190675/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-workflowp4vlh/series-workflowp4vlh-build-action-2591824484/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-workflowp4vlh/series-workflowp4vlh-convert-artifact-2693190865/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,}