Name: series-workflowrj9st Phase: Succeeded StartedAt: 2026-08-24 18:25:55 +0000 UTC FinishedAt: 2026-08-24 22:49:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[0] Phase: Succeeded StartedAt: 2026-08-24 18:25:55 +0000 UTC FinishedAt: 2026-08-24 18:43:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 18:25:55 +0000 UTC FinishedAt: 2026-08-24 18:43:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "19f075830e5d874749f55d837fc4e8af98df0559", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFSD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "19f075830e5d874749f55d837fc4e8af98df0559", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFSD" ], "series_id": "8dda0a59-8239-465e-a37d-6c8b52bdaed9" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "vfs_splice_direct_to_actor", "nfsd_splice_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3ImIzM0OywKICAgICYjMzQ7bmZzZF9zcGxpY2VfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgaW4gYGZzL3NwbGljZS5jYCB0aGF0IGNvbnNvbGlkYXRlcyBleGlzdGluZyBjYWxscyB0byBgcndfdmVyaWZ5X2FyZWFgLCBgc3BsaWNlX2RpcmVjdF90b19hY3RvcmAsIGFuZCBgZnNub3RpZnlfYWNjZXNzYC4gSXQgdGhlbiB1cGRhdGVzIGBuZnNkX3NwbGljZV9yZWFkYCBpbiBgZnMvbmZzZC92ZnMuY2AgdG8gdXNlIHRoaXMgbmV3IGhlbHBlci4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBzdHJ1Y3R1cmFsIHJlZmFjdG9yaW5nIHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgdGhhdCBtaWdodCB0aGVvcmV0aWNhbGx5IGFyaXNlIGZyb20gVkZTIGNoYW5nZXMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGxvZ2ljIGZvciBzcGxpY2luZyBhbmQgTkZTRCByZWFkIHBhdGhzLCBpbnRyb2R1Y2luZyBhIG5ldyBBUEkgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBhbmQgdXBkYXRpbmcgYG5mc2Rfc3BsaWNlX3JlYWRgIHRvIHVzZSBpdC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4MmU5ZjU1ZWI5Mjk4ODI5ZWZkYmIzMjI0ZTc3Y2Q0N2M2NThhNTJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTg6Mjc6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbmZzZC92ZnMuYyBiL2ZzL25mc2QvdmZzLmNcbmluZGV4IDFlODljN2ZmOTQ5M2IuLmE0NjVlMjc2ZDY3NTQgMTAwNjQ0XG4tLS0gYS9mcy9uZnNkL3Zmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uZnNkL3Zmcy5jXG5AQCAtMTA1NSw3ICYjNDM7MTA1NSw2IEBAIHN0YXRpYyBfX2JlMzIgbmZzZF9maW5pc2hfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4gXHRcdG5mc2Rfc3RhdHNfaW9fcmVhZF9hZGQobm4sIGZocC1cdTAwM2VmaF9leHBvcnQsIGhvc3RfZXJyKTtcbiBcdFx0KmVvZiA9IG5mc2RfZW9mX29uX3JlYWQoZmlsZSwgb2Zmc2V0LCBob3N0X2VyciwgKmNvdW50KTtcbiBcdFx0KmNvdW50ID0gaG9zdF9lcnI7XG4tXHRcdGZzbm90aWZ5X2FjY2VzcyhmaWxlKTtcbiBcdFx0dHJhY2VfbmZzZF9yZWFkX2lvX2RvbmUocnFzdHAsIGZocCwgb2Zmc2V0LCAqY291bnQpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH0gZWxzZSB7XG5AQCAtMTA4OSwxMCAmIzQzOzEwODgsOCBAQCBfX2JlMzIgbmZzZF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4gXHRzc2l6ZV90IGhvc3RfZXJyO1xuIFxuIFx0dHJhY2VfbmZzZF9yZWFkX3NwbGljZShycXN0cCwgZmhwLCBvZmZzZXQsICpjb3VudCk7XG4tXHRob3N0X2VyciA9IHJ3X3ZlcmlmeV9hcmVhKFJFQUQsIGZpbGUsIFx1MDAyNm9mZnNldCwgKmNvdW50KTtcbi1cdGlmICghaG9zdF9lcnIpXG4tXHRcdGhvc3RfZXJyID0gc3BsaWNlX2RpcmVjdF90b19hY3RvcihmaWxlLCBcdTAwMjZzZCxcbi1cdFx0XHRcdFx0XHQgIG5mc2RfZGlyZWN0X3NwbGljZV9hY3Rvcik7XG4mIzQzO1x0aG9zdF9lcnIgPSB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcihmaWxlLCBcdTAwMjZzZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIG5mc2RfZGlyZWN0X3NwbGljZV9hY3Rvcik7XG4gXHRyZXR1cm4gbmZzZF9maW5pc2hfcmVhZChycXN0cCwgZmhwLCBmaWxlLCBvZmZzZXQsIGNvdW50LCBlb2YsIGhvc3RfZXJyKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuY1xuaW5kZXggOWQ4ZjYzZTJmZDFhYi4uNDJhZDcxMmEwZjRkYSAxMDA2NDRcbi0tLSBhL2ZzL3NwbGljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9zcGxpY2UuY1xuQEAgLTEwMDksMjEgJiM0MzsxMDA5LDE0IEBAIHNzaXplX3QgdmZzX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZnNfc3BsaWNlX3JlYWQpO1xuIFxuLS8qKlxuLSAqIHNwbGljZV9kaXJlY3RfdG9fYWN0b3IgLSBzcGxpY2VzIGRhdGEgZGlyZWN0bHkgYmV0d2VlbiB0d28gbm9uLXBpcGVzXG4tICogQGluOlx0XHRmaWxlIHRvIHNwbGljZSBmcm9tXG4tICogQHNkOlx0XHRhY3RvciBpbmZvcm1hdGlvbiBvbiB3aGVyZSB0byBzcGxpY2UgdG9cbi0gKiBAYWN0b3I6XHRoYW5kbGVzIHRoZSBkYXRhIHNwbGljaW5nXG4tICpcbi0gKiBEZXNjcmlwdGlvbjpcbi0gKiAgICBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGhlbHBlciB0byBzcGxpY2UgZGlyZWN0bHkgYmV0d2VlbiB0d29cbi0gKiAgICBwb2ludHMsIHdpdGhvdXQgcmVxdWlyaW5nIGFuIGV4cGxpY2l0IHBpcGUuIEludGVybmFsbHkgYW4gYWxsb2NhdGVkXG4tICogICAgcGlwZSBpcyBjYWNoZWQgaW4gdGhlIHByb2Nlc3MsIGFuZCByZXVzZWQgZHVyaW5nIHRoZSBsaWZldGltZSBvZlxuLSAqICAgIHRoYXQgcHJvY2Vzcy5cbi0gKlxuJiM0MzsvKlxuJiM0MzsgKiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGhlbHBlciB0byBzcGxpY2UgZGlyZWN0bHkgYmV0d2VlbiB0d29cbiYjNDM7ICogcG9pbnRzLCB3aXRob3V0IHJlcXVpcmluZyBhbiBleHBsaWNpdCBwaXBlLiBJbnRlcm5hbGx5IGFuIGFsbG9jYXRlZFxuJiM0MzsgKiBwaXBlIGlzIGNhY2hlZCBpbiB0aGUgcHJvY2VzcywgYW5kIHJldXNlZCBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mXG4mIzQzOyAqIHRoYXQgcHJvY2Vzcy5cbiAgKi9cbi1zc2l6ZV90IHNwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLFxuLVx0XHRcdCAgICAgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3RvcilcbiYjNDM7c3RhdGljIHNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpXG4ge1xuIFx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTtcbiBcdHNzaXplX3QgcmV0LCBieXRlcztcbkBAIC0xMTQ3LDcgJiM0MzsxMTQwLDQwIEBAIHNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4gXG4gXHRnb3RvIGRvbmU7XG4gfVxuLUVYUE9SVF9TWU1CT0woc3BsaWNlX2RpcmVjdF90b19hY3Rvcik7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3IgLSBzcGxpY2UgZnJvbSBhIGZpbGUgdGhyb3VnaCBhIGNhbGxlciYjMzk7cyBhY3RvclxuJiM0MzsgKiBAaW46XHRcdGZpbGUgdG8gc3BsaWNlIGZyb207IG11c3QgYmUgc2Vla2FibGUgKEZNT0RFX0xTRUVLKVxuJiM0MzsgKiBAc2Q6XHRcdHNwbGljZSBwYXJhbWV0ZXJzLiBUaGUgY2FsbGVyIHNldHMgQHNkLVx1MDAzZXBvcyBhbmRcbiYjNDM7ICpcdFx0QHNkLVx1MDAzZXRvdGFsX2xlbi4gQHNkLVx1MDAzZXBvcyBhZHZhbmNlcyBhcyBkYXRhIGlzIGNvbnN1bWVkLFxuJiM0MzsgKlx0XHRhbmQgQHNkLVx1MDAzZXRvdGFsX2xlbiBpcyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBsZW5ndGggb2ZcbiYjNDM7ICpcdFx0ZWFjaCByZWFkLlxuJiM0MzsgKiBAYWN0b3I6XHRjb25zdW1lcyBlYWNoIHBpcGUtZnVsbCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mXG4mIzQzOyAqXHRcdGJ5dGVzIHRha2VuXG4mIzQzOyAqXG4mIzQzOyAqIERlc2NyaXB0aW9uOlxuJiM0MzsgKiAgICBTcGxpY2UgZnJvbSBAaW4gdGhyb3VnaCBAYWN0b3IsIGZvciBhIGNhbGxlciB0aGF0IGNvbnN1bWVzXG4mIzQzOyAqICAgIHRoZSBkYXRhIGl0c2VsZiByYXRoZXIgdGhhbiBzZW5kaW5nIGl0IHRvIGEgc2Vjb25kIGZpbGUuXG4mIzQzOyAqICAgIFRoaXMgaGVscGVyIHZlcmlmaWVzIHRoZSByZWFkIGFuZCBlbWl0cyB0aGUgZnNub3RpZnkgYWNjZXNzXG4mIzQzOyAqICAgIGV2ZW50LiBkb19zcGxpY2VfZGlyZWN0KCkgbGVhdmVzIGJvdGggdG8gaXRzIGNhbGxlcnMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogVGhlIG51bWJlciBvZiBieXRlcyBzcGxpY2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLlxuJiM0MzsgKi9cbiYjNDM7c3NpemVfdCB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4mIzQzO1x0XHRcdFx0ICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpXG4mIzQzO3tcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcndfdmVyaWZ5X2FyZWEoUkVBRCwgaW4sIFx1MDAyNnNkLVx1MDAzZXBvcywgc2QtXHUwMDNldG90YWxfbGVuKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gc3BsaWNlX2RpcmVjdF90b19hY3Rvcihpbiwgc2QsIGFjdG9yKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMClcbiYjNDM7XHRcdGZzbm90aWZ5X2FjY2Vzcyhpbik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKTtcbiBcbiBzdGF0aWMgaW50IGRpcmVjdF9zcGxpY2VfYWN0b3Ioc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbiBcdFx0XHQgICAgICAgc3RydWN0IHNwbGljZV9kZXNjICpzZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwbGljZS5oIGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaFxuaW5kZXggOWRlYzQ4NjFkMDlmNi4uNGU5MWQwM2VkNjQ1ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3BsaWNlLmhcbkBAIC03OSw4ICYjNDM7NzksOCBAQCBzc2l6ZV90IGFkZF90b19waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKTtcbiBzc2l6ZV90IHZmc19zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbiBcdFx0XHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLFxuIFx0XHRcdHVuc2lnbmVkIGludCBmbGFncyk7XG4tc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLFxuLVx0XHRcdCAgICAgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3Rvcik7XG4mIzQzO3NzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4mIzQzO1x0XHRcdFx0ICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpO1xuIHNzaXplX3QgZG9fc3BsaWNlKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpvZmZfaW4sIHN0cnVjdCBmaWxlICpvdXQsXG4gXHRcdCAgbG9mZl90ICpvZmZfb3V0LCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIHNzaXplX3QgZG9fc3BsaWNlX2RpcmVjdChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcywgc3RydWN0IGZpbGUgKm91dCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT45bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZTRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yJiMzNDssCiAgICAmIzM0O25mc2Rfc3BsaWNlX3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgbG9naWMgZm9yIHNwbGljaW5nIGFuZCBORlNEIHJlYWQgcGF0aHMsIGludHJvZHVjaW5nIGEgbmV3IEFQSSBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIGFuZCB1cGRhdGluZyBgbmZzZF9zcGxpY2VfcmVhZGAgdG8gdXNlIGl0LiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgyZTlmNTVlYjkyOTg4MjllZmRiYjMyMjRlNzdjZDQ3YzY1OGE1MmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAxODoyNzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IDFlODljN2ZmOTQ5M2IuLmE0NjVlMjc2ZDY3NTQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmZzZC92ZnMuYwpAQCAtMTA1NSw3ICYjNDM7MTA1NSw2IEBAIHN0YXRpYyBfX2JlMzIgbmZzZF9maW5pc2hfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsCiAJCW5mc2Rfc3RhdHNfaW9fcmVhZF9hZGQobm4sIGZocC0mZ3Q7ZmhfZXhwb3J0LCBob3N0X2Vycik7CiAJCSplb2YgPSBuZnNkX2VvZl9vbl9yZWFkKGZpbGUsIG9mZnNldCwgaG9zdF9lcnIsICpjb3VudCk7CiAJCSpjb3VudCA9IGhvc3RfZXJyOwotCQlmc25vdGlmeV9hY2Nlc3MoZmlsZSk7CiAJCXRyYWNlX25mc2RfcmVhZF9pb19kb25lKHJxc3RwLCBmaHAsIG9mZnNldCwgKmNvdW50KTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKQEAgLTEwODksMTAgJiM0MzsxMDg4LDggQEAgX19iZTMyIG5mc2Rfc3BsaWNlX3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLAogCXNzaXplX3QgaG9zdF9lcnI7CiAKIAl0cmFjZV9uZnNkX3JlYWRfc3BsaWNlKHJxc3RwLCBmaHAsIG9mZnNldCwgKmNvdW50KTsKLQlob3N0X2VyciA9IHJ3X3ZlcmlmeV9hcmVhKFJFQUQsIGZpbGUsICZhbXA7b2Zmc2V0LCAqY291bnQpOwotCWlmICghaG9zdF9lcnIpCi0JCWhvc3RfZXJyID0gc3BsaWNlX2RpcmVjdF90b19hY3RvcihmaWxlLCAmYW1wO3NkLAotCQkJCQkJICBuZnNkX2RpcmVjdF9zcGxpY2VfYWN0b3IpOwomIzQzOwlob3N0X2VyciA9IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsICZhbXA7c2QsCiYjNDM7CQkJCQkgICAgICBuZnNkX2RpcmVjdF9zcGxpY2VfYWN0b3IpOwogCXJldHVybiBuZnNkX2ZpbmlzaF9yZWFkKHJxc3RwLCBmaHAsIGZpbGUsIG9mZnNldCwgY291bnQsIGVvZiwgaG9zdF9lcnIpOwogfQogCmRpZmYgLS1naXQgYS9mcy9zcGxpY2UuYyBiL2ZzL3NwbGljZS5jCmluZGV4IDlkOGY2M2UyZmQxYWIuLjQyYWQ3MTJhMGY0ZGEgMTAwNjQ0Ci0tLSBhL2ZzL3NwbGljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NwbGljZS5jCkBAIC0xMDA5LDIxICYjNDM7MTAwOSwxNCBAQCBzc2l6ZV90IHZmc19zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcywKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZmc19zcGxpY2VfcmVhZCk7CiAKLS8qKgotICogc3BsaWNlX2RpcmVjdF90b19hY3RvciAtIHNwbGljZXMgZGF0YSBkaXJlY3RseSBiZXR3ZWVuIHR3byBub24tcGlwZXMKLSAqIEBpbjoJCWZpbGUgdG8gc3BsaWNlIGZyb20KLSAqIEBzZDoJCWFjdG9yIGluZm9ybWF0aW9uIG9uIHdoZXJlIHRvIHNwbGljZSB0bwotICogQGFjdG9yOgloYW5kbGVzIHRoZSBkYXRhIHNwbGljaW5nCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiAgICBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGhlbHBlciB0byBzcGxpY2UgZGlyZWN0bHkgYmV0d2VlbiB0d28KLSAqICAgIHBvaW50cywgd2l0aG91dCByZXF1aXJpbmcgYW4gZXhwbGljaXQgcGlwZS4gSW50ZXJuYWxseSBhbiBhbGxvY2F0ZWQKLSAqICAgIHBpcGUgaXMgY2FjaGVkIGluIHRoZSBwcm9jZXNzLCBhbmQgcmV1c2VkIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YKLSAqICAgIHRoYXQgcHJvY2Vzcy4KLSAqCiYjNDM7LyoKJiM0MzsgKiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGhlbHBlciB0byBzcGxpY2UgZGlyZWN0bHkgYmV0d2VlbiB0d28KJiM0MzsgKiBwb2ludHMsIHdpdGhvdXQgcmVxdWlyaW5nIGFuIGV4cGxpY2l0IHBpcGUuIEludGVybmFsbHkgYW4gYWxsb2NhdGVkCiYjNDM7ICogcGlwZSBpcyBjYWNoZWQgaW4gdGhlIHByb2Nlc3MsIGFuZCByZXVzZWQgZHVyaW5nIHRoZSBsaWZldGltZSBvZgomIzQzOyAqIHRoYXQgcHJvY2Vzcy4KICAqLwotc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCwKLQkJCSAgICAgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3RvcikKJiM0MztzdGF0aWMgc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCwKJiM0MzsJCQkJICAgICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpCiB7CiAJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTsKIAlzc2l6ZV90IHJldCwgYnl0ZXM7CkBAIC0xMTQ3LDcgJiM0MzsxMTQwLDQwIEBAIHNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsCiAKIAlnb3RvIGRvbmU7CiB9Ci1FWFBPUlRfU1lNQk9MKHNwbGljZV9kaXJlY3RfdG9fYWN0b3IpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yIC0gc3BsaWNlIGZyb20gYSBmaWxlIHRocm91Z2ggYSBjYWxsZXImIzM5O3MgYWN0b3IKJiM0MzsgKiBAaW46CQlmaWxlIHRvIHNwbGljZSBmcm9tOyBtdXN0IGJlIHNlZWthYmxlIChGTU9ERV9MU0VFSykKJiM0MzsgKiBAc2Q6CQlzcGxpY2UgcGFyYW1ldGVycy4gVGhlIGNhbGxlciBzZXRzIEBzZC0mZ3Q7cG9zIGFuZAomIzQzOyAqCQlAc2QtJmd0O3RvdGFsX2xlbi4gQHNkLSZndDtwb3MgYWR2YW5jZXMgYXMgZGF0YSBpcyBjb25zdW1lZCwKJiM0MzsgKgkJYW5kIEBzZC0mZ3Q7dG90YWxfbGVuIGlzIG92ZXJ3cml0dGVuIHdpdGggdGhlIGxlbmd0aCBvZgomIzQzOyAqCQllYWNoIHJlYWQuCiYjNDM7ICogQGFjdG9yOgljb25zdW1lcyBlYWNoIHBpcGUtZnVsbCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mCiYjNDM7ICoJCWJ5dGVzIHRha2VuCiYjNDM7ICoKJiM0MzsgKiBEZXNjcmlwdGlvbjoKJiM0MzsgKiAgICBTcGxpY2UgZnJvbSBAaW4gdGhyb3VnaCBAYWN0b3IsIGZvciBhIGNhbGxlciB0aGF0IGNvbnN1bWVzCiYjNDM7ICogICAgdGhlIGRhdGEgaXRzZWxmIHJhdGhlciB0aGFuIHNlbmRpbmcgaXQgdG8gYSBzZWNvbmQgZmlsZS4KJiM0MzsgKiAgICBUaGlzIGhlbHBlciB2ZXJpZmllcyB0aGUgcmVhZCBhbmQgZW1pdHMgdGhlIGZzbm90aWZ5IGFjY2VzcwomIzQzOyAqICAgIGV2ZW50LiBkb19zcGxpY2VfZGlyZWN0KCkgbGVhdmVzIGJvdGggdG8gaXRzIGNhbGxlcnMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgYnl0ZXMgc3BsaWNlZCwgb3IgYSBuZWdhdGl2ZSBlcnJuby4KJiM0MzsgKi8KJiM0Mztzc2l6ZV90IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCwKJiM0MzsJCQkJICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpCiYjNDM7ewomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcndfdmVyaWZ5X2FyZWEoUkVBRCwgaW4sICZhbXA7c2QtJmd0O3Bvcywgc2QtJmd0O3RvdGFsX2xlbik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gc3BsaWNlX2RpcmVjdF90b19hY3Rvcihpbiwgc2QsIGFjdG9yKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKQomIzQzOwkJZnNub3RpZnlfYWNjZXNzKGluKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3Rvcik7CiAKIHN0YXRpYyBpbnQgZGlyZWN0X3NwbGljZV9hY3RvcihzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAogCQkJICAgICAgIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwbGljZS5oIGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaAppbmRleCA5ZGVjNDg2MWQwOWY2Li40ZTkxZDAzZWQ2NDVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwbGljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3BsaWNlLmgKQEAgLTc5LDggJiM0Mzs3OSw4IEBAIHNzaXplX3QgYWRkX3RvX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpOwogc3NpemVfdCB2ZnNfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsCiAJCQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLAogCQkJdW5zaWduZWQgaW50IGZsYWdzKTsKLXNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNwbGljZV9kZXNjICpzZCwKLQkJCSAgICAgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3Rvcik7CiYjNDM7c3NpemVfdCB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNwbGljZV9kZXNjICpzZCwKJiM0MzsJCQkJICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpOwogc3NpemVfdCBkb19zcGxpY2Uoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKm9mZl9pbiwgc3RydWN0IGZpbGUgKm91dCwKIAkJICBsb2ZmX3QgKm9mZl9vdXQsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7CiBzc2l6ZV90IGRvX3NwbGljZV9kaXJlY3Qoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsIHN0cnVjdCBmaWxlICpvdXQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0ODMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gg4oCTIGl0JiMzOTtzIHRvdWNoaW5nIGEgZmV3IGtleSBhcmVhczogYGZzL25mc2QvdmZzLmNgLCBgZnMvc3BsaWNlLmNgLCBhbmQgdGhlIHJlbGF0ZWQgaGVhZGVyLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgYSByZW5hbWU6IGBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBpcyBub3cgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYC4gVGhhdCYjMzk7cyBub3QganVzdCBhIGNvc21ldGljIGNoYW5nZSwgaXQgbWVhbnMgdGhlIHNjb3BlIG9yIHJlc3BvbnNpYmlsaXR5IG1pZ2h0IGJlIHNoaWZ0aW5nLiBQbHVzLCB0aGV5JiMzOTt2ZSBidW5kbGVkIGByd192ZXJpZnlfYXJlYWAgYW5kIGBmc25vdGlmeV9hY2Nlc3NgICppbnRvKiB0aGF0IGZ1bmN0aW9uLiBPa2F5LCB0aGF0JiMzOTtzIGFscmVhZHkgaW50ZXJlc3RpbmcuCgpUaGUgbmV4dCB0aGluZyBJJiMzOTttIHNlZWluZyBpcyBhIGNoYW5nZSBpbiBgbmZzZF9zcGxpY2VfcmVhZGAuIEl0IG5vdyAqdXNlcyogYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCwgYW5kIHRoZSBwYXRjaCByZW1vdmVzIHRob3NlIGV4dHJhIGNoZWNrcyBmcm9tIGBuZnNkX2ZpbmlzaF9yZWFkYCBhbmQgYG5mc2Rfc3BsaWNlX3JlYWRgLiBUaGlzIGlzIHN0YXJ0aW5nIHRvIGxvb2sgbGlrZSBhIGNvbnNvbGlkYXRpb24gb2YgZnVuY3Rpb25hbGl0eSBvciBwZXJoYXBzIGEgY2hhbmdlIGluIGhvdyBwZXJtaXNzaW9ucyBvciBhY2Nlc3MgaXMgaGFuZGxlZCBkdXJpbmcgTkZTIHJlYWQgb3BlcmF0aW9ucy4KCkdpdmVuIHRoYXQgaXQmIzM5O3MgbW9kaWZ5aW5nIGJvdGggY29yZSBWRlMgbG9naWMgKHNwbGljZSkgKmFuZCogTkZTRCwgSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIGNlbnRyYWwgdG8gcmVhZCBvcGVyYXRpb25zIGZvciBORlMgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGF0IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYXJlLiBDbGVhcmx5LCBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIGlzIGEgcHJpbWUgY2FuZGlkYXRlLCBpdCBsb29rcyB0byBiZSBhbiBpbnRlcmVzdGluZyBWRlMgcGF0aCB0byBwcm9iZS4gYG5mc2Rfc3BsaWNlX3JlYWRgIGlzIGFub3RoZXIgb2J2aW91cyBvbmUuIEl0IGxvb2tzIGxpa2UgYG5mc2RfZmluaXNoX3JlYWRgICptaWdodCogYmUgaW52b2x2ZWQsIGJ1dCBzaW5jZSBpdCYjMzk7cyBzdGF0aWMsIEkgc2hvdWxkIGZvY3VzIG9uIGBuZnNkX3NwbGljZV9yZWFkYCwgd2hpY2ggY2FsbHMgaXQuCgpJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBgZnMvbmZzZC92ZnMuY2AgZm9yIGBuZnNkX3NwbGljZV9yZWFkYCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIE5GU0Qgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZzZF9zcGxpY2VfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25mc2QvdmZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzZC92ZnMuYz0xMDQ4PXN0YXRpYyBfX2JlMzIgbmZzZF9maW5pc2hfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4tLVxuZnMvbmZzZC92ZnMuYy0xMDY2LS8qKlxuZnMvbmZzZC92ZnMuYzoxMDY3OiAqIG5mc2Rfc3BsaWNlX3JlYWQgLSBQZXJmb3JtIGEgVkZTIHJlYWQgdXNpbmcgYSBzcGxpY2UgcGlwZVxuZnMvbmZzZC92ZnMuYy0xMDY4LSAqIEBycXN0cDogUlBDIHRyYW5zYWN0aW9uIGNvbnRleHRcbi0tXG5mcy9uZnNkL3Zmcy5jLTEwNzctICovXG5mcy9uZnNkL3Zmcy5jOjEwNzg6X19iZTMyIG5mc2Rfc3BsaWNlX3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxuZnMvbmZzZC92ZnMuYy0xMDc5LVx0XHRcdHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nICpjb3VudCxcbi0tXG5mcy9uZnNkL3Zmcy5jPTExMTA9bmZzZF9kaXJlY3RfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4tLVxuZnMvbmZzZC92ZnMuYy0xMTgyLSAqXG5mcy9uZnNkL3Zmcy5jOjExODM6ICogU29tZSBmaWxlc3lzdGVtcyBvciBzaXR1YXRpb25zIGNhbm5vdCB1c2UgbmZzZF9zcGxpY2VfcmVhZC4gVGhpc1xuZnMvbmZzZC92ZnMuYy0xMTg0LSAqIGZ1bmN0aW9uIGlzIHRoZSBzbGlnaHRseSBsZXNzLXBlcmZvcm1hbnQgZmFsbGJhY2sgZm9yIHRob3NlIGNhc2VzLlxuLS1cbmZzL25mc2QvdmZzLmM9MTQyMz1uZnNkX3Zmc193cml0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4tLVxuZnMvbmZzZC92ZnMuYy0xNTQxLSAqIFJldHVybiB2YWx1ZXM6XG5mcy9uZnNkL3Zmcy5jOjE1NDI6ICogICAldHJ1ZTogbmZzZF9zcGxpY2VfcmVhZCgpIG1heSBiZSB1c2VkXG5mcy9uZnNkL3Zmcy5jOjE1NDM6ICogICAlZmFsc2U6IG5mc2Rfc3BsaWNlX3JlYWQoKSBtdXN0IG5vdCBiZSB1c2VkXG5mcy9uZnNkL3Zmcy5jLTE1NDQtICpcbi0tXG5mcy9uZnNkL3Zmcy5jPTE1Nzk9X19iZTMyIG5mc2RfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4tLVxuZnMvbmZzZC92ZnMuYy0xNTkyLVx0aWYgKGZpbGUtXHUwMDNlZl9vcC1cdTAwM2VzcGxpY2VfcmVhZCBcdTAwMjZcdTAwMjYgbmZzZF9yZWFkX3NwbGljZV9vayhycXN0cCkpXG5mcy9uZnNkL3Zmcy5jOjE1OTM6XHRcdGVyciA9IG5mc2Rfc3BsaWNlX3JlYWQocnFzdHAsIGZocCwgZmlsZSwgb2Zmc2V0LCBjb3VudCwgZW9mKTtcbmZzL25mc2QvdmZzLmMtMTU5NC1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTAxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBTcGxpY2UgUGVyZm9ybWFuY2UgQm90dGxlbmVjayBpbiBORlMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgTkZTIHBlcmZvcm1hbmNlIGRpYWdub3N0aWNzLCBhbmQgdHdvIGZ1bmN0aW9ucyBpbiBwYXJ0aWN1bGFyIGhhdmUgY2F1Z2h0IG15IGV5ZTogYG5mc2Rfc3BsaWNlX3JlYWRgIGFuZCBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgLiBUaGUga2V5IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgbmVpdGhlciBvZiB0aGVzZSBpcyBkZWNsYXJlZCBgc3RhdGljYC4gVGhpcyBpc24mIzM5O3QgYSAqZ3VhcmFudGVlKiBvZiBhbiBpc3N1ZSwgYnV0IGl0IGRvZXMgbWVhbiB0aGV5JiMzOTtyZSBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIGFuZCBjYWxsYWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGluY3JlYXNpbmcgdGhlIGNoYW5jZSBvZiB1c2FnZSBvdXRzaWRlIG9mIHdoZXJlIHRoZXkgd2VyZSBvcmlnaW5hbGx5IGludGVuZGVkLCBvciB1c2VkIGRpZmZlcmVudGx5IHRoYW4gaW50ZW5kZWQgd2hpY2ggbWlnaHQgaW1wYWN0IHBlcmZvcm1hbmNlLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlLiBHaXZlbiB0aGF0IGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgc291bmRzIGxpa2UgYSBtb3JlIGdlbmVyYWwgVkZTIGZ1bmN0aW9uIHRoYXQgSSBrbm93IGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UsIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIG91dCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCB3aXRoaW4gYGZzL3NwbGljZS5jYC4gVGhpcyBmaWxlJiMzOTtzIGxpa2VseSB0byBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGRpcmVjdCBpbnRlcmFjdGlvbiBiZXR3ZWVuIFZGUyBzcGxpY2luZyBhbmQgdGhlIHVuZGVybHlpbmcgbmV0d29yayBmaWxlIHN5c3RlbSBiZWhhdmlvciBhbmQgaG93IGBuZnNkX3NwbGljZV9yZWFkYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgd2UgbWlnaHQgYmUgaGFuZGxpbmcgc3BsaWNlZCBkYXRhIGluIE5GUy4gQnkgZXhhbWluaW5nIHRoZSBjb2RlIGhlcmUsIEkgY2FuIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGRhdGEgZmxvdyBhbmQgaG93IHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG1pZ2h0IHBsYXkgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvc3BsaWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc3BsaWNlLmM9MTAxOD1zdGF0aWMgc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCxcbi0tXG5mcy9zcGxpY2UuYy0xMTQ0LS8qKlxuZnMvc3BsaWNlLmM6MTE0NTogKiB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvciAtIHNwbGljZSBmcm9tIGEgZmlsZSB0aHJvdWdoIGEgY2FsbGVyJiMzOTtzIGFjdG9yXG5mcy9zcGxpY2UuYy0xMTQ2LSAqIEBpbjpcdFx0ZmlsZSB0byBzcGxpY2UgZnJvbTsgbXVzdCBiZSBzZWVrYWJsZSAoRk1PREVfTFNFRUspXG4tLVxuZnMvc3BsaWNlLmMtMTE2MS0gKi9cbmZzL3NwbGljZS5jOjExNjI6c3NpemVfdCB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG5mcy9zcGxpY2UuYy0xMTYzLVx0XHRcdFx0ICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpXG4tLVxuZnMvc3BsaWNlLmMtMTE3NS19XG5mcy9zcGxpY2UuYzoxMTc2OkVYUE9SVF9TWU1CT0wodmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3IpO1xuZnMvc3BsaWNlLmMtMTE3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTQzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRm9jdXNpbmcgb24gRWZmaWNpZW50IERhdGEgVHJhbnNmZXJzIGluIE5GUyoqCgpSaWdodCwgc28gSSYjMzk7bSBob21pbmcgaW4gb24gc29tZSBjcml0aWNhbCBhcmVhcyBmb3IgTkZTIHBlcmZvcm1hbmNlLiBUaGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIGlkZW50aWZ5aW5nIGFzIGNyaXRpY2FsIGZvY3VzIHN5bWJvbHMgZm9yIGRlZXBlciBhbmFseXNpcyBhcmUgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBhbmQgYG5mc2Rfc3BsaWNlX3JlYWRgLiBUaGVzZSBhcmUgd2hlcmUgdGhlIHJ1YmJlciByZWFsbHkgbWVldHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgemVyby1jb3B5IGRhdGEgdHJhbnNmZXIsIHBhcnRpY3VsYXJseSBpbiB0aGUgc2VydmVyLXNpZGUgTkZTIGltcGxlbWVudGF0aW9uLgoKVGhlIG92ZXJhbGwgY29udGV4dCBoZXJlIGlzIHRoYXQgSSYjMzk7bSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBvcHRpbWl6aW5nIHRoZSBORlMgKnNlcnZlciog4oCTIHNvIEkmIzM5O20gcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgTkZTRCBjb25maWd1cmF0aW9uIGZsYWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlNEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmZzZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25mc2QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvbmZzZC9LY29uZmlnOjI6Y29uZmlnIE5GU0RcbmZzL25mc2QvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTM5LVxuZnMvbmZzZC9LY29uZmlnOjQwOmNvbmZpZyBORlNEX1YyXG5mcy9uZnNkL0tjb25maWctNDEtXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gMiAoREVQUkVDQVRFRClcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctNTAtXG5mcy9uZnNkL0tjb25maWc6NTE6Y29uZmlnIE5GU0RfVjJfQUNMXG5mcy9uZnNkL0tjb25maWctNTItXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgdGhlIE5GU3YyIEFDTCBwcm90b2NvbCBleHRlbnNpb25cJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctNTQtXG5mcy9uZnNkL0tjb25maWc6NTU6Y29uZmlnIE5GU0RfVjNfQUNMXG5mcy9uZnNkL0tjb25maWctNTYtXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgdGhlIE5GU3YzIEFDTCBwcm90b2NvbCBleHRlbnNpb25cJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctNzYtXG5mcy9uZnNkL0tjb25maWc6Nzc6Y29uZmlnIE5GU0RfVjRcbmZzL25mc2QvS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiA0XCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTkzLVxuZnMvbmZzZC9LY29uZmlnOjk0OmNvbmZpZyBORlNEX1BORlNcbmZzL25mc2QvS2NvbmZpZy05NS1cdGJvb2xcbmZzL25mc2QvS2NvbmZpZy05Ni1cbmZzL25mc2QvS2NvbmZpZzo5Nzpjb25maWcgTkZTRF9CTE9DS0xBWU9VVFxuZnMvbmZzZC9LY29uZmlnLTk4LVx0Ym9vbCBcJiMzNDtORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIGJsb2NrIGxheW91dHNcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctMTA5LVxuZnMvbmZzZC9LY29uZmlnOjExMDpjb25maWcgTkZTRF9TQ1NJTEFZT1VUXG5mcy9uZnNkL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIFNDU0kgbGF5b3V0c1wmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xMjMtXG5mcy9uZnNkL0tjb25maWc6MTI0OmNvbmZpZyBORlNEX0ZMRVhGSUxFTEFZT1VUXG5mcy9uZnNkL0tjb25maWctMTI1LVx0Ym9vbCBcJiMzNDtORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIEZsZXggRmlsZSBsYXlvdXRzXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTE0MC1cbmZzL25mc2QvS2NvbmZpZzoxNDE6Y29uZmlnIE5GU0RfVjRfMl9JTlRFUl9TU0NcbmZzL25mc2QvS2NvbmZpZy0xNDItXHRib29sIFwmIzM0O05GU3Y0LjIgaW50ZXIgc2VydmVyIHRvIHNlcnZlciBDT1BZXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTE1MC1cbmZzL25mc2QvS2NvbmZpZzoxNTE6Y29uZmlnIE5GU0RfVjRfU0VDVVJJVFlfTEFCRUxcbmZzL25mc2QvS2NvbmZpZy0xNTItXHRib29sIFwmIzM0O1Byb3ZpZGUgU2VjdXJpdHkgTGFiZWwgc3VwcG9ydCBmb3IgTkZTdjQgc2VydmVyXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTE2My1cbmZzL25mc2QvS2NvbmZpZzoxNjQ6Y29uZmlnIE5GU0RfTEVHQUNZX0NMSUVOVF9UUkFDS0lOR1xuZnMvbmZzZC9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBsZWdhY3kgTkZTdjQgY2xpZW50IHRyYWNraW5nIG1ldGhvZHMgKERFUFJFQ0FURUQpXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTE3OS1cbmZzL25mc2QvS2NvbmZpZzoxODA6Y29uZmlnIE5GU0RfVjRfUE9TSVhfQUNMU1xuZnMvbmZzZC9LY29uZmlnLTE4MS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBORlN2NCBQT1NJWCBkcmFmdCBBQ0xzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYyMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIE5GUyBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgdGhlIHF1ZXN0aW9uIGF0IGhhbmQgaXMgd2hldGhlciB1c2luZyBgTkZTRGAgaXMgc3VmZmljaWVudCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHRhc2suIEJlZm9yZSBqdW1waW5nIHRvIGFueSBjb25jbHVzaW9ucywgSSBuZWVkIHRvIHRob3JvdWdobHkgYXNzZXNzIGl0cyBkZXBlbmRlbmNpZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQgZG9lcyBgTkZTRGAgcmVseSBvbj8mIzM0OyBJIGluc3RpbmN0aXZlbHkga25vdyB0aGF0IGBORlNEYCBpcyBpbnRyaWNhdGVseSBsaW5rZWQgdG8gdGhlIHVuZGVybHlpbmcgbmV0d29yayBpbmZyYXN0cnVjdHVyZSAoYElORVRgKSwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gT2YgY291cnNlLCBmaWxlIGxvY2tpbmcgKGBGSUxFX0xPQ0tJTkdgKSBpcyBhIGtleSBjb21wb25lbnQgZm9yIE5GUywgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgaW4gYSBkaXN0cmlidXRlZCBlbnZpcm9ubWVudCwgc28gdGhhdCYjMzk7cyBleHBlY3RlZC4gRmluYWxseSwgdGhlIGluY2x1c2lvbiBvZiBgRlNOT1RJRllgIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBiZWNhdXNlIGl0IHdvdWxkIHN1Z2dlc3QgdGhhdCB0aGVyZSBtYXkgYmUgYSBuZWVkIGZvciBjaGFuZ2Ugbm90aWZpY2F0aW9ucyB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZnNkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzZC9LY29uZmlnPTI9Y29uZmlnIE5GU0RcbmZzL25mc2QvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6NDpcdGRlcGVuZHMgb24gSU5FVFxuZnMvbmZzZC9LY29uZmlnOjU6XHRkZXBlbmRzIG9uIEZJTEVfTE9DS0lOR1xuZnMvbmZzZC9LY29uZmlnOjY6XHRkZXBlbmRzIG9uIEZTTk9USUZZXG5mcy9uZnNkL0tjb25maWctNy1cdHNlbGVjdCBDUkMzMlxuLS1cbmZzL25mc2QvS2NvbmZpZy0xNi1cdHNlbGVjdCBORlNfQUNMX1NVUFBPUlQgaWYgTkZTRF9WM19BQ0xcbmZzL25mc2QvS2NvbmZpZzoxNzpcdGRlcGVuZHMgb24gTVVMVElVU0VSXG5mcy9uZnNkL0tjb25maWctMTgtXHRoZWxwXG4tLVxuZnMvbmZzZC9LY29uZmlnPTQwPWNvbmZpZyBORlNEX1YyXG5mcy9uZnNkL0tjb25maWctNDEtXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gMiAoREVQUkVDQVRFRClcJiMzNDtcbmZzL25mc2QvS2NvbmZpZzo0MjpcdGRlcGVuZHMgb24gTkZTRFxuZnMvbmZzZC9LY29uZmlnLTQzLVx0ZGVmYXVsdCBuXG4tLVxuZnMvbmZzZC9LY29uZmlnPTUxPWNvbmZpZyBORlNEX1YyX0FDTFxuZnMvbmZzZC9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MiBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6NTM6XHRkZXBlbmRzIG9uIE5GU0RfVjJcbmZzL25mc2QvS2NvbmZpZy01NC1cbmZzL25mc2QvS2NvbmZpZz01NT1jb25maWcgTkZTRF9WM19BQ0xcbmZzL25mc2QvS2NvbmZpZy01Ni1cdGJvb2wgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0IGZvciB0aGUgTkZTdjMgQUNMIHByb3RvY29sIGV4dGVuc2lvblwmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjU3Olx0ZGVwZW5kcyBvbiBORlNEXG5mcy9uZnNkL0tjb25maWctNTgtXHRoZWxwXG4tLVxuZnMvbmZzZC9LY29uZmlnPTc3PWNvbmZpZyBORlNEX1Y0XG5mcy9uZnNkL0tjb25maWctNzgtXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gNFwmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjc5Olx0ZGVwZW5kcyBvbiBORlNEIFx1MDAyNlx1MDAyNiBQUk9DX0ZTXG5mcy9uZnNkL0tjb25maWctODAtXHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4tLVxuZnMvbmZzZC9LY29uZmlnPTk3PWNvbmZpZyBORlNEX0JMT0NLTEFZT1VUXG5mcy9uZnNkL0tjb25maWctOTgtXHRib29sIFwmIzM0O05GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgYmxvY2sgbGF5b3V0c1wmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjk5Olx0ZGVwZW5kcyBvbiBORlNEX1Y0IFx1MDAyNlx1MDAyNiBCTE9DS1xuZnMvbmZzZC9LY29uZmlnLTEwMC1cdHNlbGVjdCBORlNEX1BORlNcbi0tXG5mcy9uZnNkL0tjb25maWc9MTEwPWNvbmZpZyBORlNEX1NDU0lMQVlPVVRcbmZzL25mc2QvS2NvbmZpZy0xMTEtXHRib29sIFwmIzM0O05GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgU0NTSSBsYXlvdXRzXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6MTEyOlx0ZGVwZW5kcyBvbiBORlNEX1Y0IFx1MDAyNlx1MDAyNiBCTE9DS1xuZnMvbmZzZC9LY29uZmlnLTExMy1cdHNlbGVjdCBORlNEX1BORlNcbi0tXG5mcy9uZnNkL0tjb25maWc9MTI0PWNvbmZpZyBORlNEX0ZMRVhGSUxFTEFZT1VUXG5mcy9uZnNkL0tjb25maWctMTI1LVx0Ym9vbCBcJiMzNDtORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIEZsZXggRmlsZSBsYXlvdXRzXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6MTI2Olx0ZGVwZW5kcyBvbiBORlNEX1Y0XG5mcy9uZnNkL0tjb25maWctMTI3LVx0c2VsZWN0IE5GU0RfUE5GU1xuLS1cbmZzL25mc2QvS2NvbmZpZz0xNDE9Y29uZmlnIE5GU0RfVjRfMl9JTlRFUl9TU0NcbmZzL25mc2QvS2NvbmZpZy0xNDItXHRib29sIFwmIzM0O05GU3Y0LjIgaW50ZXIgc2VydmVyIHRvIHNlcnZlciBDT1BZXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6MTQzOlx0ZGVwZW5kcyBvbiBORlNEX1Y0IFx1MDAyNlx1MDAyNiBORlNfVjRfMlxuZnMvbmZzZC9LY29uZmlnLTE0NC1cdGhlbHBcbi0tXG5mcy9uZnNkL0tjb25maWc9MTUxPWNvbmZpZyBORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMXG5mcy9uZnNkL0tjb25maWctMTUyLVx0Ym9vbCBcJiMzNDtQcm92aWRlIFNlY3VyaXR5IExhYmVsIHN1cHBvcnQgZm9yIE5GU3Y0IHNlcnZlclwmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjE1MzpcdGRlcGVuZHMgb24gTkZTRF9WNCBcdTAwMjZcdTAwMjYgU0VDVVJJVFlcbmZzL25mc2QvS2NvbmZpZy0xNTQtXHRoZWxwXG4tLVxuZnMvbmZzZC9LY29uZmlnPTE2ND1jb25maWcgTkZTRF9MRUdBQ1lfQ0xJRU5UX1RSQUNLSU5HXG5mcy9uZnNkL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGxlZ2FjeSBORlN2NCBjbGllbnQgdHJhY2tpbmcgbWV0aG9kcyAoREVQUkVDQVRFRClcJiMzNDtcbmZzL25mc2QvS2NvbmZpZzoxNjY6XHRkZXBlbmRzIG9uIE5GU0RfVjRcbmZzL25mc2QvS2NvbmZpZy0xNjctXHRkZWZhdWx0IG5cbi0tXG5mcy9uZnNkL0tjb25maWc9MTgwPWNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcbmZzL25mc2QvS2NvbmZpZy0xODEtXHRib29sIFwmIzM0O1N1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1wmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjE4MjpcdGRlcGVuZHMgb24gTkZTRF9WNFxuZnMvbmZzZC9LY29uZmlnLTE4My1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDY4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTkZTRCBhbmQgU3BsaWNlLmMqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgTkZTRGAgaGVyZS4gTXkgdGhpbmtpbmcgaXMgdGhhdCBgTkZTRGAmIzM5O3MgbGlrZWx5IGRlcGVuZGVuY2llcyBhcmUgaW1wb3J0YW50LCBhbmQgcmlnaHQgbm93IEkgdGhpbmsgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBpcyB0aGUgZnVuY3Rpb24gb2YgaW50ZXJlc3QuIEkgcmVjYWxsIHRoYXQgbGl2ZXMgaW4gYGZzL3NwbGljZS5jYC4gTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyBgZnMvc3BsaWNlLmNgIGFsd2F5cyBidWlsdD8gSWYgaXQgKmlzKiBhbHdheXMgYnVpbHQsIHRoZW4gdGhhdCBzaW1wbGlmaWVzIGEgbG90IG9mIHRoaW5ncy4gSWYgbm90LCB0aGVuIEkgbmVlZCB0byBjb25zaWRlciBpdHMgYnVpbGQgY29uZmlndXJhdGlvbnMgbW9yZSBjYXJlZnVsbHkuIFRpbWUgdG8gY2hlY2sgdGhvc2UgYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCBtYWtlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NwbGljZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGU9MTA9b2JqLXkgOj1cdG9wZW4ubyByZWFkX3dyaXRlLm8gZmlsZV90YWJsZS5vIHN1cGVyLm8gXFxcbi0tXG5mcy9NYWtlZmlsZS0xNC1cdFx0c2VxX2ZpbGUubyB4YXR0ci5vIGxpYmZzLm8gZnMtd3JpdGViYWNrLm8gXFxcbmZzL01ha2VmaWxlOjE1Olx0XHRwbm9kZS5vIHNwbGljZS5vIHN5bmMubyB1dGltZXMubyBkX3BhdGgubyBcXFxuZnMvTWFrZWZpbGUtMTYtXHRcdHN0YWNrLm8gZnNfc3RydWN0Lm8gc3RhdGZzLm8gZnNfcGluLm8gbnNmcy5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUtcmVsYXRlZCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBmcy9zcGxpY2UuY2AgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCkFscmlnaHQsIHNvIGBmcy9zcGxpY2UuY2AgaXMgYWx3YXlzIGJ1aWx0IOKAkyB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gSXQgc2ltcGxpZmllcyBteSBpbml0aWFsIGFuYWx5c2lzLiBOb3cgSSBjYW4gY29uY2VudHJhdGUgc3BlY2lmaWNhbGx5IG9uIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgYW5kIGBuZnNkX3NwbGljZV9yZWFkYC4gQW5kIHRoZSBmYWN0IHRoYXQgdGhlIE5GU0QgY29uZmlnIGlzIGFjdGl2ZSwgd2hpY2ggaXMgaW1wb3J0YW50IGNvbnRleHQuCgpCdXQgSSByZWFsbHkgc2hvdWxkIGNvbmZpcm0gdGhhdCB0aG9zZSBhcmUgKmFsbCogdGhlIGRpcmVjdCBjYWxsZXJzIG9mIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAuIEkgd2FudCB0byBiZSB0aG9yb3VnaCBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9yIGludGVncmF0aW9ucy4gVGltZSBmb3IgYW5vdGhlciBwYXNzIHRocm91Z2ggdGhlIGNvZGViYXNlIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSXQmIzM5O3MgZWFzeSB0byBvdmVybG9vayB0aGluZ3MgaW4gdGhlc2Uga2luZHMgb2YgaW52ZXN0aWdhdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc3VjaCBhIGNvcmUgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25mc2QvdmZzLmM9MTA3OD1fX2JlMzIgbmZzZF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4tLVxuZnMvbmZzZC92ZnMuYy0xMDkwLVx0dHJhY2VfbmZzZF9yZWFkX3NwbGljZShycXN0cCwgZmhwLCBvZmZzZXQsICpjb3VudCk7XG5mcy9uZnNkL3Zmcy5jOjEwOTE6XHRob3N0X2VyciA9IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsIFx1MDAyNnNkLFxuZnMvbmZzZC92ZnMuYy0xMDkyLVx0XHRcdFx0XHQgICAgICBuZnNkX2RpcmVjdF9zcGxpY2VfYWN0b3IpO1xuLS1cbmZzL3NwbGljZS5jPTEwMTg9c3RhdGljIHNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4tLVxuZnMvc3BsaWNlLmMtMTE0NC0vKipcbmZzL3NwbGljZS5jOjExNDU6ICogdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3IgLSBzcGxpY2UgZnJvbSBhIGZpbGUgdGhyb3VnaCBhIGNhbGxlciYjMzk7cyBhY3RvclxuZnMvc3BsaWNlLmMtMTE0Ni0gKiBAaW46XHRcdGZpbGUgdG8gc3BsaWNlIGZyb207IG11c3QgYmUgc2Vla2FibGUgKEZNT0RFX0xTRUVLKVxuLS1cbmZzL3NwbGljZS5jLTExNjEtICovXG5mcy9zcGxpY2UuYzoxMTYyOnNzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLFxuZnMvc3BsaWNlLmMtMTE2My1cdFx0XHRcdCAgIHNwbGljZV9kaXJlY3RfYWN0b3IgKmFjdG9yKVxuLS1cbmZzL3NwbGljZS5jLTExNzUtfVxuZnMvc3BsaWNlLmM6MTE3NjpFWFBPUlRfU1lNQk9MKHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKTtcbmZzL3NwbGljZS5jLTExNzctXG4tLVxuaW5jbHVkZS9saW51eC9zcGxpY2UuaD03OT1zc2l6ZV90IHZmc19zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbi0tXG5pbmNsdWRlL2xpbnV4L3NwbGljZS5oLTgxLVx0XHRcdHVuc2lnbmVkIGludCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L3NwbGljZS5oOjgyOnNzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG5pbmNsdWRlL2xpbnV4L3NwbGljZS5oLTgzLVx0XHRcdFx0ICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjMyCgkJCQkJCQlvdXRwdXQ6IDEwOQoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBDb3ZlcmFnZSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGNhbGxpbmcgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCByaWdodCBub3cgaXMgYG5mc2Rfc3BsaWNlX3JlYWRgLiBMZXQmIzM5O3MganVzdCBkbyBhIGZpbmFsIHNhbml0eSBjaGVjayB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBldmVyeXRoaW5nIGlzIGluIG9yZGVyLgoKVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIHRydWUsIHdoaWNoIEkgY29uY3VyIHdpdGggZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcy4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBhcHByb3ByaWF0ZWx5IHNjb3BlZCB0byB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXM6IGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgYW5kIGBuZnNkX3NwbGljZV9yZWFkYC4gQW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIHNlbnNpYmxlIOKAkyBlbmFibGluZyBgTkZTRGAgaXMgbmVjZXNzYXJ5IHRvIGFjdHVhbGx5IGV4ZXJjaXNlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS4KCk15IHJlYXNvbmluZz8gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgY29yZSBWRlMgbG9naWMgZm9yIHNwbGljaW5nIGFuZCwgY3J1Y2lhbGx5LCB0aGUgTkZTRCByZWFkIHBhdGhzLiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIEFQSSBhbmQgdGhlIHVwZGF0ZWQgYG5mc2Rfc3BsaWNlX3JlYWRgIGNhbGwgY2xlYXJseSByZXByZXNlbnQgcmVhY2hhYmxlLCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlc2UgY3JpdGljYWwgY29kZSBwYXRocy4gVGhlc2UgYXJlIGV4YWN0bHkgdGhlIGtpbmQgb2YgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZGVlcCBmdXp6aW5nLiBJJiMzOTttIHJlYXNvbmFibHkgY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GU0QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvciYjMzQ7LAogICAgJiMzNDtuZnNkX3NwbGljZV9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGxvZ2ljIGZvciBzcGxpY2luZyBhbmQgTkZTRCByZWFkIHBhdGhzLCBpbnRyb2R1Y2luZyBhIG5ldyBBUEkgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBhbmQgdXBkYXRpbmcgYG5mc2Rfc3BsaWNlX3JlYWRgIHRvIHVzZSBpdC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GU0QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvciYjMzQ7LAogICAgJiMzNDtuZnNkX3NwbGljZV9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGxvZ2ljIGZvciBzcGxpY2luZyBhbmQgTkZTRCByZWFkIHBhdGhzLCBpbnRyb2R1Y2luZyBhIG5ldyBBUEkgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBhbmQgdXBkYXRpbmcgYG5mc2Rfc3BsaWNlX3JlYWRgIHRvIHVzZSBpdC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBpbiBgZnMvc3BsaWNlLmNgIHRoYXQgY29uc29saWRhdGVzIGV4aXN0aW5nIGNhbGxzIHRvIGByd192ZXJpZnlfYXJlYWAsIGBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCwgYW5kIGBmc25vdGlmeV9hY2Nlc3NgLiBJdCB0aGVuIHVwZGF0ZXMgYG5mc2Rfc3BsaWNlX3JlYWRgIGluIGBmcy9uZnNkL3Zmcy5jYCB0byB1c2UgdGhpcyBuZXcgaGVscGVyLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHN0cnVjdHVyYWwgcmVmYWN0b3JpbmcgdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBjaGFuZ2VzIHRvIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGUgbW9kaWZpY2F0aW9ucyBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB0aGF0IG1pZ2h0IHRoZW9yZXRpY2FsbHkgYXJpc2UgZnJvbSBWRlMgY2hhbmdlcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODJlOWY1NWViOTI5ODgyOWVmZGJiMzIyNGU3N2NkNDdjNjU4YTUyYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDE4OjI3OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC92ZnMuYyBiL2ZzL25mc2QvdmZzLmMKaW5kZXggMWU4OWM3ZmY5NDkzYi4uYTQ2NWUyNzZkNjc1NCAxMDA2NDQKLS0tIGEvZnMvbmZzZC92ZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uZnNkL3Zmcy5jCkBAIC0xMDU1LDcgJiM0MzsxMDU1LDYgQEAgc3RhdGljIF9fYmUzMiBuZnNkX2ZpbmlzaF9yZWFkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCwKIAkJbmZzZF9zdGF0c19pb19yZWFkX2FkZChubiwgZmhwLSZndDtmaF9leHBvcnQsIGhvc3RfZXJyKTsKIAkJKmVvZiA9IG5mc2RfZW9mX29uX3JlYWQoZmlsZSwgb2Zmc2V0LCBob3N0X2VyciwgKmNvdW50KTsKIAkJKmNvdW50ID0gaG9zdF9lcnI7Ci0JCWZzbm90aWZ5X2FjY2VzcyhmaWxlKTsKIAkJdHJhY2VfbmZzZF9yZWFkX2lvX2RvbmUocnFzdHAsIGZocCwgb2Zmc2V0LCAqY291bnQpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewpAQCAtMTA4OSwxMCAmIzQzOzEwODgsOCBAQCBfX2JlMzIgbmZzZF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsCiAJc3NpemVfdCBob3N0X2VycjsKIAogCXRyYWNlX25mc2RfcmVhZF9zcGxpY2UocnFzdHAsIGZocCwgb2Zmc2V0LCAqY291bnQpOwotCWhvc3RfZXJyID0gcndfdmVyaWZ5X2FyZWEoUkVBRCwgZmlsZSwgJmFtcDtvZmZzZXQsICpjb3VudCk7Ci0JaWYgKCFob3N0X2VycikKLQkJaG9zdF9lcnIgPSBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsICZhbXA7c2QsCi0JCQkJCQkgIG5mc2RfZGlyZWN0X3NwbGljZV9hY3Rvcik7CiYjNDM7CWhvc3RfZXJyID0gdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3IoZmlsZSwgJmFtcDtzZCwKJiM0MzsJCQkJCSAgICAgIG5mc2RfZGlyZWN0X3NwbGljZV9hY3Rvcik7CiAJcmV0dXJuIG5mc2RfZmluaXNoX3JlYWQocnFzdHAsIGZocCwgZmlsZSwgb2Zmc2V0LCBjb3VudCwgZW9mLCBob3N0X2Vycik7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3NwbGljZS5jIGIvZnMvc3BsaWNlLmMKaW5kZXggOWQ4ZjYzZTJmZDFhYi4uNDJhZDcxMmEwZjRkYSAxMDA2NDQKLS0tIGEvZnMvc3BsaWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3BsaWNlLmMKQEAgLTEwMDksMjEgJiM0MzsxMDA5LDE0IEBAIHNzaXplX3QgdmZzX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLAogfQogRVhQT1JUX1NZTUJPTF9HUEwodmZzX3NwbGljZV9yZWFkKTsKIAotLyoqCi0gKiBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yIC0gc3BsaWNlcyBkYXRhIGRpcmVjdGx5IGJldHdlZW4gdHdvIG5vbi1waXBlcwotICogQGluOgkJZmlsZSB0byBzcGxpY2UgZnJvbQotICogQHNkOgkJYWN0b3IgaW5mb3JtYXRpb24gb24gd2hlcmUgdG8gc3BsaWNlIHRvCi0gKiBAYWN0b3I6CWhhbmRsZXMgdGhlIGRhdGEgc3BsaWNpbmcKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgaGVscGVyIHRvIHNwbGljZSBkaXJlY3RseSBiZXR3ZWVuIHR3bwotICogICAgcG9pbnRzLCB3aXRob3V0IHJlcXVpcmluZyBhbiBleHBsaWNpdCBwaXBlLiBJbnRlcm5hbGx5IGFuIGFsbG9jYXRlZAotICogICAgcGlwZSBpcyBjYWNoZWQgaW4gdGhlIHByb2Nlc3MsIGFuZCByZXVzZWQgZHVyaW5nIHRoZSBsaWZldGltZSBvZgotICogICAgdGhhdCBwcm9jZXNzLgotICoKJiM0MzsvKgomIzQzOyAqIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgaGVscGVyIHRvIHNwbGljZSBkaXJlY3RseSBiZXR3ZWVuIHR3bwomIzQzOyAqIHBvaW50cywgd2l0aG91dCByZXF1aXJpbmcgYW4gZXhwbGljaXQgcGlwZS4gSW50ZXJuYWxseSBhbiBhbGxvY2F0ZWQKJiM0MzsgKiBwaXBlIGlzIGNhY2hlZCBpbiB0aGUgcHJvY2VzcywgYW5kIHJldXNlZCBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mCiYjNDM7ICogdGhhdCBwcm9jZXNzLgogICovCi1zc2l6ZV90IHNwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLAotCQkJICAgICAgIHNwbGljZV9kaXJlY3RfYWN0b3IgKmFjdG9yKQomIzQzO3N0YXRpYyBzc2l6ZV90IHNwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLAomIzQzOwkJCQkgICAgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3RvcikKIHsKIAlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOwogCXNzaXplX3QgcmV0LCBieXRlczsKQEAgLTExNDcsNyAmIzQzOzExNDAsNDAgQEAgc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCwKIAogCWdvdG8gZG9uZTsKIH0KLUVYUE9SVF9TWU1CT0woc3BsaWNlX2RpcmVjdF90b19hY3Rvcik7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3IgLSBzcGxpY2UgZnJvbSBhIGZpbGUgdGhyb3VnaCBhIGNhbGxlciYjMzk7cyBhY3RvcgomIzQzOyAqIEBpbjoJCWZpbGUgdG8gc3BsaWNlIGZyb207IG11c3QgYmUgc2Vla2FibGUgKEZNT0RFX0xTRUVLKQomIzQzOyAqIEBzZDoJCXNwbGljZSBwYXJhbWV0ZXJzLiBUaGUgY2FsbGVyIHNldHMgQHNkLSZndDtwb3MgYW5kCiYjNDM7ICoJCUBzZC0mZ3Q7dG90YWxfbGVuLiBAc2QtJmd0O3BvcyBhZHZhbmNlcyBhcyBkYXRhIGlzIGNvbnN1bWVkLAomIzQzOyAqCQlhbmQgQHNkLSZndDt0b3RhbF9sZW4gaXMgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgbGVuZ3RoIG9mCiYjNDM7ICoJCWVhY2ggcmVhZC4KJiM0MzsgKiBAYWN0b3I6CWNvbnN1bWVzIGVhY2ggcGlwZS1mdWxsIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YKJiM0MzsgKgkJYnl0ZXMgdGFrZW4KJiM0MzsgKgomIzQzOyAqIERlc2NyaXB0aW9uOgomIzQzOyAqICAgIFNwbGljZSBmcm9tIEBpbiB0aHJvdWdoIEBhY3RvciwgZm9yIGEgY2FsbGVyIHRoYXQgY29uc3VtZXMKJiM0MzsgKiAgICB0aGUgZGF0YSBpdHNlbGYgcmF0aGVyIHRoYW4gc2VuZGluZyBpdCB0byBhIHNlY29uZCBmaWxlLgomIzQzOyAqICAgIFRoaXMgaGVscGVyIHZlcmlmaWVzIHRoZSByZWFkIGFuZCBlbWl0cyB0aGUgZnNub3RpZnkgYWNjZXNzCiYjNDM7ICogICAgZXZlbnQuIGRvX3NwbGljZV9kaXJlY3QoKSBsZWF2ZXMgYm90aCB0byBpdHMgY2FsbGVycy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogVGhlIG51bWJlciBvZiBieXRlcyBzcGxpY2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLgomIzQzOyAqLwomIzQzO3NzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLAomIzQzOwkJCQkgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3RvcikKJiM0Mzt7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByd192ZXJpZnlfYXJlYShSRUFELCBpbiwgJmFtcDtzZC0mZ3Q7cG9zLCBzZC0mZ3Q7dG90YWxfbGVuKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGluLCBzZCwgYWN0b3IpOwomIzQzOwlpZiAocmV0ICZndDs9IDApCiYjNDM7CQlmc25vdGlmeV9hY2Nlc3MoaW4pOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKTsKIAogc3RhdGljIGludCBkaXJlY3Rfc3BsaWNlX2FjdG9yKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCiAJCQkgICAgICAgc3RydWN0IHNwbGljZV9kZXNjICpzZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmggYi9pbmNsdWRlL2xpbnV4L3NwbGljZS5oCmluZGV4IDlkZWM0ODYxZDA5ZjYuLjRlOTFkMDNlZDY0NWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaApAQCAtNzksOCAmIzQzOzc5LDggQEAgc3NpemVfdCBhZGRfdG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1Zik7CiBzc2l6ZV90IHZmc19zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcywKIAkJCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sCiAJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOwotc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLAotCQkJICAgICAgIHNwbGljZV9kaXJlY3RfYWN0b3IgKmFjdG9yKTsKJiM0Mztzc2l6ZV90IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLAomIzQzOwkJCQkgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3Rvcik7CiBzc2l6ZV90IGRvX3NwbGljZShzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqb2ZmX2luLCBzdHJ1Y3QgZmlsZSAqb3V0LAogCQkgIGxvZmZfdCAqb2ZmX291dCwgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKTsKIHNzaXplX3QgZG9fc3BsaWNlX2RpcmVjdChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcywgc3RydWN0IGZpbGUgKm91dCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0ODAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgYW5kIENvZGUgTW92ZW1lbnQgaW4gU3BsaWNlIE9wZXJhdGlvbnMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZyBvZiB0aGUgc3BsaWNlIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgZGlyZWN0LXRvLWFjdG9yIG9wZXJhdGlvbnMuIEl0JiMzOTtzIGFkZGluZyBhIG5ldyBmdW5jdGlvbiwgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCwgd2l0aGluIGBmcy9zcGxpY2UuY2AgYW5kIHRoZW4gcmVwbGFjaW5nIHRoZSBleGlzdGluZyBgc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgY2FsbCB3aXRoIGl0IGluIGBmcy9uZnNkL3Zmcy5jYC4gVGhlIG1haW4gbW90aXZhdGlvbiBzZWVtcyB0byBiZSB0byBjZW50cmFsaXplIGFuZCBlbmNhcHN1bGF0ZSBzb21lIGNoZWNrcyBhbmQgbm90aWZpY2F0aW9ucy4gSSYjMzk7bSBzZWVpbmcgdGhhdCBgcndfdmVyaWZ5X2FyZWFgIGFuZCBgZnNub3RpZnlfYWNjZXNzYCBhcmUgYmVpbmcgbW92ZWQgaW50byB0aGlzIG5ldyBoZWxwZXIgZnVuY3Rpb24uIFNlZW1zIHJlYXNvbmFibGUsIGdvb2QgZm9yIGNvZGUgY2xhcml0eSBhbmQgcG90ZW50aWFsIHJldXNlIGRvd24gdGhlIGxpbmUuCgpObyBpbW1lZGlhdGUgcmVkIGZsYWdzIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbnl0aGluZyBsaWtlIHRoYXQsIGF0IGxlYXN0IG5vdCBhdCBmaXJzdCBnbGFuY2UuIFRoaXMgbG9va3MgbGlrZSBhIGZhaXJseSBsb3ctcmlzayBjaGFuZ2UuIEJ1dCBsZXQmIzM5O3MgdmVyaWZ5IHRoZXNlIGRldGFpbHMuCgpTcGVjaWZpY2FsbHksIGxvb2tpbmcgYXQgdGhlIGBmcy9uZnNkL3Zmcy5jYCBjaGFuZ2VzLCBJJiMzOTttIG5vdGluZyB0aGUgZGlyZWN0IHJlcGxhY2VtZW50IG9mIHRoZSBvbGQgY2FsbCB3aXRoIHRoZSBuZXcgb25lOgoKYGBgYwotCQlob3N0X2VyciA9IHJ3X3ZlcmlmeV9hcmVhKFJFQUQsIGZpbGUsICZhbXA7b2Zmc2V0LCAqY291bnQpOwotCQlpZiAoIWhvc3RfZXJyKQotCQkJaG9zdF9lcnIgPSBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsICZhbXA7c2QsCi0JCQkJCQkJICBuZnNkX2RpcmVjdF9zcGxpY2VfYWN0b3IpOwomIzQzOwkJaG9zdF9lcnIgPSB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcihmaWxlLCAmYW1wO3NkLAomIzQzOwkJCQkJCSAgICAgIG5mc2RfZGlyZWN0X3NwbGljZV9hY3Rvcik7CmBgYAoKYW5kIHRoZSBuZXcgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBmdW5jdGlvbiwgd2hpY2ggbm93IGNvbnRhaW5zIGByd192ZXJpZnlfYXJlYWAgYW5kIGBmc25vdGlmeV9hY2Nlc3NgOgoKYGBgYwomIzQzO3NzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLAomIzQzOwkJCQkgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3RvcikKJiM0Mzt7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByd192ZXJpZnlfYXJlYShSRUFELCBpbiwgJmFtcDtzZC0mZ3Q7cG9zLCBzZC0mZ3Q7dG90YWxfbGVuKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGluLCBzZCwgYWN0b3IpOwomIzQzOwlpZiAocmV0ICZndDs9IDApCiYjNDM7CQlmc25vdGlmeV9hY2Nlc3MoaW4pOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KYGBgCgpPa2F5LCB0aGUgdGhpbmcgdGhhdCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXQgbWUgaXMgdGhpczogaW4gdGhlIG9yaWdpbmFsIGBmcy9uZnNkL3Zmcy5jYCBjb2RlLCBgcndfdmVyaWZ5X2FyZWFgIHdhcyBjYWxsZWQgd2l0aCBgJmFtcDtvZmZzZXRgLCBidXQgaW4gdGhlIG5ldyBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgLCBpdCBpcyBjYWxsZWQgd2l0aCBgJmFtcDtzZC0mZ3Q7cG9zYC4gTm93LCBpcyBgc2QtJmd0O3Bvc2AgaW5pdGlhbGl6ZWQgdG8gYG9mZnNldGA/IEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCBgc2QtJmd0O3Bvc2AgaXMgaW5kZWVkIGluaXRpYWxpemVkIGFwcHJvcHJpYXRlbHkuIEkgd2lsbCB1c2UgdGhlIGBkZWZhdWx0X2FwaTpyZWFkLWZpbGVgIHRvb2wgdG8gcXVpY2tseSBjaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYG5mc2Rfc3BsaWNlX3JlYWRgIHRvIHNlZSB3aGVyZSBgc2QtJmd0O3Bvc2AgaXMgY29taW5nIGZyb20uIEdvdHRhIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IGludHJvZHVjaW5nIGEgc3VidGxlIGJ1ZyB3aXRoIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9uZnNkL3Zmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDcwOlx0ICogQGZpbGU6IG9wZW5lZCBzdHJ1Y3QgZmlsZSBvZiBmaWxlIHRvIGJlIHJlYWRcbjEwNzE6XHQgKiBAb2Zmc2V0OiBzdGFydGluZyBieXRlIG9mZnNldFxuMTA3MjpcdCAqIEBjb3VudDogSU46IHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXM7IE9VVDogbnVtYmVyIG9mIGJ5dGVzIHJlYWRcbjEwNzM6XHQgKiBAZW9mOiBPVVQ6IHNldCBub24temVybyBpZiBvcGVyYXRpb24gcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBmaWxlXG4xMDc0Olx0ICpcbjEwNzU6XHQgKiBSZXR1cm5zIG5mc19vayBvbiBzdWNjZXNzLCBvdGhlcndpc2UgYW4gbmZzZXJyIHN0YXQgdmFsdWUgaXNcbjEwNzY6XHQgKiByZXR1cm5lZC5cbjEwNzc6XHQgKi9cbjEwNzg6XHRfX2JlMzIgbmZzZF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4xMDc5Olx0XHRcdFx0c3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgKmNvdW50LFxuMTA4MDpcdFx0XHRcdHUzMiAqZW9mKVxuMTA4MTpcdHtcbjEwODI6XHRcdHN0cnVjdCBzcGxpY2VfZGVzYyBzZCA9IHtcbjEwODM6XHRcdFx0Lmxlblx0XHQ9IDAsXG4xMDg0Olx0XHRcdC50b3RhbF9sZW5cdD0gKmNvdW50LFxuMTA4NTpcdFx0XHQucG9zXHRcdD0gb2Zmc2V0LFxuMTA4NjpcdFx0XHQudS5kYXRhXHRcdD0gcnFzdHAsXG4xMDg3Olx0XHR9O1xuMTA4ODpcdFx0c3NpemVfdCBob3N0X2VycjtcbjEwODk6XHRcbjEwOTA6XHRcdHRyYWNlX25mc2RfcmVhZF9zcGxpY2UocnFzdHAsIGZocCwgb2Zmc2V0LCAqY291bnQpO1xuMTA5MTpcdFx0aG9zdF9lcnIgPSB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcihmaWxlLCBcdTAwMjZzZCxcbjEwOTI6XHRcdFx0XHRcdFx0ICAgICAgbmZzZF9kaXJlY3Rfc3BsaWNlX2FjdG9yKTtcbjEwOTM6XHRcdHJldHVybiBuZnNkX2ZpbmlzaF9yZWFkKHJxc3RwLCBmaHAsIGZpbGUsIG9mZnNldCwgY291bnQsIGVvZiwgaG9zdF9lcnIpO1xuMTA5NDpcdH1cbjEwOTU6XHRcbjEwOTY6XHQvKlxuMTA5NzpcdCAqIFRoZSBieXRlIHJhbmdlIG9mIHRoZSBjbGllbnQmIzM5O3MgUkVBRCByZXF1ZXN0IGlzIGV4cGFuZGVkIG9uIGJvdGggZW5kc1xuMTA5ODpcdCAqIHVudGlsIGl0IG1lZXRzIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtJiMzOTtzIGRpcmVjdCBJL08gYWxpZ25tZW50XG4xMDk5Olx0ICogcmVxdWlyZW1lbnRzLiBBZnRlciB0aGUgaW50ZXJuYWwgcmVhZCBpcyBjb21wbGV0ZSwgdGhlIGJ5dGUgcmFuZ2Ugb2ZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI3MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvc2l0aW9uIFBvaW50ZXIgaW4gTkZTZCBSZWFkIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBORlNkIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgcmVhZCBvcGVyYXRpb25zLiBGaXJzdCB0aGluZywgSSBzZWUgdGhhdCBgc2QucG9zYCBpcyBpbmRlZWQgaW5pdGlhbGl6ZWQgdG8gYG9mZnNldGAuIE1ha2VzIHNlbnNlLiBOb3cgSSBoYXZlIHRvIGJlIGNhcmVmdWwsIGJlY2F1c2UgaXQgbG9va3MgbGlrZSBgcndfdmVyaWZ5X2FyZWFgIGNvdWxkIHBvdGVudGlhbGx5IGJlIG1lc3Npbmcgd2l0aCB0aGF0IGBzZC0mZ3Q7cG9zYCB2YWx1ZS4gQWgsIG5vLCB3YWl0IGEgc2Vjb25kLiBUaGF0JiMzOTtzIHJpZ2h0LCBgcndfdmVyaWZ5X2FyZWFgIHRha2VzIGEgYGxvZmZfdCAqcHBvc2AgYXJndW1lbnQuIFRoYXQmIzM5O3MgYSBwb2ludGVyLiBTbywgdGhlIG9sZCBjb2RlIHBhc3NlZCBhIHBvaW50ZXIgdG8gYG9mZnNldGAsIHdoaWNoIHdvdWxkIGJlIG1vZGlmaWVkIGJ5IGByd192ZXJpZnlfYXJlYWAuIFRoZW4sIHRoYXQgKm1vZGlmaWVkKiBgb2Zmc2V0YCB2YWx1ZSB3YXMgcGFzc2VkIHRvIGBuZnNkX2ZpbmlzaF9yZWFkYC4KCkJ1dCBoYW5nIG9uLCB0aGUgKm5ldyogY29kZSEgSW4gdGhlICpuZXcqIGNvZGUsIGByd192ZXJpZnlfYXJlYWAgaXMgbW9kaWZ5aW5nIGBzZC0mZ3Q7cG9zYCBkaXJlY3RseSwgKm5vdCogYG9mZnNldGAuIEFuZCB0aGVuIHRoZSBvcmlnaW5hbCwgdW5tb2RpZmllZCBgb2Zmc2V0YCB2YWx1ZSBpcyBiZWluZyBwYXNzZWQgdG8gYG5mc2RfZmluaXNoX3JlYWRgLiBUaGF0JiMzOTtzIGEga2V5IGRpc3RpbmN0aW9uLiBBbmQgbm93IEkgbmVlZCB0byByZW1lbWJlciBgc3BsaWNlX2RpcmVjdF90b19hY3RvcmAuIFRoYXQgKmFsc28qIG1vZGlmaWVzIGBzZC0mZ3Q7cG9zYC4gU28sIEkmIzM5O3ZlIGdvdCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBzZC0mZ3Q7cG9zYCwgYG9mZnNldGAsIGByd192ZXJpZnlfYXJlYWAsIGBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBhbmQgdWx0aW1hdGVseSBob3cgYG5mc2RfZmluaXNoX3JlYWRgIGlzIHVzaW5nIHRob3NlIHZhbHVlcy4gR290dGEgY2hlY2sgYG5mc2RfZmluaXNoX3JlYWRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25mc2QvdmZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNDA6XHR7XG4xMDQxOlx0XHRpZiAoZXhwZWN0ZWQgIT0gMCBcdTAwMjZcdTAwMjYgbGVuID09IDApXG4xMDQyOlx0XHRcdHJldHVybiAxO1xuMTA0MzpcdFx0aWYgKG9mZnNldCYjNDM7bGVuIFx1MDAzZT0gaV9zaXplX3JlYWQoZmlsZV9pbm9kZShmaWxlKSkpXG4xMDQ0Olx0XHRcdHJldHVybiAxO1xuMTA0NTpcdFx0cmV0dXJuIDA7XG4xMDQ2Olx0fVxuMTA0NzpcdFxuMTA0ODpcdHN0YXRpYyBfX2JlMzIgbmZzZF9maW5pc2hfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4xMDQ5Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxuMTA1MDpcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nICpjb3VudCwgdTMyICplb2YsIHNzaXplX3QgaG9zdF9lcnIpXG4xMDUxOlx0e1xuMTA1MjpcdFx0aWYgKGhvc3RfZXJyIFx1MDAzZT0gMCkge1xuMTA1MzpcdFx0XHRzdHJ1Y3QgbmZzZF9uZXQgKm5uID0gbmV0X2dlbmVyaWMoU1ZDX05FVChycXN0cCksIG5mc2RfbmV0X2lkKTtcbjEwNTQ6XHRcbjEwNTU6XHRcdFx0bmZzZF9zdGF0c19pb19yZWFkX2FkZChubiwgZmhwLVx1MDAzZWZoX2V4cG9ydCwgaG9zdF9lcnIpO1xuMTA1NjpcdFx0XHQqZW9mID0gbmZzZF9lb2Zfb25fcmVhZChmaWxlLCBvZmZzZXQsIGhvc3RfZXJyLCAqY291bnQpO1xuMTA1NzpcdFx0XHQqY291bnQgPSBob3N0X2VycjtcbjEwNTg6XHRcdFx0dHJhY2VfbmZzZF9yZWFkX2lvX2RvbmUocnFzdHAsIGZocCwgb2Zmc2V0LCAqY291bnQpO1xuMTA1OTpcdFx0XHRyZXR1cm4gMDtcbjEwNjA6XHRcdH0gZWxzZSB7XG4xMDYxOlx0XHRcdHRyYWNlX25mc2RfcmVhZF9lcnIocnFzdHAsIGZocCwgb2Zmc2V0LCBob3N0X2Vycik7XG4xMDYyOlx0XHRcdHJldHVybiBuZnNlcnJubyhob3N0X2Vycik7XG4xMDYzOlx0XHR9XG4xMDY0Olx0fVxuMTA2NTpcdFxuMTA2NjpcdC8qKlxuMTA2NzpcdCAqIG5mc2Rfc3BsaWNlX3JlYWQgLSBQZXJmb3JtIGEgVkZTIHJlYWQgdXNpbmcgYSBzcGxpY2UgcGlwZVxuMTA2ODpcdCAqIEBycXN0cDogUlBDIHRyYW5zYWN0aW9uIGNvbnRleHRcbjEwNjk6XHQgKiBAZmhwOiBmaWxlIGhhbmRsZSBvZiBmaWxlIHRvIGJlIHJlYWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMyNwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG5mc2RfZmluaXNoX3JlYWQgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZnNkX2ZpbmlzaF9yZWFkYCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGZpbGUgb2Zmc2V0LiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBgb2Zmc2V0YCBwYXJhbWV0ZXIgZm9yIGJvdGggdGhlIGBuZnNkX2VvZl9vbl9yZWFkYCBjaGVjayBhbmQgZm9yIHRyYWNlcG9pbnRzLCByaWdodD8gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoZSBjaGFuZ2UgY29tcGFyZWQgdG8gdGhlIG9sZGVyIGNvZGUuIFByZXZpb3VzbHksIGByd192ZXJpZnlfYXJlYWAgaGFkIHRoZSBwb3RlbnRpYWwgdG8gbW9kaWZ5IHRoYXQgdmVyeSBgb2Zmc2V0YCB2YWx1ZS4gSWYgdGhhdCBoYXBwZW5lZCwgYG5mc2RfZmluaXNoX3JlYWRgIHdvdWxkIHRoZW4gdXNlIHRoZSBhbHRlcmVkIG9mZnNldCwgd2hpY2ggY291bGQgaGF2ZSBzb21lIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucyBmb3IgZGF0YSBjb25zaXN0ZW5jeSBvciBFT0YgZGV0ZWN0aW9uLCBkZXBlbmRpbmcgb24gdGhlIG5hdHVyZSBvZiB0aGUgb2Zmc2V0IGNoYW5nZS4KCkJ1dCBub3csIGl0IHNlZW1zIGByd192ZXJpZnlfYXJlYWAgb3BlcmF0ZXMgZGlmZmVyZW50bHkuIEl04oCZcyB1cGRhdGluZyBgc2QtJmd0O3Bvc2AsIGluc3RlYWQgb2YgbW9kaWZ5aW5nIHRoZSBgb2Zmc2V0YCBkaXJlY3RseS4gVGhlcmVmb3JlLCB0aGUgYG9mZnNldGAgcGFyYW1ldGVyIHBhc3NlZCB0byBgbmZzZF9maW5pc2hfcmVhZGAgcmVtYWlucyB1bmNoYW5nZWQgaW4gdGhlIGN1cnJlbnQgaXRlcmF0aW9uLgoKV2FpdCBhIHNlY29uZOKApiBkb2VzbiYjMzk7dCBgcndfdmVyaWZ5X2FyZWFgICp1c3VhbGx5KiBsZWF2ZSB0aGUgZmlsZSBwb2ludGVyIGFsb25lIHVubGVzcyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMgZ29pbmcgb24sIGxpa2UgbWFuZGF0b3J5IGxvY2tpbmcgb3Igc29tZXRoaW5nIGVxdWFsbHkgZXhvdGljPyBJIGRvbiYjMzk7dCByZWNhbGwgaXQgYmVpbmcgYSByb3V0aW5lIG1vZGlmaWVyIG9mIHRoZSBwb3NpdGlvbi4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdDsgaXQmIzM5O3MgZWFzeSB0byBnZXQgbG9zdCBpbiB0aGUgZGV0YWlscy4gVGltZSB0byBkaXZlIGludG8gdGhlIGByd192ZXJpZnlfYXJlYWAgZnVuY3Rpb24gaXRzZWxmIGFuZCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGltcGFjdHMgZmlsZSBwb3NpdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHJ3X3ZlcmlmeV9hcmVhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3JlYWRfd3JpdGUuYz00MjY9U1lTQ0FMTF9ERUZJTkU1KGxsc2VlaywgdW5zaWduZWQgaW50LCBmZCwgdW5zaWduZWQgbG9uZywgb2Zmc2V0X2hpZ2gsXG4tLVxuZnMvcmVhZF93cml0ZS5jLTQ1Mi1cbmZzL3JlYWRfd3JpdGUuYzo0NTM6aW50IHJ3X3ZlcmlmeV9hcmVhKGludCByZWFkX3dyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgbG9mZl90ICpwcG9zLCBzaXplX3QgY291bnQpXG5mcy9yZWFkX3dyaXRlLmMtNDU0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MzEwNj1leHRlcm4gbG9mZl90IG5vX3NlZWtfZW5kX2xsc2VlayhzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIGludCk7XG5pbmNsdWRlL2xpbnV4L2ZzLmg6MzEwNzppbnQgcndfdmVyaWZ5X2FyZWEoaW50LCBzdHJ1Y3QgZmlsZSAqLCBjb25zdCBsb2ZmX3QgKiwgc2l6ZV90KTtcbmluY2x1ZGUvbGludXgvZnMuaC0zMTA4LWV4dGVybiBpbnQgZ2VuZXJpY19maWxlX29wZW4oc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipWZXJpZnlpbmcgdGhlIENvbnN0IENvcnJlY3RuZXNzIG9mIGByd192ZXJpZnlfYXJlYWAmIzM5O3MgT2Zmc2V0IFBhcmFtZXRlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHJ3X3ZlcmlmeV9hcmVhYCBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgcGFyYW1ldGVyIHVzYWdlLiBSaWdodCwgaXQgbG9va3MgbGlrZSBpdCB0YWtlcyBhIGBjb25zdCBsb2ZmX3QgKnBwb3NgLiBUaGF0JiMzOTtzIGdvb2Q7IHRoZSBgY29uc3RgIHN1Z2dlc3RzIGl0ICpzaG91bGRuJiMzOTt0KiBiZSBtb2RpZnlpbmcgdGhlIG9mZnNldCBwb2ludGVkIHRvIGJ5IGBwcG9zYC4gSSYjMzk7ZCBleHBlY3QgdGhhdCBpbiBhIHdlbGwtZGVzaWduZWQga2VybmVsIGZ1bmN0aW9uIGxpa2UgdGhpcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgc29saWQgaGVyZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlLWNoZWNrIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZGVmaW5lZC4gSG1tLCB5ZXAsIGNvbmZpcm1pbmcgdGhhdCB0aGUgZGVjbGFyYXRpb24gaW4gYGZzL3JlYWRfd3JpdGUuY2Agc2hvd3MgdGhlIHBhcmFtZXRlciBhcyBgY29uc3QgbG9mZl90ICpwcG9zYC4gR29vZC4gU28sIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0OiB0aGUgZnVuY3Rpb24gcHJvbWlzZXMgbm90IHRvIGFsdGVyIHRoZSBvZmZzZXQgdmFsdWUuIFRoaXMgcmVpbmZvcmNlcyB0aGUgaWRlYSB0aGF0IGl0JiMzOTtzIGFjdGluZyBtb3JlIGFzIGFuIGluZm9ybWF0aW9uIHJldHJpZXZlciByZWdhcmRpbmcgdGhlIGFyZWEgcmVxdWVzdGVkLCByYXRoZXIgdGhhbiBzb21ldGhpbmcgdGhhdCB3b3VsZCBtYWtlIGEgY2hhbmdlIGRpcmVjdGx5IHRvIHRoZSBmaWxlIHBvc2l0aW9uLiBFeGNlbGxlbnQsIG5vdyBJIGNhbiB1c2UgdGhhdCBpbmZvcm1hdGlvbiB0byBjb25maXJtIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvcmVhZF93cml0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTA6XHR9XG4gNDUxOlx0I2VuZGlmXG4gNDUyOlx0XG4gNDUzOlx0aW50IHJ3X3ZlcmlmeV9hcmVhKGludCByZWFkX3dyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgbG9mZl90ICpwcG9zLCBzaXplX3QgY291bnQpXG4gNDU0Olx0e1xuIDQ1NTpcdFx0aW50IG1hc2sgPSByZWFkX3dyaXRlID09IFJFQUQgPyBNQVlfUkVBRCA6IE1BWV9XUklURTtcbiA0NTY6XHRcdGludCByZXQ7XG4gNDU3Olx0XG4gNDU4Olx0XHRpZiAodW5saWtlbHkoKHNzaXplX3QpIGNvdW50IFx1MDAzYyAwKSlcbiA0NTk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDYwOlx0XG4gNDYxOlx0XHRpZiAocHBvcykge1xuIDQ2MjpcdFx0XHRsb2ZmX3QgcG9zID0gKnBwb3M7XG4gNDYzOlx0XG4gNDY0Olx0XHRcdGlmICh1bmxpa2VseShwb3MgXHUwMDNjIDApKSB7XG4gNDY1Olx0XHRcdFx0aWYgKCF1bnNpZ25lZF9vZmZzZXRzKGZpbGUpKVxuIDQ2NjpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDY3Olx0XHRcdFx0aWYgKGNvdW50IFx1MDAzZT0gLXBvcykgLyogYm90aCB2YWx1ZXMgYXJlIGluIDAuLkxMT05HX01BWCAqL1xuIDQ2ODpcdFx0XHRcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gNDY5Olx0XHRcdH0gZWxzZSBpZiAodW5saWtlbHkoKGxvZmZfdCkgKHBvcyAmIzQzOyBjb3VudCkgXHUwMDNjIDApKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2OTAKCQkJCQkJCW91dHB1dDogMjEyCgkJCQkJCQl0aG91Z2h0czogMjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIFNhZmV0eSoqCgpPa2F5LCBzbyBJIHNlZSBgY29uc3QgbG9mZl90ICpwcG9zYCBpbiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLCBtZWFuaW5nIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGdvaW5nIHRvIGJlIG1lc3Npbmcgd2l0aCB0aGUgZmlsZSBvZmZzZXQgZGlyZWN0bHkuIFRoYXQmIzM5O3MgZ29vZC4KClJpZ2h0LCB0aGUgY29yZSBvZiBpdCBpcyB3cmFwcGluZyBgcndfdmVyaWZ5X2FyZWFgLCBgc3BsaWNlX2RpcmVjdF90b19hY3RvcmAsIGFuZCBgZnNub3RpZnlfYWNjZXNzYCBpbnRvIGEgc2luZ2xlIGhlbHBlciBmdW5jdGlvbiBjYWxsZWQgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYC4gRXNzZW50aWFsbHksIGEgcmVmYWN0b3JpbmcsIHNvbWUgY29kZSBjbGVhbnVwLiBJdCBsb29rcyBsaWtlIGBuZnNkX3NwbGljZV9yZWFkYCBpcyBnZXR0aW5nIHVwZGF0ZWQgdG8gdXNlIHRoaXMgbmV3IGhlbHBlci4KCkdpdmVuIHRoYXQsIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBLTVNBTiBmbGFncyBoZXJlLiBJdCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgYW55IG5ldyBtZW1vcnkgaXMgYmVpbmcgYWxsb2NhdGVkLCBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4KCkxldCBtZSBhcnRpY3VsYXRlIHRoYXQgdGhvdWdodCBwcm9jZXNzIGZvciBhIG1vcmUgZm9ybWFsIGFzc2Vzc21lbnQuLi4gVGhpcyBwYXRjaCBtYWlubHkgcmVvcmdhbml6ZXMgc29tZSBjYWxscyBieSBpbnRyb2R1Y2luZyBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgLCBjb25zb2xpZGF0aW5nIGEgZmV3IG90aGVyIGNhbGxzLiBJdCB1cGRhdGVzIHRoZSBORlMgY29kZSB0byB1c2UgdGhlIG5ldyBoZWxwZXIuIFRoaXMgaXMgYSByZWZhY3RvcmluZywgcHVyZSBhbmQgc2ltcGxlLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byB0aGUgVkZTIHRoYXQgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBjcmVhdGUgbmV3IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgdGhlIHVzdWFsIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIGNvbXBsZXRlbHkgYWRlcXVhdGUgdG8gZGV0ZWN0IGFueSBpc3N1ZXMgZnJvbSB0aGUgVkZTIGNoYW5nZXMsIGV2ZW4gdGhvdWdoIHRoaXMgcGF0Y2ggaXMgcHJpbWFyaWx5IHN0cnVjdHVyYWwuIFRoZXJlZm9yZSwgSSBkb24mIzM5O3Qgc2VlIGFueSBuZWVkIHRvIGRlZGljYXRlIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIHRvIGl0LiBJdCYjMzk7cyBhIGxvdy1yaXNrIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBpbiBgZnMvc3BsaWNlLmNgIHRoYXQgY29uc29saWRhdGVzIGV4aXN0aW5nIGNhbGxzIHRvIGByd192ZXJpZnlfYXJlYWAsIGBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCwgYW5kIGBmc25vdGlmeV9hY2Nlc3NgLiBJdCB0aGVuIHVwZGF0ZXMgYG5mc2Rfc3BsaWNlX3JlYWRgIGluIGBmcy9uZnNkL3Zmcy5jYCB0byB1c2UgdGhpcyBuZXcgaGVscGVyLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHN0cnVjdHVyYWwgcmVmYWN0b3JpbmcgdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBjaGFuZ2VzIHRvIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGUgbW9kaWZpY2F0aW9ucyBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB0aGF0IG1pZ2h0IHRoZW9yZXRpY2FsbHkgYXJpc2UgZnJvbSBWRlMgY2hhbmdlcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgaW4gYGZzL3NwbGljZS5jYCB0aGF0IGNvbnNvbGlkYXRlcyBleGlzdGluZyBjYWxscyB0byBgcndfdmVyaWZ5X2FyZWFgLCBgc3BsaWNlX2RpcmVjdF90b19hY3RvcmAsIGFuZCBgZnNub3RpZnlfYWNjZXNzYC4gSXQgdGhlbiB1cGRhdGVzIGBuZnNkX3NwbGljZV9yZWFkYCBpbiBgZnMvbmZzZC92ZnMuY2AgdG8gdXNlIHRoaXMgbmV3IGhlbHBlci4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBzdHJ1Y3R1cmFsIHJlZmFjdG9yaW5nIHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgdGhhdCBtaWdodCB0aGVvcmV0aWNhbGx5IGFyaXNlIGZyb20gVkZTIGNoYW5nZXMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjI3OjAyLjgzNjc2OTU5NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NDk1MTYzOTIzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORlNEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JcIixcbiAgICBcIm5mc2Rfc3BsaWNlX3JlYWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgaW4gYGZzL3NwbGljZS5jYCB0aGF0IGNvbnNvbGlkYXRlcyBleGlzdGluZyBjYWxscyB0byBgcndfdmVyaWZ5X2FyZWFgLCBgc3BsaWNlX2RpcmVjdF90b19hY3RvcmAsIGFuZCBgZnNub3RpZnlfYWNjZXNzYC4gSXQgdGhlbiB1cGRhdGVzIGBuZnNkX3NwbGljZV9yZWFkYCBpbiBgZnMvbmZzZC92ZnMuY2AgdG8gdXNlIHRoaXMgbmV3IGhlbHBlci4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBzdHJ1Y3R1cmFsIHJlZmFjdG9yaW5nIHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgdGhhdCBtaWdodCB0aGVvcmV0aWNhbGx5IGFyaXNlIGZyb20gVkZTIGNoYW5nZXMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgbG9naWMgZm9yIHNwbGljaW5nIGFuZCBORlNEIHJlYWQgcGF0aHMsIGludHJvZHVjaW5nIGEgbmV3IEFQSSBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIGFuZCB1cGRhdGluZyBgbmZzZF9zcGxpY2VfcmVhZGAgdG8gdXNlIGl0LiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6Mjc6MDIuODM2Nzc0NjM2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Nzk2NDEzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MmU5ZjU1ZWI5Mjk4ODI5ZWZkYmIzMjI0ZTc3Y2Q0N2M2NThhNTJjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDI0IDE4OjI3OjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jXFxuaW5kZXggMWU4OWM3ZmY5NDkzYi4uYTQ2NWUyNzZkNjc1NCAxMDA2NDRcXG4tLS0gYS9mcy9uZnNkL3Zmcy5jXFxuKysrIGIvZnMvbmZzZC92ZnMuY1xcbkBAIC0xMDU1LDcgKzEwNTUsNiBAQCBzdGF0aWMgX19iZTMyIG5mc2RfZmluaXNoX3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxcbiBcXHRcXHRuZnNkX3N0YXRzX2lvX3JlYWRfYWRkKG5uLCBmaHAtXFx1MDAzZWZoX2V4cG9ydCwgaG9zdF9lcnIpO1xcbiBcXHRcXHQqZW9mID0gbmZzZF9lb2Zfb25fcmVhZChmaWxlLCBvZmZzZXQsIGhvc3RfZXJyLCAqY291bnQpO1xcbiBcXHRcXHQqY291bnQgPSBob3N0X2VycjtcXG4tXFx0XFx0ZnNub3RpZnlfYWNjZXNzKGZpbGUpO1xcbiBcXHRcXHR0cmFjZV9uZnNkX3JlYWRfaW9fZG9uZShycXN0cCwgZmhwLCBvZmZzZXQsICpjb3VudCk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9IGVsc2Uge1xcbkBAIC0xMDg5LDEwICsxMDg4LDggQEAgX19iZTMyIG5mc2Rfc3BsaWNlX3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxcbiBcXHRzc2l6ZV90IGhvc3RfZXJyO1xcbiBcXG4gXFx0dHJhY2VfbmZzZF9yZWFkX3NwbGljZShycXN0cCwgZmhwLCBvZmZzZXQsICpjb3VudCk7XFxuLVxcdGhvc3RfZXJyID0gcndfdmVyaWZ5X2FyZWEoUkVBRCwgZmlsZSwgXFx1MDAyNm9mZnNldCwgKmNvdW50KTtcXG4tXFx0aWYgKCFob3N0X2VycilcXG4tXFx0XFx0aG9zdF9lcnIgPSBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsIFxcdTAwMjZzZCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBuZnNkX2RpcmVjdF9zcGxpY2VfYWN0b3IpO1xcbitcXHRob3N0X2VyciA9IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsIFxcdTAwMjZzZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgbmZzZF9kaXJlY3Rfc3BsaWNlX2FjdG9yKTtcXG4gXFx0cmV0dXJuIG5mc2RfZmluaXNoX3JlYWQocnFzdHAsIGZocCwgZmlsZSwgb2Zmc2V0LCBjb3VudCwgZW9mLCBob3N0X2Vycik7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL3NwbGljZS5jIGIvZnMvc3BsaWNlLmNcXG5pbmRleCA5ZDhmNjNlMmZkMWFiLi40MmFkNzEyYTBmNGRhIDEwMDY0NFxcbi0tLSBhL2ZzL3NwbGljZS5jXFxuKysrIGIvZnMvc3BsaWNlLmNcXG5AQCAtMTAwOSwyMSArMTAwOSwxNCBAQCBzc2l6ZV90IHZmc19zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZnNfc3BsaWNlX3JlYWQpO1xcbiBcXG4tLyoqXFxuLSAqIHNwbGljZV9kaXJlY3RfdG9fYWN0b3IgLSBzcGxpY2VzIGRhdGEgZGlyZWN0bHkgYmV0d2VlbiB0d28gbm9uLXBpcGVzXFxuLSAqIEBpbjpcXHRcXHRmaWxlIHRvIHNwbGljZSBmcm9tXFxuLSAqIEBzZDpcXHRcXHRhY3RvciBpbmZvcm1hdGlvbiBvbiB3aGVyZSB0byBzcGxpY2UgdG9cXG4tICogQGFjdG9yOlxcdGhhbmRsZXMgdGhlIGRhdGEgc3BsaWNpbmdcXG4tICpcXG4tICogRGVzY3JpcHRpb246XFxuLSAqICAgIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgaGVscGVyIHRvIHNwbGljZSBkaXJlY3RseSBiZXR3ZWVuIHR3b1xcbi0gKiAgICBwb2ludHMsIHdpdGhvdXQgcmVxdWlyaW5nIGFuIGV4cGxpY2l0IHBpcGUuIEludGVybmFsbHkgYW4gYWxsb2NhdGVkXFxuLSAqICAgIHBpcGUgaXMgY2FjaGVkIGluIHRoZSBwcm9jZXNzLCBhbmQgcmV1c2VkIGR1cmluZyB0aGUgbGlmZXRpbWUgb2ZcXG4tICogICAgdGhhdCBwcm9jZXNzLlxcbi0gKlxcbisvKlxcbisgKiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGhlbHBlciB0byBzcGxpY2UgZGlyZWN0bHkgYmV0d2VlbiB0d29cXG4rICogcG9pbnRzLCB3aXRob3V0IHJlcXVpcmluZyBhbiBleHBsaWNpdCBwaXBlLiBJbnRlcm5hbGx5IGFuIGFsbG9jYXRlZFxcbisgKiBwaXBlIGlzIGNhY2hlZCBpbiB0aGUgcHJvY2VzcywgYW5kIHJldXNlZCBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mXFxuKyAqIHRoYXQgcHJvY2Vzcy5cXG4gICovXFxuLXNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXFxuLVxcdFxcdFxcdCAgICAgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3RvcilcXG4rc3RhdGljIHNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHNwbGljZV9kaXJlY3RfYWN0b3IgKmFjdG9yKVxcbiB7XFxuIFxcdHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGU7XFxuIFxcdHNzaXplX3QgcmV0LCBieXRlcztcXG5AQCAtMTE0Nyw3ICsxMTQwLDQwIEBAIHNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXFxuIFxcbiBcXHRnb3RvIGRvbmU7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTChzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKTtcXG4rXFxuKy8qKlxcbisgKiB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvciAtIHNwbGljZSBmcm9tIGEgZmlsZSB0aHJvdWdoIGEgY2FsbGVyJ3MgYWN0b3JcXG4rICogQGluOlxcdFxcdGZpbGUgdG8gc3BsaWNlIGZyb207IG11c3QgYmUgc2Vla2FibGUgKEZNT0RFX0xTRUVLKVxcbisgKiBAc2Q6XFx0XFx0c3BsaWNlIHBhcmFtZXRlcnMuIFRoZSBjYWxsZXIgc2V0cyBAc2QtXFx1MDAzZXBvcyBhbmRcXG4rICpcXHRcXHRAc2QtXFx1MDAzZXRvdGFsX2xlbi4gQHNkLVxcdTAwM2Vwb3MgYWR2YW5jZXMgYXMgZGF0YSBpcyBjb25zdW1lZCxcXG4rICpcXHRcXHRhbmQgQHNkLVxcdTAwM2V0b3RhbF9sZW4gaXMgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgbGVuZ3RoIG9mXFxuKyAqXFx0XFx0ZWFjaCByZWFkLlxcbisgKiBAYWN0b3I6XFx0Y29uc3VtZXMgZWFjaCBwaXBlLWZ1bGwgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZlxcbisgKlxcdFxcdGJ5dGVzIHRha2VuXFxuKyAqXFxuKyAqIERlc2NyaXB0aW9uOlxcbisgKiAgICBTcGxpY2UgZnJvbSBAaW4gdGhyb3VnaCBAYWN0b3IsIGZvciBhIGNhbGxlciB0aGF0IGNvbnN1bWVzXFxuKyAqICAgIHRoZSBkYXRhIGl0c2VsZiByYXRoZXIgdGhhbiBzZW5kaW5nIGl0IHRvIGEgc2Vjb25kIGZpbGUuXFxuKyAqICAgIFRoaXMgaGVscGVyIHZlcmlmaWVzIHRoZSByZWFkIGFuZCBlbWl0cyB0aGUgZnNub3RpZnkgYWNjZXNzXFxuKyAqICAgIGV2ZW50LiBkb19zcGxpY2VfZGlyZWN0KCkgbGVhdmVzIGJvdGggdG8gaXRzIGNhbGxlcnMuXFxuKyAqXFxuKyAqIFJldHVybjogVGhlIG51bWJlciBvZiBieXRlcyBzcGxpY2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLlxcbisgKi9cXG4rc3NpemVfdCB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXFxuK1xcdFxcdFxcdFxcdCAgIHNwbGljZV9kaXJlY3RfYWN0b3IgKmFjdG9yKVxcbit7XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXG4rXFx0cmV0ID0gcndfdmVyaWZ5X2FyZWEoUkVBRCwgaW4sIFxcdTAwMjZzZC1cXHUwMDNlcG9zLCBzZC1cXHUwMDNldG90YWxfbGVuKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGluLCBzZCwgYWN0b3IpO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDApXFxuK1xcdFxcdGZzbm90aWZ5X2FjY2Vzcyhpbik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3Rvcik7XFxuIFxcbiBzdGF0aWMgaW50IGRpcmVjdF9zcGxpY2VfYWN0b3Ioc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmggYi9pbmNsdWRlL2xpbnV4L3NwbGljZS5oXFxuaW5kZXggOWRlYzQ4NjFkMDlmNi4uNGU5MWQwM2VkNjQ1ZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NwbGljZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaFxcbkBAIC03OSw4ICs3OSw4IEBAIHNzaXplX3QgYWRkX3RvX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpO1xcbiBzc2l6ZV90IHZmc19zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcXG4gXFx0XFx0XFx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbixcXG4gXFx0XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzKTtcXG4tc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLFxcbi1cXHRcXHRcXHQgICAgICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpO1xcbitzc2l6ZV90IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLFxcbitcXHRcXHRcXHRcXHQgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3Rvcik7XFxuIHNzaXplX3QgZG9fc3BsaWNlKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpvZmZfaW4sIHN0cnVjdCBmaWxlICpvdXQsXFxuIFxcdFxcdCAgbG9mZl90ICpvZmZfb3V0LCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbiBzc2l6ZV90IGRvX3NwbGljZV9kaXJlY3Qoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsIHN0cnVjdCBmaWxlICpvdXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjI3OjAzLjQxNzA0OTQ5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU4NjA4OTM2NDEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORlNEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JcIixcbiAgICBcIm5mc2Rfc3BsaWNlX3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBsb2dpYyBmb3Igc3BsaWNpbmcgYW5kIE5GU0QgcmVhZCBwYXRocywgaW50cm9kdWNpbmcgYSBuZXcgQVBJIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgYW5kIHVwZGF0aW5nIGBuZnNkX3NwbGljZV9yZWFkYCB0byB1c2UgaXQuIFRoZXNlIGFyZSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MmU5ZjU1ZWI5Mjk4ODI5ZWZkYmIzMjI0ZTc3Y2Q0N2M2NThhNTJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTg6Mjc6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5jIGIvZnMvbmZzZC92ZnMuY1xuaW5kZXggMWU4OWM3ZmY5NDkzYi4uYTQ2NWUyNzZkNjc1NCAxMDA2NDRcbi0tLSBhL2ZzL25mc2QvdmZzLmNcbisrKyBiL2ZzL25mc2QvdmZzLmNcbkBAIC0xMDU1LDcgKzEwNTUsNiBAQCBzdGF0aWMgX19iZTMyIG5mc2RfZmluaXNoX3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxuIFx0XHRuZnNkX3N0YXRzX2lvX3JlYWRfYWRkKG5uLCBmaHAtXHUwMDNlZmhfZXhwb3J0LCBob3N0X2Vycik7XG4gXHRcdCplb2YgPSBuZnNkX2VvZl9vbl9yZWFkKGZpbGUsIG9mZnNldCwgaG9zdF9lcnIsICpjb3VudCk7XG4gXHRcdCpjb3VudCA9IGhvc3RfZXJyO1xuLVx0XHRmc25vdGlmeV9hY2Nlc3MoZmlsZSk7XG4gXHRcdHRyYWNlX25mc2RfcmVhZF9pb19kb25lKHJxc3RwLCBmaHAsIG9mZnNldCwgKmNvdW50KTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9IGVsc2Uge1xuQEAgLTEwODksMTAgKzEwODgsOCBAQCBfX2JlMzIgbmZzZF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4gXHRzc2l6ZV90IGhvc3RfZXJyO1xuIFxuIFx0dHJhY2VfbmZzZF9yZWFkX3NwbGljZShycXN0cCwgZmhwLCBvZmZzZXQsICpjb3VudCk7XG4tXHRob3N0X2VyciA9IHJ3X3ZlcmlmeV9hcmVhKFJFQUQsIGZpbGUsIFx1MDAyNm9mZnNldCwgKmNvdW50KTtcbi1cdGlmICghaG9zdF9lcnIpXG4tXHRcdGhvc3RfZXJyID0gc3BsaWNlX2RpcmVjdF90b19hY3RvcihmaWxlLCBcdTAwMjZzZCxcbi1cdFx0XHRcdFx0XHQgIG5mc2RfZGlyZWN0X3NwbGljZV9hY3Rvcik7XG4rXHRob3N0X2VyciA9IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsIFx1MDAyNnNkLFxuK1x0XHRcdFx0XHQgICAgICBuZnNkX2RpcmVjdF9zcGxpY2VfYWN0b3IpO1xuIFx0cmV0dXJuIG5mc2RfZmluaXNoX3JlYWQocnFzdHAsIGZocCwgZmlsZSwgb2Zmc2V0LCBjb3VudCwgZW9mLCBob3N0X2Vycik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL3NwbGljZS5jIGIvZnMvc3BsaWNlLmNcbmluZGV4IDlkOGY2M2UyZmQxYWIuLjQyYWQ3MTJhMGY0ZGEgMTAwNjQ0XG4tLS0gYS9mcy9zcGxpY2UuY1xuKysrIGIvZnMvc3BsaWNlLmNcbkBAIC0xMDA5LDIxICsxMDA5LDE0IEBAIHNzaXplX3QgdmZzX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZnNfc3BsaWNlX3JlYWQpO1xuIFxuLS8qKlxuLSAqIHNwbGljZV9kaXJlY3RfdG9fYWN0b3IgLSBzcGxpY2VzIGRhdGEgZGlyZWN0bHkgYmV0d2VlbiB0d28gbm9uLXBpcGVzXG4tICogQGluOlx0XHRmaWxlIHRvIHNwbGljZSBmcm9tXG4tICogQHNkOlx0XHRhY3RvciBpbmZvcm1hdGlvbiBvbiB3aGVyZSB0byBzcGxpY2UgdG9cbi0gKiBAYWN0b3I6XHRoYW5kbGVzIHRoZSBkYXRhIHNwbGljaW5nXG4tICpcbi0gKiBEZXNjcmlwdGlvbjpcbi0gKiAgICBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGhlbHBlciB0byBzcGxpY2UgZGlyZWN0bHkgYmV0d2VlbiB0d29cbi0gKiAgICBwb2ludHMsIHdpdGhvdXQgcmVxdWlyaW5nIGFuIGV4cGxpY2l0IHBpcGUuIEludGVybmFsbHkgYW4gYWxsb2NhdGVkXG4tICogICAgcGlwZSBpcyBjYWNoZWQgaW4gdGhlIHByb2Nlc3MsIGFuZCByZXVzZWQgZHVyaW5nIHRoZSBsaWZldGltZSBvZlxuLSAqICAgIHRoYXQgcHJvY2Vzcy5cbi0gKlxuKy8qXG4rICogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSBoZWxwZXIgdG8gc3BsaWNlIGRpcmVjdGx5IGJldHdlZW4gdHdvXG4rICogcG9pbnRzLCB3aXRob3V0IHJlcXVpcmluZyBhbiBleHBsaWNpdCBwaXBlLiBJbnRlcm5hbGx5IGFuIGFsbG9jYXRlZFxuKyAqIHBpcGUgaXMgY2FjaGVkIGluIHRoZSBwcm9jZXNzLCBhbmQgcmV1c2VkIGR1cmluZyB0aGUgbGlmZXRpbWUgb2ZcbisgKiB0aGF0IHByb2Nlc3MuXG4gICovXG4tc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCxcbi1cdFx0XHQgICAgICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpXG4rc3RhdGljIHNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4rXHRcdFx0XHQgICAgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3RvcilcbiB7XG4gXHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlO1xuIFx0c3NpemVfdCByZXQsIGJ5dGVzO1xuQEAgLTExNDcsNyArMTE0MCw0MCBAQCBzc2l6ZV90IHNwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLFxuIFxuIFx0Z290byBkb25lO1xuIH1cbi1FWFBPUlRfU1lNQk9MKHNwbGljZV9kaXJlY3RfdG9fYWN0b3IpO1xuK1xuKy8qKlxuKyAqIHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yIC0gc3BsaWNlIGZyb20gYSBmaWxlIHRocm91Z2ggYSBjYWxsZXIncyBhY3RvclxuKyAqIEBpbjpcdFx0ZmlsZSB0byBzcGxpY2UgZnJvbTsgbXVzdCBiZSBzZWVrYWJsZSAoRk1PREVfTFNFRUspXG4rICogQHNkOlx0XHRzcGxpY2UgcGFyYW1ldGVycy4gVGhlIGNhbGxlciBzZXRzIEBzZC1cdTAwM2Vwb3MgYW5kXG4rICpcdFx0QHNkLVx1MDAzZXRvdGFsX2xlbi4gQHNkLVx1MDAzZXBvcyBhZHZhbmNlcyBhcyBkYXRhIGlzIGNvbnN1bWVkLFxuKyAqXHRcdGFuZCBAc2QtXHUwMDNldG90YWxfbGVuIGlzIG92ZXJ3cml0dGVuIHdpdGggdGhlIGxlbmd0aCBvZlxuKyAqXHRcdGVhY2ggcmVhZC5cbisgKiBAYWN0b3I6XHRjb25zdW1lcyBlYWNoIHBpcGUtZnVsbCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mXG4rICpcdFx0Ynl0ZXMgdGFrZW5cbisgKlxuKyAqIERlc2NyaXB0aW9uOlxuKyAqICAgIFNwbGljZSBmcm9tIEBpbiB0aHJvdWdoIEBhY3RvciwgZm9yIGEgY2FsbGVyIHRoYXQgY29uc3VtZXNcbisgKiAgICB0aGUgZGF0YSBpdHNlbGYgcmF0aGVyIHRoYW4gc2VuZGluZyBpdCB0byBhIHNlY29uZCBmaWxlLlxuKyAqICAgIFRoaXMgaGVscGVyIHZlcmlmaWVzIHRoZSByZWFkIGFuZCBlbWl0cyB0aGUgZnNub3RpZnkgYWNjZXNzXG4rICogICAgZXZlbnQuIGRvX3NwbGljZV9kaXJlY3QoKSBsZWF2ZXMgYm90aCB0byBpdHMgY2FsbGVycy5cbisgKlxuKyAqIFJldHVybjogVGhlIG51bWJlciBvZiBieXRlcyBzcGxpY2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLlxuKyAqL1xuK3NzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLFxuK1x0XHRcdFx0ICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpXG4re1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRyZXQgPSByd192ZXJpZnlfYXJlYShSRUFELCBpbiwgXHUwMDI2c2QtXHUwMDNlcG9zLCBzZC1cdTAwM2V0b3RhbF9sZW4pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHNwbGljZV9kaXJlY3RfdG9fYWN0b3IoaW4sIHNkLCBhY3Rvcik7XG4rXHRpZiAocmV0IFx1MDAzZT0gMClcbitcdFx0ZnNub3RpZnlfYWNjZXNzKGluKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0wodmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3IpO1xuIFxuIHN0YXRpYyBpbnQgZGlyZWN0X3NwbGljZV9hY3RvcihzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmggYi9pbmNsdWRlL2xpbnV4L3NwbGljZS5oXG5pbmRleCA5ZGVjNDg2MWQwOWY2Li40ZTkxZDAzZWQ2NDVmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zcGxpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaFxuQEAgLTc5LDggKzc5LDggQEAgc3NpemVfdCBhZGRfdG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1Zik7XG4gc3NpemVfdCB2ZnNfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdFx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbixcbiBcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuLXNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNwbGljZV9kZXNjICpzZCxcbi1cdFx0XHQgICAgICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpO1xuK3NzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4rXHRcdFx0XHQgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3Rvcik7XG4gc3NpemVfdCBkb19zcGxpY2Uoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKm9mZl9pbiwgc3RydWN0IGZpbGUgKm91dCxcbiBcdFx0ICBsb2ZmX3QgKm9mZl9vdXQsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7XG4gc3NpemVfdCBkb19zcGxpY2VfZGlyZWN0KHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLCBzdHJ1Y3QgZmlsZSAqb3V0LFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6Mjc6MDMuNDE3MDUwNjY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0NjQwMDQyNDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCDigJMgaXQncyB0b3VjaGluZyBhIGZldyBrZXkgYXJlYXM6IGBmcy9uZnNkL3Zmcy5jYCwgYGZzL3NwbGljZS5jYCwgYW5kIHRoZSByZWxhdGVkIGhlYWRlci4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgcmVuYW1lOiBgc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgaXMgbm93IGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAuIFRoYXQncyBub3QganVzdCBhIGNvc21ldGljIGNoYW5nZSwgaXQgbWVhbnMgdGhlIHNjb3BlIG9yIHJlc3BvbnNpYmlsaXR5IG1pZ2h0IGJlIHNoaWZ0aW5nLiBQbHVzLCB0aGV5J3ZlIGJ1bmRsZWQgYHJ3X3ZlcmlmeV9hcmVhYCBhbmQgYGZzbm90aWZ5X2FjY2Vzc2AgKmludG8qIHRoYXQgZnVuY3Rpb24uIE9rYXksIHRoYXQncyBhbHJlYWR5IGludGVyZXN0aW5nLlxuXG5UaGUgbmV4dCB0aGluZyBJJ20gc2VlaW5nIGlzIGEgY2hhbmdlIGluIGBuZnNkX3NwbGljZV9yZWFkYC4gSXQgbm93ICp1c2VzKiBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgLCBhbmQgdGhlIHBhdGNoIHJlbW92ZXMgdGhvc2UgZXh0cmEgY2hlY2tzIGZyb20gYG5mc2RfZmluaXNoX3JlYWRgIGFuZCBgbmZzZF9zcGxpY2VfcmVhZGAuIFRoaXMgaXMgc3RhcnRpbmcgdG8gbG9vayBsaWtlIGEgY29uc29saWRhdGlvbiBvZiBmdW5jdGlvbmFsaXR5IG9yIHBlcmhhcHMgYSBjaGFuZ2UgaW4gaG93IHBlcm1pc3Npb25zIG9yIGFjY2VzcyBpcyBoYW5kbGVkIGR1cmluZyBORlMgcmVhZCBvcGVyYXRpb25zLlxuXG5HaXZlbiB0aGF0IGl0J3MgbW9kaWZ5aW5nIGJvdGggY29yZSBWRlMgbG9naWMgKHNwbGljZSkgKmFuZCogTkZTRCwgSSdtIHRoaW5raW5nIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgY2VudHJhbCB0byByZWFkIG9wZXJhdGlvbnMgZm9yIE5GUyB3aGljaCBtZWFucyBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHdoYXQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBhcmUuIENsZWFybHksIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgaXMgYSBwcmltZSBjYW5kaWRhdGUsIGl0IGxvb2tzIHRvIGJlIGFuIGludGVyZXN0aW5nIFZGUyBwYXRoIHRvIHByb2JlLiBgbmZzZF9zcGxpY2VfcmVhZGAgaXMgYW5vdGhlciBvYnZpb3VzIG9uZS4gSXQgbG9va3MgbGlrZSBgbmZzZF9maW5pc2hfcmVhZGAgKm1pZ2h0KiBiZSBpbnZvbHZlZCwgYnV0IHNpbmNlIGl0J3Mgc3RhdGljLCBJIHNob3VsZCBmb2N1cyBvbiBgbmZzZF9zcGxpY2VfcmVhZGAsIHdoaWNoIGNhbGxzIGl0LlxuXG5JJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBmcy9uZnNkL3Zmcy5jYCBmb3IgYG5mc2Rfc3BsaWNlX3JlYWRgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgTkZTRCBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ4MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjMxOjU4LjA1NzA5NTM3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA4NDU4MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZzZF9zcGxpY2VfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZnNkL3Zmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25mc2QvdmZzLmM9MTA0OD1zdGF0aWMgX19iZTMyIG5mc2RfZmluaXNoX3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxcbi0tXFxuZnMvbmZzZC92ZnMuYy0xMDY2LS8qKlxcbmZzL25mc2QvdmZzLmM6MTA2NzogKiBuZnNkX3NwbGljZV9yZWFkIC0gUGVyZm9ybSBhIFZGUyByZWFkIHVzaW5nIGEgc3BsaWNlIHBpcGVcXG5mcy9uZnNkL3Zmcy5jLTEwNjgtICogQHJxc3RwOiBSUEMgdHJhbnNhY3Rpb24gY29udGV4dFxcbi0tXFxuZnMvbmZzZC92ZnMuYy0xMDc3LSAqL1xcbmZzL25mc2QvdmZzLmM6MTA3ODpfX2JlMzIgbmZzZF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXFxuZnMvbmZzZC92ZnMuYy0xMDc5LVxcdFxcdFxcdHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nICpjb3VudCxcXG4tLVxcbmZzL25mc2QvdmZzLmM9MTExMD1uZnNkX2RpcmVjdF9yZWFkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcXG4tLVxcbmZzL25mc2QvdmZzLmMtMTE4Mi0gKlxcbmZzL25mc2QvdmZzLmM6MTE4MzogKiBTb21lIGZpbGVzeXN0ZW1zIG9yIHNpdHVhdGlvbnMgY2Fubm90IHVzZSBuZnNkX3NwbGljZV9yZWFkLiBUaGlzXFxuZnMvbmZzZC92ZnMuYy0xMTg0LSAqIGZ1bmN0aW9uIGlzIHRoZSBzbGlnaHRseSBsZXNzLXBlcmZvcm1hbnQgZmFsbGJhY2sgZm9yIHRob3NlIGNhc2VzLlxcbi0tXFxuZnMvbmZzZC92ZnMuYz0xNDIzPW5mc2RfdmZzX3dyaXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcXG4tLVxcbmZzL25mc2QvdmZzLmMtMTU0MS0gKiBSZXR1cm4gdmFsdWVzOlxcbmZzL25mc2QvdmZzLmM6MTU0MjogKiAgICV0cnVlOiBuZnNkX3NwbGljZV9yZWFkKCkgbWF5IGJlIHVzZWRcXG5mcy9uZnNkL3Zmcy5jOjE1NDM6ICogICAlZmFsc2U6IG5mc2Rfc3BsaWNlX3JlYWQoKSBtdXN0IG5vdCBiZSB1c2VkXFxuZnMvbmZzZC92ZnMuYy0xNTQ0LSAqXFxuLS1cXG5mcy9uZnNkL3Zmcy5jPTE1Nzk9X19iZTMyIG5mc2RfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXFxuLS1cXG5mcy9uZnNkL3Zmcy5jLTE1OTItXFx0aWYgKGZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZXNwbGljZV9yZWFkIFxcdTAwMjZcXHUwMDI2IG5mc2RfcmVhZF9zcGxpY2Vfb2socnFzdHApKVxcbmZzL25mc2QvdmZzLmM6MTU5MzpcXHRcXHRlcnIgPSBuZnNkX3NwbGljZV9yZWFkKHJxc3RwLCBmaHAsIGZpbGUsIG9mZnNldCwgY291bnQsIGVvZik7XFxuZnMvbmZzZC92ZnMuYy0xNTk0LVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6MzE6NTguNTI3OTQ0ODI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ0OTcwODE5NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFNwbGljZSBQZXJmb3JtYW5jZSBCb3R0bGVuZWNrIGluIE5GUyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgTkZTIHBlcmZvcm1hbmNlIGRpYWdub3N0aWNzLCBhbmQgdHdvIGZ1bmN0aW9ucyBpbiBwYXJ0aWN1bGFyIGhhdmUgY2F1Z2h0IG15IGV5ZTogYG5mc2Rfc3BsaWNlX3JlYWRgIGFuZCBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgLiBUaGUga2V5IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgbmVpdGhlciBvZiB0aGVzZSBpcyBkZWNsYXJlZCBgc3RhdGljYC4gVGhpcyBpc24ndCBhICpndWFyYW50ZWUqIG9mIGFuIGlzc3VlLCBidXQgaXQgZG9lcyBtZWFuIHRoZXkncmUgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSBhbmQgY2FsbGFibGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBpbmNyZWFzaW5nIHRoZSBjaGFuY2Ugb2YgdXNhZ2Ugb3V0c2lkZSBvZiB3aGVyZSB0aGV5IHdlcmUgb3JpZ2luYWxseSBpbnRlbmRlZCwgb3IgdXNlZCBkaWZmZXJlbnRseSB0aGFuIGludGVuZGVkIHdoaWNoIG1pZ2h0IGltcGFjdCBwZXJmb3JtYW5jZS5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlLiBHaXZlbiB0aGF0IGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgc291bmRzIGxpa2UgYSBtb3JlIGdlbmVyYWwgVkZTIGZ1bmN0aW9uIHRoYXQgSSBrbm93IGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UsIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgb3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIHdpdGhpbiBgZnMvc3BsaWNlLmNgLiBUaGlzIGZpbGUncyBsaWtlbHkgdG8gc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBkaXJlY3QgaW50ZXJhY3Rpb24gYmV0d2VlbiBWRlMgc3BsaWNpbmcgYW5kIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgZmlsZSBzeXN0ZW0gYmVoYXZpb3IgYW5kIGhvdyBgbmZzZF9zcGxpY2VfcmVhZGAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgaG93IHdlIG1pZ2h0IGJlIGhhbmRsaW5nIHNwbGljZWQgZGF0YSBpbiBORlMuIEJ5IGV4YW1pbmluZyB0aGUgY29kZSBoZXJlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBtaWdodCBwbGF5IG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkwMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjM2OjAzLjQ5ODc2NjUyNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzIwMzk2MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvc3BsaWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc3BsaWNlLmM9MTAxOD1zdGF0aWMgc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCxcXG4tLVxcbmZzL3NwbGljZS5jLTExNDQtLyoqXFxuZnMvc3BsaWNlLmM6MTE0NTogKiB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvciAtIHNwbGljZSBmcm9tIGEgZmlsZSB0aHJvdWdoIGEgY2FsbGVyJ3MgYWN0b3JcXG5mcy9zcGxpY2UuYy0xMTQ2LSAqIEBpbjpcXHRcXHRmaWxlIHRvIHNwbGljZSBmcm9tOyBtdXN0IGJlIHNlZWthYmxlIChGTU9ERV9MU0VFSylcXG4tLVxcbmZzL3NwbGljZS5jLTExNjEtICovXFxuZnMvc3BsaWNlLmM6MTE2Mjpzc2l6ZV90IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCxcXG5mcy9zcGxpY2UuYy0xMTYzLVxcdFxcdFxcdFxcdCAgIHNwbGljZV9kaXJlY3RfYWN0b3IgKmFjdG9yKVxcbi0tXFxuZnMvc3BsaWNlLmMtMTE3NS19XFxuZnMvc3BsaWNlLmM6MTE3NjpFWFBPUlRfU1lNQk9MKHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKTtcXG5mcy9zcGxpY2UuYy0xMTc3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNjowMy44MzA4MTM2NzJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTUzNDU0Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipGb2N1c2luZyBvbiBFZmZpY2llbnQgRGF0YSBUcmFuc2ZlcnMgaW4gTkZTKipcblxuUmlnaHQsIHNvIEknbSBob21pbmcgaW4gb24gc29tZSBjcml0aWNhbCBhcmVhcyBmb3IgTkZTIHBlcmZvcm1hbmNlLiBUaGUga2V5IGZ1bmN0aW9ucyBJJ20gaWRlbnRpZnlpbmcgYXMgY3JpdGljYWwgZm9jdXMgc3ltYm9scyBmb3IgZGVlcGVyIGFuYWx5c2lzIGFyZSBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIGFuZCBgbmZzZF9zcGxpY2VfcmVhZGAuIFRoZXNlIGFyZSB3aGVyZSB0aGUgcnViYmVyIHJlYWxseSBtZWV0cyB0aGUgcm9hZCBpbiB0ZXJtcyBvZiB6ZXJvLWNvcHkgZGF0YSB0cmFuc2ZlciwgcGFydGljdWxhcmx5IGluIHRoZSBzZXJ2ZXItc2lkZSBORlMgaW1wbGVtZW50YXRpb24uXG5cblRoZSBvdmVyYWxsIGNvbnRleHQgaGVyZSBpcyB0aGF0IEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBvcHRpbWl6aW5nIHRoZSBORlMgKnNlcnZlciog4oCTIHNvIEknbSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBORlNEIGNvbmZpZ3VyYXRpb24gZmxhZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NDMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNjoxMC43ODQyNzAwMjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzMzg0NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GU0RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmZzZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25mc2QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL25mc2QvS2NvbmZpZzoyOmNvbmZpZyBORlNEXFxuZnMvbmZzZC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0zOS1cXG5mcy9uZnNkL0tjb25maWc6NDA6Y29uZmlnIE5GU0RfVjJcXG5mcy9uZnNkL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiTkZTIHNlcnZlciBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiAyIChERVBSRUNBVEVEKVxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy01MC1cXG5mcy9uZnNkL0tjb25maWc6NTE6Y29uZmlnIE5GU0RfVjJfQUNMXFxuZnMvbmZzZC9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgdGhlIE5GU3YyIEFDTCBwcm90b2NvbCBleHRlbnNpb25cXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctNTQtXFxuZnMvbmZzZC9LY29uZmlnOjU1OmNvbmZpZyBORlNEX1YzX0FDTFxcbmZzL25mc2QvS2NvbmZpZy01Ni1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MyBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTc2LVxcbmZzL25mc2QvS2NvbmZpZzo3Nzpjb25maWcgTkZTRF9WNFxcbmZzL25mc2QvS2NvbmZpZy03OC1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDRcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctOTMtXFxuZnMvbmZzZC9LY29uZmlnOjk0OmNvbmZpZyBORlNEX1BORlNcXG5mcy9uZnNkL0tjb25maWctOTUtXFx0Ym9vbFxcbmZzL25mc2QvS2NvbmZpZy05Ni1cXG5mcy9uZnNkL0tjb25maWc6OTc6Y29uZmlnIE5GU0RfQkxPQ0tMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiTkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBibG9jayBsYXlvdXRzXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTEwOS1cXG5mcy9uZnNkL0tjb25maWc6MTEwOmNvbmZpZyBORlNEX1NDU0lMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctMTExLVxcdGJvb2wgXFxcIk5GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgU0NTSSBsYXlvdXRzXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTEyMy1cXG5mcy9uZnNkL0tjb25maWc6MTI0OmNvbmZpZyBORlNEX0ZMRVhGSUxFTEFZT1VUXFxuZnMvbmZzZC9LY29uZmlnLTEyNS1cXHRib29sIFxcXCJORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIEZsZXggRmlsZSBsYXlvdXRzXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE0MC1cXG5mcy9uZnNkL0tjb25maWc6MTQxOmNvbmZpZyBORlNEX1Y0XzJfSU5URVJfU1NDXFxuZnMvbmZzZC9LY29uZmlnLTE0Mi1cXHRib29sIFxcXCJORlN2NC4yIGludGVyIHNlcnZlciB0byBzZXJ2ZXIgQ09QWVxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNTAtXFxuZnMvbmZzZC9LY29uZmlnOjE1MTpjb25maWcgTkZTRF9WNF9TRUNVUklUWV9MQUJFTFxcbmZzL25mc2QvS2NvbmZpZy0xNTItXFx0Ym9vbCBcXFwiUHJvdmlkZSBTZWN1cml0eSBMYWJlbCBzdXBwb3J0IGZvciBORlN2NCBzZXJ2ZXJcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTYzLVxcbmZzL25mc2QvS2NvbmZpZzoxNjQ6Y29uZmlnIE5GU0RfTEVHQUNZX0NMSUVOVF9UUkFDS0lOR1xcbmZzL25mc2QvS2NvbmZpZy0xNjUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgTkZTdjQgY2xpZW50IHRyYWNraW5nIG1ldGhvZHMgKERFUFJFQ0FURUQpXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE3OS1cXG5mcy9uZnNkL0tjb25maWc6MTgwOmNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcXG5mcy9uZnNkL0tjb25maWctMTgxLVxcdGJvb2wgXFxcIlN1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6MzY6MTAuODI3NjEyMTA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwNTY2NzYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgTkZTIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRoZSBxdWVzdGlvbiBhdCBoYW5kIGlzIHdoZXRoZXIgdXNpbmcgYE5GU0RgIGlzIHN1ZmZpY2llbnQgZm9yIHRoaXMgcGFydGljdWxhciB0YXNrLiBCZWZvcmUganVtcGluZyB0byBhbnkgY29uY2x1c2lvbnMsIEkgbmVlZCB0byB0aG9yb3VnaGx5IGFzc2VzcyBpdHMgZGVwZW5kZW5jaWVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0IGRvZXMgYE5GU0RgIHJlbHkgb24/XCIgSSBpbnN0aW5jdGl2ZWx5IGtub3cgdGhhdCBgTkZTRGAgaXMgaW50cmljYXRlbHkgbGlua2VkIHRvIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUgKGBJTkVUYCksIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE9mIGNvdXJzZSwgZmlsZSBsb2NraW5nIChgRklMRV9MT0NLSU5HYCkgaXMgYSBrZXkgY29tcG9uZW50IGZvciBORlMsIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGluIGEgZGlzdHJpYnV0ZWQgZW52aXJvbm1lbnQsIHNvIHRoYXQncyBleHBlY3RlZC4gRmluYWxseSwgdGhlIGluY2x1c2lvbiBvZiBgRlNOT1RJRllgIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBiZWNhdXNlIGl0IHdvdWxkIHN1Z2dlc3QgdGhhdCB0aGVyZSBtYXkgYmUgYSBuZWVkIGZvciBjaGFuZ2Ugbm90aWZpY2F0aW9ucyB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MjIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNjoxNC4zMzMyODE4MzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzczMzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmZzZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25mc2QvS2NvbmZpZz0yPWNvbmZpZyBORlNEXFxuZnMvbmZzZC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG5mcy9uZnNkL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVRcXG5mcy9uZnNkL0tjb25maWc6NTpcXHRkZXBlbmRzIG9uIEZJTEVfTE9DS0lOR1xcbmZzL25mc2QvS2NvbmZpZzo2OlxcdGRlcGVuZHMgb24gRlNOT1RJRllcXG5mcy9uZnNkL0tjb25maWctNy1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNi1cXHRzZWxlY3QgTkZTX0FDTF9TVVBQT1JUIGlmIE5GU0RfVjNfQUNMXFxuZnMvbmZzZC9LY29uZmlnOjE3OlxcdGRlcGVuZHMgb24gTVVMVElVU0VSXFxuZnMvbmZzZC9LY29uZmlnLTE4LVxcdGhlbHBcXG4tLVxcbmZzL25mc2QvS2NvbmZpZz00MD1jb25maWcgTkZTRF9WMlxcbmZzL25mc2QvS2NvbmZpZy00MS1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDIgKERFUFJFQ0FURUQpXFxcIlxcbmZzL25mc2QvS2NvbmZpZzo0MjpcXHRkZXBlbmRzIG9uIE5GU0RcXG5mcy9uZnNkL0tjb25maWctNDMtXFx0ZGVmYXVsdCBuXFxuLS1cXG5mcy9uZnNkL0tjb25maWc9NTE9Y29uZmlnIE5GU0RfVjJfQUNMXFxuZnMvbmZzZC9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgdGhlIE5GU3YyIEFDTCBwcm90b2NvbCBleHRlbnNpb25cXFwiXFxuZnMvbmZzZC9LY29uZmlnOjUzOlxcdGRlcGVuZHMgb24gTkZTRF9WMlxcbmZzL25mc2QvS2NvbmZpZy01NC1cXG5mcy9uZnNkL0tjb25maWc9NTU9Y29uZmlnIE5GU0RfVjNfQUNMXFxuZnMvbmZzZC9LY29uZmlnLTU2LVxcdGJvb2wgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgdGhlIE5GU3YzIEFDTCBwcm90b2NvbCBleHRlbnNpb25cXFwiXFxuZnMvbmZzZC9LY29uZmlnOjU3OlxcdGRlcGVuZHMgb24gTkZTRFxcbmZzL25mc2QvS2NvbmZpZy01OC1cXHRoZWxwXFxuLS1cXG5mcy9uZnNkL0tjb25maWc9Nzc9Y29uZmlnIE5GU0RfVjRcXG5mcy9uZnNkL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiTkZTIHNlcnZlciBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiA0XFxcIlxcbmZzL25mc2QvS2NvbmZpZzo3OTpcXHRkZXBlbmRzIG9uIE5GU0QgXFx1MDAyNlxcdTAwMjYgUFJPQ19GU1xcbmZzL25mc2QvS2NvbmZpZy04MC1cXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuLS1cXG5mcy9uZnNkL0tjb25maWc9OTc9Y29uZmlnIE5GU0RfQkxPQ0tMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiTkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBibG9jayBsYXlvdXRzXFxcIlxcbmZzL25mc2QvS2NvbmZpZzo5OTpcXHRkZXBlbmRzIG9uIE5GU0RfVjQgXFx1MDAyNlxcdTAwMjYgQkxPQ0tcXG5mcy9uZnNkL0tjb25maWctMTAwLVxcdHNlbGVjdCBORlNEX1BORlNcXG4tLVxcbmZzL25mc2QvS2NvbmZpZz0xMTA9Y29uZmlnIE5GU0RfU0NTSUxBWU9VVFxcbmZzL25mc2QvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiTkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBTQ1NJIGxheW91dHNcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjExMjpcXHRkZXBlbmRzIG9uIE5GU0RfVjQgXFx1MDAyNlxcdTAwMjYgQkxPQ0tcXG5mcy9uZnNkL0tjb25maWctMTEzLVxcdHNlbGVjdCBORlNEX1BORlNcXG4tLVxcbmZzL25mc2QvS2NvbmZpZz0xMjQ9Y29uZmlnIE5GU0RfRkxFWEZJTEVMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctMTI1LVxcdGJvb2wgXFxcIk5GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgRmxleCBGaWxlIGxheW91dHNcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjEyNjpcXHRkZXBlbmRzIG9uIE5GU0RfVjRcXG5mcy9uZnNkL0tjb25maWctMTI3LVxcdHNlbGVjdCBORlNEX1BORlNcXG4tLVxcbmZzL25mc2QvS2NvbmZpZz0xNDE9Y29uZmlnIE5GU0RfVjRfMl9JTlRFUl9TU0NcXG5mcy9uZnNkL0tjb25maWctMTQyLVxcdGJvb2wgXFxcIk5GU3Y0LjIgaW50ZXIgc2VydmVyIHRvIHNlcnZlciBDT1BZXFxcIlxcbmZzL25mc2QvS2NvbmZpZzoxNDM6XFx0ZGVwZW5kcyBvbiBORlNEX1Y0IFxcdTAwMjZcXHUwMDI2IE5GU19WNF8yXFxuZnMvbmZzZC9LY29uZmlnLTE0NC1cXHRoZWxwXFxuLS1cXG5mcy9uZnNkL0tjb25maWc9MTUxPWNvbmZpZyBORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMXFxuZnMvbmZzZC9LY29uZmlnLTE1Mi1cXHRib29sIFxcXCJQcm92aWRlIFNlY3VyaXR5IExhYmVsIHN1cHBvcnQgZm9yIE5GU3Y0IHNlcnZlclxcXCJcXG5mcy9uZnNkL0tjb25maWc6MTUzOlxcdGRlcGVuZHMgb24gTkZTRF9WNCBcXHUwMDI2XFx1MDAyNiBTRUNVUklUWVxcbmZzL25mc2QvS2NvbmZpZy0xNTQtXFx0aGVscFxcbi0tXFxuZnMvbmZzZC9LY29uZmlnPTE2ND1jb25maWcgTkZTRF9MRUdBQ1lfQ0xJRU5UX1RSQUNLSU5HXFxuZnMvbmZzZC9LY29uZmlnLTE2NS1cXHRib29sIFxcXCJTdXBwb3J0IGxlZ2FjeSBORlN2NCBjbGllbnQgdHJhY2tpbmcgbWV0aG9kcyAoREVQUkVDQVRFRClcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjE2NjpcXHRkZXBlbmRzIG9uIE5GU0RfVjRcXG5mcy9uZnNkL0tjb25maWctMTY3LVxcdGRlZmF1bHQgblxcbi0tXFxuZnMvbmZzZC9LY29uZmlnPTE4MD1jb25maWcgTkZTRF9WNF9QT1NJWF9BQ0xTXFxuZnMvbmZzZC9LY29uZmlnLTE4MS1cXHRib29sIFxcXCJTdXBwb3J0IE5GU3Y0IFBPU0lYIGRyYWZ0IEFDTHNcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjE4MjpcXHRkZXBlbmRzIG9uIE5GU0RfVjRcXG5mcy9uZnNkL0tjb25maWctMTgzLVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNjoxNC4zNzYwNTk1MDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1MjMzMjc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBORlNEIGFuZCBTcGxpY2UuYyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBgTkZTRGAgaGVyZS4gTXkgdGhpbmtpbmcgaXMgdGhhdCBgTkZTRGAncyBsaWtlbHkgZGVwZW5kZW5jaWVzIGFyZSBpbXBvcnRhbnQsIGFuZCByaWdodCBub3cgSSB0aGluayBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIGlzIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gSSByZWNhbGwgdGhhdCBsaXZlcyBpbiBgZnMvc3BsaWNlLmNgLiBOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGlzIGBmcy9zcGxpY2UuY2AgYWx3YXlzIGJ1aWx0PyBJZiBpdCAqaXMqIGFsd2F5cyBidWlsdCwgdGhlbiB0aGF0IHNpbXBsaWZpZXMgYSBsb3Qgb2YgdGhpbmdzLiBJZiBub3QsIHRoZW4gSSBuZWVkIHRvIGNvbnNpZGVyIGl0cyBidWlsZCBjb25maWd1cmF0aW9ucyBtb3JlIGNhcmVmdWxseS4gVGltZSB0byBjaGVjayB0aG9zZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA2OCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjM2OjE3LjgyODM5NTQ0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIyNzgxNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3BsaWNlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9MTA9b2JqLXkgOj1cXHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXFxcXG4tLVxcbmZzL01ha2VmaWxlLTE0LVxcdFxcdHNlcV9maWxlLm8geGF0dHIubyBsaWJmcy5vIGZzLXdyaXRlYmFjay5vIFxcXFxcXG5mcy9NYWtlZmlsZToxNTpcXHRcXHRwbm9kZS5vIHNwbGljZS5vIHN5bmMubyB1dGltZXMubyBkX3BhdGgubyBcXFxcXFxuZnMvTWFrZWZpbGUtMTYtXFx0XFx0c3RhY2subyBmc19zdHJ1Y3QubyBzdGF0ZnMubyBmc19waW4ubyBuc2ZzLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNjoxNy44NzA2NzcwODRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUzNTgxOTU3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUtcmVsYXRlZCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGZzL3NwbGljZS5jYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBgZnMvc3BsaWNlLmNgIGlzIGFsd2F5cyBidWlsdCDigJMgdGhhdCdzIGdvb2QgdG8ga25vdy4gSXQgc2ltcGxpZmllcyBteSBpbml0aWFsIGFuYWx5c2lzLiBOb3cgSSBjYW4gY29uY2VudHJhdGUgc3BlY2lmaWNhbGx5IG9uIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgYW5kIGBuZnNkX3NwbGljZV9yZWFkYC4gQW5kIHRoZSBmYWN0IHRoYXQgdGhlIE5GU0QgY29uZmlnIGlzIGFjdGl2ZSwgd2hpY2ggaXMgaW1wb3J0YW50IGNvbnRleHQuXG5cbkJ1dCBJIHJlYWxseSBzaG91bGQgY29uZmlybSB0aGF0IHRob3NlIGFyZSAqYWxsKiB0aGUgZGlyZWN0IGNhbGxlcnMgb2YgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYC4gSSB3YW50IHRvIGJlIHRob3JvdWdoIGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvciBpbnRlZ3JhdGlvbnMuIFRpbWUgZm9yIGFub3RoZXIgcGFzcyB0aHJvdWdoIHRoZSBjb2RlYmFzZSB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIEl0J3MgZWFzeSB0byBvdmVybG9vayB0aGluZ3MgaW4gdGhlc2Uga2luZHMgb2YgaW52ZXN0aWdhdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc3VjaCBhIGNvcmUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNjo0My4yMjg4NzQ4MTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTU2NzAwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25mc2QvdmZzLmM9MTA3OD1fX2JlMzIgbmZzZF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXFxuLS1cXG5mcy9uZnNkL3Zmcy5jLTEwOTAtXFx0dHJhY2VfbmZzZF9yZWFkX3NwbGljZShycXN0cCwgZmhwLCBvZmZzZXQsICpjb3VudCk7XFxuZnMvbmZzZC92ZnMuYzoxMDkxOlxcdGhvc3RfZXJyID0gdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3IoZmlsZSwgXFx1MDAyNnNkLFxcbmZzL25mc2QvdmZzLmMtMTA5Mi1cXHRcXHRcXHRcXHRcXHQgICAgICBuZnNkX2RpcmVjdF9zcGxpY2VfYWN0b3IpO1xcbi0tXFxuZnMvc3BsaWNlLmM9MTAxOD1zdGF0aWMgc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCxcXG4tLVxcbmZzL3NwbGljZS5jLTExNDQtLyoqXFxuZnMvc3BsaWNlLmM6MTE0NTogKiB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvciAtIHNwbGljZSBmcm9tIGEgZmlsZSB0aHJvdWdoIGEgY2FsbGVyJ3MgYWN0b3JcXG5mcy9zcGxpY2UuYy0xMTQ2LSAqIEBpbjpcXHRcXHRmaWxlIHRvIHNwbGljZSBmcm9tOyBtdXN0IGJlIHNlZWthYmxlIChGTU9ERV9MU0VFSylcXG4tLVxcbmZzL3NwbGljZS5jLTExNjEtICovXFxuZnMvc3BsaWNlLmM6MTE2Mjpzc2l6ZV90IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCxcXG5mcy9zcGxpY2UuYy0xMTYzLVxcdFxcdFxcdFxcdCAgIHNwbGljZV9kaXJlY3RfYWN0b3IgKmFjdG9yKVxcbi0tXFxuZnMvc3BsaWNlLmMtMTE3NS19XFxuZnMvc3BsaWNlLmM6MTE3NjpFWFBPUlRfU1lNQk9MKHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKTtcXG5mcy9zcGxpY2UuYy0xMTc3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9zcGxpY2UuaD03OT1zc2l6ZV90IHZmc19zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3BsaWNlLmgtODEtXFx0XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L3NwbGljZS5oOjgyOnNzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXFxuaW5jbHVkZS9saW51eC9zcGxpY2UuaC04My1cXHRcXHRcXHRcXHQgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3Rvcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjM2OjQ0Ljc4NDU0OTYxMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQyMDMzODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgQ292ZXJhZ2UqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGNhbGxpbmcgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCByaWdodCBub3cgaXMgYG5mc2Rfc3BsaWNlX3JlYWRgLiBMZXQncyBqdXN0IGRvIGEgZmluYWwgc2FuaXR5IGNoZWNrIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIuXG5cblRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byB0cnVlLCB3aGljaCBJIGNvbmN1ciB3aXRoIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgYXBwcm9wcmlhdGVseSBzY29wZWQgdG8gdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzOiBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIGFuZCBgbmZzZF9zcGxpY2VfcmVhZGAuIEFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBzZW5zaWJsZSDigJMgZW5hYmxpbmcgYE5GU0RgIGlzIG5lY2Vzc2FyeSB0byBhY3R1YWxseSBleGVyY2lzZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuXG5cbk15IHJlYXNvbmluZz8gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgY29yZSBWRlMgbG9naWMgZm9yIHNwbGljaW5nIGFuZCwgY3J1Y2lhbGx5LCB0aGUgTkZTRCByZWFkIHBhdGhzLiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIEFQSSBhbmQgdGhlIHVwZGF0ZWQgYG5mc2Rfc3BsaWNlX3JlYWRgIGNhbGwgY2xlYXJseSByZXByZXNlbnQgcmVhY2hhYmxlLCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlc2UgY3JpdGljYWwgY29kZSBwYXRocy4gVGhlc2UgYXJlIGV4YWN0bHkgdGhlIGtpbmQgb2YgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZGVlcCBmdXp6aW5nLiBJJ20gcmVhc29uYWJseSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjMyLCJPdXRwdXRUb2tlbnMiOjEwOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNjo0OS40MjY1ODU5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5ODI0ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORlNEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JcIixcbiAgICBcIm5mc2Rfc3BsaWNlX3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBsb2dpYyBmb3Igc3BsaWNpbmcgYW5kIE5GU0QgcmVhZCBwYXRocywgaW50cm9kdWNpbmcgYSBuZXcgQVBJIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgYW5kIHVwZGF0aW5nIGBuZnNkX3NwbGljZV9yZWFkYCB0byB1c2UgaXQuIFRoZXNlIGFyZSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GU0RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvclwiLFxuICAgIFwibmZzZF9zcGxpY2VfcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGxvZ2ljIGZvciBzcGxpY2luZyBhbmQgTkZTRCByZWFkIHBhdGhzLCBpbnRyb2R1Y2luZyBhIG5ldyBBUEkgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBhbmQgdXBkYXRpbmcgYG5mc2Rfc3BsaWNlX3JlYWRgIHRvIHVzZSBpdC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjM2OjQ5LjUwNjQxNzQ3NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4MjgxOTgxNjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6MzY6NDkuNTA2ODk3NTc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM5ODI4MTQ5NzUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBpbiBgZnMvc3BsaWNlLmNgIHRoYXQgY29uc29saWRhdGVzIGV4aXN0aW5nIGNhbGxzIHRvIGByd192ZXJpZnlfYXJlYWAsIGBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCwgYW5kIGBmc25vdGlmeV9hY2Nlc3NgLiBJdCB0aGVuIHVwZGF0ZXMgYG5mc2Rfc3BsaWNlX3JlYWRgIGluIGBmcy9uZnNkL3Zmcy5jYCB0byB1c2UgdGhpcyBuZXcgaGVscGVyLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHN0cnVjdHVyYWwgcmVmYWN0b3JpbmcgdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBjaGFuZ2VzIHRvIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGUgbW9kaWZpY2F0aW9ucyBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB0aGF0IG1pZ2h0IHRoZW9yZXRpY2FsbHkgYXJpc2UgZnJvbSBWRlMgY2hhbmdlcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MmU5ZjU1ZWI5Mjk4ODI5ZWZkYmIzMjI0ZTc3Y2Q0N2M2NThhNTJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTg6Mjc6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5jIGIvZnMvbmZzZC92ZnMuY1xuaW5kZXggMWU4OWM3ZmY5NDkzYi4uYTQ2NWUyNzZkNjc1NCAxMDA2NDRcbi0tLSBhL2ZzL25mc2QvdmZzLmNcbisrKyBiL2ZzL25mc2QvdmZzLmNcbkBAIC0xMDU1LDcgKzEwNTUsNiBAQCBzdGF0aWMgX19iZTMyIG5mc2RfZmluaXNoX3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxuIFx0XHRuZnNkX3N0YXRzX2lvX3JlYWRfYWRkKG5uLCBmaHAtXHUwMDNlZmhfZXhwb3J0LCBob3N0X2Vycik7XG4gXHRcdCplb2YgPSBuZnNkX2VvZl9vbl9yZWFkKGZpbGUsIG9mZnNldCwgaG9zdF9lcnIsICpjb3VudCk7XG4gXHRcdCpjb3VudCA9IGhvc3RfZXJyO1xuLVx0XHRmc25vdGlmeV9hY2Nlc3MoZmlsZSk7XG4gXHRcdHRyYWNlX25mc2RfcmVhZF9pb19kb25lKHJxc3RwLCBmaHAsIG9mZnNldCwgKmNvdW50KTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9IGVsc2Uge1xuQEAgLTEwODksMTAgKzEwODgsOCBAQCBfX2JlMzIgbmZzZF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4gXHRzc2l6ZV90IGhvc3RfZXJyO1xuIFxuIFx0dHJhY2VfbmZzZF9yZWFkX3NwbGljZShycXN0cCwgZmhwLCBvZmZzZXQsICpjb3VudCk7XG4tXHRob3N0X2VyciA9IHJ3X3ZlcmlmeV9hcmVhKFJFQUQsIGZpbGUsIFx1MDAyNm9mZnNldCwgKmNvdW50KTtcbi1cdGlmICghaG9zdF9lcnIpXG4tXHRcdGhvc3RfZXJyID0gc3BsaWNlX2RpcmVjdF90b19hY3RvcihmaWxlLCBcdTAwMjZzZCxcbi1cdFx0XHRcdFx0XHQgIG5mc2RfZGlyZWN0X3NwbGljZV9hY3Rvcik7XG4rXHRob3N0X2VyciA9IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsIFx1MDAyNnNkLFxuK1x0XHRcdFx0XHQgICAgICBuZnNkX2RpcmVjdF9zcGxpY2VfYWN0b3IpO1xuIFx0cmV0dXJuIG5mc2RfZmluaXNoX3JlYWQocnFzdHAsIGZocCwgZmlsZSwgb2Zmc2V0LCBjb3VudCwgZW9mLCBob3N0X2Vycik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL3NwbGljZS5jIGIvZnMvc3BsaWNlLmNcbmluZGV4IDlkOGY2M2UyZmQxYWIuLjQyYWQ3MTJhMGY0ZGEgMTAwNjQ0XG4tLS0gYS9mcy9zcGxpY2UuY1xuKysrIGIvZnMvc3BsaWNlLmNcbkBAIC0xMDA5LDIxICsxMDA5LDE0IEBAIHNzaXplX3QgdmZzX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZnNfc3BsaWNlX3JlYWQpO1xuIFxuLS8qKlxuLSAqIHNwbGljZV9kaXJlY3RfdG9fYWN0b3IgLSBzcGxpY2VzIGRhdGEgZGlyZWN0bHkgYmV0d2VlbiB0d28gbm9uLXBpcGVzXG4tICogQGluOlx0XHRmaWxlIHRvIHNwbGljZSBmcm9tXG4tICogQHNkOlx0XHRhY3RvciBpbmZvcm1hdGlvbiBvbiB3aGVyZSB0byBzcGxpY2UgdG9cbi0gKiBAYWN0b3I6XHRoYW5kbGVzIHRoZSBkYXRhIHNwbGljaW5nXG4tICpcbi0gKiBEZXNjcmlwdGlvbjpcbi0gKiAgICBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGhlbHBlciB0byBzcGxpY2UgZGlyZWN0bHkgYmV0d2VlbiB0d29cbi0gKiAgICBwb2ludHMsIHdpdGhvdXQgcmVxdWlyaW5nIGFuIGV4cGxpY2l0IHBpcGUuIEludGVybmFsbHkgYW4gYWxsb2NhdGVkXG4tICogICAgcGlwZSBpcyBjYWNoZWQgaW4gdGhlIHByb2Nlc3MsIGFuZCByZXVzZWQgZHVyaW5nIHRoZSBsaWZldGltZSBvZlxuLSAqICAgIHRoYXQgcHJvY2Vzcy5cbi0gKlxuKy8qXG4rICogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSBoZWxwZXIgdG8gc3BsaWNlIGRpcmVjdGx5IGJldHdlZW4gdHdvXG4rICogcG9pbnRzLCB3aXRob3V0IHJlcXVpcmluZyBhbiBleHBsaWNpdCBwaXBlLiBJbnRlcm5hbGx5IGFuIGFsbG9jYXRlZFxuKyAqIHBpcGUgaXMgY2FjaGVkIGluIHRoZSBwcm9jZXNzLCBhbmQgcmV1c2VkIGR1cmluZyB0aGUgbGlmZXRpbWUgb2ZcbisgKiB0aGF0IHByb2Nlc3MuXG4gICovXG4tc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCxcbi1cdFx0XHQgICAgICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpXG4rc3RhdGljIHNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4rXHRcdFx0XHQgICAgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3RvcilcbiB7XG4gXHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlO1xuIFx0c3NpemVfdCByZXQsIGJ5dGVzO1xuQEAgLTExNDcsNyArMTE0MCw0MCBAQCBzc2l6ZV90IHNwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLFxuIFxuIFx0Z290byBkb25lO1xuIH1cbi1FWFBPUlRfU1lNQk9MKHNwbGljZV9kaXJlY3RfdG9fYWN0b3IpO1xuK1xuKy8qKlxuKyAqIHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yIC0gc3BsaWNlIGZyb20gYSBmaWxlIHRocm91Z2ggYSBjYWxsZXIncyBhY3RvclxuKyAqIEBpbjpcdFx0ZmlsZSB0byBzcGxpY2UgZnJvbTsgbXVzdCBiZSBzZWVrYWJsZSAoRk1PREVfTFNFRUspXG4rICogQHNkOlx0XHRzcGxpY2UgcGFyYW1ldGVycy4gVGhlIGNhbGxlciBzZXRzIEBzZC1cdTAwM2Vwb3MgYW5kXG4rICpcdFx0QHNkLVx1MDAzZXRvdGFsX2xlbi4gQHNkLVx1MDAzZXBvcyBhZHZhbmNlcyBhcyBkYXRhIGlzIGNvbnN1bWVkLFxuKyAqXHRcdGFuZCBAc2QtXHUwMDNldG90YWxfbGVuIGlzIG92ZXJ3cml0dGVuIHdpdGggdGhlIGxlbmd0aCBvZlxuKyAqXHRcdGVhY2ggcmVhZC5cbisgKiBAYWN0b3I6XHRjb25zdW1lcyBlYWNoIHBpcGUtZnVsbCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mXG4rICpcdFx0Ynl0ZXMgdGFrZW5cbisgKlxuKyAqIERlc2NyaXB0aW9uOlxuKyAqICAgIFNwbGljZSBmcm9tIEBpbiB0aHJvdWdoIEBhY3RvciwgZm9yIGEgY2FsbGVyIHRoYXQgY29uc3VtZXNcbisgKiAgICB0aGUgZGF0YSBpdHNlbGYgcmF0aGVyIHRoYW4gc2VuZGluZyBpdCB0byBhIHNlY29uZCBmaWxlLlxuKyAqICAgIFRoaXMgaGVscGVyIHZlcmlmaWVzIHRoZSByZWFkIGFuZCBlbWl0cyB0aGUgZnNub3RpZnkgYWNjZXNzXG4rICogICAgZXZlbnQuIGRvX3NwbGljZV9kaXJlY3QoKSBsZWF2ZXMgYm90aCB0byBpdHMgY2FsbGVycy5cbisgKlxuKyAqIFJldHVybjogVGhlIG51bWJlciBvZiBieXRlcyBzcGxpY2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLlxuKyAqL1xuK3NzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLFxuK1x0XHRcdFx0ICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpXG4re1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRyZXQgPSByd192ZXJpZnlfYXJlYShSRUFELCBpbiwgXHUwMDI2c2QtXHUwMDNlcG9zLCBzZC1cdTAwM2V0b3RhbF9sZW4pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHNwbGljZV9kaXJlY3RfdG9fYWN0b3IoaW4sIHNkLCBhY3Rvcik7XG4rXHRpZiAocmV0IFx1MDAzZT0gMClcbitcdFx0ZnNub3RpZnlfYWNjZXNzKGluKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0wodmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3IpO1xuIFxuIHN0YXRpYyBpbnQgZGlyZWN0X3NwbGljZV9hY3RvcihzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmggYi9pbmNsdWRlL2xpbnV4L3NwbGljZS5oXG5pbmRleCA5ZGVjNDg2MWQwOWY2Li40ZTkxZDAzZWQ2NDVmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zcGxpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaFxuQEAgLTc5LDggKzc5LDggQEAgc3NpemVfdCBhZGRfdG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1Zik7XG4gc3NpemVfdCB2ZnNfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdFx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbixcbiBcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuLXNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNwbGljZV9kZXNjICpzZCxcbi1cdFx0XHQgICAgICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpO1xuK3NzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4rXHRcdFx0XHQgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3Rvcik7XG4gc3NpemVfdCBkb19zcGxpY2Uoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKm9mZl9pbiwgc3RydWN0IGZpbGUgKm91dCxcbiBcdFx0ICBsb2ZmX3QgKm9mZl9vdXQsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7XG4gc3NpemVfdCBkb19zcGxpY2VfZGlyZWN0KHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLCBzdHJ1Y3QgZmlsZSAqb3V0LFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6MzY6NDkuNTA2ODk4NDc1WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwNDY0MTUwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgYW5kIENvZGUgTW92ZW1lbnQgaW4gU3BsaWNlIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nIG9mIHRoZSBzcGxpY2UgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBkaXJlY3QtdG8tYWN0b3Igb3BlcmF0aW9ucy4gSXQncyBhZGRpbmcgYSBuZXcgZnVuY3Rpb24sIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAsIHdpdGhpbiBgZnMvc3BsaWNlLmNgIGFuZCB0aGVuIHJlcGxhY2luZyB0aGUgZXhpc3RpbmcgYHNwbGljZV9kaXJlY3RfdG9fYWN0b3JgIGNhbGwgd2l0aCBpdCBpbiBgZnMvbmZzZC92ZnMuY2AuIFRoZSBtYWluIG1vdGl2YXRpb24gc2VlbXMgdG8gYmUgdG8gY2VudHJhbGl6ZSBhbmQgZW5jYXBzdWxhdGUgc29tZSBjaGVja3MgYW5kIG5vdGlmaWNhdGlvbnMuIEknbSBzZWVpbmcgdGhhdCBgcndfdmVyaWZ5X2FyZWFgIGFuZCBgZnNub3RpZnlfYWNjZXNzYCBhcmUgYmVpbmcgbW92ZWQgaW50byB0aGlzIG5ldyBoZWxwZXIgZnVuY3Rpb24uIFNlZW1zIHJlYXNvbmFibGUsIGdvb2QgZm9yIGNvZGUgY2xhcml0eSBhbmQgcG90ZW50aWFsIHJldXNlIGRvd24gdGhlIGxpbmUuXG5cbk5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFueXRoaW5nIGxpa2UgdGhhdCwgYXQgbGVhc3Qgbm90IGF0IGZpcnN0IGdsYW5jZS4gVGhpcyBsb29rcyBsaWtlIGEgZmFpcmx5IGxvdy1yaXNrIGNoYW5nZS4gQnV0IGxldCdzIHZlcmlmeSB0aGVzZSBkZXRhaWxzLlxuXG5TcGVjaWZpY2FsbHksIGxvb2tpbmcgYXQgdGhlIGBmcy9uZnNkL3Zmcy5jYCBjaGFuZ2VzLCBJJ20gbm90aW5nIHRoZSBkaXJlY3QgcmVwbGFjZW1lbnQgb2YgdGhlIG9sZCBjYWxsIHdpdGggdGhlIG5ldyBvbmU6XG5cbmBgYGNcbi1cdFx0aG9zdF9lcnIgPSByd192ZXJpZnlfYXJlYShSRUFELCBmaWxlLCBcdTAwMjZvZmZzZXQsICpjb3VudCk7XG4tXHRcdGlmICghaG9zdF9lcnIpXG4tXHRcdFx0aG9zdF9lcnIgPSBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsIFx1MDAyNnNkLFxuLVx0XHRcdFx0XHRcdFx0ICBuZnNkX2RpcmVjdF9zcGxpY2VfYWN0b3IpO1xuK1x0XHRob3N0X2VyciA9IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsIFx1MDAyNnNkLFxuK1x0XHRcdFx0XHRcdCAgICAgIG5mc2RfZGlyZWN0X3NwbGljZV9hY3Rvcik7XG5gYGBcblxuYW5kIHRoZSBuZXcgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBmdW5jdGlvbiwgd2hpY2ggbm93IGNvbnRhaW5zIGByd192ZXJpZnlfYXJlYWAgYW5kIGBmc25vdGlmeV9hY2Nlc3NgOlxuXG5gYGBjXG4rc3NpemVfdCB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4rXHRcdFx0XHQgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3Rvcilcbit7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdHJldCA9IHJ3X3ZlcmlmeV9hcmVhKFJFQUQsIGluLCBcdTAwMjZzZC1cdTAwM2Vwb3MsIHNkLVx1MDAzZXRvdGFsX2xlbik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gc3BsaWNlX2RpcmVjdF90b19hY3Rvcihpbiwgc2QsIGFjdG9yKTtcbitcdGlmIChyZXQgXHUwMDNlPSAwKVxuK1x0XHRmc25vdGlmeV9hY2Nlc3MoaW4pO1xuK1x0cmV0dXJuIHJldDtcbit9XG5gYGBcblxuT2theSwgdGhlIHRoaW5nIHRoYXQgaW1tZWRpYXRlbHkganVtcHMgb3V0IGF0IG1lIGlzIHRoaXM6IGluIHRoZSBvcmlnaW5hbCBgZnMvbmZzZC92ZnMuY2AgY29kZSwgYHJ3X3ZlcmlmeV9hcmVhYCB3YXMgY2FsbGVkIHdpdGggYFx1MDAyNm9mZnNldGAsIGJ1dCBpbiB0aGUgbmV3IGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAsIGl0IGlzIGNhbGxlZCB3aXRoIGBcdTAwMjZzZC1cdTAwM2Vwb3NgLiBOb3csIGlzIGBzZC1cdTAwM2Vwb3NgIGluaXRpYWxpemVkIHRvIGBvZmZzZXRgPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgYHNkLVx1MDAzZXBvc2AgaXMgaW5kZWVkIGluaXRpYWxpemVkIGFwcHJvcHJpYXRlbHkuIEkgd2lsbCB1c2UgdGhlIGBkZWZhdWx0X2FwaTpyZWFkLWZpbGVgIHRvb2wgdG8gcXVpY2tseSBjaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYG5mc2Rfc3BsaWNlX3JlYWRgIHRvIHNlZSB3aGVyZSBgc2QtXHUwMDNlcG9zYCBpcyBjb21pbmcgZnJvbS4gR290dGEgbWFrZSBzdXJlIHdlJ3JlIG5vdCBpbnRyb2R1Y2luZyBhIHN1YnRsZSBidWcgd2l0aCBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0ODAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNjo1OC41NTMzMTY0MDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL25mc2QvdmZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA3MDpcXHQgKiBAZmlsZTogb3BlbmVkIHN0cnVjdCBmaWxlIG9mIGZpbGUgdG8gYmUgcmVhZFxcbjEwNzE6XFx0ICogQG9mZnNldDogc3RhcnRpbmcgYnl0ZSBvZmZzZXRcXG4xMDcyOlxcdCAqIEBjb3VudDogSU46IHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXM7IE9VVDogbnVtYmVyIG9mIGJ5dGVzIHJlYWRcXG4xMDczOlxcdCAqIEBlb2Y6IE9VVDogc2V0IG5vbi16ZXJvIGlmIG9wZXJhdGlvbiByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGZpbGVcXG4xMDc0OlxcdCAqXFxuMTA3NTpcXHQgKiBSZXR1cm5zIG5mc19vayBvbiBzdWNjZXNzLCBvdGhlcndpc2UgYW4gbmZzZXJyIHN0YXQgdmFsdWUgaXNcXG4xMDc2OlxcdCAqIHJldHVybmVkLlxcbjEwNzc6XFx0ICovXFxuMTA3ODpcXHRfX2JlMzIgbmZzZF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXFxuMTA3OTpcXHRcXHRcXHRcXHRzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgdW5zaWduZWQgbG9uZyAqY291bnQsXFxuMTA4MDpcXHRcXHRcXHRcXHR1MzIgKmVvZilcXG4xMDgxOlxcdHtcXG4xMDgyOlxcdFxcdHN0cnVjdCBzcGxpY2VfZGVzYyBzZCA9IHtcXG4xMDgzOlxcdFxcdFxcdC5sZW5cXHRcXHQ9IDAsXFxuMTA4NDpcXHRcXHRcXHQudG90YWxfbGVuXFx0PSAqY291bnQsXFxuMTA4NTpcXHRcXHRcXHQucG9zXFx0XFx0PSBvZmZzZXQsXFxuMTA4NjpcXHRcXHRcXHQudS5kYXRhXFx0XFx0PSBycXN0cCxcXG4xMDg3OlxcdFxcdH07XFxuMTA4ODpcXHRcXHRzc2l6ZV90IGhvc3RfZXJyO1xcbjEwODk6XFx0XFxuMTA5MDpcXHRcXHR0cmFjZV9uZnNkX3JlYWRfc3BsaWNlKHJxc3RwLCBmaHAsIG9mZnNldCwgKmNvdW50KTtcXG4xMDkxOlxcdFxcdGhvc3RfZXJyID0gdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3IoZmlsZSwgXFx1MDAyNnNkLFxcbjEwOTI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmZzZF9kaXJlY3Rfc3BsaWNlX2FjdG9yKTtcXG4xMDkzOlxcdFxcdHJldHVybiBuZnNkX2ZpbmlzaF9yZWFkKHJxc3RwLCBmaHAsIGZpbGUsIG9mZnNldCwgY291bnQsIGVvZiwgaG9zdF9lcnIpO1xcbjEwOTQ6XFx0fVxcbjEwOTU6XFx0XFxuMTA5NjpcXHQvKlxcbjEwOTc6XFx0ICogVGhlIGJ5dGUgcmFuZ2Ugb2YgdGhlIGNsaWVudCdzIFJFQUQgcmVxdWVzdCBpcyBleHBhbmRlZCBvbiBib3RoIGVuZHNcXG4xMDk4OlxcdCAqIHVudGlsIGl0IG1lZXRzIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtJ3MgZGlyZWN0IEkvTyBhbGlnbm1lbnRcXG4xMDk5OlxcdCAqIHJlcXVpcmVtZW50cy4gQWZ0ZXIgdGhlIGludGVybmFsIHJlYWQgaXMgY29tcGxldGUsIHRoZSBieXRlIHJhbmdlIG9mXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjM2OjU4LjU1MzQ5Njk4MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc0NDA0MzY3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3NpdGlvbiBQb2ludGVyIGluIE5GU2QgUmVhZCBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIE5GU2QgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCByZWFkIG9wZXJhdGlvbnMuIEZpcnN0IHRoaW5nLCBJIHNlZSB0aGF0IGBzZC5wb3NgIGlzIGluZGVlZCBpbml0aWFsaXplZCB0byBgb2Zmc2V0YC4gTWFrZXMgc2Vuc2UuIE5vdyBJIGhhdmUgdG8gYmUgY2FyZWZ1bCwgYmVjYXVzZSBpdCBsb29rcyBsaWtlIGByd192ZXJpZnlfYXJlYWAgY291bGQgcG90ZW50aWFsbHkgYmUgbWVzc2luZyB3aXRoIHRoYXQgYHNkLVx1MDAzZXBvc2AgdmFsdWUuIEFoLCBubywgd2FpdCBhIHNlY29uZC4gVGhhdCdzIHJpZ2h0LCBgcndfdmVyaWZ5X2FyZWFgIHRha2VzIGEgYGxvZmZfdCAqcHBvc2AgYXJndW1lbnQuIFRoYXQncyBhIHBvaW50ZXIuIFNvLCB0aGUgb2xkIGNvZGUgcGFzc2VkIGEgcG9pbnRlciB0byBgb2Zmc2V0YCwgd2hpY2ggd291bGQgYmUgbW9kaWZpZWQgYnkgYHJ3X3ZlcmlmeV9hcmVhYC4gVGhlbiwgdGhhdCAqbW9kaWZpZWQqIGBvZmZzZXRgIHZhbHVlIHdhcyBwYXNzZWQgdG8gYG5mc2RfZmluaXNoX3JlYWRgLlxuXG5CdXQgaGFuZyBvbiwgdGhlICpuZXcqIGNvZGUhIEluIHRoZSAqbmV3KiBjb2RlLCBgcndfdmVyaWZ5X2FyZWFgIGlzIG1vZGlmeWluZyBgc2QtXHUwMDNlcG9zYCBkaXJlY3RseSwgKm5vdCogYG9mZnNldGAuIEFuZCB0aGVuIHRoZSBvcmlnaW5hbCwgdW5tb2RpZmllZCBgb2Zmc2V0YCB2YWx1ZSBpcyBiZWluZyBwYXNzZWQgdG8gYG5mc2RfZmluaXNoX3JlYWRgLiBUaGF0J3MgYSBrZXkgZGlzdGluY3Rpb24uIEFuZCBub3cgSSBuZWVkIHRvIHJlbWVtYmVyIGBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yYC4gVGhhdCAqYWxzbyogbW9kaWZpZXMgYHNkLVx1MDAzZXBvc2AuIFNvLCBJJ3ZlIGdvdCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBzZC1cdTAwM2Vwb3NgLCBgb2Zmc2V0YCwgYHJ3X3ZlcmlmeV9hcmVhYCwgYHNwbGljZV9kaXJlY3RfdG9fYWN0b3JgIGFuZCB1bHRpbWF0ZWx5IGhvdyBgbmZzZF9maW5pc2hfcmVhZGAgaXMgdXNpbmcgdGhvc2UgdmFsdWVzLiBHb3R0YSBjaGVjayBgbmZzZF9maW5pc2hfcmVhZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0MzowNS45OTM5MzU4OTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL25mc2QvdmZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA0MDpcXHR7XFxuMTA0MTpcXHRcXHRpZiAoZXhwZWN0ZWQgIT0gMCBcXHUwMDI2XFx1MDAyNiBsZW4gPT0gMClcXG4xMDQyOlxcdFxcdFxcdHJldHVybiAxO1xcbjEwNDM6XFx0XFx0aWYgKG9mZnNldCtsZW4gXFx1MDAzZT0gaV9zaXplX3JlYWQoZmlsZV9pbm9kZShmaWxlKSkpXFxuMTA0NDpcXHRcXHRcXHRyZXR1cm4gMTtcXG4xMDQ1OlxcdFxcdHJldHVybiAwO1xcbjEwNDY6XFx0fVxcbjEwNDc6XFx0XFxuMTA0ODpcXHRzdGF0aWMgX19iZTMyIG5mc2RfZmluaXNoX3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxcbjEwNDk6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxcbjEwNTA6XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmNvdW50LCB1MzIgKmVvZiwgc3NpemVfdCBob3N0X2VycilcXG4xMDUxOlxcdHtcXG4xMDUyOlxcdFxcdGlmIChob3N0X2VyciBcXHUwMDNlPSAwKSB7XFxuMTA1MzpcXHRcXHRcXHRzdHJ1Y3QgbmZzZF9uZXQgKm5uID0gbmV0X2dlbmVyaWMoU1ZDX05FVChycXN0cCksIG5mc2RfbmV0X2lkKTtcXG4xMDU0OlxcdFxcbjEwNTU6XFx0XFx0XFx0bmZzZF9zdGF0c19pb19yZWFkX2FkZChubiwgZmhwLVxcdTAwM2VmaF9leHBvcnQsIGhvc3RfZXJyKTtcXG4xMDU2OlxcdFxcdFxcdCplb2YgPSBuZnNkX2VvZl9vbl9yZWFkKGZpbGUsIG9mZnNldCwgaG9zdF9lcnIsICpjb3VudCk7XFxuMTA1NzpcXHRcXHRcXHQqY291bnQgPSBob3N0X2VycjtcXG4xMDU4OlxcdFxcdFxcdHRyYWNlX25mc2RfcmVhZF9pb19kb25lKHJxc3RwLCBmaHAsIG9mZnNldCwgKmNvdW50KTtcXG4xMDU5OlxcdFxcdFxcdHJldHVybiAwO1xcbjEwNjA6XFx0XFx0fSBlbHNlIHtcXG4xMDYxOlxcdFxcdFxcdHRyYWNlX25mc2RfcmVhZF9lcnIocnFzdHAsIGZocCwgb2Zmc2V0LCBob3N0X2Vycik7XFxuMTA2MjpcXHRcXHRcXHRyZXR1cm4gbmZzZXJybm8oaG9zdF9lcnIpO1xcbjEwNjM6XFx0XFx0fVxcbjEwNjQ6XFx0fVxcbjEwNjU6XFx0XFxuMTA2NjpcXHQvKipcXG4xMDY3OlxcdCAqIG5mc2Rfc3BsaWNlX3JlYWQgLSBQZXJmb3JtIGEgVkZTIHJlYWQgdXNpbmcgYSBzcGxpY2UgcGlwZVxcbjEwNjg6XFx0ICogQHJxc3RwOiBSUEMgdHJhbnNhY3Rpb24gY29udGV4dFxcbjEwNjk6XFx0ICogQGZocDogZmlsZSBoYW5kbGUgb2YgZmlsZSB0byBiZSByZWFkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQzOjA1Ljk5NDA2MTA2OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzY5ODg0MzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbmZzZF9maW5pc2hfcmVhZCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuZnNkX2ZpbmlzaF9yZWFkYCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGZpbGUgb2Zmc2V0LiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBgb2Zmc2V0YCBwYXJhbWV0ZXIgZm9yIGJvdGggdGhlIGBuZnNkX2VvZl9vbl9yZWFkYCBjaGVjayBhbmQgZm9yIHRyYWNlcG9pbnRzLCByaWdodD8gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoZSBjaGFuZ2UgY29tcGFyZWQgdG8gdGhlIG9sZGVyIGNvZGUuIFByZXZpb3VzbHksIGByd192ZXJpZnlfYXJlYWAgaGFkIHRoZSBwb3RlbnRpYWwgdG8gbW9kaWZ5IHRoYXQgdmVyeSBgb2Zmc2V0YCB2YWx1ZS4gSWYgdGhhdCBoYXBwZW5lZCwgYG5mc2RfZmluaXNoX3JlYWRgIHdvdWxkIHRoZW4gdXNlIHRoZSBhbHRlcmVkIG9mZnNldCwgd2hpY2ggY291bGQgaGF2ZSBzb21lIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucyBmb3IgZGF0YSBjb25zaXN0ZW5jeSBvciBFT0YgZGV0ZWN0aW9uLCBkZXBlbmRpbmcgb24gdGhlIG5hdHVyZSBvZiB0aGUgb2Zmc2V0IGNoYW5nZS5cblxuQnV0IG5vdywgaXQgc2VlbXMgYHJ3X3ZlcmlmeV9hcmVhYCBvcGVyYXRlcyBkaWZmZXJlbnRseS4gSXTigJlzIHVwZGF0aW5nIGBzZC1cdTAwM2Vwb3NgLCBpbnN0ZWFkIG9mIG1vZGlmeWluZyB0aGUgYG9mZnNldGAgZGlyZWN0bHkuIFRoZXJlZm9yZSwgdGhlIGBvZmZzZXRgIHBhcmFtZXRlciBwYXNzZWQgdG8gYG5mc2RfZmluaXNoX3JlYWRgIHJlbWFpbnMgdW5jaGFuZ2VkIGluIHRoZSBjdXJyZW50IGl0ZXJhdGlvbi5cblxuV2FpdCBhIHNlY29uZOKApiBkb2Vzbid0IGByd192ZXJpZnlfYXJlYWAgKnVzdWFsbHkqIGxlYXZlIHRoZSBmaWxlIHBvaW50ZXIgYWxvbmUgdW5sZXNzIHRoZXJlJ3Mgc29tZXRoaW5nIHNwZWNpZmljIGdvaW5nIG9uLCBsaWtlIG1hbmRhdG9yeSBsb2NraW5nIG9yIHNvbWV0aGluZyBlcXVhbGx5IGV4b3RpYz8gSSBkb24ndCByZWNhbGwgaXQgYmVpbmcgYSByb3V0aW5lIG1vZGlmaWVyIG9mIHRoZSBwb3NpdGlvbi4gSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGF0OyBpdCdzIGVhc3kgdG8gZ2V0IGxvc3QgaW4gdGhlIGRldGFpbHMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgcndfdmVyaWZ5X2FyZWFgIGZ1bmN0aW9uIGl0c2VsZiBhbmQgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBpbXBhY3RzIGZpbGUgcG9zaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMjcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0MzoxMS4zNjM5NDc1MzFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzAzNDA0MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHJ3X3ZlcmlmeV9hcmVhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3JlYWRfd3JpdGUuYz00MjY9U1lTQ0FMTF9ERUZJTkU1KGxsc2VlaywgdW5zaWduZWQgaW50LCBmZCwgdW5zaWduZWQgbG9uZywgb2Zmc2V0X2hpZ2gsXFxuLS1cXG5mcy9yZWFkX3dyaXRlLmMtNDUyLVxcbmZzL3JlYWRfd3JpdGUuYzo0NTM6aW50IHJ3X3ZlcmlmeV9hcmVhKGludCByZWFkX3dyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgbG9mZl90ICpwcG9zLCBzaXplX3QgY291bnQpXFxuZnMvcmVhZF93cml0ZS5jLTQ1NC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MzEwNj1leHRlcm4gbG9mZl90IG5vX3NlZWtfZW5kX2xsc2VlayhzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIGludCk7XFxuaW5jbHVkZS9saW51eC9mcy5oOjMxMDc6aW50IHJ3X3ZlcmlmeV9hcmVhKGludCwgc3RydWN0IGZpbGUgKiwgY29uc3QgbG9mZl90ICosIHNpemVfdCk7XFxuaW5jbHVkZS9saW51eC9mcy5oLTMxMDgtZXh0ZXJuIGludCBnZW5lcmljX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDM6MTMuNDM0Mjk3ODQ4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzE0MDM1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVmVyaWZ5aW5nIHRoZSBDb25zdCBDb3JyZWN0bmVzcyBvZiBgcndfdmVyaWZ5X2FyZWFgJ3MgT2Zmc2V0IFBhcmFtZXRlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGByd192ZXJpZnlfYXJlYWAgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gaXRzIHBhcmFtZXRlciB1c2FnZS4gUmlnaHQsIGl0IGxvb2tzIGxpa2UgaXQgdGFrZXMgYSBgY29uc3QgbG9mZl90ICpwcG9zYC4gVGhhdCdzIGdvb2Q7IHRoZSBgY29uc3RgIHN1Z2dlc3RzIGl0ICpzaG91bGRuJ3QqIGJlIG1vZGlmeWluZyB0aGUgb2Zmc2V0IHBvaW50ZWQgdG8gYnkgYHBwb3NgLiBJJ2QgZXhwZWN0IHRoYXQgaW4gYSB3ZWxsLWRlc2lnbmVkIGtlcm5lbCBmdW5jdGlvbiBsaWtlIHRoaXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHNvbGlkIGhlcmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlLWNoZWNrIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZGVmaW5lZC4gSG1tLCB5ZXAsIGNvbmZpcm1pbmcgdGhhdCB0aGUgZGVjbGFyYXRpb24gaW4gYGZzL3JlYWRfd3JpdGUuY2Agc2hvd3MgdGhlIHBhcmFtZXRlciBhcyBgY29uc3QgbG9mZl90ICpwcG9zYC4gR29vZC4gU28sIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0OiB0aGUgZnVuY3Rpb24gcHJvbWlzZXMgbm90IHRvIGFsdGVyIHRoZSBvZmZzZXQgdmFsdWUuIFRoaXMgcmVpbmZvcmNlcyB0aGUgaWRlYSB0aGF0IGl0J3MgYWN0aW5nIG1vcmUgYXMgYW4gaW5mb3JtYXRpb24gcmV0cmlldmVyIHJlZ2FyZGluZyB0aGUgYXJlYSByZXF1ZXN0ZWQsIHJhdGhlciB0aGFuIHNvbWV0aGluZyB0aGF0IHdvdWxkIG1ha2UgYSBjaGFuZ2UgZGlyZWN0bHkgdG8gdGhlIGZpbGUgcG9zaXRpb24uIEV4Y2VsbGVudCwgbm93IEkgY2FuIHVzZSB0aGF0IGluZm9ybWF0aW9uIHRvIGNvbmZpcm0gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAzNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQzOjE4LjE2NTcwNDc0OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvcmVhZF93cml0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ1MDpcXHR9XFxuIDQ1MTpcXHQjZW5kaWZcXG4gNDUyOlxcdFxcbiA0NTM6XFx0aW50IHJ3X3ZlcmlmeV9hcmVhKGludCByZWFkX3dyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgbG9mZl90ICpwcG9zLCBzaXplX3QgY291bnQpXFxuIDQ1NDpcXHR7XFxuIDQ1NTpcXHRcXHRpbnQgbWFzayA9IHJlYWRfd3JpdGUgPT0gUkVBRCA/IE1BWV9SRUFEIDogTUFZX1dSSVRFO1xcbiA0NTY6XFx0XFx0aW50IHJldDtcXG4gNDU3OlxcdFxcbiA0NTg6XFx0XFx0aWYgKHVubGlrZWx5KChzc2l6ZV90KSBjb3VudCBcXHUwMDNjIDApKVxcbiA0NTk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ2MDpcXHRcXG4gNDYxOlxcdFxcdGlmIChwcG9zKSB7XFxuIDQ2MjpcXHRcXHRcXHRsb2ZmX3QgcG9zID0gKnBwb3M7XFxuIDQ2MzpcXHRcXG4gNDY0OlxcdFxcdFxcdGlmICh1bmxpa2VseShwb3MgXFx1MDAzYyAwKSkge1xcbiA0NjU6XFx0XFx0XFx0XFx0aWYgKCF1bnNpZ25lZF9vZmZzZXRzKGZpbGUpKVxcbiA0NjY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ2NzpcXHRcXHRcXHRcXHRpZiAoY291bnQgXFx1MDAzZT0gLXBvcykgLyogYm90aCB2YWx1ZXMgYXJlIGluIDAuLkxMT05HX01BWCAqL1xcbiA0Njg6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuIDQ2OTpcXHRcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KChsb2ZmX3QpIChwb3MgKyBjb3VudCkgXFx1MDAzYyAwKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0MzoxOC4xNjU4MzUwNjhaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTYyMjUzNzQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFNhZmV0eSoqXG5cbk9rYXksIHNvIEkgc2VlIGBjb25zdCBsb2ZmX3QgKnBwb3NgIGluIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUsIG1lYW5pbmcgdGhpcyBwYXRjaCBpc24ndCBnb2luZyB0byBiZSBtZXNzaW5nIHdpdGggdGhlIGZpbGUgb2Zmc2V0IGRpcmVjdGx5LiBUaGF0J3MgZ29vZC5cblxuUmlnaHQsIHRoZSBjb3JlIG9mIGl0IGlzIHdyYXBwaW5nIGByd192ZXJpZnlfYXJlYWAsIGBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCwgYW5kIGBmc25vdGlmeV9hY2Nlc3NgIGludG8gYSBzaW5nbGUgaGVscGVyIGZ1bmN0aW9uIGNhbGxlZCBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgLiBFc3NlbnRpYWxseSwgYSByZWZhY3RvcmluZywgc29tZSBjb2RlIGNsZWFudXAuIEl0IGxvb2tzIGxpa2UgYG5mc2Rfc3BsaWNlX3JlYWRgIGlzIGdldHRpbmcgdXBkYXRlZCB0byB1c2UgdGhpcyBuZXcgaGVscGVyLlxuXG5HaXZlbiB0aGF0LCBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBLTVNBTiBmbGFncyBoZXJlLiBJdCBkb2Vzbid0IGxvb2sgbGlrZSBhbnkgbmV3IG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQsIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5MZXQgbWUgYXJ0aWN1bGF0ZSB0aGF0IHRob3VnaHQgcHJvY2VzcyBmb3IgYSBtb3JlIGZvcm1hbCBhc3Nlc3NtZW50Li4uIFRoaXMgcGF0Y2ggbWFpbmx5IHJlb3JnYW5pemVzIHNvbWUgY2FsbHMgYnkgaW50cm9kdWNpbmcgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCwgY29uc29saWRhdGluZyBhIGZldyBvdGhlciBjYWxscy4gSXQgdXBkYXRlcyB0aGUgTkZTIGNvZGUgdG8gdXNlIHRoZSBuZXcgaGVscGVyLiBUaGlzIGlzIGEgcmVmYWN0b3JpbmcsIHB1cmUgYW5kIHNpbXBsZS4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gdGhlIFZGUyB0aGF0IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIHVzZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgY3JlYXRlIG5ldyBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIHRoZSB1c3VhbCBidWcgZGV0ZWN0b3JzIHNob3VsZCBiZSBjb21wbGV0ZWx5IGFkZXF1YXRlIHRvIGRldGVjdCBhbnkgaXNzdWVzIGZyb20gdGhlIFZGUyBjaGFuZ2VzLCBldmVuIHRob3VnaCB0aGlzIHBhdGNoIGlzIHByaW1hcmlseSBzdHJ1Y3R1cmFsLiBUaGVyZWZvcmUsIEkgZG9uJ3Qgc2VlIGFueSBuZWVkIHRvIGRlZGljYXRlIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIHRvIGl0LiBJdCdzIGEgbG93LXJpc2sgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjkwLCJPdXRwdXRUb2tlbnMiOjIxMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQzOjI3Ljc4ODM3NDc3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIGluIGBmcy9zcGxpY2UuY2AgdGhhdCBjb25zb2xpZGF0ZXMgZXhpc3RpbmcgY2FsbHMgdG8gYHJ3X3ZlcmlmeV9hcmVhYCwgYHNwbGljZV9kaXJlY3RfdG9fYWN0b3JgLCBhbmQgYGZzbm90aWZ5X2FjY2Vzc2AuIEl0IHRoZW4gdXBkYXRlcyBgbmZzZF9zcGxpY2VfcmVhZGAgaW4gYGZzL25mc2QvdmZzLmNgIHRvIHVzZSB0aGlzIG5ldyBoZWxwZXIuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgc3RydWN0dXJhbCByZWZhY3RvcmluZyB0aGF0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBtb2RpZmljYXRpb25zIGRvIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIHRoYXQgbWlnaHQgdGhlb3JldGljYWxseSBhcmlzZSBmcm9tIFZGUyBjaGFuZ2VzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgaW4gYGZzL3NwbGljZS5jYCB0aGF0IGNvbnNvbGlkYXRlcyBleGlzdGluZyBjYWxscyB0byBgcndfdmVyaWZ5X2FyZWFgLCBgc3BsaWNlX2RpcmVjdF90b19hY3RvcmAsIGFuZCBgZnNub3RpZnlfYWNjZXNzYC4gSXQgdGhlbiB1cGRhdGVzIGBuZnNkX3NwbGljZV9yZWFkYCBpbiBgZnMvbmZzZC92ZnMuY2AgdG8gdXNlIHRoaXMgbmV3IGhlbHBlci4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBzdHJ1Y3R1cmFsIHJlZmFjdG9yaW5nIHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgdGhhdCBtaWdodCB0aGVvcmV0aWNhbGx5IGFyaXNlIGZyb20gVkZTIGNoYW5nZXMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrj9st[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 18:25:55 +0000 UTC FinishedAt: 2026-08-24 18:43:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "19f075830e5d874749f55d837fc4e8af98df0559", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFSD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "19f075830e5d874749f55d837fc4e8af98df0559", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NFSD" ], "series_id": "8dda0a59-8239-465e-a37d-6c8b52bdaed9" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "vfs_splice_direct_to_actor", "nfsd_splice_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORlNEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3ImIzM0OywKICAgICYjMzQ7bmZzZF9zcGxpY2VfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgaW4gYGZzL3NwbGljZS5jYCB0aGF0IGNvbnNvbGlkYXRlcyBleGlzdGluZyBjYWxscyB0byBgcndfdmVyaWZ5X2FyZWFgLCBgc3BsaWNlX2RpcmVjdF90b19hY3RvcmAsIGFuZCBgZnNub3RpZnlfYWNjZXNzYC4gSXQgdGhlbiB1cGRhdGVzIGBuZnNkX3NwbGljZV9yZWFkYCBpbiBgZnMvbmZzZC92ZnMuY2AgdG8gdXNlIHRoaXMgbmV3IGhlbHBlci4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBzdHJ1Y3R1cmFsIHJlZmFjdG9yaW5nIHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgdGhhdCBtaWdodCB0aGVvcmV0aWNhbGx5IGFyaXNlIGZyb20gVkZTIGNoYW5nZXMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGxvZ2ljIGZvciBzcGxpY2luZyBhbmQgTkZTRCByZWFkIHBhdGhzLCBpbnRyb2R1Y2luZyBhIG5ldyBBUEkgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBhbmQgdXBkYXRpbmcgYG5mc2Rfc3BsaWNlX3JlYWRgIHRvIHVzZSBpdC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4MmU5ZjU1ZWI5Mjk4ODI5ZWZkYmIzMjI0ZTc3Y2Q0N2M2NThhNTJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTg6Mjc6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvbmZzZC92ZnMuYyBiL2ZzL25mc2QvdmZzLmNcbmluZGV4IDFlODljN2ZmOTQ5M2IuLmE0NjVlMjc2ZDY3NTQgMTAwNjQ0XG4tLS0gYS9mcy9uZnNkL3Zmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uZnNkL3Zmcy5jXG5AQCAtMTA1NSw3ICYjNDM7MTA1NSw2IEBAIHN0YXRpYyBfX2JlMzIgbmZzZF9maW5pc2hfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4gXHRcdG5mc2Rfc3RhdHNfaW9fcmVhZF9hZGQobm4sIGZocC1cdTAwM2VmaF9leHBvcnQsIGhvc3RfZXJyKTtcbiBcdFx0KmVvZiA9IG5mc2RfZW9mX29uX3JlYWQoZmlsZSwgb2Zmc2V0LCBob3N0X2VyciwgKmNvdW50KTtcbiBcdFx0KmNvdW50ID0gaG9zdF9lcnI7XG4tXHRcdGZzbm90aWZ5X2FjY2VzcyhmaWxlKTtcbiBcdFx0dHJhY2VfbmZzZF9yZWFkX2lvX2RvbmUocnFzdHAsIGZocCwgb2Zmc2V0LCAqY291bnQpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH0gZWxzZSB7XG5AQCAtMTA4OSwxMCAmIzQzOzEwODgsOCBAQCBfX2JlMzIgbmZzZF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4gXHRzc2l6ZV90IGhvc3RfZXJyO1xuIFxuIFx0dHJhY2VfbmZzZF9yZWFkX3NwbGljZShycXN0cCwgZmhwLCBvZmZzZXQsICpjb3VudCk7XG4tXHRob3N0X2VyciA9IHJ3X3ZlcmlmeV9hcmVhKFJFQUQsIGZpbGUsIFx1MDAyNm9mZnNldCwgKmNvdW50KTtcbi1cdGlmICghaG9zdF9lcnIpXG4tXHRcdGhvc3RfZXJyID0gc3BsaWNlX2RpcmVjdF90b19hY3RvcihmaWxlLCBcdTAwMjZzZCxcbi1cdFx0XHRcdFx0XHQgIG5mc2RfZGlyZWN0X3NwbGljZV9hY3Rvcik7XG4mIzQzO1x0aG9zdF9lcnIgPSB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcihmaWxlLCBcdTAwMjZzZCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIG5mc2RfZGlyZWN0X3NwbGljZV9hY3Rvcik7XG4gXHRyZXR1cm4gbmZzZF9maW5pc2hfcmVhZChycXN0cCwgZmhwLCBmaWxlLCBvZmZzZXQsIGNvdW50LCBlb2YsIGhvc3RfZXJyKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuY1xuaW5kZXggOWQ4ZjYzZTJmZDFhYi4uNDJhZDcxMmEwZjRkYSAxMDA2NDRcbi0tLSBhL2ZzL3NwbGljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9zcGxpY2UuY1xuQEAgLTEwMDksMjEgJiM0MzsxMDA5LDE0IEBAIHNzaXplX3QgdmZzX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZnNfc3BsaWNlX3JlYWQpO1xuIFxuLS8qKlxuLSAqIHNwbGljZV9kaXJlY3RfdG9fYWN0b3IgLSBzcGxpY2VzIGRhdGEgZGlyZWN0bHkgYmV0d2VlbiB0d28gbm9uLXBpcGVzXG4tICogQGluOlx0XHRmaWxlIHRvIHNwbGljZSBmcm9tXG4tICogQHNkOlx0XHRhY3RvciBpbmZvcm1hdGlvbiBvbiB3aGVyZSB0byBzcGxpY2UgdG9cbi0gKiBAYWN0b3I6XHRoYW5kbGVzIHRoZSBkYXRhIHNwbGljaW5nXG4tICpcbi0gKiBEZXNjcmlwdGlvbjpcbi0gKiAgICBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGhlbHBlciB0byBzcGxpY2UgZGlyZWN0bHkgYmV0d2VlbiB0d29cbi0gKiAgICBwb2ludHMsIHdpdGhvdXQgcmVxdWlyaW5nIGFuIGV4cGxpY2l0IHBpcGUuIEludGVybmFsbHkgYW4gYWxsb2NhdGVkXG4tICogICAgcGlwZSBpcyBjYWNoZWQgaW4gdGhlIHByb2Nlc3MsIGFuZCByZXVzZWQgZHVyaW5nIHRoZSBsaWZldGltZSBvZlxuLSAqICAgIHRoYXQgcHJvY2Vzcy5cbi0gKlxuJiM0MzsvKlxuJiM0MzsgKiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGhlbHBlciB0byBzcGxpY2UgZGlyZWN0bHkgYmV0d2VlbiB0d29cbiYjNDM7ICogcG9pbnRzLCB3aXRob3V0IHJlcXVpcmluZyBhbiBleHBsaWNpdCBwaXBlLiBJbnRlcm5hbGx5IGFuIGFsbG9jYXRlZFxuJiM0MzsgKiBwaXBlIGlzIGNhY2hlZCBpbiB0aGUgcHJvY2VzcywgYW5kIHJldXNlZCBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mXG4mIzQzOyAqIHRoYXQgcHJvY2Vzcy5cbiAgKi9cbi1zc2l6ZV90IHNwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLFxuLVx0XHRcdCAgICAgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3RvcilcbiYjNDM7c3RhdGljIHNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpXG4ge1xuIFx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTtcbiBcdHNzaXplX3QgcmV0LCBieXRlcztcbkBAIC0xMTQ3LDcgJiM0MzsxMTQwLDQwIEBAIHNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4gXG4gXHRnb3RvIGRvbmU7XG4gfVxuLUVYUE9SVF9TWU1CT0woc3BsaWNlX2RpcmVjdF90b19hY3Rvcik7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3IgLSBzcGxpY2UgZnJvbSBhIGZpbGUgdGhyb3VnaCBhIGNhbGxlciYjMzk7cyBhY3RvclxuJiM0MzsgKiBAaW46XHRcdGZpbGUgdG8gc3BsaWNlIGZyb207IG11c3QgYmUgc2Vla2FibGUgKEZNT0RFX0xTRUVLKVxuJiM0MzsgKiBAc2Q6XHRcdHNwbGljZSBwYXJhbWV0ZXJzLiBUaGUgY2FsbGVyIHNldHMgQHNkLVx1MDAzZXBvcyBhbmRcbiYjNDM7ICpcdFx0QHNkLVx1MDAzZXRvdGFsX2xlbi4gQHNkLVx1MDAzZXBvcyBhZHZhbmNlcyBhcyBkYXRhIGlzIGNvbnN1bWVkLFxuJiM0MzsgKlx0XHRhbmQgQHNkLVx1MDAzZXRvdGFsX2xlbiBpcyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBsZW5ndGggb2ZcbiYjNDM7ICpcdFx0ZWFjaCByZWFkLlxuJiM0MzsgKiBAYWN0b3I6XHRjb25zdW1lcyBlYWNoIHBpcGUtZnVsbCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mXG4mIzQzOyAqXHRcdGJ5dGVzIHRha2VuXG4mIzQzOyAqXG4mIzQzOyAqIERlc2NyaXB0aW9uOlxuJiM0MzsgKiAgICBTcGxpY2UgZnJvbSBAaW4gdGhyb3VnaCBAYWN0b3IsIGZvciBhIGNhbGxlciB0aGF0IGNvbnN1bWVzXG4mIzQzOyAqICAgIHRoZSBkYXRhIGl0c2VsZiByYXRoZXIgdGhhbiBzZW5kaW5nIGl0IHRvIGEgc2Vjb25kIGZpbGUuXG4mIzQzOyAqICAgIFRoaXMgaGVscGVyIHZlcmlmaWVzIHRoZSByZWFkIGFuZCBlbWl0cyB0aGUgZnNub3RpZnkgYWNjZXNzXG4mIzQzOyAqICAgIGV2ZW50LiBkb19zcGxpY2VfZGlyZWN0KCkgbGVhdmVzIGJvdGggdG8gaXRzIGNhbGxlcnMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogVGhlIG51bWJlciBvZiBieXRlcyBzcGxpY2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLlxuJiM0MzsgKi9cbiYjNDM7c3NpemVfdCB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4mIzQzO1x0XHRcdFx0ICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpXG4mIzQzO3tcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcndfdmVyaWZ5X2FyZWEoUkVBRCwgaW4sIFx1MDAyNnNkLVx1MDAzZXBvcywgc2QtXHUwMDNldG90YWxfbGVuKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gc3BsaWNlX2RpcmVjdF90b19hY3Rvcihpbiwgc2QsIGFjdG9yKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMClcbiYjNDM7XHRcdGZzbm90aWZ5X2FjY2Vzcyhpbik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKTtcbiBcbiBzdGF0aWMgaW50IGRpcmVjdF9zcGxpY2VfYWN0b3Ioc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbiBcdFx0XHQgICAgICAgc3RydWN0IHNwbGljZV9kZXNjICpzZClcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwbGljZS5oIGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaFxuaW5kZXggOWRlYzQ4NjFkMDlmNi4uNGU5MWQwM2VkNjQ1ZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3BsaWNlLmhcbkBAIC03OSw4ICYjNDM7NzksOCBAQCBzc2l6ZV90IGFkZF90b19waXBlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmKTtcbiBzc2l6ZV90IHZmc19zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbiBcdFx0XHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLFxuIFx0XHRcdHVuc2lnbmVkIGludCBmbGFncyk7XG4tc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLFxuLVx0XHRcdCAgICAgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3Rvcik7XG4mIzQzO3NzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4mIzQzO1x0XHRcdFx0ICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpO1xuIHNzaXplX3QgZG9fc3BsaWNlKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpvZmZfaW4sIHN0cnVjdCBmaWxlICpvdXQsXG4gXHRcdCAgbG9mZl90ICpvZmZfb3V0LCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIHNzaXplX3QgZG9fc3BsaWNlX2RpcmVjdChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcywgc3RydWN0IGZpbGUgKm91dCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT45bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZTRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yJiMzNDssCiAgICAmIzM0O25mc2Rfc3BsaWNlX3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgbG9naWMgZm9yIHNwbGljaW5nIGFuZCBORlNEIHJlYWQgcGF0aHMsIGludHJvZHVjaW5nIGEgbmV3IEFQSSBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIGFuZCB1cGRhdGluZyBgbmZzZF9zcGxpY2VfcmVhZGAgdG8gdXNlIGl0LiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgyZTlmNTVlYjkyOTg4MjllZmRiYjMyMjRlNzdjZDQ3YzY1OGE1MmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAxODoyNzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IDFlODljN2ZmOTQ5M2IuLmE0NjVlMjc2ZDY3NTQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmZzZC92ZnMuYwpAQCAtMTA1NSw3ICYjNDM7MTA1NSw2IEBAIHN0YXRpYyBfX2JlMzIgbmZzZF9maW5pc2hfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsCiAJCW5mc2Rfc3RhdHNfaW9fcmVhZF9hZGQobm4sIGZocC0mZ3Q7ZmhfZXhwb3J0LCBob3N0X2Vycik7CiAJCSplb2YgPSBuZnNkX2VvZl9vbl9yZWFkKGZpbGUsIG9mZnNldCwgaG9zdF9lcnIsICpjb3VudCk7CiAJCSpjb3VudCA9IGhvc3RfZXJyOwotCQlmc25vdGlmeV9hY2Nlc3MoZmlsZSk7CiAJCXRyYWNlX25mc2RfcmVhZF9pb19kb25lKHJxc3RwLCBmaHAsIG9mZnNldCwgKmNvdW50KTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIHsKQEAgLTEwODksMTAgJiM0MzsxMDg4LDggQEAgX19iZTMyIG5mc2Rfc3BsaWNlX3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLAogCXNzaXplX3QgaG9zdF9lcnI7CiAKIAl0cmFjZV9uZnNkX3JlYWRfc3BsaWNlKHJxc3RwLCBmaHAsIG9mZnNldCwgKmNvdW50KTsKLQlob3N0X2VyciA9IHJ3X3ZlcmlmeV9hcmVhKFJFQUQsIGZpbGUsICZhbXA7b2Zmc2V0LCAqY291bnQpOwotCWlmICghaG9zdF9lcnIpCi0JCWhvc3RfZXJyID0gc3BsaWNlX2RpcmVjdF90b19hY3RvcihmaWxlLCAmYW1wO3NkLAotCQkJCQkJICBuZnNkX2RpcmVjdF9zcGxpY2VfYWN0b3IpOwomIzQzOwlob3N0X2VyciA9IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsICZhbXA7c2QsCiYjNDM7CQkJCQkgICAgICBuZnNkX2RpcmVjdF9zcGxpY2VfYWN0b3IpOwogCXJldHVybiBuZnNkX2ZpbmlzaF9yZWFkKHJxc3RwLCBmaHAsIGZpbGUsIG9mZnNldCwgY291bnQsIGVvZiwgaG9zdF9lcnIpOwogfQogCmRpZmYgLS1naXQgYS9mcy9zcGxpY2UuYyBiL2ZzL3NwbGljZS5jCmluZGV4IDlkOGY2M2UyZmQxYWIuLjQyYWQ3MTJhMGY0ZGEgMTAwNjQ0Ci0tLSBhL2ZzL3NwbGljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NwbGljZS5jCkBAIC0xMDA5LDIxICYjNDM7MTAwOSwxNCBAQCBzc2l6ZV90IHZmc19zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcywKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZmc19zcGxpY2VfcmVhZCk7CiAKLS8qKgotICogc3BsaWNlX2RpcmVjdF90b19hY3RvciAtIHNwbGljZXMgZGF0YSBkaXJlY3RseSBiZXR3ZWVuIHR3byBub24tcGlwZXMKLSAqIEBpbjoJCWZpbGUgdG8gc3BsaWNlIGZyb20KLSAqIEBzZDoJCWFjdG9yIGluZm9ybWF0aW9uIG9uIHdoZXJlIHRvIHNwbGljZSB0bwotICogQGFjdG9yOgloYW5kbGVzIHRoZSBkYXRhIHNwbGljaW5nCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiAgICBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGhlbHBlciB0byBzcGxpY2UgZGlyZWN0bHkgYmV0d2VlbiB0d28KLSAqICAgIHBvaW50cywgd2l0aG91dCByZXF1aXJpbmcgYW4gZXhwbGljaXQgcGlwZS4gSW50ZXJuYWxseSBhbiBhbGxvY2F0ZWQKLSAqICAgIHBpcGUgaXMgY2FjaGVkIGluIHRoZSBwcm9jZXNzLCBhbmQgcmV1c2VkIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YKLSAqICAgIHRoYXQgcHJvY2Vzcy4KLSAqCiYjNDM7LyoKJiM0MzsgKiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGhlbHBlciB0byBzcGxpY2UgZGlyZWN0bHkgYmV0d2VlbiB0d28KJiM0MzsgKiBwb2ludHMsIHdpdGhvdXQgcmVxdWlyaW5nIGFuIGV4cGxpY2l0IHBpcGUuIEludGVybmFsbHkgYW4gYWxsb2NhdGVkCiYjNDM7ICogcGlwZSBpcyBjYWNoZWQgaW4gdGhlIHByb2Nlc3MsIGFuZCByZXVzZWQgZHVyaW5nIHRoZSBsaWZldGltZSBvZgomIzQzOyAqIHRoYXQgcHJvY2Vzcy4KICAqLwotc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCwKLQkJCSAgICAgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3RvcikKJiM0MztzdGF0aWMgc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCwKJiM0MzsJCQkJICAgICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpCiB7CiAJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTsKIAlzc2l6ZV90IHJldCwgYnl0ZXM7CkBAIC0xMTQ3LDcgJiM0MzsxMTQwLDQwIEBAIHNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsCiAKIAlnb3RvIGRvbmU7CiB9Ci1FWFBPUlRfU1lNQk9MKHNwbGljZV9kaXJlY3RfdG9fYWN0b3IpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yIC0gc3BsaWNlIGZyb20gYSBmaWxlIHRocm91Z2ggYSBjYWxsZXImIzM5O3MgYWN0b3IKJiM0MzsgKiBAaW46CQlmaWxlIHRvIHNwbGljZSBmcm9tOyBtdXN0IGJlIHNlZWthYmxlIChGTU9ERV9MU0VFSykKJiM0MzsgKiBAc2Q6CQlzcGxpY2UgcGFyYW1ldGVycy4gVGhlIGNhbGxlciBzZXRzIEBzZC0mZ3Q7cG9zIGFuZAomIzQzOyAqCQlAc2QtJmd0O3RvdGFsX2xlbi4gQHNkLSZndDtwb3MgYWR2YW5jZXMgYXMgZGF0YSBpcyBjb25zdW1lZCwKJiM0MzsgKgkJYW5kIEBzZC0mZ3Q7dG90YWxfbGVuIGlzIG92ZXJ3cml0dGVuIHdpdGggdGhlIGxlbmd0aCBvZgomIzQzOyAqCQllYWNoIHJlYWQuCiYjNDM7ICogQGFjdG9yOgljb25zdW1lcyBlYWNoIHBpcGUtZnVsbCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mCiYjNDM7ICoJCWJ5dGVzIHRha2VuCiYjNDM7ICoKJiM0MzsgKiBEZXNjcmlwdGlvbjoKJiM0MzsgKiAgICBTcGxpY2UgZnJvbSBAaW4gdGhyb3VnaCBAYWN0b3IsIGZvciBhIGNhbGxlciB0aGF0IGNvbnN1bWVzCiYjNDM7ICogICAgdGhlIGRhdGEgaXRzZWxmIHJhdGhlciB0aGFuIHNlbmRpbmcgaXQgdG8gYSBzZWNvbmQgZmlsZS4KJiM0MzsgKiAgICBUaGlzIGhlbHBlciB2ZXJpZmllcyB0aGUgcmVhZCBhbmQgZW1pdHMgdGhlIGZzbm90aWZ5IGFjY2VzcwomIzQzOyAqICAgIGV2ZW50LiBkb19zcGxpY2VfZGlyZWN0KCkgbGVhdmVzIGJvdGggdG8gaXRzIGNhbGxlcnMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgYnl0ZXMgc3BsaWNlZCwgb3IgYSBuZWdhdGl2ZSBlcnJuby4KJiM0MzsgKi8KJiM0Mztzc2l6ZV90IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCwKJiM0MzsJCQkJICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpCiYjNDM7ewomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcndfdmVyaWZ5X2FyZWEoUkVBRCwgaW4sICZhbXA7c2QtJmd0O3Bvcywgc2QtJmd0O3RvdGFsX2xlbik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gc3BsaWNlX2RpcmVjdF90b19hY3Rvcihpbiwgc2QsIGFjdG9yKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKQomIzQzOwkJZnNub3RpZnlfYWNjZXNzKGluKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTCh2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3Rvcik7CiAKIHN0YXRpYyBpbnQgZGlyZWN0X3NwbGljZV9hY3RvcihzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAogCQkJICAgICAgIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwbGljZS5oIGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaAppbmRleCA5ZGVjNDg2MWQwOWY2Li40ZTkxZDAzZWQ2NDVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwbGljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3BsaWNlLmgKQEAgLTc5LDggJiM0Mzs3OSw4IEBAIHNzaXplX3QgYWRkX3RvX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpOwogc3NpemVfdCB2ZnNfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsCiAJCQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgbGVuLAogCQkJdW5zaWduZWQgaW50IGZsYWdzKTsKLXNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNwbGljZV9kZXNjICpzZCwKLQkJCSAgICAgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3Rvcik7CiYjNDM7c3NpemVfdCB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNwbGljZV9kZXNjICpzZCwKJiM0MzsJCQkJICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpOwogc3NpemVfdCBkb19zcGxpY2Uoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKm9mZl9pbiwgc3RydWN0IGZpbGUgKm91dCwKIAkJICBsb2ZmX3QgKm9mZl9vdXQsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7CiBzc2l6ZV90IGRvX3NwbGljZV9kaXJlY3Qoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsIHN0cnVjdCBmaWxlICpvdXQsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0ODMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gg4oCTIGl0JiMzOTtzIHRvdWNoaW5nIGEgZmV3IGtleSBhcmVhczogYGZzL25mc2QvdmZzLmNgLCBgZnMvc3BsaWNlLmNgLCBhbmQgdGhlIHJlbGF0ZWQgaGVhZGVyLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgYSByZW5hbWU6IGBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBpcyBub3cgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYC4gVGhhdCYjMzk7cyBub3QganVzdCBhIGNvc21ldGljIGNoYW5nZSwgaXQgbWVhbnMgdGhlIHNjb3BlIG9yIHJlc3BvbnNpYmlsaXR5IG1pZ2h0IGJlIHNoaWZ0aW5nLiBQbHVzLCB0aGV5JiMzOTt2ZSBidW5kbGVkIGByd192ZXJpZnlfYXJlYWAgYW5kIGBmc25vdGlmeV9hY2Nlc3NgICppbnRvKiB0aGF0IGZ1bmN0aW9uLiBPa2F5LCB0aGF0JiMzOTtzIGFscmVhZHkgaW50ZXJlc3RpbmcuCgpUaGUgbmV4dCB0aGluZyBJJiMzOTttIHNlZWluZyBpcyBhIGNoYW5nZSBpbiBgbmZzZF9zcGxpY2VfcmVhZGAuIEl0IG5vdyAqdXNlcyogYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCwgYW5kIHRoZSBwYXRjaCByZW1vdmVzIHRob3NlIGV4dHJhIGNoZWNrcyBmcm9tIGBuZnNkX2ZpbmlzaF9yZWFkYCBhbmQgYG5mc2Rfc3BsaWNlX3JlYWRgLiBUaGlzIGlzIHN0YXJ0aW5nIHRvIGxvb2sgbGlrZSBhIGNvbnNvbGlkYXRpb24gb2YgZnVuY3Rpb25hbGl0eSBvciBwZXJoYXBzIGEgY2hhbmdlIGluIGhvdyBwZXJtaXNzaW9ucyBvciBhY2Nlc3MgaXMgaGFuZGxlZCBkdXJpbmcgTkZTIHJlYWQgb3BlcmF0aW9ucy4KCkdpdmVuIHRoYXQgaXQmIzM5O3MgbW9kaWZ5aW5nIGJvdGggY29yZSBWRlMgbG9naWMgKHNwbGljZSkgKmFuZCogTkZTRCwgSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIGNlbnRyYWwgdG8gcmVhZCBvcGVyYXRpb25zIGZvciBORlMgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgoKTm93LCBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGF0IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYXJlLiBDbGVhcmx5LCBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIGlzIGEgcHJpbWUgY2FuZGlkYXRlLCBpdCBsb29rcyB0byBiZSBhbiBpbnRlcmVzdGluZyBWRlMgcGF0aCB0byBwcm9iZS4gYG5mc2Rfc3BsaWNlX3JlYWRgIGlzIGFub3RoZXIgb2J2aW91cyBvbmUuIEl0IGxvb2tzIGxpa2UgYG5mc2RfZmluaXNoX3JlYWRgICptaWdodCogYmUgaW52b2x2ZWQsIGJ1dCBzaW5jZSBpdCYjMzk7cyBzdGF0aWMsIEkgc2hvdWxkIGZvY3VzIG9uIGBuZnNkX3NwbGljZV9yZWFkYCwgd2hpY2ggY2FsbHMgaXQuCgpJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyBgZnMvbmZzZC92ZnMuY2AgZm9yIGBuZnNkX3NwbGljZV9yZWFkYCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIE5GU0Qgc3RhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZzZF9zcGxpY2VfcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25mc2QvdmZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzZC92ZnMuYz0xMDQ4PXN0YXRpYyBfX2JlMzIgbmZzZF9maW5pc2hfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4tLVxuZnMvbmZzZC92ZnMuYy0xMDY2LS8qKlxuZnMvbmZzZC92ZnMuYzoxMDY3OiAqIG5mc2Rfc3BsaWNlX3JlYWQgLSBQZXJmb3JtIGEgVkZTIHJlYWQgdXNpbmcgYSBzcGxpY2UgcGlwZVxuZnMvbmZzZC92ZnMuYy0xMDY4LSAqIEBycXN0cDogUlBDIHRyYW5zYWN0aW9uIGNvbnRleHRcbi0tXG5mcy9uZnNkL3Zmcy5jLTEwNzctICovXG5mcy9uZnNkL3Zmcy5jOjEwNzg6X19iZTMyIG5mc2Rfc3BsaWNlX3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxuZnMvbmZzZC92ZnMuYy0xMDc5LVx0XHRcdHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nICpjb3VudCxcbi0tXG5mcy9uZnNkL3Zmcy5jPTExMTA9bmZzZF9kaXJlY3RfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4tLVxuZnMvbmZzZC92ZnMuYy0xMTgyLSAqXG5mcy9uZnNkL3Zmcy5jOjExODM6ICogU29tZSBmaWxlc3lzdGVtcyBvciBzaXR1YXRpb25zIGNhbm5vdCB1c2UgbmZzZF9zcGxpY2VfcmVhZC4gVGhpc1xuZnMvbmZzZC92ZnMuYy0xMTg0LSAqIGZ1bmN0aW9uIGlzIHRoZSBzbGlnaHRseSBsZXNzLXBlcmZvcm1hbnQgZmFsbGJhY2sgZm9yIHRob3NlIGNhc2VzLlxuLS1cbmZzL25mc2QvdmZzLmM9MTQyMz1uZnNkX3Zmc193cml0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4tLVxuZnMvbmZzZC92ZnMuYy0xNTQxLSAqIFJldHVybiB2YWx1ZXM6XG5mcy9uZnNkL3Zmcy5jOjE1NDI6ICogICAldHJ1ZTogbmZzZF9zcGxpY2VfcmVhZCgpIG1heSBiZSB1c2VkXG5mcy9uZnNkL3Zmcy5jOjE1NDM6ICogICAlZmFsc2U6IG5mc2Rfc3BsaWNlX3JlYWQoKSBtdXN0IG5vdCBiZSB1c2VkXG5mcy9uZnNkL3Zmcy5jLTE1NDQtICpcbi0tXG5mcy9uZnNkL3Zmcy5jPTE1Nzk9X19iZTMyIG5mc2RfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4tLVxuZnMvbmZzZC92ZnMuYy0xNTkyLVx0aWYgKGZpbGUtXHUwMDNlZl9vcC1cdTAwM2VzcGxpY2VfcmVhZCBcdTAwMjZcdTAwMjYgbmZzZF9yZWFkX3NwbGljZV9vayhycXN0cCkpXG5mcy9uZnNkL3Zmcy5jOjE1OTM6XHRcdGVyciA9IG5mc2Rfc3BsaWNlX3JlYWQocnFzdHAsIGZocCwgZmlsZSwgb2Zmc2V0LCBjb3VudCwgZW9mKTtcbmZzL25mc2QvdmZzLmMtMTU5NC1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTAxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBTcGxpY2UgUGVyZm9ybWFuY2UgQm90dGxlbmVjayBpbiBORlMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgTkZTIHBlcmZvcm1hbmNlIGRpYWdub3N0aWNzLCBhbmQgdHdvIGZ1bmN0aW9ucyBpbiBwYXJ0aWN1bGFyIGhhdmUgY2F1Z2h0IG15IGV5ZTogYG5mc2Rfc3BsaWNlX3JlYWRgIGFuZCBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgLiBUaGUga2V5IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgbmVpdGhlciBvZiB0aGVzZSBpcyBkZWNsYXJlZCBgc3RhdGljYC4gVGhpcyBpc24mIzM5O3QgYSAqZ3VhcmFudGVlKiBvZiBhbiBpc3N1ZSwgYnV0IGl0IGRvZXMgbWVhbiB0aGV5JiMzOTtyZSBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIGFuZCBjYWxsYWJsZSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGluY3JlYXNpbmcgdGhlIGNoYW5jZSBvZiB1c2FnZSBvdXRzaWRlIG9mIHdoZXJlIHRoZXkgd2VyZSBvcmlnaW5hbGx5IGludGVuZGVkLCBvciB1c2VkIGRpZmZlcmVudGx5IHRoYW4gaW50ZW5kZWQgd2hpY2ggbWlnaHQgaW1wYWN0IHBlcmZvcm1hbmNlLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlLiBHaXZlbiB0aGF0IGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgc291bmRzIGxpa2UgYSBtb3JlIGdlbmVyYWwgVkZTIGZ1bmN0aW9uIHRoYXQgSSBrbm93IGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UsIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIG91dCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCB3aXRoaW4gYGZzL3NwbGljZS5jYC4gVGhpcyBmaWxlJiMzOTtzIGxpa2VseSB0byBzaGVkIHNvbWUgbGlnaHQgb24gdGhlIGRpcmVjdCBpbnRlcmFjdGlvbiBiZXR3ZWVuIFZGUyBzcGxpY2luZyBhbmQgdGhlIHVuZGVybHlpbmcgbmV0d29yayBmaWxlIHN5c3RlbSBiZWhhdmlvciBhbmQgaG93IGBuZnNkX3NwbGljZV9yZWFkYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgd2UgbWlnaHQgYmUgaGFuZGxpbmcgc3BsaWNlZCBkYXRhIGluIE5GUy4gQnkgZXhhbWluaW5nIHRoZSBjb2RlIGhlcmUsIEkgY2FuIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGRhdGEgZmxvdyBhbmQgaG93IHRoZSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG1pZ2h0IHBsYXkgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvc3BsaWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc3BsaWNlLmM9MTAxOD1zdGF0aWMgc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCxcbi0tXG5mcy9zcGxpY2UuYy0xMTQ0LS8qKlxuZnMvc3BsaWNlLmM6MTE0NTogKiB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvciAtIHNwbGljZSBmcm9tIGEgZmlsZSB0aHJvdWdoIGEgY2FsbGVyJiMzOTtzIGFjdG9yXG5mcy9zcGxpY2UuYy0xMTQ2LSAqIEBpbjpcdFx0ZmlsZSB0byBzcGxpY2UgZnJvbTsgbXVzdCBiZSBzZWVrYWJsZSAoRk1PREVfTFNFRUspXG4tLVxuZnMvc3BsaWNlLmMtMTE2MS0gKi9cbmZzL3NwbGljZS5jOjExNjI6c3NpemVfdCB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG5mcy9zcGxpY2UuYy0xMTYzLVx0XHRcdFx0ICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpXG4tLVxuZnMvc3BsaWNlLmMtMTE3NS19XG5mcy9zcGxpY2UuYzoxMTc2OkVYUE9SVF9TWU1CT0wodmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3IpO1xuZnMvc3BsaWNlLmMtMTE3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTQzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRm9jdXNpbmcgb24gRWZmaWNpZW50IERhdGEgVHJhbnNmZXJzIGluIE5GUyoqCgpSaWdodCwgc28gSSYjMzk7bSBob21pbmcgaW4gb24gc29tZSBjcml0aWNhbCBhcmVhcyBmb3IgTkZTIHBlcmZvcm1hbmNlLiBUaGUga2V5IGZ1bmN0aW9ucyBJJiMzOTttIGlkZW50aWZ5aW5nIGFzIGNyaXRpY2FsIGZvY3VzIHN5bWJvbHMgZm9yIGRlZXBlciBhbmFseXNpcyBhcmUgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBhbmQgYG5mc2Rfc3BsaWNlX3JlYWRgLiBUaGVzZSBhcmUgd2hlcmUgdGhlIHJ1YmJlciByZWFsbHkgbWVldHMgdGhlIHJvYWQgaW4gdGVybXMgb2YgemVyby1jb3B5IGRhdGEgdHJhbnNmZXIsIHBhcnRpY3VsYXJseSBpbiB0aGUgc2VydmVyLXNpZGUgTkZTIGltcGxlbWVudGF0aW9uLgoKVGhlIG92ZXJhbGwgY29udGV4dCBoZXJlIGlzIHRoYXQgSSYjMzk7bSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBvcHRpbWl6aW5nIHRoZSBORlMgKnNlcnZlciog4oCTIHNvIEkmIzM5O20gcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgTkZTRCBjb25maWd1cmF0aW9uIGZsYWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlNEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmZzZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25mc2QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvbmZzZC9LY29uZmlnOjI6Y29uZmlnIE5GU0RcbmZzL25mc2QvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTM5LVxuZnMvbmZzZC9LY29uZmlnOjQwOmNvbmZpZyBORlNEX1YyXG5mcy9uZnNkL0tjb25maWctNDEtXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gMiAoREVQUkVDQVRFRClcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctNTAtXG5mcy9uZnNkL0tjb25maWc6NTE6Y29uZmlnIE5GU0RfVjJfQUNMXG5mcy9uZnNkL0tjb25maWctNTItXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgdGhlIE5GU3YyIEFDTCBwcm90b2NvbCBleHRlbnNpb25cJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctNTQtXG5mcy9uZnNkL0tjb25maWc6NTU6Y29uZmlnIE5GU0RfVjNfQUNMXG5mcy9uZnNkL0tjb25maWctNTYtXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgdGhlIE5GU3YzIEFDTCBwcm90b2NvbCBleHRlbnNpb25cJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctNzYtXG5mcy9uZnNkL0tjb25maWc6Nzc6Y29uZmlnIE5GU0RfVjRcbmZzL25mc2QvS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiA0XCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTkzLVxuZnMvbmZzZC9LY29uZmlnOjk0OmNvbmZpZyBORlNEX1BORlNcbmZzL25mc2QvS2NvbmZpZy05NS1cdGJvb2xcbmZzL25mc2QvS2NvbmZpZy05Ni1cbmZzL25mc2QvS2NvbmZpZzo5Nzpjb25maWcgTkZTRF9CTE9DS0xBWU9VVFxuZnMvbmZzZC9LY29uZmlnLTk4LVx0Ym9vbCBcJiMzNDtORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIGJsb2NrIGxheW91dHNcJiMzNDtcbi0tXG5mcy9uZnNkL0tjb25maWctMTA5LVxuZnMvbmZzZC9LY29uZmlnOjExMDpjb25maWcgTkZTRF9TQ1NJTEFZT1VUXG5mcy9uZnNkL0tjb25maWctMTExLVx0Ym9vbCBcJiMzNDtORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIFNDU0kgbGF5b3V0c1wmIzM0O1xuLS1cbmZzL25mc2QvS2NvbmZpZy0xMjMtXG5mcy9uZnNkL0tjb25maWc6MTI0OmNvbmZpZyBORlNEX0ZMRVhGSUxFTEFZT1VUXG5mcy9uZnNkL0tjb25maWctMTI1LVx0Ym9vbCBcJiMzNDtORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIEZsZXggRmlsZSBsYXlvdXRzXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTE0MC1cbmZzL25mc2QvS2NvbmZpZzoxNDE6Y29uZmlnIE5GU0RfVjRfMl9JTlRFUl9TU0NcbmZzL25mc2QvS2NvbmZpZy0xNDItXHRib29sIFwmIzM0O05GU3Y0LjIgaW50ZXIgc2VydmVyIHRvIHNlcnZlciBDT1BZXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTE1MC1cbmZzL25mc2QvS2NvbmZpZzoxNTE6Y29uZmlnIE5GU0RfVjRfU0VDVVJJVFlfTEFCRUxcbmZzL25mc2QvS2NvbmZpZy0xNTItXHRib29sIFwmIzM0O1Byb3ZpZGUgU2VjdXJpdHkgTGFiZWwgc3VwcG9ydCBmb3IgTkZTdjQgc2VydmVyXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTE2My1cbmZzL25mc2QvS2NvbmZpZzoxNjQ6Y29uZmlnIE5GU0RfTEVHQUNZX0NMSUVOVF9UUkFDS0lOR1xuZnMvbmZzZC9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBsZWdhY3kgTkZTdjQgY2xpZW50IHRyYWNraW5nIG1ldGhvZHMgKERFUFJFQ0FURUQpXCYjMzQ7XG4tLVxuZnMvbmZzZC9LY29uZmlnLTE3OS1cbmZzL25mc2QvS2NvbmZpZzoxODA6Y29uZmlnIE5GU0RfVjRfUE9TSVhfQUNMU1xuZnMvbmZzZC9LY29uZmlnLTE4MS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBORlN2NCBQT1NJWCBkcmFmdCBBQ0xzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYyMgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIE5GUyBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgdGhlIHF1ZXN0aW9uIGF0IGhhbmQgaXMgd2hldGhlciB1c2luZyBgTkZTRGAgaXMgc3VmZmljaWVudCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHRhc2suIEJlZm9yZSBqdW1waW5nIHRvIGFueSBjb25jbHVzaW9ucywgSSBuZWVkIHRvIHRob3JvdWdobHkgYXNzZXNzIGl0cyBkZXBlbmRlbmNpZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQgZG9lcyBgTkZTRGAgcmVseSBvbj8mIzM0OyBJIGluc3RpbmN0aXZlbHkga25vdyB0aGF0IGBORlNEYCBpcyBpbnRyaWNhdGVseSBsaW5rZWQgdG8gdGhlIHVuZGVybHlpbmcgbmV0d29yayBpbmZyYXN0cnVjdHVyZSAoYElORVRgKSwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gT2YgY291cnNlLCBmaWxlIGxvY2tpbmcgKGBGSUxFX0xPQ0tJTkdgKSBpcyBhIGtleSBjb21wb25lbnQgZm9yIE5GUywgZW5zdXJpbmcgZGF0YSBpbnRlZ3JpdHkgaW4gYSBkaXN0cmlidXRlZCBlbnZpcm9ubWVudCwgc28gdGhhdCYjMzk7cyBleHBlY3RlZC4gRmluYWxseSwgdGhlIGluY2x1c2lvbiBvZiBgRlNOT1RJRllgIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBiZWNhdXNlIGl0IHdvdWxkIHN1Z2dlc3QgdGhhdCB0aGVyZSBtYXkgYmUgYSBuZWVkIGZvciBjaGFuZ2Ugbm90aWZpY2F0aW9ucyB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtIGFzIHdlbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZnNkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmZzZC9LY29uZmlnPTI9Y29uZmlnIE5GU0RcbmZzL25mc2QvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0XCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6NDpcdGRlcGVuZHMgb24gSU5FVFxuZnMvbmZzZC9LY29uZmlnOjU6XHRkZXBlbmRzIG9uIEZJTEVfTE9DS0lOR1xuZnMvbmZzZC9LY29uZmlnOjY6XHRkZXBlbmRzIG9uIEZTTk9USUZZXG5mcy9uZnNkL0tjb25maWctNy1cdHNlbGVjdCBDUkMzMlxuLS1cbmZzL25mc2QvS2NvbmZpZy0xNi1cdHNlbGVjdCBORlNfQUNMX1NVUFBPUlQgaWYgTkZTRF9WM19BQ0xcbmZzL25mc2QvS2NvbmZpZzoxNzpcdGRlcGVuZHMgb24gTVVMVElVU0VSXG5mcy9uZnNkL0tjb25maWctMTgtXHRoZWxwXG4tLVxuZnMvbmZzZC9LY29uZmlnPTQwPWNvbmZpZyBORlNEX1YyXG5mcy9uZnNkL0tjb25maWctNDEtXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gMiAoREVQUkVDQVRFRClcJiMzNDtcbmZzL25mc2QvS2NvbmZpZzo0MjpcdGRlcGVuZHMgb24gTkZTRFxuZnMvbmZzZC9LY29uZmlnLTQzLVx0ZGVmYXVsdCBuXG4tLVxuZnMvbmZzZC9LY29uZmlnPTUxPWNvbmZpZyBORlNEX1YyX0FDTFxuZnMvbmZzZC9LY29uZmlnLTUyLVx0Ym9vbCBcJiMzNDtORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MiBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6NTM6XHRkZXBlbmRzIG9uIE5GU0RfVjJcbmZzL25mc2QvS2NvbmZpZy01NC1cbmZzL25mc2QvS2NvbmZpZz01NT1jb25maWcgTkZTRF9WM19BQ0xcbmZzL25mc2QvS2NvbmZpZy01Ni1cdGJvb2wgXCYjMzQ7TkZTIHNlcnZlciBzdXBwb3J0IGZvciB0aGUgTkZTdjMgQUNMIHByb3RvY29sIGV4dGVuc2lvblwmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjU3Olx0ZGVwZW5kcyBvbiBORlNEXG5mcy9uZnNkL0tjb25maWctNTgtXHRoZWxwXG4tLVxuZnMvbmZzZC9LY29uZmlnPTc3PWNvbmZpZyBORlNEX1Y0XG5mcy9uZnNkL0tjb25maWctNzgtXHRib29sIFwmIzM0O05GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgTkZTIHZlcnNpb24gNFwmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjc5Olx0ZGVwZW5kcyBvbiBORlNEIFx1MDAyNlx1MDAyNiBQUk9DX0ZTXG5mcy9uZnNkL0tjb25maWctODAtXHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4tLVxuZnMvbmZzZC9LY29uZmlnPTk3PWNvbmZpZyBORlNEX0JMT0NLTEFZT1VUXG5mcy9uZnNkL0tjb25maWctOTgtXHRib29sIFwmIzM0O05GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgYmxvY2sgbGF5b3V0c1wmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjk5Olx0ZGVwZW5kcyBvbiBORlNEX1Y0IFx1MDAyNlx1MDAyNiBCTE9DS1xuZnMvbmZzZC9LY29uZmlnLTEwMC1cdHNlbGVjdCBORlNEX1BORlNcbi0tXG5mcy9uZnNkL0tjb25maWc9MTEwPWNvbmZpZyBORlNEX1NDU0lMQVlPVVRcbmZzL25mc2QvS2NvbmZpZy0xMTEtXHRib29sIFwmIzM0O05GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgU0NTSSBsYXlvdXRzXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6MTEyOlx0ZGVwZW5kcyBvbiBORlNEX1Y0IFx1MDAyNlx1MDAyNiBCTE9DS1xuZnMvbmZzZC9LY29uZmlnLTExMy1cdHNlbGVjdCBORlNEX1BORlNcbi0tXG5mcy9uZnNkL0tjb25maWc9MTI0PWNvbmZpZyBORlNEX0ZMRVhGSUxFTEFZT1VUXG5mcy9uZnNkL0tjb25maWctMTI1LVx0Ym9vbCBcJiMzNDtORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIEZsZXggRmlsZSBsYXlvdXRzXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6MTI2Olx0ZGVwZW5kcyBvbiBORlNEX1Y0XG5mcy9uZnNkL0tjb25maWctMTI3LVx0c2VsZWN0IE5GU0RfUE5GU1xuLS1cbmZzL25mc2QvS2NvbmZpZz0xNDE9Y29uZmlnIE5GU0RfVjRfMl9JTlRFUl9TU0NcbmZzL25mc2QvS2NvbmZpZy0xNDItXHRib29sIFwmIzM0O05GU3Y0LjIgaW50ZXIgc2VydmVyIHRvIHNlcnZlciBDT1BZXCYjMzQ7XG5mcy9uZnNkL0tjb25maWc6MTQzOlx0ZGVwZW5kcyBvbiBORlNEX1Y0IFx1MDAyNlx1MDAyNiBORlNfVjRfMlxuZnMvbmZzZC9LY29uZmlnLTE0NC1cdGhlbHBcbi0tXG5mcy9uZnNkL0tjb25maWc9MTUxPWNvbmZpZyBORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMXG5mcy9uZnNkL0tjb25maWctMTUyLVx0Ym9vbCBcJiMzNDtQcm92aWRlIFNlY3VyaXR5IExhYmVsIHN1cHBvcnQgZm9yIE5GU3Y0IHNlcnZlclwmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjE1MzpcdGRlcGVuZHMgb24gTkZTRF9WNCBcdTAwMjZcdTAwMjYgU0VDVVJJVFlcbmZzL25mc2QvS2NvbmZpZy0xNTQtXHRoZWxwXG4tLVxuZnMvbmZzZC9LY29uZmlnPTE2ND1jb25maWcgTkZTRF9MRUdBQ1lfQ0xJRU5UX1RSQUNLSU5HXG5mcy9uZnNkL0tjb25maWctMTY1LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGxlZ2FjeSBORlN2NCBjbGllbnQgdHJhY2tpbmcgbWV0aG9kcyAoREVQUkVDQVRFRClcJiMzNDtcbmZzL25mc2QvS2NvbmZpZzoxNjY6XHRkZXBlbmRzIG9uIE5GU0RfVjRcbmZzL25mc2QvS2NvbmZpZy0xNjctXHRkZWZhdWx0IG5cbi0tXG5mcy9uZnNkL0tjb25maWc9MTgwPWNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcbmZzL25mc2QvS2NvbmZpZy0xODEtXHRib29sIFwmIzM0O1N1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1wmIzM0O1xuZnMvbmZzZC9LY29uZmlnOjE4MjpcdGRlcGVuZHMgb24gTkZTRF9WNFxuZnMvbmZzZC9LY29uZmlnLTE4My1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDY4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTkZTRCBhbmQgU3BsaWNlLmMqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgTkZTRGAgaGVyZS4gTXkgdGhpbmtpbmcgaXMgdGhhdCBgTkZTRGAmIzM5O3MgbGlrZWx5IGRlcGVuZGVuY2llcyBhcmUgaW1wb3J0YW50LCBhbmQgcmlnaHQgbm93IEkgdGhpbmsgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBpcyB0aGUgZnVuY3Rpb24gb2YgaW50ZXJlc3QuIEkgcmVjYWxsIHRoYXQgbGl2ZXMgaW4gYGZzL3NwbGljZS5jYC4gTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBpcyBgZnMvc3BsaWNlLmNgIGFsd2F5cyBidWlsdD8gSWYgaXQgKmlzKiBhbHdheXMgYnVpbHQsIHRoZW4gdGhhdCBzaW1wbGlmaWVzIGEgbG90IG9mIHRoaW5ncy4gSWYgbm90LCB0aGVuIEkgbmVlZCB0byBjb25zaWRlciBpdHMgYnVpbGQgY29uZmlndXJhdGlvbnMgbW9yZSBjYXJlZnVsbHkuIFRpbWUgdG8gY2hlY2sgdGhvc2UgYnVpbGQgZGVwZW5kZW5jaWVzIGFuZCBtYWtlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NwbGljZS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvTWFrZWZpbGU9MTA9b2JqLXkgOj1cdG9wZW4ubyByZWFkX3dyaXRlLm8gZmlsZV90YWJsZS5vIHN1cGVyLm8gXFxcbi0tXG5mcy9NYWtlZmlsZS0xNC1cdFx0c2VxX2ZpbGUubyB4YXR0ci5vIGxpYmZzLm8gZnMtd3JpdGViYWNrLm8gXFxcbmZzL01ha2VmaWxlOjE1Olx0XHRwbm9kZS5vIHNwbGljZS5vIHN5bmMubyB1dGltZXMubyBkX3BhdGgubyBcXFxuZnMvTWFrZWZpbGUtMTYtXHRcdHN0YWNrLm8gZnNfc3RydWN0Lm8gc3RhdGZzLm8gZnNfcGluLm8gbnNmcy5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUtcmVsYXRlZCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBmcy9zcGxpY2UuY2AgYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCkFscmlnaHQsIHNvIGBmcy9zcGxpY2UuY2AgaXMgYWx3YXlzIGJ1aWx0IOKAkyB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gSXQgc2ltcGxpZmllcyBteSBpbml0aWFsIGFuYWx5c2lzLiBOb3cgSSBjYW4gY29uY2VudHJhdGUgc3BlY2lmaWNhbGx5IG9uIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgYW5kIGBuZnNkX3NwbGljZV9yZWFkYC4gQW5kIHRoZSBmYWN0IHRoYXQgdGhlIE5GU0QgY29uZmlnIGlzIGFjdGl2ZSwgd2hpY2ggaXMgaW1wb3J0YW50IGNvbnRleHQuCgpCdXQgSSByZWFsbHkgc2hvdWxkIGNvbmZpcm0gdGhhdCB0aG9zZSBhcmUgKmFsbCogdGhlIGRpcmVjdCBjYWxsZXJzIG9mIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAuIEkgd2FudCB0byBiZSB0aG9yb3VnaCBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9yIGludGVncmF0aW9ucy4gVGltZSBmb3IgYW5vdGhlciBwYXNzIHRocm91Z2ggdGhlIGNvZGViYXNlIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSXQmIzM5O3MgZWFzeSB0byBvdmVybG9vayB0aGluZ3MgaW4gdGhlc2Uga2luZHMgb2YgaW52ZXN0aWdhdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc3VjaCBhIGNvcmUgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25mc2QvdmZzLmM9MTA3OD1fX2JlMzIgbmZzZF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4tLVxuZnMvbmZzZC92ZnMuYy0xMDkwLVx0dHJhY2VfbmZzZF9yZWFkX3NwbGljZShycXN0cCwgZmhwLCBvZmZzZXQsICpjb3VudCk7XG5mcy9uZnNkL3Zmcy5jOjEwOTE6XHRob3N0X2VyciA9IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsIFx1MDAyNnNkLFxuZnMvbmZzZC92ZnMuYy0xMDkyLVx0XHRcdFx0XHQgICAgICBuZnNkX2RpcmVjdF9zcGxpY2VfYWN0b3IpO1xuLS1cbmZzL3NwbGljZS5jPTEwMTg9c3RhdGljIHNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4tLVxuZnMvc3BsaWNlLmMtMTE0NC0vKipcbmZzL3NwbGljZS5jOjExNDU6ICogdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3IgLSBzcGxpY2UgZnJvbSBhIGZpbGUgdGhyb3VnaCBhIGNhbGxlciYjMzk7cyBhY3RvclxuZnMvc3BsaWNlLmMtMTE0Ni0gKiBAaW46XHRcdGZpbGUgdG8gc3BsaWNlIGZyb207IG11c3QgYmUgc2Vla2FibGUgKEZNT0RFX0xTRUVLKVxuLS1cbmZzL3NwbGljZS5jLTExNjEtICovXG5mcy9zcGxpY2UuYzoxMTYyOnNzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLFxuZnMvc3BsaWNlLmMtMTE2My1cdFx0XHRcdCAgIHNwbGljZV9kaXJlY3RfYWN0b3IgKmFjdG9yKVxuLS1cbmZzL3NwbGljZS5jLTExNzUtfVxuZnMvc3BsaWNlLmM6MTE3NjpFWFBPUlRfU1lNQk9MKHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKTtcbmZzL3NwbGljZS5jLTExNzctXG4tLVxuaW5jbHVkZS9saW51eC9zcGxpY2UuaD03OT1zc2l6ZV90IHZmc19zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcbi0tXG5pbmNsdWRlL2xpbnV4L3NwbGljZS5oLTgxLVx0XHRcdHVuc2lnbmVkIGludCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L3NwbGljZS5oOjgyOnNzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG5pbmNsdWRlL2xpbnV4L3NwbGljZS5oLTgzLVx0XHRcdFx0ICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjMyCgkJCQkJCQlvdXRwdXQ6IDEwOQoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBDb3ZlcmFnZSoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGNhbGxpbmcgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCByaWdodCBub3cgaXMgYG5mc2Rfc3BsaWNlX3JlYWRgLiBMZXQmIzM5O3MganVzdCBkbyBhIGZpbmFsIHNhbml0eSBjaGVjayB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBldmVyeXRoaW5nIGlzIGluIG9yZGVyLgoKVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIHRydWUsIHdoaWNoIEkgY29uY3VyIHdpdGggZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcy4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBhcHByb3ByaWF0ZWx5IHNjb3BlZCB0byB0aGUga2V5IGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXM6IGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgYW5kIGBuZnNkX3NwbGljZV9yZWFkYC4gQW5kIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIHNlbnNpYmxlIOKAkyBlbmFibGluZyBgTkZTRGAgaXMgbmVjZXNzYXJ5IHRvIGFjdHVhbGx5IGV4ZXJjaXNlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eS4KCk15IHJlYXNvbmluZz8gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgY29yZSBWRlMgbG9naWMgZm9yIHNwbGljaW5nIGFuZCwgY3J1Y2lhbGx5LCB0aGUgTkZTRCByZWFkIHBhdGhzLiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIEFQSSBhbmQgdGhlIHVwZGF0ZWQgYG5mc2Rfc3BsaWNlX3JlYWRgIGNhbGwgY2xlYXJseSByZXByZXNlbnQgcmVhY2hhYmxlLCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlc2UgY3JpdGljYWwgY29kZSBwYXRocy4gVGhlc2UgYXJlIGV4YWN0bHkgdGhlIGtpbmQgb2YgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZGVlcCBmdXp6aW5nLiBJJiMzOTttIHJlYXNvbmFibHkgY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GU0QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvciYjMzQ7LAogICAgJiMzNDtuZnNkX3NwbGljZV9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGxvZ2ljIGZvciBzcGxpY2luZyBhbmQgTkZTRCByZWFkIHBhdGhzLCBpbnRyb2R1Y2luZyBhIG5ldyBBUEkgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBhbmQgdXBkYXRpbmcgYG5mc2Rfc3BsaWNlX3JlYWRgIHRvIHVzZSBpdC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GU0QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvciYjMzQ7LAogICAgJiMzNDtuZnNkX3NwbGljZV9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGxvZ2ljIGZvciBzcGxpY2luZyBhbmQgTkZTRCByZWFkIHBhdGhzLCBpbnRyb2R1Y2luZyBhIG5ldyBBUEkgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBhbmQgdXBkYXRpbmcgYG5mc2Rfc3BsaWNlX3JlYWRgIHRvIHVzZSBpdC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBpbiBgZnMvc3BsaWNlLmNgIHRoYXQgY29uc29saWRhdGVzIGV4aXN0aW5nIGNhbGxzIHRvIGByd192ZXJpZnlfYXJlYWAsIGBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCwgYW5kIGBmc25vdGlmeV9hY2Nlc3NgLiBJdCB0aGVuIHVwZGF0ZXMgYG5mc2Rfc3BsaWNlX3JlYWRgIGluIGBmcy9uZnNkL3Zmcy5jYCB0byB1c2UgdGhpcyBuZXcgaGVscGVyLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHN0cnVjdHVyYWwgcmVmYWN0b3JpbmcgdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBjaGFuZ2VzIHRvIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGUgbW9kaWZpY2F0aW9ucyBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB0aGF0IG1pZ2h0IHRoZW9yZXRpY2FsbHkgYXJpc2UgZnJvbSBWRlMgY2hhbmdlcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODJlOWY1NWViOTI5ODgyOWVmZGJiMzIyNGU3N2NkNDdjNjU4YTUyYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDE4OjI3OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC92ZnMuYyBiL2ZzL25mc2QvdmZzLmMKaW5kZXggMWU4OWM3ZmY5NDkzYi4uYTQ2NWUyNzZkNjc1NCAxMDA2NDQKLS0tIGEvZnMvbmZzZC92ZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uZnNkL3Zmcy5jCkBAIC0xMDU1LDcgJiM0MzsxMDU1LDYgQEAgc3RhdGljIF9fYmUzMiBuZnNkX2ZpbmlzaF9yZWFkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCwKIAkJbmZzZF9zdGF0c19pb19yZWFkX2FkZChubiwgZmhwLSZndDtmaF9leHBvcnQsIGhvc3RfZXJyKTsKIAkJKmVvZiA9IG5mc2RfZW9mX29uX3JlYWQoZmlsZSwgb2Zmc2V0LCBob3N0X2VyciwgKmNvdW50KTsKIAkJKmNvdW50ID0gaG9zdF9lcnI7Ci0JCWZzbm90aWZ5X2FjY2VzcyhmaWxlKTsKIAkJdHJhY2VfbmZzZF9yZWFkX2lvX2RvbmUocnFzdHAsIGZocCwgb2Zmc2V0LCAqY291bnQpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewpAQCAtMTA4OSwxMCAmIzQzOzEwODgsOCBAQCBfX2JlMzIgbmZzZF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsCiAJc3NpemVfdCBob3N0X2VycjsKIAogCXRyYWNlX25mc2RfcmVhZF9zcGxpY2UocnFzdHAsIGZocCwgb2Zmc2V0LCAqY291bnQpOwotCWhvc3RfZXJyID0gcndfdmVyaWZ5X2FyZWEoUkVBRCwgZmlsZSwgJmFtcDtvZmZzZXQsICpjb3VudCk7Ci0JaWYgKCFob3N0X2VycikKLQkJaG9zdF9lcnIgPSBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsICZhbXA7c2QsCi0JCQkJCQkgIG5mc2RfZGlyZWN0X3NwbGljZV9hY3Rvcik7CiYjNDM7CWhvc3RfZXJyID0gdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3IoZmlsZSwgJmFtcDtzZCwKJiM0MzsJCQkJCSAgICAgIG5mc2RfZGlyZWN0X3NwbGljZV9hY3Rvcik7CiAJcmV0dXJuIG5mc2RfZmluaXNoX3JlYWQocnFzdHAsIGZocCwgZmlsZSwgb2Zmc2V0LCBjb3VudCwgZW9mLCBob3N0X2Vycik7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3NwbGljZS5jIGIvZnMvc3BsaWNlLmMKaW5kZXggOWQ4ZjYzZTJmZDFhYi4uNDJhZDcxMmEwZjRkYSAxMDA2NDQKLS0tIGEvZnMvc3BsaWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3BsaWNlLmMKQEAgLTEwMDksMjEgJiM0MzsxMDA5LDE0IEBAIHNzaXplX3QgdmZzX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLAogfQogRVhQT1JUX1NZTUJPTF9HUEwodmZzX3NwbGljZV9yZWFkKTsKIAotLyoqCi0gKiBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yIC0gc3BsaWNlcyBkYXRhIGRpcmVjdGx5IGJldHdlZW4gdHdvIG5vbi1waXBlcwotICogQGluOgkJZmlsZSB0byBzcGxpY2UgZnJvbQotICogQHNkOgkJYWN0b3IgaW5mb3JtYXRpb24gb24gd2hlcmUgdG8gc3BsaWNlIHRvCi0gKiBAYWN0b3I6CWhhbmRsZXMgdGhlIGRhdGEgc3BsaWNpbmcKLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgaGVscGVyIHRvIHNwbGljZSBkaXJlY3RseSBiZXR3ZWVuIHR3bwotICogICAgcG9pbnRzLCB3aXRob3V0IHJlcXVpcmluZyBhbiBleHBsaWNpdCBwaXBlLiBJbnRlcm5hbGx5IGFuIGFsbG9jYXRlZAotICogICAgcGlwZSBpcyBjYWNoZWQgaW4gdGhlIHByb2Nlc3MsIGFuZCByZXVzZWQgZHVyaW5nIHRoZSBsaWZldGltZSBvZgotICogICAgdGhhdCBwcm9jZXNzLgotICoKJiM0MzsvKgomIzQzOyAqIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgaGVscGVyIHRvIHNwbGljZSBkaXJlY3RseSBiZXR3ZWVuIHR3bwomIzQzOyAqIHBvaW50cywgd2l0aG91dCByZXF1aXJpbmcgYW4gZXhwbGljaXQgcGlwZS4gSW50ZXJuYWxseSBhbiBhbGxvY2F0ZWQKJiM0MzsgKiBwaXBlIGlzIGNhY2hlZCBpbiB0aGUgcHJvY2VzcywgYW5kIHJldXNlZCBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mCiYjNDM7ICogdGhhdCBwcm9jZXNzLgogICovCi1zc2l6ZV90IHNwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLAotCQkJICAgICAgIHNwbGljZV9kaXJlY3RfYWN0b3IgKmFjdG9yKQomIzQzO3N0YXRpYyBzc2l6ZV90IHNwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLAomIzQzOwkJCQkgICAgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3RvcikKIHsKIAlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOwogCXNzaXplX3QgcmV0LCBieXRlczsKQEAgLTExNDcsNyAmIzQzOzExNDAsNDAgQEAgc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCwKIAogCWdvdG8gZG9uZTsKIH0KLUVYUE9SVF9TWU1CT0woc3BsaWNlX2RpcmVjdF90b19hY3Rvcik7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3IgLSBzcGxpY2UgZnJvbSBhIGZpbGUgdGhyb3VnaCBhIGNhbGxlciYjMzk7cyBhY3RvcgomIzQzOyAqIEBpbjoJCWZpbGUgdG8gc3BsaWNlIGZyb207IG11c3QgYmUgc2Vla2FibGUgKEZNT0RFX0xTRUVLKQomIzQzOyAqIEBzZDoJCXNwbGljZSBwYXJhbWV0ZXJzLiBUaGUgY2FsbGVyIHNldHMgQHNkLSZndDtwb3MgYW5kCiYjNDM7ICoJCUBzZC0mZ3Q7dG90YWxfbGVuLiBAc2QtJmd0O3BvcyBhZHZhbmNlcyBhcyBkYXRhIGlzIGNvbnN1bWVkLAomIzQzOyAqCQlhbmQgQHNkLSZndDt0b3RhbF9sZW4gaXMgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgbGVuZ3RoIG9mCiYjNDM7ICoJCWVhY2ggcmVhZC4KJiM0MzsgKiBAYWN0b3I6CWNvbnN1bWVzIGVhY2ggcGlwZS1mdWxsIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YKJiM0MzsgKgkJYnl0ZXMgdGFrZW4KJiM0MzsgKgomIzQzOyAqIERlc2NyaXB0aW9uOgomIzQzOyAqICAgIFNwbGljZSBmcm9tIEBpbiB0aHJvdWdoIEBhY3RvciwgZm9yIGEgY2FsbGVyIHRoYXQgY29uc3VtZXMKJiM0MzsgKiAgICB0aGUgZGF0YSBpdHNlbGYgcmF0aGVyIHRoYW4gc2VuZGluZyBpdCB0byBhIHNlY29uZCBmaWxlLgomIzQzOyAqICAgIFRoaXMgaGVscGVyIHZlcmlmaWVzIHRoZSByZWFkIGFuZCBlbWl0cyB0aGUgZnNub3RpZnkgYWNjZXNzCiYjNDM7ICogICAgZXZlbnQuIGRvX3NwbGljZV9kaXJlY3QoKSBsZWF2ZXMgYm90aCB0byBpdHMgY2FsbGVycy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogVGhlIG51bWJlciBvZiBieXRlcyBzcGxpY2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLgomIzQzOyAqLwomIzQzO3NzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLAomIzQzOwkJCQkgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3RvcikKJiM0Mzt7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByd192ZXJpZnlfYXJlYShSRUFELCBpbiwgJmFtcDtzZC0mZ3Q7cG9zLCBzZC0mZ3Q7dG90YWxfbGVuKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGluLCBzZCwgYWN0b3IpOwomIzQzOwlpZiAocmV0ICZndDs9IDApCiYjNDM7CQlmc25vdGlmeV9hY2Nlc3MoaW4pOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKTsKIAogc3RhdGljIGludCBkaXJlY3Rfc3BsaWNlX2FjdG9yKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCiAJCQkgICAgICAgc3RydWN0IHNwbGljZV9kZXNjICpzZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmggYi9pbmNsdWRlL2xpbnV4L3NwbGljZS5oCmluZGV4IDlkZWM0ODYxZDA5ZjYuLjRlOTFkMDNlZDY0NWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaApAQCAtNzksOCAmIzQzOzc5LDggQEAgc3NpemVfdCBhZGRfdG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1Zik7CiBzc2l6ZV90IHZmc19zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcywKIAkJCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCBsZW4sCiAJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOwotc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLAotCQkJICAgICAgIHNwbGljZV9kaXJlY3RfYWN0b3IgKmFjdG9yKTsKJiM0Mztzc2l6ZV90IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLAomIzQzOwkJCQkgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3Rvcik7CiBzc2l6ZV90IGRvX3NwbGljZShzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqb2ZmX2luLCBzdHJ1Y3QgZmlsZSAqb3V0LAogCQkgIGxvZmZfdCAqb2ZmX291dCwgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKTsKIHNzaXplX3QgZG9fc3BsaWNlX2RpcmVjdChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcywgc3RydWN0IGZpbGUgKm91dCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0ODAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgYW5kIENvZGUgTW92ZW1lbnQgaW4gU3BsaWNlIE9wZXJhdGlvbnMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZhY3RvcmluZyBvZiB0aGUgc3BsaWNlIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgZGlyZWN0LXRvLWFjdG9yIG9wZXJhdGlvbnMuIEl0JiMzOTtzIGFkZGluZyBhIG5ldyBmdW5jdGlvbiwgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCwgd2l0aGluIGBmcy9zcGxpY2UuY2AgYW5kIHRoZW4gcmVwbGFjaW5nIHRoZSBleGlzdGluZyBgc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgY2FsbCB3aXRoIGl0IGluIGBmcy9uZnNkL3Zmcy5jYC4gVGhlIG1haW4gbW90aXZhdGlvbiBzZWVtcyB0byBiZSB0byBjZW50cmFsaXplIGFuZCBlbmNhcHN1bGF0ZSBzb21lIGNoZWNrcyBhbmQgbm90aWZpY2F0aW9ucy4gSSYjMzk7bSBzZWVpbmcgdGhhdCBgcndfdmVyaWZ5X2FyZWFgIGFuZCBgZnNub3RpZnlfYWNjZXNzYCBhcmUgYmVpbmcgbW92ZWQgaW50byB0aGlzIG5ldyBoZWxwZXIgZnVuY3Rpb24uIFNlZW1zIHJlYXNvbmFibGUsIGdvb2QgZm9yIGNvZGUgY2xhcml0eSBhbmQgcG90ZW50aWFsIHJldXNlIGRvd24gdGhlIGxpbmUuCgpObyBpbW1lZGlhdGUgcmVkIGZsYWdzIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbnl0aGluZyBsaWtlIHRoYXQsIGF0IGxlYXN0IG5vdCBhdCBmaXJzdCBnbGFuY2UuIFRoaXMgbG9va3MgbGlrZSBhIGZhaXJseSBsb3ctcmlzayBjaGFuZ2UuIEJ1dCBsZXQmIzM5O3MgdmVyaWZ5IHRoZXNlIGRldGFpbHMuCgpTcGVjaWZpY2FsbHksIGxvb2tpbmcgYXQgdGhlIGBmcy9uZnNkL3Zmcy5jYCBjaGFuZ2VzLCBJJiMzOTttIG5vdGluZyB0aGUgZGlyZWN0IHJlcGxhY2VtZW50IG9mIHRoZSBvbGQgY2FsbCB3aXRoIHRoZSBuZXcgb25lOgoKYGBgYwotCQlob3N0X2VyciA9IHJ3X3ZlcmlmeV9hcmVhKFJFQUQsIGZpbGUsICZhbXA7b2Zmc2V0LCAqY291bnQpOwotCQlpZiAoIWhvc3RfZXJyKQotCQkJaG9zdF9lcnIgPSBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsICZhbXA7c2QsCi0JCQkJCQkJICBuZnNkX2RpcmVjdF9zcGxpY2VfYWN0b3IpOwomIzQzOwkJaG9zdF9lcnIgPSB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcihmaWxlLCAmYW1wO3NkLAomIzQzOwkJCQkJCSAgICAgIG5mc2RfZGlyZWN0X3NwbGljZV9hY3Rvcik7CmBgYAoKYW5kIHRoZSBuZXcgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBmdW5jdGlvbiwgd2hpY2ggbm93IGNvbnRhaW5zIGByd192ZXJpZnlfYXJlYWAgYW5kIGBmc25vdGlmeV9hY2Nlc3NgOgoKYGBgYwomIzQzO3NzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLAomIzQzOwkJCQkgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3RvcikKJiM0Mzt7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByd192ZXJpZnlfYXJlYShSRUFELCBpbiwgJmFtcDtzZC0mZ3Q7cG9zLCBzZC0mZ3Q7dG90YWxfbGVuKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGluLCBzZCwgYWN0b3IpOwomIzQzOwlpZiAocmV0ICZndDs9IDApCiYjNDM7CQlmc25vdGlmeV9hY2Nlc3MoaW4pOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KYGBgCgpPa2F5LCB0aGUgdGhpbmcgdGhhdCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXQgbWUgaXMgdGhpczogaW4gdGhlIG9yaWdpbmFsIGBmcy9uZnNkL3Zmcy5jYCBjb2RlLCBgcndfdmVyaWZ5X2FyZWFgIHdhcyBjYWxsZWQgd2l0aCBgJmFtcDtvZmZzZXRgLCBidXQgaW4gdGhlIG5ldyBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgLCBpdCBpcyBjYWxsZWQgd2l0aCBgJmFtcDtzZC0mZ3Q7cG9zYC4gTm93LCBpcyBgc2QtJmd0O3Bvc2AgaW5pdGlhbGl6ZWQgdG8gYG9mZnNldGA/IEkgbmVlZCB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCBgc2QtJmd0O3Bvc2AgaXMgaW5kZWVkIGluaXRpYWxpemVkIGFwcHJvcHJpYXRlbHkuIEkgd2lsbCB1c2UgdGhlIGBkZWZhdWx0X2FwaTpyZWFkLWZpbGVgIHRvb2wgdG8gcXVpY2tseSBjaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYG5mc2Rfc3BsaWNlX3JlYWRgIHRvIHNlZSB3aGVyZSBgc2QtJmd0O3Bvc2AgaXMgY29taW5nIGZyb20uIEdvdHRhIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IGludHJvZHVjaW5nIGEgc3VidGxlIGJ1ZyB3aXRoIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9uZnNkL3Zmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDcwOlx0ICogQGZpbGU6IG9wZW5lZCBzdHJ1Y3QgZmlsZSBvZiBmaWxlIHRvIGJlIHJlYWRcbjEwNzE6XHQgKiBAb2Zmc2V0OiBzdGFydGluZyBieXRlIG9mZnNldFxuMTA3MjpcdCAqIEBjb3VudDogSU46IHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXM7IE9VVDogbnVtYmVyIG9mIGJ5dGVzIHJlYWRcbjEwNzM6XHQgKiBAZW9mOiBPVVQ6IHNldCBub24temVybyBpZiBvcGVyYXRpb24gcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBmaWxlXG4xMDc0Olx0ICpcbjEwNzU6XHQgKiBSZXR1cm5zIG5mc19vayBvbiBzdWNjZXNzLCBvdGhlcndpc2UgYW4gbmZzZXJyIHN0YXQgdmFsdWUgaXNcbjEwNzY6XHQgKiByZXR1cm5lZC5cbjEwNzc6XHQgKi9cbjEwNzg6XHRfX2JlMzIgbmZzZF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4xMDc5Olx0XHRcdFx0c3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgKmNvdW50LFxuMTA4MDpcdFx0XHRcdHUzMiAqZW9mKVxuMTA4MTpcdHtcbjEwODI6XHRcdHN0cnVjdCBzcGxpY2VfZGVzYyBzZCA9IHtcbjEwODM6XHRcdFx0Lmxlblx0XHQ9IDAsXG4xMDg0Olx0XHRcdC50b3RhbF9sZW5cdD0gKmNvdW50LFxuMTA4NTpcdFx0XHQucG9zXHRcdD0gb2Zmc2V0LFxuMTA4NjpcdFx0XHQudS5kYXRhXHRcdD0gcnFzdHAsXG4xMDg3Olx0XHR9O1xuMTA4ODpcdFx0c3NpemVfdCBob3N0X2VycjtcbjEwODk6XHRcbjEwOTA6XHRcdHRyYWNlX25mc2RfcmVhZF9zcGxpY2UocnFzdHAsIGZocCwgb2Zmc2V0LCAqY291bnQpO1xuMTA5MTpcdFx0aG9zdF9lcnIgPSB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcihmaWxlLCBcdTAwMjZzZCxcbjEwOTI6XHRcdFx0XHRcdFx0ICAgICAgbmZzZF9kaXJlY3Rfc3BsaWNlX2FjdG9yKTtcbjEwOTM6XHRcdHJldHVybiBuZnNkX2ZpbmlzaF9yZWFkKHJxc3RwLCBmaHAsIGZpbGUsIG9mZnNldCwgY291bnQsIGVvZiwgaG9zdF9lcnIpO1xuMTA5NDpcdH1cbjEwOTU6XHRcbjEwOTY6XHQvKlxuMTA5NzpcdCAqIFRoZSBieXRlIHJhbmdlIG9mIHRoZSBjbGllbnQmIzM5O3MgUkVBRCByZXF1ZXN0IGlzIGV4cGFuZGVkIG9uIGJvdGggZW5kc1xuMTA5ODpcdCAqIHVudGlsIGl0IG1lZXRzIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtJiMzOTtzIGRpcmVjdCBJL08gYWxpZ25tZW50XG4xMDk5Olx0ICogcmVxdWlyZW1lbnRzLiBBZnRlciB0aGUgaW50ZXJuYWwgcmVhZCBpcyBjb21wbGV0ZSwgdGhlIGJ5dGUgcmFuZ2Ugb2ZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI3MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvc2l0aW9uIFBvaW50ZXIgaW4gTkZTZCBSZWFkIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBORlNkIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgcmVhZCBvcGVyYXRpb25zLiBGaXJzdCB0aGluZywgSSBzZWUgdGhhdCBgc2QucG9zYCBpcyBpbmRlZWQgaW5pdGlhbGl6ZWQgdG8gYG9mZnNldGAuIE1ha2VzIHNlbnNlLiBOb3cgSSBoYXZlIHRvIGJlIGNhcmVmdWwsIGJlY2F1c2UgaXQgbG9va3MgbGlrZSBgcndfdmVyaWZ5X2FyZWFgIGNvdWxkIHBvdGVudGlhbGx5IGJlIG1lc3Npbmcgd2l0aCB0aGF0IGBzZC0mZ3Q7cG9zYCB2YWx1ZS4gQWgsIG5vLCB3YWl0IGEgc2Vjb25kLiBUaGF0JiMzOTtzIHJpZ2h0LCBgcndfdmVyaWZ5X2FyZWFgIHRha2VzIGEgYGxvZmZfdCAqcHBvc2AgYXJndW1lbnQuIFRoYXQmIzM5O3MgYSBwb2ludGVyLiBTbywgdGhlIG9sZCBjb2RlIHBhc3NlZCBhIHBvaW50ZXIgdG8gYG9mZnNldGAsIHdoaWNoIHdvdWxkIGJlIG1vZGlmaWVkIGJ5IGByd192ZXJpZnlfYXJlYWAuIFRoZW4sIHRoYXQgKm1vZGlmaWVkKiBgb2Zmc2V0YCB2YWx1ZSB3YXMgcGFzc2VkIHRvIGBuZnNkX2ZpbmlzaF9yZWFkYC4KCkJ1dCBoYW5nIG9uLCB0aGUgKm5ldyogY29kZSEgSW4gdGhlICpuZXcqIGNvZGUsIGByd192ZXJpZnlfYXJlYWAgaXMgbW9kaWZ5aW5nIGBzZC0mZ3Q7cG9zYCBkaXJlY3RseSwgKm5vdCogYG9mZnNldGAuIEFuZCB0aGVuIHRoZSBvcmlnaW5hbCwgdW5tb2RpZmllZCBgb2Zmc2V0YCB2YWx1ZSBpcyBiZWluZyBwYXNzZWQgdG8gYG5mc2RfZmluaXNoX3JlYWRgLiBUaGF0JiMzOTtzIGEga2V5IGRpc3RpbmN0aW9uLiBBbmQgbm93IEkgbmVlZCB0byByZW1lbWJlciBgc3BsaWNlX2RpcmVjdF90b19hY3RvcmAuIFRoYXQgKmFsc28qIG1vZGlmaWVzIGBzZC0mZ3Q7cG9zYC4gU28sIEkmIzM5O3ZlIGdvdCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBzZC0mZ3Q7cG9zYCwgYG9mZnNldGAsIGByd192ZXJpZnlfYXJlYWAsIGBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBhbmQgdWx0aW1hdGVseSBob3cgYG5mc2RfZmluaXNoX3JlYWRgIGlzIHVzaW5nIHRob3NlIHZhbHVlcy4gR290dGEgY2hlY2sgYG5mc2RfZmluaXNoX3JlYWRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL25mc2QvdmZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNDA6XHR7XG4xMDQxOlx0XHRpZiAoZXhwZWN0ZWQgIT0gMCBcdTAwMjZcdTAwMjYgbGVuID09IDApXG4xMDQyOlx0XHRcdHJldHVybiAxO1xuMTA0MzpcdFx0aWYgKG9mZnNldCYjNDM7bGVuIFx1MDAzZT0gaV9zaXplX3JlYWQoZmlsZV9pbm9kZShmaWxlKSkpXG4xMDQ0Olx0XHRcdHJldHVybiAxO1xuMTA0NTpcdFx0cmV0dXJuIDA7XG4xMDQ2Olx0fVxuMTA0NzpcdFxuMTA0ODpcdHN0YXRpYyBfX2JlMzIgbmZzZF9maW5pc2hfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4xMDQ5Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxuMTA1MDpcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nICpjb3VudCwgdTMyICplb2YsIHNzaXplX3QgaG9zdF9lcnIpXG4xMDUxOlx0e1xuMTA1MjpcdFx0aWYgKGhvc3RfZXJyIFx1MDAzZT0gMCkge1xuMTA1MzpcdFx0XHRzdHJ1Y3QgbmZzZF9uZXQgKm5uID0gbmV0X2dlbmVyaWMoU1ZDX05FVChycXN0cCksIG5mc2RfbmV0X2lkKTtcbjEwNTQ6XHRcbjEwNTU6XHRcdFx0bmZzZF9zdGF0c19pb19yZWFkX2FkZChubiwgZmhwLVx1MDAzZWZoX2V4cG9ydCwgaG9zdF9lcnIpO1xuMTA1NjpcdFx0XHQqZW9mID0gbmZzZF9lb2Zfb25fcmVhZChmaWxlLCBvZmZzZXQsIGhvc3RfZXJyLCAqY291bnQpO1xuMTA1NzpcdFx0XHQqY291bnQgPSBob3N0X2VycjtcbjEwNTg6XHRcdFx0dHJhY2VfbmZzZF9yZWFkX2lvX2RvbmUocnFzdHAsIGZocCwgb2Zmc2V0LCAqY291bnQpO1xuMTA1OTpcdFx0XHRyZXR1cm4gMDtcbjEwNjA6XHRcdH0gZWxzZSB7XG4xMDYxOlx0XHRcdHRyYWNlX25mc2RfcmVhZF9lcnIocnFzdHAsIGZocCwgb2Zmc2V0LCBob3N0X2Vycik7XG4xMDYyOlx0XHRcdHJldHVybiBuZnNlcnJubyhob3N0X2Vycik7XG4xMDYzOlx0XHR9XG4xMDY0Olx0fVxuMTA2NTpcdFxuMTA2NjpcdC8qKlxuMTA2NzpcdCAqIG5mc2Rfc3BsaWNlX3JlYWQgLSBQZXJmb3JtIGEgVkZTIHJlYWQgdXNpbmcgYSBzcGxpY2UgcGlwZVxuMTA2ODpcdCAqIEBycXN0cDogUlBDIHRyYW5zYWN0aW9uIGNvbnRleHRcbjEwNjk6XHQgKiBAZmhwOiBmaWxlIGhhbmRsZSBvZiBmaWxlIHRvIGJlIHJlYWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMyNwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIG5mc2RfZmluaXNoX3JlYWQgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZnNkX2ZpbmlzaF9yZWFkYCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGZpbGUgb2Zmc2V0LiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBgb2Zmc2V0YCBwYXJhbWV0ZXIgZm9yIGJvdGggdGhlIGBuZnNkX2VvZl9vbl9yZWFkYCBjaGVjayBhbmQgZm9yIHRyYWNlcG9pbnRzLCByaWdodD8gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoZSBjaGFuZ2UgY29tcGFyZWQgdG8gdGhlIG9sZGVyIGNvZGUuIFByZXZpb3VzbHksIGByd192ZXJpZnlfYXJlYWAgaGFkIHRoZSBwb3RlbnRpYWwgdG8gbW9kaWZ5IHRoYXQgdmVyeSBgb2Zmc2V0YCB2YWx1ZS4gSWYgdGhhdCBoYXBwZW5lZCwgYG5mc2RfZmluaXNoX3JlYWRgIHdvdWxkIHRoZW4gdXNlIHRoZSBhbHRlcmVkIG9mZnNldCwgd2hpY2ggY291bGQgaGF2ZSBzb21lIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucyBmb3IgZGF0YSBjb25zaXN0ZW5jeSBvciBFT0YgZGV0ZWN0aW9uLCBkZXBlbmRpbmcgb24gdGhlIG5hdHVyZSBvZiB0aGUgb2Zmc2V0IGNoYW5nZS4KCkJ1dCBub3csIGl0IHNlZW1zIGByd192ZXJpZnlfYXJlYWAgb3BlcmF0ZXMgZGlmZmVyZW50bHkuIEl04oCZcyB1cGRhdGluZyBgc2QtJmd0O3Bvc2AsIGluc3RlYWQgb2YgbW9kaWZ5aW5nIHRoZSBgb2Zmc2V0YCBkaXJlY3RseS4gVGhlcmVmb3JlLCB0aGUgYG9mZnNldGAgcGFyYW1ldGVyIHBhc3NlZCB0byBgbmZzZF9maW5pc2hfcmVhZGAgcmVtYWlucyB1bmNoYW5nZWQgaW4gdGhlIGN1cnJlbnQgaXRlcmF0aW9uLgoKV2FpdCBhIHNlY29uZOKApiBkb2VzbiYjMzk7dCBgcndfdmVyaWZ5X2FyZWFgICp1c3VhbGx5KiBsZWF2ZSB0aGUgZmlsZSBwb2ludGVyIGFsb25lIHVubGVzcyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgc3BlY2lmaWMgZ29pbmcgb24sIGxpa2UgbWFuZGF0b3J5IGxvY2tpbmcgb3Igc29tZXRoaW5nIGVxdWFsbHkgZXhvdGljPyBJIGRvbiYjMzk7dCByZWNhbGwgaXQgYmVpbmcgYSByb3V0aW5lIG1vZGlmaWVyIG9mIHRoZSBwb3NpdGlvbi4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdDsgaXQmIzM5O3MgZWFzeSB0byBnZXQgbG9zdCBpbiB0aGUgZGV0YWlscy4gVGltZSB0byBkaXZlIGludG8gdGhlIGByd192ZXJpZnlfYXJlYWAgZnVuY3Rpb24gaXRzZWxmIGFuZCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGltcGFjdHMgZmlsZSBwb3NpdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHJ3X3ZlcmlmeV9hcmVhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3JlYWRfd3JpdGUuYz00MjY9U1lTQ0FMTF9ERUZJTkU1KGxsc2VlaywgdW5zaWduZWQgaW50LCBmZCwgdW5zaWduZWQgbG9uZywgb2Zmc2V0X2hpZ2gsXG4tLVxuZnMvcmVhZF93cml0ZS5jLTQ1Mi1cbmZzL3JlYWRfd3JpdGUuYzo0NTM6aW50IHJ3X3ZlcmlmeV9hcmVhKGludCByZWFkX3dyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgbG9mZl90ICpwcG9zLCBzaXplX3QgY291bnQpXG5mcy9yZWFkX3dyaXRlLmMtNDU0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MzEwNj1leHRlcm4gbG9mZl90IG5vX3NlZWtfZW5kX2xsc2VlayhzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIGludCk7XG5pbmNsdWRlL2xpbnV4L2ZzLmg6MzEwNzppbnQgcndfdmVyaWZ5X2FyZWEoaW50LCBzdHJ1Y3QgZmlsZSAqLCBjb25zdCBsb2ZmX3QgKiwgc2l6ZV90KTtcbmluY2x1ZGUvbGludXgvZnMuaC0zMTA4LWV4dGVybiBpbnQgZ2VuZXJpY19maWxlX29wZW4oc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipWZXJpZnlpbmcgdGhlIENvbnN0IENvcnJlY3RuZXNzIG9mIGByd192ZXJpZnlfYXJlYWAmIzM5O3MgT2Zmc2V0IFBhcmFtZXRlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHJ3X3ZlcmlmeV9hcmVhYCBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiBpdHMgcGFyYW1ldGVyIHVzYWdlLiBSaWdodCwgaXQgbG9va3MgbGlrZSBpdCB0YWtlcyBhIGBjb25zdCBsb2ZmX3QgKnBwb3NgLiBUaGF0JiMzOTtzIGdvb2Q7IHRoZSBgY29uc3RgIHN1Z2dlc3RzIGl0ICpzaG91bGRuJiMzOTt0KiBiZSBtb2RpZnlpbmcgdGhlIG9mZnNldCBwb2ludGVkIHRvIGJ5IGBwcG9zYC4gSSYjMzk7ZCBleHBlY3QgdGhhdCBpbiBhIHdlbGwtZGVzaWduZWQga2VybmVsIGZ1bmN0aW9uIGxpa2UgdGhpcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBteSBhc3N1bXB0aW9ucyBhcmUgc29saWQgaGVyZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlLWNoZWNrIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZGVmaW5lZC4gSG1tLCB5ZXAsIGNvbmZpcm1pbmcgdGhhdCB0aGUgZGVjbGFyYXRpb24gaW4gYGZzL3JlYWRfd3JpdGUuY2Agc2hvd3MgdGhlIHBhcmFtZXRlciBhcyBgY29uc3QgbG9mZl90ICpwcG9zYC4gR29vZC4gU28sIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0OiB0aGUgZnVuY3Rpb24gcHJvbWlzZXMgbm90IHRvIGFsdGVyIHRoZSBvZmZzZXQgdmFsdWUuIFRoaXMgcmVpbmZvcmNlcyB0aGUgaWRlYSB0aGF0IGl0JiMzOTtzIGFjdGluZyBtb3JlIGFzIGFuIGluZm9ybWF0aW9uIHJldHJpZXZlciByZWdhcmRpbmcgdGhlIGFyZWEgcmVxdWVzdGVkLCByYXRoZXIgdGhhbiBzb21ldGhpbmcgdGhhdCB3b3VsZCBtYWtlIGEgY2hhbmdlIGRpcmVjdGx5IHRvIHRoZSBmaWxlIHBvc2l0aW9uLiBFeGNlbGxlbnQsIG5vdyBJIGNhbiB1c2UgdGhhdCBpbmZvcm1hdGlvbiB0byBjb25maXJtIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvcmVhZF93cml0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTA6XHR9XG4gNDUxOlx0I2VuZGlmXG4gNDUyOlx0XG4gNDUzOlx0aW50IHJ3X3ZlcmlmeV9hcmVhKGludCByZWFkX3dyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgbG9mZl90ICpwcG9zLCBzaXplX3QgY291bnQpXG4gNDU0Olx0e1xuIDQ1NTpcdFx0aW50IG1hc2sgPSByZWFkX3dyaXRlID09IFJFQUQgPyBNQVlfUkVBRCA6IE1BWV9XUklURTtcbiA0NTY6XHRcdGludCByZXQ7XG4gNDU3Olx0XG4gNDU4Olx0XHRpZiAodW5saWtlbHkoKHNzaXplX3QpIGNvdW50IFx1MDAzYyAwKSlcbiA0NTk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDYwOlx0XG4gNDYxOlx0XHRpZiAocHBvcykge1xuIDQ2MjpcdFx0XHRsb2ZmX3QgcG9zID0gKnBwb3M7XG4gNDYzOlx0XG4gNDY0Olx0XHRcdGlmICh1bmxpa2VseShwb3MgXHUwMDNjIDApKSB7XG4gNDY1Olx0XHRcdFx0aWYgKCF1bnNpZ25lZF9vZmZzZXRzKGZpbGUpKVxuIDQ2NjpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDY3Olx0XHRcdFx0aWYgKGNvdW50IFx1MDAzZT0gLXBvcykgLyogYm90aCB2YWx1ZXMgYXJlIGluIDAuLkxMT05HX01BWCAqL1xuIDQ2ODpcdFx0XHRcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4gNDY5Olx0XHRcdH0gZWxzZSBpZiAodW5saWtlbHkoKGxvZmZfdCkgKHBvcyAmIzQzOyBjb3VudCkgXHUwMDNjIDApKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2OTAKCQkJCQkJCW91dHB1dDogMjEyCgkJCQkJCQl0aG91Z2h0czogMjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIFNhZmV0eSoqCgpPa2F5LCBzbyBJIHNlZSBgY29uc3QgbG9mZl90ICpwcG9zYCBpbiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLCBtZWFuaW5nIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGdvaW5nIHRvIGJlIG1lc3Npbmcgd2l0aCB0aGUgZmlsZSBvZmZzZXQgZGlyZWN0bHkuIFRoYXQmIzM5O3MgZ29vZC4KClJpZ2h0LCB0aGUgY29yZSBvZiBpdCBpcyB3cmFwcGluZyBgcndfdmVyaWZ5X2FyZWFgLCBgc3BsaWNlX2RpcmVjdF90b19hY3RvcmAsIGFuZCBgZnNub3RpZnlfYWNjZXNzYCBpbnRvIGEgc2luZ2xlIGhlbHBlciBmdW5jdGlvbiBjYWxsZWQgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYC4gRXNzZW50aWFsbHksIGEgcmVmYWN0b3JpbmcsIHNvbWUgY29kZSBjbGVhbnVwLiBJdCBsb29rcyBsaWtlIGBuZnNkX3NwbGljZV9yZWFkYCBpcyBnZXR0aW5nIHVwZGF0ZWQgdG8gdXNlIHRoaXMgbmV3IGhlbHBlci4KCkdpdmVuIHRoYXQsIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBLTVNBTiBmbGFncyBoZXJlLiBJdCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgYW55IG5ldyBtZW1vcnkgaXMgYmVpbmcgYWxsb2NhdGVkLCBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4KCkxldCBtZSBhcnRpY3VsYXRlIHRoYXQgdGhvdWdodCBwcm9jZXNzIGZvciBhIG1vcmUgZm9ybWFsIGFzc2Vzc21lbnQuLi4gVGhpcyBwYXRjaCBtYWlubHkgcmVvcmdhbml6ZXMgc29tZSBjYWxscyBieSBpbnRyb2R1Y2luZyBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgLCBjb25zb2xpZGF0aW5nIGEgZmV3IG90aGVyIGNhbGxzLiBJdCB1cGRhdGVzIHRoZSBORlMgY29kZSB0byB1c2UgdGhlIG5ldyBoZWxwZXIuIFRoaXMgaXMgYSByZWZhY3RvcmluZywgcHVyZSBhbmQgc2ltcGxlLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byB0aGUgVkZTIHRoYXQgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgdXNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBjcmVhdGUgbmV3IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTiBhbmQgdGhlIHVzdWFsIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIGNvbXBsZXRlbHkgYWRlcXVhdGUgdG8gZGV0ZWN0IGFueSBpc3N1ZXMgZnJvbSB0aGUgVkZTIGNoYW5nZXMsIGV2ZW4gdGhvdWdoIHRoaXMgcGF0Y2ggaXMgcHJpbWFyaWx5IHN0cnVjdHVyYWwuIFRoZXJlZm9yZSwgSSBkb24mIzM5O3Qgc2VlIGFueSBuZWVkIHRvIGRlZGljYXRlIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIHRvIGl0LiBJdCYjMzk7cyBhIGxvdy1yaXNrIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBpbiBgZnMvc3BsaWNlLmNgIHRoYXQgY29uc29saWRhdGVzIGV4aXN0aW5nIGNhbGxzIHRvIGByd192ZXJpZnlfYXJlYWAsIGBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCwgYW5kIGBmc25vdGlmeV9hY2Nlc3NgLiBJdCB0aGVuIHVwZGF0ZXMgYG5mc2Rfc3BsaWNlX3JlYWRgIGluIGBmcy9uZnNkL3Zmcy5jYCB0byB1c2UgdGhpcyBuZXcgaGVscGVyLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHN0cnVjdHVyYWwgcmVmYWN0b3JpbmcgdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBjaGFuZ2VzIHRvIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGUgbW9kaWZpY2F0aW9ucyBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB0aGF0IG1pZ2h0IHRoZW9yZXRpY2FsbHkgYXJpc2UgZnJvbSBWRlMgY2hhbmdlcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgaW4gYGZzL3NwbGljZS5jYCB0aGF0IGNvbnNvbGlkYXRlcyBleGlzdGluZyBjYWxscyB0byBgcndfdmVyaWZ5X2FyZWFgLCBgc3BsaWNlX2RpcmVjdF90b19hY3RvcmAsIGFuZCBgZnNub3RpZnlfYWNjZXNzYC4gSXQgdGhlbiB1cGRhdGVzIGBuZnNkX3NwbGljZV9yZWFkYCBpbiBgZnMvbmZzZC92ZnMuY2AgdG8gdXNlIHRoaXMgbmV3IGhlbHBlci4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBzdHJ1Y3R1cmFsIHJlZmFjdG9yaW5nIHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgdGhhdCBtaWdodCB0aGVvcmV0aWNhbGx5IGFyaXNlIGZyb20gVkZTIGNoYW5nZXMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjI3OjAyLjgzNjc2OTU5NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NDk1MTYzOTIzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORlNEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JcIixcbiAgICBcIm5mc2Rfc3BsaWNlX3JlYWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgaW4gYGZzL3NwbGljZS5jYCB0aGF0IGNvbnNvbGlkYXRlcyBleGlzdGluZyBjYWxscyB0byBgcndfdmVyaWZ5X2FyZWFgLCBgc3BsaWNlX2RpcmVjdF90b19hY3RvcmAsIGFuZCBgZnNub3RpZnlfYWNjZXNzYC4gSXQgdGhlbiB1cGRhdGVzIGBuZnNkX3NwbGljZV9yZWFkYCBpbiBgZnMvbmZzZC92ZnMuY2AgdG8gdXNlIHRoaXMgbmV3IGhlbHBlci4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBzdHJ1Y3R1cmFsIHJlZmFjdG9yaW5nIHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgdGhhdCBtaWdodCB0aGVvcmV0aWNhbGx5IGFyaXNlIGZyb20gVkZTIGNoYW5nZXMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgbG9naWMgZm9yIHNwbGljaW5nIGFuZCBORlNEIHJlYWQgcGF0aHMsIGludHJvZHVjaW5nIGEgbmV3IEFQSSBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIGFuZCB1cGRhdGluZyBgbmZzZF9zcGxpY2VfcmVhZGAgdG8gdXNlIGl0LiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZ1bmN0aW9uYWwgY2hhbmdlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6Mjc6MDIuODM2Nzc0NjM2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Nzk2NDEzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4MmU5ZjU1ZWI5Mjk4ODI5ZWZkYmIzMjI0ZTc3Y2Q0N2M2NThhNTJjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDI0IDE4OjI3OjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jXFxuaW5kZXggMWU4OWM3ZmY5NDkzYi4uYTQ2NWUyNzZkNjc1NCAxMDA2NDRcXG4tLS0gYS9mcy9uZnNkL3Zmcy5jXFxuKysrIGIvZnMvbmZzZC92ZnMuY1xcbkBAIC0xMDU1LDcgKzEwNTUsNiBAQCBzdGF0aWMgX19iZTMyIG5mc2RfZmluaXNoX3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxcbiBcXHRcXHRuZnNkX3N0YXRzX2lvX3JlYWRfYWRkKG5uLCBmaHAtXFx1MDAzZWZoX2V4cG9ydCwgaG9zdF9lcnIpO1xcbiBcXHRcXHQqZW9mID0gbmZzZF9lb2Zfb25fcmVhZChmaWxlLCBvZmZzZXQsIGhvc3RfZXJyLCAqY291bnQpO1xcbiBcXHRcXHQqY291bnQgPSBob3N0X2VycjtcXG4tXFx0XFx0ZnNub3RpZnlfYWNjZXNzKGZpbGUpO1xcbiBcXHRcXHR0cmFjZV9uZnNkX3JlYWRfaW9fZG9uZShycXN0cCwgZmhwLCBvZmZzZXQsICpjb3VudCk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9IGVsc2Uge1xcbkBAIC0xMDg5LDEwICsxMDg4LDggQEAgX19iZTMyIG5mc2Rfc3BsaWNlX3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxcbiBcXHRzc2l6ZV90IGhvc3RfZXJyO1xcbiBcXG4gXFx0dHJhY2VfbmZzZF9yZWFkX3NwbGljZShycXN0cCwgZmhwLCBvZmZzZXQsICpjb3VudCk7XFxuLVxcdGhvc3RfZXJyID0gcndfdmVyaWZ5X2FyZWEoUkVBRCwgZmlsZSwgXFx1MDAyNm9mZnNldCwgKmNvdW50KTtcXG4tXFx0aWYgKCFob3N0X2VycilcXG4tXFx0XFx0aG9zdF9lcnIgPSBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsIFxcdTAwMjZzZCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICBuZnNkX2RpcmVjdF9zcGxpY2VfYWN0b3IpO1xcbitcXHRob3N0X2VyciA9IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsIFxcdTAwMjZzZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgbmZzZF9kaXJlY3Rfc3BsaWNlX2FjdG9yKTtcXG4gXFx0cmV0dXJuIG5mc2RfZmluaXNoX3JlYWQocnFzdHAsIGZocCwgZmlsZSwgb2Zmc2V0LCBjb3VudCwgZW9mLCBob3N0X2Vycik7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL3NwbGljZS5jIGIvZnMvc3BsaWNlLmNcXG5pbmRleCA5ZDhmNjNlMmZkMWFiLi40MmFkNzEyYTBmNGRhIDEwMDY0NFxcbi0tLSBhL2ZzL3NwbGljZS5jXFxuKysrIGIvZnMvc3BsaWNlLmNcXG5AQCAtMTAwOSwyMSArMTAwOSwxNCBAQCBzc2l6ZV90IHZmc19zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZnNfc3BsaWNlX3JlYWQpO1xcbiBcXG4tLyoqXFxuLSAqIHNwbGljZV9kaXJlY3RfdG9fYWN0b3IgLSBzcGxpY2VzIGRhdGEgZGlyZWN0bHkgYmV0d2VlbiB0d28gbm9uLXBpcGVzXFxuLSAqIEBpbjpcXHRcXHRmaWxlIHRvIHNwbGljZSBmcm9tXFxuLSAqIEBzZDpcXHRcXHRhY3RvciBpbmZvcm1hdGlvbiBvbiB3aGVyZSB0byBzcGxpY2UgdG9cXG4tICogQGFjdG9yOlxcdGhhbmRsZXMgdGhlIGRhdGEgc3BsaWNpbmdcXG4tICpcXG4tICogRGVzY3JpcHRpb246XFxuLSAqICAgIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgaGVscGVyIHRvIHNwbGljZSBkaXJlY3RseSBiZXR3ZWVuIHR3b1xcbi0gKiAgICBwb2ludHMsIHdpdGhvdXQgcmVxdWlyaW5nIGFuIGV4cGxpY2l0IHBpcGUuIEludGVybmFsbHkgYW4gYWxsb2NhdGVkXFxuLSAqICAgIHBpcGUgaXMgY2FjaGVkIGluIHRoZSBwcm9jZXNzLCBhbmQgcmV1c2VkIGR1cmluZyB0aGUgbGlmZXRpbWUgb2ZcXG4tICogICAgdGhhdCBwcm9jZXNzLlxcbi0gKlxcbisvKlxcbisgKiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGhlbHBlciB0byBzcGxpY2UgZGlyZWN0bHkgYmV0d2VlbiB0d29cXG4rICogcG9pbnRzLCB3aXRob3V0IHJlcXVpcmluZyBhbiBleHBsaWNpdCBwaXBlLiBJbnRlcm5hbGx5IGFuIGFsbG9jYXRlZFxcbisgKiBwaXBlIGlzIGNhY2hlZCBpbiB0aGUgcHJvY2VzcywgYW5kIHJldXNlZCBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mXFxuKyAqIHRoYXQgcHJvY2Vzcy5cXG4gICovXFxuLXNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXFxuLVxcdFxcdFxcdCAgICAgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3RvcilcXG4rc3RhdGljIHNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHNwbGljZV9kaXJlY3RfYWN0b3IgKmFjdG9yKVxcbiB7XFxuIFxcdHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGU7XFxuIFxcdHNzaXplX3QgcmV0LCBieXRlcztcXG5AQCAtMTE0Nyw3ICsxMTQwLDQwIEBAIHNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXFxuIFxcbiBcXHRnb3RvIGRvbmU7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTChzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKTtcXG4rXFxuKy8qKlxcbisgKiB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvciAtIHNwbGljZSBmcm9tIGEgZmlsZSB0aHJvdWdoIGEgY2FsbGVyJ3MgYWN0b3JcXG4rICogQGluOlxcdFxcdGZpbGUgdG8gc3BsaWNlIGZyb207IG11c3QgYmUgc2Vla2FibGUgKEZNT0RFX0xTRUVLKVxcbisgKiBAc2Q6XFx0XFx0c3BsaWNlIHBhcmFtZXRlcnMuIFRoZSBjYWxsZXIgc2V0cyBAc2QtXFx1MDAzZXBvcyBhbmRcXG4rICpcXHRcXHRAc2QtXFx1MDAzZXRvdGFsX2xlbi4gQHNkLVxcdTAwM2Vwb3MgYWR2YW5jZXMgYXMgZGF0YSBpcyBjb25zdW1lZCxcXG4rICpcXHRcXHRhbmQgQHNkLVxcdTAwM2V0b3RhbF9sZW4gaXMgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgbGVuZ3RoIG9mXFxuKyAqXFx0XFx0ZWFjaCByZWFkLlxcbisgKiBAYWN0b3I6XFx0Y29uc3VtZXMgZWFjaCBwaXBlLWZ1bGwgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZlxcbisgKlxcdFxcdGJ5dGVzIHRha2VuXFxuKyAqXFxuKyAqIERlc2NyaXB0aW9uOlxcbisgKiAgICBTcGxpY2UgZnJvbSBAaW4gdGhyb3VnaCBAYWN0b3IsIGZvciBhIGNhbGxlciB0aGF0IGNvbnN1bWVzXFxuKyAqICAgIHRoZSBkYXRhIGl0c2VsZiByYXRoZXIgdGhhbiBzZW5kaW5nIGl0IHRvIGEgc2Vjb25kIGZpbGUuXFxuKyAqICAgIFRoaXMgaGVscGVyIHZlcmlmaWVzIHRoZSByZWFkIGFuZCBlbWl0cyB0aGUgZnNub3RpZnkgYWNjZXNzXFxuKyAqICAgIGV2ZW50LiBkb19zcGxpY2VfZGlyZWN0KCkgbGVhdmVzIGJvdGggdG8gaXRzIGNhbGxlcnMuXFxuKyAqXFxuKyAqIFJldHVybjogVGhlIG51bWJlciBvZiBieXRlcyBzcGxpY2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLlxcbisgKi9cXG4rc3NpemVfdCB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXFxuK1xcdFxcdFxcdFxcdCAgIHNwbGljZV9kaXJlY3RfYWN0b3IgKmFjdG9yKVxcbit7XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXG4rXFx0cmV0ID0gcndfdmVyaWZ5X2FyZWEoUkVBRCwgaW4sIFxcdTAwMjZzZC1cXHUwMDNlcG9zLCBzZC1cXHUwMDNldG90YWxfbGVuKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGluLCBzZCwgYWN0b3IpO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDApXFxuK1xcdFxcdGZzbm90aWZ5X2FjY2Vzcyhpbik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTCh2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3Rvcik7XFxuIFxcbiBzdGF0aWMgaW50IGRpcmVjdF9zcGxpY2VfYWN0b3Ioc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmggYi9pbmNsdWRlL2xpbnV4L3NwbGljZS5oXFxuaW5kZXggOWRlYzQ4NjFkMDlmNi4uNGU5MWQwM2VkNjQ1ZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NwbGljZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaFxcbkBAIC03OSw4ICs3OSw4IEBAIHNzaXplX3QgYWRkX3RvX3BpcGUoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpO1xcbiBzc2l6ZV90IHZmc19zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcXG4gXFx0XFx0XFx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbixcXG4gXFx0XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzKTtcXG4tc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLFxcbi1cXHRcXHRcXHQgICAgICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpO1xcbitzc2l6ZV90IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLFxcbitcXHRcXHRcXHRcXHQgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3Rvcik7XFxuIHNzaXplX3QgZG9fc3BsaWNlKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpvZmZfaW4sIHN0cnVjdCBmaWxlICpvdXQsXFxuIFxcdFxcdCAgbG9mZl90ICpvZmZfb3V0LCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbiBzc2l6ZV90IGRvX3NwbGljZV9kaXJlY3Qoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsIHN0cnVjdCBmaWxlICpvdXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjI3OjAzLjQxNzA0OTQ5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU4NjA4OTM2NDEwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORlNEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JcIixcbiAgICBcIm5mc2Rfc3BsaWNlX3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBsb2dpYyBmb3Igc3BsaWNpbmcgYW5kIE5GU0QgcmVhZCBwYXRocywgaW50cm9kdWNpbmcgYSBuZXcgQVBJIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgYW5kIHVwZGF0aW5nIGBuZnNkX3NwbGljZV9yZWFkYCB0byB1c2UgaXQuIFRoZXNlIGFyZSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MmU5ZjU1ZWI5Mjk4ODI5ZWZkYmIzMjI0ZTc3Y2Q0N2M2NThhNTJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTg6Mjc6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5jIGIvZnMvbmZzZC92ZnMuY1xuaW5kZXggMWU4OWM3ZmY5NDkzYi4uYTQ2NWUyNzZkNjc1NCAxMDA2NDRcbi0tLSBhL2ZzL25mc2QvdmZzLmNcbisrKyBiL2ZzL25mc2QvdmZzLmNcbkBAIC0xMDU1LDcgKzEwNTUsNiBAQCBzdGF0aWMgX19iZTMyIG5mc2RfZmluaXNoX3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxuIFx0XHRuZnNkX3N0YXRzX2lvX3JlYWRfYWRkKG5uLCBmaHAtXHUwMDNlZmhfZXhwb3J0LCBob3N0X2Vycik7XG4gXHRcdCplb2YgPSBuZnNkX2VvZl9vbl9yZWFkKGZpbGUsIG9mZnNldCwgaG9zdF9lcnIsICpjb3VudCk7XG4gXHRcdCpjb3VudCA9IGhvc3RfZXJyO1xuLVx0XHRmc25vdGlmeV9hY2Nlc3MoZmlsZSk7XG4gXHRcdHRyYWNlX25mc2RfcmVhZF9pb19kb25lKHJxc3RwLCBmaHAsIG9mZnNldCwgKmNvdW50KTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9IGVsc2Uge1xuQEAgLTEwODksMTAgKzEwODgsOCBAQCBfX2JlMzIgbmZzZF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4gXHRzc2l6ZV90IGhvc3RfZXJyO1xuIFxuIFx0dHJhY2VfbmZzZF9yZWFkX3NwbGljZShycXN0cCwgZmhwLCBvZmZzZXQsICpjb3VudCk7XG4tXHRob3N0X2VyciA9IHJ3X3ZlcmlmeV9hcmVhKFJFQUQsIGZpbGUsIFx1MDAyNm9mZnNldCwgKmNvdW50KTtcbi1cdGlmICghaG9zdF9lcnIpXG4tXHRcdGhvc3RfZXJyID0gc3BsaWNlX2RpcmVjdF90b19hY3RvcihmaWxlLCBcdTAwMjZzZCxcbi1cdFx0XHRcdFx0XHQgIG5mc2RfZGlyZWN0X3NwbGljZV9hY3Rvcik7XG4rXHRob3N0X2VyciA9IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsIFx1MDAyNnNkLFxuK1x0XHRcdFx0XHQgICAgICBuZnNkX2RpcmVjdF9zcGxpY2VfYWN0b3IpO1xuIFx0cmV0dXJuIG5mc2RfZmluaXNoX3JlYWQocnFzdHAsIGZocCwgZmlsZSwgb2Zmc2V0LCBjb3VudCwgZW9mLCBob3N0X2Vycik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL3NwbGljZS5jIGIvZnMvc3BsaWNlLmNcbmluZGV4IDlkOGY2M2UyZmQxYWIuLjQyYWQ3MTJhMGY0ZGEgMTAwNjQ0XG4tLS0gYS9mcy9zcGxpY2UuY1xuKysrIGIvZnMvc3BsaWNlLmNcbkBAIC0xMDA5LDIxICsxMDA5LDE0IEBAIHNzaXplX3QgdmZzX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZnNfc3BsaWNlX3JlYWQpO1xuIFxuLS8qKlxuLSAqIHNwbGljZV9kaXJlY3RfdG9fYWN0b3IgLSBzcGxpY2VzIGRhdGEgZGlyZWN0bHkgYmV0d2VlbiB0d28gbm9uLXBpcGVzXG4tICogQGluOlx0XHRmaWxlIHRvIHNwbGljZSBmcm9tXG4tICogQHNkOlx0XHRhY3RvciBpbmZvcm1hdGlvbiBvbiB3aGVyZSB0byBzcGxpY2UgdG9cbi0gKiBAYWN0b3I6XHRoYW5kbGVzIHRoZSBkYXRhIHNwbGljaW5nXG4tICpcbi0gKiBEZXNjcmlwdGlvbjpcbi0gKiAgICBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGhlbHBlciB0byBzcGxpY2UgZGlyZWN0bHkgYmV0d2VlbiB0d29cbi0gKiAgICBwb2ludHMsIHdpdGhvdXQgcmVxdWlyaW5nIGFuIGV4cGxpY2l0IHBpcGUuIEludGVybmFsbHkgYW4gYWxsb2NhdGVkXG4tICogICAgcGlwZSBpcyBjYWNoZWQgaW4gdGhlIHByb2Nlc3MsIGFuZCByZXVzZWQgZHVyaW5nIHRoZSBsaWZldGltZSBvZlxuLSAqICAgIHRoYXQgcHJvY2Vzcy5cbi0gKlxuKy8qXG4rICogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSBoZWxwZXIgdG8gc3BsaWNlIGRpcmVjdGx5IGJldHdlZW4gdHdvXG4rICogcG9pbnRzLCB3aXRob3V0IHJlcXVpcmluZyBhbiBleHBsaWNpdCBwaXBlLiBJbnRlcm5hbGx5IGFuIGFsbG9jYXRlZFxuKyAqIHBpcGUgaXMgY2FjaGVkIGluIHRoZSBwcm9jZXNzLCBhbmQgcmV1c2VkIGR1cmluZyB0aGUgbGlmZXRpbWUgb2ZcbisgKiB0aGF0IHByb2Nlc3MuXG4gICovXG4tc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCxcbi1cdFx0XHQgICAgICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpXG4rc3RhdGljIHNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4rXHRcdFx0XHQgICAgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3RvcilcbiB7XG4gXHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlO1xuIFx0c3NpemVfdCByZXQsIGJ5dGVzO1xuQEAgLTExNDcsNyArMTE0MCw0MCBAQCBzc2l6ZV90IHNwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLFxuIFxuIFx0Z290byBkb25lO1xuIH1cbi1FWFBPUlRfU1lNQk9MKHNwbGljZV9kaXJlY3RfdG9fYWN0b3IpO1xuK1xuKy8qKlxuKyAqIHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yIC0gc3BsaWNlIGZyb20gYSBmaWxlIHRocm91Z2ggYSBjYWxsZXIncyBhY3RvclxuKyAqIEBpbjpcdFx0ZmlsZSB0byBzcGxpY2UgZnJvbTsgbXVzdCBiZSBzZWVrYWJsZSAoRk1PREVfTFNFRUspXG4rICogQHNkOlx0XHRzcGxpY2UgcGFyYW1ldGVycy4gVGhlIGNhbGxlciBzZXRzIEBzZC1cdTAwM2Vwb3MgYW5kXG4rICpcdFx0QHNkLVx1MDAzZXRvdGFsX2xlbi4gQHNkLVx1MDAzZXBvcyBhZHZhbmNlcyBhcyBkYXRhIGlzIGNvbnN1bWVkLFxuKyAqXHRcdGFuZCBAc2QtXHUwMDNldG90YWxfbGVuIGlzIG92ZXJ3cml0dGVuIHdpdGggdGhlIGxlbmd0aCBvZlxuKyAqXHRcdGVhY2ggcmVhZC5cbisgKiBAYWN0b3I6XHRjb25zdW1lcyBlYWNoIHBpcGUtZnVsbCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mXG4rICpcdFx0Ynl0ZXMgdGFrZW5cbisgKlxuKyAqIERlc2NyaXB0aW9uOlxuKyAqICAgIFNwbGljZSBmcm9tIEBpbiB0aHJvdWdoIEBhY3RvciwgZm9yIGEgY2FsbGVyIHRoYXQgY29uc3VtZXNcbisgKiAgICB0aGUgZGF0YSBpdHNlbGYgcmF0aGVyIHRoYW4gc2VuZGluZyBpdCB0byBhIHNlY29uZCBmaWxlLlxuKyAqICAgIFRoaXMgaGVscGVyIHZlcmlmaWVzIHRoZSByZWFkIGFuZCBlbWl0cyB0aGUgZnNub3RpZnkgYWNjZXNzXG4rICogICAgZXZlbnQuIGRvX3NwbGljZV9kaXJlY3QoKSBsZWF2ZXMgYm90aCB0byBpdHMgY2FsbGVycy5cbisgKlxuKyAqIFJldHVybjogVGhlIG51bWJlciBvZiBieXRlcyBzcGxpY2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLlxuKyAqL1xuK3NzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLFxuK1x0XHRcdFx0ICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpXG4re1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRyZXQgPSByd192ZXJpZnlfYXJlYShSRUFELCBpbiwgXHUwMDI2c2QtXHUwMDNlcG9zLCBzZC1cdTAwM2V0b3RhbF9sZW4pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHNwbGljZV9kaXJlY3RfdG9fYWN0b3IoaW4sIHNkLCBhY3Rvcik7XG4rXHRpZiAocmV0IFx1MDAzZT0gMClcbitcdFx0ZnNub3RpZnlfYWNjZXNzKGluKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0wodmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3IpO1xuIFxuIHN0YXRpYyBpbnQgZGlyZWN0X3NwbGljZV9hY3RvcihzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmggYi9pbmNsdWRlL2xpbnV4L3NwbGljZS5oXG5pbmRleCA5ZGVjNDg2MWQwOWY2Li40ZTkxZDAzZWQ2NDVmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zcGxpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaFxuQEAgLTc5LDggKzc5LDggQEAgc3NpemVfdCBhZGRfdG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1Zik7XG4gc3NpemVfdCB2ZnNfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdFx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbixcbiBcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuLXNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNwbGljZV9kZXNjICpzZCxcbi1cdFx0XHQgICAgICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpO1xuK3NzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4rXHRcdFx0XHQgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3Rvcik7XG4gc3NpemVfdCBkb19zcGxpY2Uoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKm9mZl9pbiwgc3RydWN0IGZpbGUgKm91dCxcbiBcdFx0ICBsb2ZmX3QgKm9mZl9vdXQsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7XG4gc3NpemVfdCBkb19zcGxpY2VfZGlyZWN0KHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLCBzdHJ1Y3QgZmlsZSAqb3V0LFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6Mjc6MDMuNDE3MDUwNjY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0NjQwMDQyNDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCDigJMgaXQncyB0b3VjaGluZyBhIGZldyBrZXkgYXJlYXM6IGBmcy9uZnNkL3Zmcy5jYCwgYGZzL3NwbGljZS5jYCwgYW5kIHRoZSByZWxhdGVkIGhlYWRlci4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGEgcmVuYW1lOiBgc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgaXMgbm93IGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAuIFRoYXQncyBub3QganVzdCBhIGNvc21ldGljIGNoYW5nZSwgaXQgbWVhbnMgdGhlIHNjb3BlIG9yIHJlc3BvbnNpYmlsaXR5IG1pZ2h0IGJlIHNoaWZ0aW5nLiBQbHVzLCB0aGV5J3ZlIGJ1bmRsZWQgYHJ3X3ZlcmlmeV9hcmVhYCBhbmQgYGZzbm90aWZ5X2FjY2Vzc2AgKmludG8qIHRoYXQgZnVuY3Rpb24uIE9rYXksIHRoYXQncyBhbHJlYWR5IGludGVyZXN0aW5nLlxuXG5UaGUgbmV4dCB0aGluZyBJJ20gc2VlaW5nIGlzIGEgY2hhbmdlIGluIGBuZnNkX3NwbGljZV9yZWFkYC4gSXQgbm93ICp1c2VzKiBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgLCBhbmQgdGhlIHBhdGNoIHJlbW92ZXMgdGhvc2UgZXh0cmEgY2hlY2tzIGZyb20gYG5mc2RfZmluaXNoX3JlYWRgIGFuZCBgbmZzZF9zcGxpY2VfcmVhZGAuIFRoaXMgaXMgc3RhcnRpbmcgdG8gbG9vayBsaWtlIGEgY29uc29saWRhdGlvbiBvZiBmdW5jdGlvbmFsaXR5IG9yIHBlcmhhcHMgYSBjaGFuZ2UgaW4gaG93IHBlcm1pc3Npb25zIG9yIGFjY2VzcyBpcyBoYW5kbGVkIGR1cmluZyBORlMgcmVhZCBvcGVyYXRpb25zLlxuXG5HaXZlbiB0aGF0IGl0J3MgbW9kaWZ5aW5nIGJvdGggY29yZSBWRlMgbG9naWMgKHNwbGljZSkgKmFuZCogTkZTRCwgSSdtIHRoaW5raW5nIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgcGF0Y2ggaXMgY2VudHJhbCB0byByZWFkIG9wZXJhdGlvbnMgZm9yIE5GUyB3aGljaCBtZWFucyBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC5cblxuTm93LCBsZXQncyBmaWd1cmUgb3V0IHdoYXQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBhcmUuIENsZWFybHksIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgaXMgYSBwcmltZSBjYW5kaWRhdGUsIGl0IGxvb2tzIHRvIGJlIGFuIGludGVyZXN0aW5nIFZGUyBwYXRoIHRvIHByb2JlLiBgbmZzZF9zcGxpY2VfcmVhZGAgaXMgYW5vdGhlciBvYnZpb3VzIG9uZS4gSXQgbG9va3MgbGlrZSBgbmZzZF9maW5pc2hfcmVhZGAgKm1pZ2h0KiBiZSBpbnZvbHZlZCwgYnV0IHNpbmNlIGl0J3Mgc3RhdGljLCBJIHNob3VsZCBmb2N1cyBvbiBgbmZzZF9zcGxpY2VfcmVhZGAsIHdoaWNoIGNhbGxzIGl0LlxuXG5JJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBmcy9uZnNkL3Zmcy5jYCBmb3IgYG5mc2Rfc3BsaWNlX3JlYWRgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgTkZTRCBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ4MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjMxOjU4LjA1NzA5NTM3M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA4NDU4MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZzZF9zcGxpY2VfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZnNkL3Zmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25mc2QvdmZzLmM9MTA0OD1zdGF0aWMgX19iZTMyIG5mc2RfZmluaXNoX3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxcbi0tXFxuZnMvbmZzZC92ZnMuYy0xMDY2LS8qKlxcbmZzL25mc2QvdmZzLmM6MTA2NzogKiBuZnNkX3NwbGljZV9yZWFkIC0gUGVyZm9ybSBhIFZGUyByZWFkIHVzaW5nIGEgc3BsaWNlIHBpcGVcXG5mcy9uZnNkL3Zmcy5jLTEwNjgtICogQHJxc3RwOiBSUEMgdHJhbnNhY3Rpb24gY29udGV4dFxcbi0tXFxuZnMvbmZzZC92ZnMuYy0xMDc3LSAqL1xcbmZzL25mc2QvdmZzLmM6MTA3ODpfX2JlMzIgbmZzZF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXFxuZnMvbmZzZC92ZnMuYy0xMDc5LVxcdFxcdFxcdHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nICpjb3VudCxcXG4tLVxcbmZzL25mc2QvdmZzLmM9MTExMD1uZnNkX2RpcmVjdF9yZWFkKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcXG4tLVxcbmZzL25mc2QvdmZzLmMtMTE4Mi0gKlxcbmZzL25mc2QvdmZzLmM6MTE4MzogKiBTb21lIGZpbGVzeXN0ZW1zIG9yIHNpdHVhdGlvbnMgY2Fubm90IHVzZSBuZnNkX3NwbGljZV9yZWFkLiBUaGlzXFxuZnMvbmZzZC92ZnMuYy0xMTg0LSAqIGZ1bmN0aW9uIGlzIHRoZSBzbGlnaHRseSBsZXNzLXBlcmZvcm1hbnQgZmFsbGJhY2sgZm9yIHRob3NlIGNhc2VzLlxcbi0tXFxuZnMvbmZzZC92ZnMuYz0xNDIzPW5mc2RfdmZzX3dyaXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcXG4tLVxcbmZzL25mc2QvdmZzLmMtMTU0MS0gKiBSZXR1cm4gdmFsdWVzOlxcbmZzL25mc2QvdmZzLmM6MTU0MjogKiAgICV0cnVlOiBuZnNkX3NwbGljZV9yZWFkKCkgbWF5IGJlIHVzZWRcXG5mcy9uZnNkL3Zmcy5jOjE1NDM6ICogICAlZmFsc2U6IG5mc2Rfc3BsaWNlX3JlYWQoKSBtdXN0IG5vdCBiZSB1c2VkXFxuZnMvbmZzZC92ZnMuYy0xNTQ0LSAqXFxuLS1cXG5mcy9uZnNkL3Zmcy5jPTE1Nzk9X19iZTMyIG5mc2RfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXFxuLS1cXG5mcy9uZnNkL3Zmcy5jLTE1OTItXFx0aWYgKGZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZXNwbGljZV9yZWFkIFxcdTAwMjZcXHUwMDI2IG5mc2RfcmVhZF9zcGxpY2Vfb2socnFzdHApKVxcbmZzL25mc2QvdmZzLmM6MTU5MzpcXHRcXHRlcnIgPSBuZnNkX3NwbGljZV9yZWFkKHJxc3RwLCBmaHAsIGZpbGUsIG9mZnNldCwgY291bnQsIGVvZik7XFxuZnMvbmZzZC92ZnMuYy0xNTk0LVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6MzE6NTguNTI3OTQ0ODI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ0OTcwODE5NDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIFNwbGljZSBQZXJmb3JtYW5jZSBCb3R0bGVuZWNrIGluIE5GUyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHNvbWUgTkZTIHBlcmZvcm1hbmNlIGRpYWdub3N0aWNzLCBhbmQgdHdvIGZ1bmN0aW9ucyBpbiBwYXJ0aWN1bGFyIGhhdmUgY2F1Z2h0IG15IGV5ZTogYG5mc2Rfc3BsaWNlX3JlYWRgIGFuZCBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgLiBUaGUga2V5IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgbmVpdGhlciBvZiB0aGVzZSBpcyBkZWNsYXJlZCBgc3RhdGljYC4gVGhpcyBpc24ndCBhICpndWFyYW50ZWUqIG9mIGFuIGlzc3VlLCBidXQgaXQgZG9lcyBtZWFuIHRoZXkncmUgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSBhbmQgY2FsbGFibGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBpbmNyZWFzaW5nIHRoZSBjaGFuY2Ugb2YgdXNhZ2Ugb3V0c2lkZSBvZiB3aGVyZSB0aGV5IHdlcmUgb3JpZ2luYWxseSBpbnRlbmRlZCwgb3IgdXNlZCBkaWZmZXJlbnRseSB0aGFuIGludGVuZGVkIHdoaWNoIG1pZ2h0IGltcGFjdCBwZXJmb3JtYW5jZS5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlLiBHaXZlbiB0aGF0IGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgc291bmRzIGxpa2UgYSBtb3JlIGdlbmVyYWwgVkZTIGZ1bmN0aW9uIHRoYXQgSSBrbm93IGNhbiBiZSB1c2VkIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UsIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgb3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIHdpdGhpbiBgZnMvc3BsaWNlLmNgLiBUaGlzIGZpbGUncyBsaWtlbHkgdG8gc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBkaXJlY3QgaW50ZXJhY3Rpb24gYmV0d2VlbiBWRlMgc3BsaWNpbmcgYW5kIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgZmlsZSBzeXN0ZW0gYmVoYXZpb3IgYW5kIGhvdyBgbmZzZF9zcGxpY2VfcmVhZGAgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgaG93IHdlIG1pZ2h0IGJlIGhhbmRsaW5nIHNwbGljZWQgZGF0YSBpbiBORlMuIEJ5IGV4YW1pbmluZyB0aGUgY29kZSBoZXJlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBkYXRhIGZsb3cgYW5kIGhvdyB0aGUgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBtaWdodCBwbGF5IG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkwMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjM2OjAzLjQ5ODc2NjUyNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzIwMzk2MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvc3BsaWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc3BsaWNlLmM9MTAxOD1zdGF0aWMgc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCxcXG4tLVxcbmZzL3NwbGljZS5jLTExNDQtLyoqXFxuZnMvc3BsaWNlLmM6MTE0NTogKiB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvciAtIHNwbGljZSBmcm9tIGEgZmlsZSB0aHJvdWdoIGEgY2FsbGVyJ3MgYWN0b3JcXG5mcy9zcGxpY2UuYy0xMTQ2LSAqIEBpbjpcXHRcXHRmaWxlIHRvIHNwbGljZSBmcm9tOyBtdXN0IGJlIHNlZWthYmxlIChGTU9ERV9MU0VFSylcXG4tLVxcbmZzL3NwbGljZS5jLTExNjEtICovXFxuZnMvc3BsaWNlLmM6MTE2Mjpzc2l6ZV90IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCxcXG5mcy9zcGxpY2UuYy0xMTYzLVxcdFxcdFxcdFxcdCAgIHNwbGljZV9kaXJlY3RfYWN0b3IgKmFjdG9yKVxcbi0tXFxuZnMvc3BsaWNlLmMtMTE3NS19XFxuZnMvc3BsaWNlLmM6MTE3NjpFWFBPUlRfU1lNQk9MKHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKTtcXG5mcy9zcGxpY2UuYy0xMTc3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNjowMy44MzA4MTM2NzJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTUzNDU0Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipGb2N1c2luZyBvbiBFZmZpY2llbnQgRGF0YSBUcmFuc2ZlcnMgaW4gTkZTKipcblxuUmlnaHQsIHNvIEknbSBob21pbmcgaW4gb24gc29tZSBjcml0aWNhbCBhcmVhcyBmb3IgTkZTIHBlcmZvcm1hbmNlLiBUaGUga2V5IGZ1bmN0aW9ucyBJJ20gaWRlbnRpZnlpbmcgYXMgY3JpdGljYWwgZm9jdXMgc3ltYm9scyBmb3IgZGVlcGVyIGFuYWx5c2lzIGFyZSBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIGFuZCBgbmZzZF9zcGxpY2VfcmVhZGAuIFRoZXNlIGFyZSB3aGVyZSB0aGUgcnViYmVyIHJlYWxseSBtZWV0cyB0aGUgcm9hZCBpbiB0ZXJtcyBvZiB6ZXJvLWNvcHkgZGF0YSB0cmFuc2ZlciwgcGFydGljdWxhcmx5IGluIHRoZSBzZXJ2ZXItc2lkZSBORlMgaW1wbGVtZW50YXRpb24uXG5cblRoZSBvdmVyYWxsIGNvbnRleHQgaGVyZSBpcyB0aGF0IEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBvcHRpbWl6aW5nIHRoZSBORlMgKnNlcnZlciog4oCTIHNvIEknbSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBORlNEIGNvbmZpZ3VyYXRpb24gZmxhZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NDMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNjoxMC43ODQyNzAwMjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzMzg0NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GU0RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmZzZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25mc2QvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL25mc2QvS2NvbmZpZzoyOmNvbmZpZyBORlNEXFxuZnMvbmZzZC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0zOS1cXG5mcy9uZnNkL0tjb25maWc6NDA6Y29uZmlnIE5GU0RfVjJcXG5mcy9uZnNkL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiTkZTIHNlcnZlciBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiAyIChERVBSRUNBVEVEKVxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy01MC1cXG5mcy9uZnNkL0tjb25maWc6NTE6Y29uZmlnIE5GU0RfVjJfQUNMXFxuZnMvbmZzZC9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgdGhlIE5GU3YyIEFDTCBwcm90b2NvbCBleHRlbnNpb25cXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctNTQtXFxuZnMvbmZzZC9LY29uZmlnOjU1OmNvbmZpZyBORlNEX1YzX0FDTFxcbmZzL25mc2QvS2NvbmZpZy01Ni1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIHRoZSBORlN2MyBBQ0wgcHJvdG9jb2wgZXh0ZW5zaW9uXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTc2LVxcbmZzL25mc2QvS2NvbmZpZzo3Nzpjb25maWcgTkZTRF9WNFxcbmZzL25mc2QvS2NvbmZpZy03OC1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDRcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctOTMtXFxuZnMvbmZzZC9LY29uZmlnOjk0OmNvbmZpZyBORlNEX1BORlNcXG5mcy9uZnNkL0tjb25maWctOTUtXFx0Ym9vbFxcbmZzL25mc2QvS2NvbmZpZy05Ni1cXG5mcy9uZnNkL0tjb25maWc6OTc6Y29uZmlnIE5GU0RfQkxPQ0tMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiTkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBibG9jayBsYXlvdXRzXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTEwOS1cXG5mcy9uZnNkL0tjb25maWc6MTEwOmNvbmZpZyBORlNEX1NDU0lMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctMTExLVxcdGJvb2wgXFxcIk5GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgU0NTSSBsYXlvdXRzXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTEyMy1cXG5mcy9uZnNkL0tjb25maWc6MTI0OmNvbmZpZyBORlNEX0ZMRVhGSUxFTEFZT1VUXFxuZnMvbmZzZC9LY29uZmlnLTEyNS1cXHRib29sIFxcXCJORlN2NC4xIHNlcnZlciBzdXBwb3J0IGZvciBwTkZTIEZsZXggRmlsZSBsYXlvdXRzXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE0MC1cXG5mcy9uZnNkL0tjb25maWc6MTQxOmNvbmZpZyBORlNEX1Y0XzJfSU5URVJfU1NDXFxuZnMvbmZzZC9LY29uZmlnLTE0Mi1cXHRib29sIFxcXCJORlN2NC4yIGludGVyIHNlcnZlciB0byBzZXJ2ZXIgQ09QWVxcXCJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNTAtXFxuZnMvbmZzZC9LY29uZmlnOjE1MTpjb25maWcgTkZTRF9WNF9TRUNVUklUWV9MQUJFTFxcbmZzL25mc2QvS2NvbmZpZy0xNTItXFx0Ym9vbCBcXFwiUHJvdmlkZSBTZWN1cml0eSBMYWJlbCBzdXBwb3J0IGZvciBORlN2NCBzZXJ2ZXJcXFwiXFxuLS1cXG5mcy9uZnNkL0tjb25maWctMTYzLVxcbmZzL25mc2QvS2NvbmZpZzoxNjQ6Y29uZmlnIE5GU0RfTEVHQUNZX0NMSUVOVF9UUkFDS0lOR1xcbmZzL25mc2QvS2NvbmZpZy0xNjUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgTkZTdjQgY2xpZW50IHRyYWNraW5nIG1ldGhvZHMgKERFUFJFQ0FURUQpXFxcIlxcbi0tXFxuZnMvbmZzZC9LY29uZmlnLTE3OS1cXG5mcy9uZnNkL0tjb25maWc6MTgwOmNvbmZpZyBORlNEX1Y0X1BPU0lYX0FDTFNcXG5mcy9uZnNkL0tjb25maWctMTgxLVxcdGJvb2wgXFxcIlN1cHBvcnQgTkZTdjQgUE9TSVggZHJhZnQgQUNMc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6MzY6MTAuODI3NjEyMTA1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwNTY2NzYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgTkZTIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRoZSBxdWVzdGlvbiBhdCBoYW5kIGlzIHdoZXRoZXIgdXNpbmcgYE5GU0RgIGlzIHN1ZmZpY2llbnQgZm9yIHRoaXMgcGFydGljdWxhciB0YXNrLiBCZWZvcmUganVtcGluZyB0byBhbnkgY29uY2x1c2lvbnMsIEkgbmVlZCB0byB0aG9yb3VnaGx5IGFzc2VzcyBpdHMgZGVwZW5kZW5jaWVzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0IGRvZXMgYE5GU0RgIHJlbHkgb24/XCIgSSBpbnN0aW5jdGl2ZWx5IGtub3cgdGhhdCBgTkZTRGAgaXMgaW50cmljYXRlbHkgbGlua2VkIHRvIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUgKGBJTkVUYCksIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIE9mIGNvdXJzZSwgZmlsZSBsb2NraW5nIChgRklMRV9MT0NLSU5HYCkgaXMgYSBrZXkgY29tcG9uZW50IGZvciBORlMsIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGluIGEgZGlzdHJpYnV0ZWQgZW52aXJvbm1lbnQsIHNvIHRoYXQncyBleHBlY3RlZC4gRmluYWxseSwgdGhlIGluY2x1c2lvbiBvZiBgRlNOT1RJRllgIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBiZWNhdXNlIGl0IHdvdWxkIHN1Z2dlc3QgdGhhdCB0aGVyZSBtYXkgYmUgYSBuZWVkIGZvciBjaGFuZ2Ugbm90aWZpY2F0aW9ucyB3aXRoaW4gdGhlIGZpbGUgc3lzdGVtIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2MjIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNjoxNC4zMzMyODE4MzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzczMzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmZzZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25mc2QvS2NvbmZpZz0yPWNvbmZpZyBORlNEXFxuZnMvbmZzZC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG5mcy9uZnNkL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVRcXG5mcy9uZnNkL0tjb25maWc6NTpcXHRkZXBlbmRzIG9uIEZJTEVfTE9DS0lOR1xcbmZzL25mc2QvS2NvbmZpZzo2OlxcdGRlcGVuZHMgb24gRlNOT1RJRllcXG5mcy9uZnNkL0tjb25maWctNy1cXHRzZWxlY3QgQ1JDMzJcXG4tLVxcbmZzL25mc2QvS2NvbmZpZy0xNi1cXHRzZWxlY3QgTkZTX0FDTF9TVVBQT1JUIGlmIE5GU0RfVjNfQUNMXFxuZnMvbmZzZC9LY29uZmlnOjE3OlxcdGRlcGVuZHMgb24gTVVMVElVU0VSXFxuZnMvbmZzZC9LY29uZmlnLTE4LVxcdGhlbHBcXG4tLVxcbmZzL25mc2QvS2NvbmZpZz00MD1jb25maWcgTkZTRF9WMlxcbmZzL25mc2QvS2NvbmZpZy00MS1cXHRib29sIFxcXCJORlMgc2VydmVyIHN1cHBvcnQgZm9yIE5GUyB2ZXJzaW9uIDIgKERFUFJFQ0FURUQpXFxcIlxcbmZzL25mc2QvS2NvbmZpZzo0MjpcXHRkZXBlbmRzIG9uIE5GU0RcXG5mcy9uZnNkL0tjb25maWctNDMtXFx0ZGVmYXVsdCBuXFxuLS1cXG5mcy9uZnNkL0tjb25maWc9NTE9Y29uZmlnIE5GU0RfVjJfQUNMXFxuZnMvbmZzZC9LY29uZmlnLTUyLVxcdGJvb2wgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgdGhlIE5GU3YyIEFDTCBwcm90b2NvbCBleHRlbnNpb25cXFwiXFxuZnMvbmZzZC9LY29uZmlnOjUzOlxcdGRlcGVuZHMgb24gTkZTRF9WMlxcbmZzL25mc2QvS2NvbmZpZy01NC1cXG5mcy9uZnNkL0tjb25maWc9NTU9Y29uZmlnIE5GU0RfVjNfQUNMXFxuZnMvbmZzZC9LY29uZmlnLTU2LVxcdGJvb2wgXFxcIk5GUyBzZXJ2ZXIgc3VwcG9ydCBmb3IgdGhlIE5GU3YzIEFDTCBwcm90b2NvbCBleHRlbnNpb25cXFwiXFxuZnMvbmZzZC9LY29uZmlnOjU3OlxcdGRlcGVuZHMgb24gTkZTRFxcbmZzL25mc2QvS2NvbmZpZy01OC1cXHRoZWxwXFxuLS1cXG5mcy9uZnNkL0tjb25maWc9Nzc9Y29uZmlnIE5GU0RfVjRcXG5mcy9uZnNkL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiTkZTIHNlcnZlciBzdXBwb3J0IGZvciBORlMgdmVyc2lvbiA0XFxcIlxcbmZzL25mc2QvS2NvbmZpZzo3OTpcXHRkZXBlbmRzIG9uIE5GU0QgXFx1MDAyNlxcdTAwMjYgUFJPQ19GU1xcbmZzL25mc2QvS2NvbmZpZy04MC1cXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuLS1cXG5mcy9uZnNkL0tjb25maWc9OTc9Y29uZmlnIE5GU0RfQkxPQ0tMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctOTgtXFx0Ym9vbCBcXFwiTkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBibG9jayBsYXlvdXRzXFxcIlxcbmZzL25mc2QvS2NvbmZpZzo5OTpcXHRkZXBlbmRzIG9uIE5GU0RfVjQgXFx1MDAyNlxcdTAwMjYgQkxPQ0tcXG5mcy9uZnNkL0tjb25maWctMTAwLVxcdHNlbGVjdCBORlNEX1BORlNcXG4tLVxcbmZzL25mc2QvS2NvbmZpZz0xMTA9Y29uZmlnIE5GU0RfU0NTSUxBWU9VVFxcbmZzL25mc2QvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiTkZTdjQuMSBzZXJ2ZXIgc3VwcG9ydCBmb3IgcE5GUyBTQ1NJIGxheW91dHNcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjExMjpcXHRkZXBlbmRzIG9uIE5GU0RfVjQgXFx1MDAyNlxcdTAwMjYgQkxPQ0tcXG5mcy9uZnNkL0tjb25maWctMTEzLVxcdHNlbGVjdCBORlNEX1BORlNcXG4tLVxcbmZzL25mc2QvS2NvbmZpZz0xMjQ9Y29uZmlnIE5GU0RfRkxFWEZJTEVMQVlPVVRcXG5mcy9uZnNkL0tjb25maWctMTI1LVxcdGJvb2wgXFxcIk5GU3Y0LjEgc2VydmVyIHN1cHBvcnQgZm9yIHBORlMgRmxleCBGaWxlIGxheW91dHNcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjEyNjpcXHRkZXBlbmRzIG9uIE5GU0RfVjRcXG5mcy9uZnNkL0tjb25maWctMTI3LVxcdHNlbGVjdCBORlNEX1BORlNcXG4tLVxcbmZzL25mc2QvS2NvbmZpZz0xNDE9Y29uZmlnIE5GU0RfVjRfMl9JTlRFUl9TU0NcXG5mcy9uZnNkL0tjb25maWctMTQyLVxcdGJvb2wgXFxcIk5GU3Y0LjIgaW50ZXIgc2VydmVyIHRvIHNlcnZlciBDT1BZXFxcIlxcbmZzL25mc2QvS2NvbmZpZzoxNDM6XFx0ZGVwZW5kcyBvbiBORlNEX1Y0IFxcdTAwMjZcXHUwMDI2IE5GU19WNF8yXFxuZnMvbmZzZC9LY29uZmlnLTE0NC1cXHRoZWxwXFxuLS1cXG5mcy9uZnNkL0tjb25maWc9MTUxPWNvbmZpZyBORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMXFxuZnMvbmZzZC9LY29uZmlnLTE1Mi1cXHRib29sIFxcXCJQcm92aWRlIFNlY3VyaXR5IExhYmVsIHN1cHBvcnQgZm9yIE5GU3Y0IHNlcnZlclxcXCJcXG5mcy9uZnNkL0tjb25maWc6MTUzOlxcdGRlcGVuZHMgb24gTkZTRF9WNCBcXHUwMDI2XFx1MDAyNiBTRUNVUklUWVxcbmZzL25mc2QvS2NvbmZpZy0xNTQtXFx0aGVscFxcbi0tXFxuZnMvbmZzZC9LY29uZmlnPTE2ND1jb25maWcgTkZTRF9MRUdBQ1lfQ0xJRU5UX1RSQUNLSU5HXFxuZnMvbmZzZC9LY29uZmlnLTE2NS1cXHRib29sIFxcXCJTdXBwb3J0IGxlZ2FjeSBORlN2NCBjbGllbnQgdHJhY2tpbmcgbWV0aG9kcyAoREVQUkVDQVRFRClcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjE2NjpcXHRkZXBlbmRzIG9uIE5GU0RfVjRcXG5mcy9uZnNkL0tjb25maWctMTY3LVxcdGRlZmF1bHQgblxcbi0tXFxuZnMvbmZzZC9LY29uZmlnPTE4MD1jb25maWcgTkZTRF9WNF9QT1NJWF9BQ0xTXFxuZnMvbmZzZC9LY29uZmlnLTE4MS1cXHRib29sIFxcXCJTdXBwb3J0IE5GU3Y0IFBPU0lYIGRyYWZ0IEFDTHNcXFwiXFxuZnMvbmZzZC9LY29uZmlnOjE4MjpcXHRkZXBlbmRzIG9uIE5GU0RfVjRcXG5mcy9uZnNkL0tjb25maWctMTgzLVxcdGRlZmF1bHQgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNjoxNC4zNzYwNTk1MDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1MjMzMjc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBORlNEIGFuZCBTcGxpY2UuYyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiBgTkZTRGAgaGVyZS4gTXkgdGhpbmtpbmcgaXMgdGhhdCBgTkZTRGAncyBsaWtlbHkgZGVwZW5kZW5jaWVzIGFyZSBpbXBvcnRhbnQsIGFuZCByaWdodCBub3cgSSB0aGluayBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIGlzIHRoZSBmdW5jdGlvbiBvZiBpbnRlcmVzdC4gSSByZWNhbGwgdGhhdCBsaXZlcyBpbiBgZnMvc3BsaWNlLmNgLiBOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGlzIGBmcy9zcGxpY2UuY2AgYWx3YXlzIGJ1aWx0PyBJZiBpdCAqaXMqIGFsd2F5cyBidWlsdCwgdGhlbiB0aGF0IHNpbXBsaWZpZXMgYSBsb3Qgb2YgdGhpbmdzLiBJZiBub3QsIHRoZW4gSSBuZWVkIHRvIGNvbnNpZGVyIGl0cyBidWlsZCBjb25maWd1cmF0aW9ucyBtb3JlIGNhcmVmdWxseS4gVGltZSB0byBjaGVjayB0aG9zZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA2OCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjM2OjE3LjgyODM5NTQ0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIyNzgxNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3BsaWNlLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9MTA9b2JqLXkgOj1cXHRvcGVuLm8gcmVhZF93cml0ZS5vIGZpbGVfdGFibGUubyBzdXBlci5vIFxcXFxcXG4tLVxcbmZzL01ha2VmaWxlLTE0LVxcdFxcdHNlcV9maWxlLm8geGF0dHIubyBsaWJmcy5vIGZzLXdyaXRlYmFjay5vIFxcXFxcXG5mcy9NYWtlZmlsZToxNTpcXHRcXHRwbm9kZS5vIHNwbGljZS5vIHN5bmMubyB1dGltZXMubyBkX3BhdGgubyBcXFxcXFxuZnMvTWFrZWZpbGUtMTYtXFx0XFx0c3RhY2subyBmc19zdHJ1Y3QubyBzdGF0ZnMubyBmc19waW4ubyBuc2ZzLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNjoxNy44NzA2NzcwODRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjUzNTgxOTU3MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUtcmVsYXRlZCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGZzL3NwbGljZS5jYCBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBgZnMvc3BsaWNlLmNgIGlzIGFsd2F5cyBidWlsdCDigJMgdGhhdCdzIGdvb2QgdG8ga25vdy4gSXQgc2ltcGxpZmllcyBteSBpbml0aWFsIGFuYWx5c2lzLiBOb3cgSSBjYW4gY29uY2VudHJhdGUgc3BlY2lmaWNhbGx5IG9uIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgYW5kIGBuZnNkX3NwbGljZV9yZWFkYC4gQW5kIHRoZSBmYWN0IHRoYXQgdGhlIE5GU0QgY29uZmlnIGlzIGFjdGl2ZSwgd2hpY2ggaXMgaW1wb3J0YW50IGNvbnRleHQuXG5cbkJ1dCBJIHJlYWxseSBzaG91bGQgY29uZmlybSB0aGF0IHRob3NlIGFyZSAqYWxsKiB0aGUgZGlyZWN0IGNhbGxlcnMgb2YgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYC4gSSB3YW50IHRvIGJlIHRob3JvdWdoIGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvciBpbnRlZ3JhdGlvbnMuIFRpbWUgZm9yIGFub3RoZXIgcGFzcyB0aHJvdWdoIHRoZSBjb2RlYmFzZSB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIEl0J3MgZWFzeSB0byBvdmVybG9vayB0aGluZ3MgaW4gdGhlc2Uga2luZHMgb2YgaW52ZXN0aWdhdGlvbnMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc3VjaCBhIGNvcmUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNjo0My4yMjg4NzQ4MTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTU2NzAwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25mc2QvdmZzLmM9MTA3OD1fX2JlMzIgbmZzZF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXFxuLS1cXG5mcy9uZnNkL3Zmcy5jLTEwOTAtXFx0dHJhY2VfbmZzZF9yZWFkX3NwbGljZShycXN0cCwgZmhwLCBvZmZzZXQsICpjb3VudCk7XFxuZnMvbmZzZC92ZnMuYzoxMDkxOlxcdGhvc3RfZXJyID0gdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3IoZmlsZSwgXFx1MDAyNnNkLFxcbmZzL25mc2QvdmZzLmMtMTA5Mi1cXHRcXHRcXHRcXHRcXHQgICAgICBuZnNkX2RpcmVjdF9zcGxpY2VfYWN0b3IpO1xcbi0tXFxuZnMvc3BsaWNlLmM9MTAxOD1zdGF0aWMgc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCxcXG4tLVxcbmZzL3NwbGljZS5jLTExNDQtLyoqXFxuZnMvc3BsaWNlLmM6MTE0NTogKiB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvciAtIHNwbGljZSBmcm9tIGEgZmlsZSB0aHJvdWdoIGEgY2FsbGVyJ3MgYWN0b3JcXG5mcy9zcGxpY2UuYy0xMTQ2LSAqIEBpbjpcXHRcXHRmaWxlIHRvIHNwbGljZSBmcm9tOyBtdXN0IGJlIHNlZWthYmxlIChGTU9ERV9MU0VFSylcXG4tLVxcbmZzL3NwbGljZS5jLTExNjEtICovXFxuZnMvc3BsaWNlLmM6MTE2Mjpzc2l6ZV90IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCxcXG5mcy9zcGxpY2UuYy0xMTYzLVxcdFxcdFxcdFxcdCAgIHNwbGljZV9kaXJlY3RfYWN0b3IgKmFjdG9yKVxcbi0tXFxuZnMvc3BsaWNlLmMtMTE3NS19XFxuZnMvc3BsaWNlLmM6MTE3NjpFWFBPUlRfU1lNQk9MKHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKTtcXG5mcy9zcGxpY2UuYy0xMTc3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9zcGxpY2UuaD03OT1zc2l6ZV90IHZmc19zcGxpY2VfcmVhZChzdHJ1Y3QgZmlsZSAqaW4sIGxvZmZfdCAqcHBvcyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3BsaWNlLmgtODEtXFx0XFx0XFx0dW5zaWduZWQgaW50IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L3NwbGljZS5oOjgyOnNzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXFxuaW5jbHVkZS9saW51eC9zcGxpY2UuaC04My1cXHRcXHRcXHRcXHQgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3Rvcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjM2OjQ0Ljc4NDU0OTYxMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQyMDMzODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgQ292ZXJhZ2UqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGl0IHNlZW1zIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIGNhbGxpbmcgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCByaWdodCBub3cgaXMgYG5mc2Rfc3BsaWNlX3JlYWRgLiBMZXQncyBqdXN0IGRvIGEgZmluYWwgc2FuaXR5IGNoZWNrIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gb3JkZXIuXG5cblRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byB0cnVlLCB3aGljaCBJIGNvbmN1ciB3aXRoIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgYXBwcm9wcmlhdGVseSBzY29wZWQgdG8gdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzOiBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIGFuZCBgbmZzZF9zcGxpY2VfcmVhZGAuIEFuZCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBzZW5zaWJsZSDigJMgZW5hYmxpbmcgYE5GU0RgIGlzIG5lY2Vzc2FyeSB0byBhY3R1YWxseSBleGVyY2lzZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkuXG5cbk15IHJlYXNvbmluZz8gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgY29yZSBWRlMgbG9naWMgZm9yIHNwbGljaW5nIGFuZCwgY3J1Y2lhbGx5LCB0aGUgTkZTRCByZWFkIHBhdGhzLiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIEFQSSBhbmQgdGhlIHVwZGF0ZWQgYG5mc2Rfc3BsaWNlX3JlYWRgIGNhbGwgY2xlYXJseSByZXByZXNlbnQgcmVhY2hhYmxlLCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlc2UgY3JpdGljYWwgY29kZSBwYXRocy4gVGhlc2UgYXJlIGV4YWN0bHkgdGhlIGtpbmQgb2YgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZGVlcCBmdXp6aW5nLiBJJ20gcmVhc29uYWJseSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjMyLCJPdXRwdXRUb2tlbnMiOjEwOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNjo0OS40MjY1ODU5MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5ODI0ODU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORlNEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JcIixcbiAgICBcIm5mc2Rfc3BsaWNlX3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBsb2dpYyBmb3Igc3BsaWNpbmcgYW5kIE5GU0QgcmVhZCBwYXRocywgaW50cm9kdWNpbmcgYSBuZXcgQVBJIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgYW5kIHVwZGF0aW5nIGBuZnNkX3NwbGljZV9yZWFkYCB0byB1c2UgaXQuIFRoZXNlIGFyZSByZWFjaGFibGUgZnVuY3Rpb25hbCBjaGFuZ2VzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GU0RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvclwiLFxuICAgIFwibmZzZF9zcGxpY2VfcmVhZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGxvZ2ljIGZvciBzcGxpY2luZyBhbmQgTkZTRCByZWFkIHBhdGhzLCBpbnRyb2R1Y2luZyBhIG5ldyBBUEkgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBhbmQgdXBkYXRpbmcgYG5mc2Rfc3BsaWNlX3JlYWRgIHRvIHVzZSBpdC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmdW5jdGlvbmFsIGNoYW5nZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjM2OjQ5LjUwNjQxNzQ3NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4MjgxOTgxNjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6MzY6NDkuNTA2ODk3NTc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM5ODI4MTQ5NzUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBpbiBgZnMvc3BsaWNlLmNgIHRoYXQgY29uc29saWRhdGVzIGV4aXN0aW5nIGNhbGxzIHRvIGByd192ZXJpZnlfYXJlYWAsIGBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCwgYW5kIGBmc25vdGlmeV9hY2Nlc3NgLiBJdCB0aGVuIHVwZGF0ZXMgYG5mc2Rfc3BsaWNlX3JlYWRgIGluIGBmcy9uZnNkL3Zmcy5jYCB0byB1c2UgdGhpcyBuZXcgaGVscGVyLiBUaGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHN0cnVjdHVyYWwgcmVmYWN0b3JpbmcgdGhhdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBvciBjaGFuZ2VzIHRvIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGUgbW9kaWZpY2F0aW9ucyBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBvciBpbmZvLWxlYWtzLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGlzc3VlcyAoc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSB0aGF0IG1pZ2h0IHRoZW9yZXRpY2FsbHkgYXJpc2UgZnJvbSBWRlMgY2hhbmdlcy4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MmU5ZjU1ZWI5Mjk4ODI5ZWZkYmIzMjI0ZTc3Y2Q0N2M2NThhNTJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTg6Mjc6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5jIGIvZnMvbmZzZC92ZnMuY1xuaW5kZXggMWU4OWM3ZmY5NDkzYi4uYTQ2NWUyNzZkNjc1NCAxMDA2NDRcbi0tLSBhL2ZzL25mc2QvdmZzLmNcbisrKyBiL2ZzL25mc2QvdmZzLmNcbkBAIC0xMDU1LDcgKzEwNTUsNiBAQCBzdGF0aWMgX19iZTMyIG5mc2RfZmluaXNoX3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxuIFx0XHRuZnNkX3N0YXRzX2lvX3JlYWRfYWRkKG5uLCBmaHAtXHUwMDNlZmhfZXhwb3J0LCBob3N0X2Vycik7XG4gXHRcdCplb2YgPSBuZnNkX2VvZl9vbl9yZWFkKGZpbGUsIG9mZnNldCwgaG9zdF9lcnIsICpjb3VudCk7XG4gXHRcdCpjb3VudCA9IGhvc3RfZXJyO1xuLVx0XHRmc25vdGlmeV9hY2Nlc3MoZmlsZSk7XG4gXHRcdHRyYWNlX25mc2RfcmVhZF9pb19kb25lKHJxc3RwLCBmaHAsIG9mZnNldCwgKmNvdW50KTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9IGVsc2Uge1xuQEAgLTEwODksMTAgKzEwODgsOCBAQCBfX2JlMzIgbmZzZF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXG4gXHRzc2l6ZV90IGhvc3RfZXJyO1xuIFxuIFx0dHJhY2VfbmZzZF9yZWFkX3NwbGljZShycXN0cCwgZmhwLCBvZmZzZXQsICpjb3VudCk7XG4tXHRob3N0X2VyciA9IHJ3X3ZlcmlmeV9hcmVhKFJFQUQsIGZpbGUsIFx1MDAyNm9mZnNldCwgKmNvdW50KTtcbi1cdGlmICghaG9zdF9lcnIpXG4tXHRcdGhvc3RfZXJyID0gc3BsaWNlX2RpcmVjdF90b19hY3RvcihmaWxlLCBcdTAwMjZzZCxcbi1cdFx0XHRcdFx0XHQgIG5mc2RfZGlyZWN0X3NwbGljZV9hY3Rvcik7XG4rXHRob3N0X2VyciA9IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsIFx1MDAyNnNkLFxuK1x0XHRcdFx0XHQgICAgICBuZnNkX2RpcmVjdF9zcGxpY2VfYWN0b3IpO1xuIFx0cmV0dXJuIG5mc2RfZmluaXNoX3JlYWQocnFzdHAsIGZocCwgZmlsZSwgb2Zmc2V0LCBjb3VudCwgZW9mLCBob3N0X2Vycik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL3NwbGljZS5jIGIvZnMvc3BsaWNlLmNcbmluZGV4IDlkOGY2M2UyZmQxYWIuLjQyYWQ3MTJhMGY0ZGEgMTAwNjQ0XG4tLS0gYS9mcy9zcGxpY2UuY1xuKysrIGIvZnMvc3BsaWNlLmNcbkBAIC0xMDA5LDIxICsxMDA5LDE0IEBAIHNzaXplX3QgdmZzX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZnNfc3BsaWNlX3JlYWQpO1xuIFxuLS8qKlxuLSAqIHNwbGljZV9kaXJlY3RfdG9fYWN0b3IgLSBzcGxpY2VzIGRhdGEgZGlyZWN0bHkgYmV0d2VlbiB0d28gbm9uLXBpcGVzXG4tICogQGluOlx0XHRmaWxlIHRvIHNwbGljZSBmcm9tXG4tICogQHNkOlx0XHRhY3RvciBpbmZvcm1hdGlvbiBvbiB3aGVyZSB0byBzcGxpY2UgdG9cbi0gKiBAYWN0b3I6XHRoYW5kbGVzIHRoZSBkYXRhIHNwbGljaW5nXG4tICpcbi0gKiBEZXNjcmlwdGlvbjpcbi0gKiAgICBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGhlbHBlciB0byBzcGxpY2UgZGlyZWN0bHkgYmV0d2VlbiB0d29cbi0gKiAgICBwb2ludHMsIHdpdGhvdXQgcmVxdWlyaW5nIGFuIGV4cGxpY2l0IHBpcGUuIEludGVybmFsbHkgYW4gYWxsb2NhdGVkXG4tICogICAgcGlwZSBpcyBjYWNoZWQgaW4gdGhlIHByb2Nlc3MsIGFuZCByZXVzZWQgZHVyaW5nIHRoZSBsaWZldGltZSBvZlxuLSAqICAgIHRoYXQgcHJvY2Vzcy5cbi0gKlxuKy8qXG4rICogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSBoZWxwZXIgdG8gc3BsaWNlIGRpcmVjdGx5IGJldHdlZW4gdHdvXG4rICogcG9pbnRzLCB3aXRob3V0IHJlcXVpcmluZyBhbiBleHBsaWNpdCBwaXBlLiBJbnRlcm5hbGx5IGFuIGFsbG9jYXRlZFxuKyAqIHBpcGUgaXMgY2FjaGVkIGluIHRoZSBwcm9jZXNzLCBhbmQgcmV1c2VkIGR1cmluZyB0aGUgbGlmZXRpbWUgb2ZcbisgKiB0aGF0IHByb2Nlc3MuXG4gICovXG4tc3NpemVfdCBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKHN0cnVjdCBmaWxlICppbiwgc3RydWN0IHNwbGljZV9kZXNjICpzZCxcbi1cdFx0XHQgICAgICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpXG4rc3RhdGljIHNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4rXHRcdFx0XHQgICAgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3RvcilcbiB7XG4gXHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlO1xuIFx0c3NpemVfdCByZXQsIGJ5dGVzO1xuQEAgLTExNDcsNyArMTE0MCw0MCBAQCBzc2l6ZV90IHNwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLFxuIFxuIFx0Z290byBkb25lO1xuIH1cbi1FWFBPUlRfU1lNQk9MKHNwbGljZV9kaXJlY3RfdG9fYWN0b3IpO1xuK1xuKy8qKlxuKyAqIHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yIC0gc3BsaWNlIGZyb20gYSBmaWxlIHRocm91Z2ggYSBjYWxsZXIncyBhY3RvclxuKyAqIEBpbjpcdFx0ZmlsZSB0byBzcGxpY2UgZnJvbTsgbXVzdCBiZSBzZWVrYWJsZSAoRk1PREVfTFNFRUspXG4rICogQHNkOlx0XHRzcGxpY2UgcGFyYW1ldGVycy4gVGhlIGNhbGxlciBzZXRzIEBzZC1cdTAwM2Vwb3MgYW5kXG4rICpcdFx0QHNkLVx1MDAzZXRvdGFsX2xlbi4gQHNkLVx1MDAzZXBvcyBhZHZhbmNlcyBhcyBkYXRhIGlzIGNvbnN1bWVkLFxuKyAqXHRcdGFuZCBAc2QtXHUwMDNldG90YWxfbGVuIGlzIG92ZXJ3cml0dGVuIHdpdGggdGhlIGxlbmd0aCBvZlxuKyAqXHRcdGVhY2ggcmVhZC5cbisgKiBAYWN0b3I6XHRjb25zdW1lcyBlYWNoIHBpcGUtZnVsbCBhbmQgcmV0dXJucyB0aGUgbnVtYmVyIG9mXG4rICpcdFx0Ynl0ZXMgdGFrZW5cbisgKlxuKyAqIERlc2NyaXB0aW9uOlxuKyAqICAgIFNwbGljZSBmcm9tIEBpbiB0aHJvdWdoIEBhY3RvciwgZm9yIGEgY2FsbGVyIHRoYXQgY29uc3VtZXNcbisgKiAgICB0aGUgZGF0YSBpdHNlbGYgcmF0aGVyIHRoYW4gc2VuZGluZyBpdCB0byBhIHNlY29uZCBmaWxlLlxuKyAqICAgIFRoaXMgaGVscGVyIHZlcmlmaWVzIHRoZSByZWFkIGFuZCBlbWl0cyB0aGUgZnNub3RpZnkgYWNjZXNzXG4rICogICAgZXZlbnQuIGRvX3NwbGljZV9kaXJlY3QoKSBsZWF2ZXMgYm90aCB0byBpdHMgY2FsbGVycy5cbisgKlxuKyAqIFJldHVybjogVGhlIG51bWJlciBvZiBieXRlcyBzcGxpY2VkLCBvciBhIG5lZ2F0aXZlIGVycm5vLlxuKyAqL1xuK3NzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmluLCBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkLFxuK1x0XHRcdFx0ICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpXG4re1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRyZXQgPSByd192ZXJpZnlfYXJlYShSRUFELCBpbiwgXHUwMDI2c2QtXHUwMDNlcG9zLCBzZC1cdTAwM2V0b3RhbF9sZW4pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldCA9IHNwbGljZV9kaXJlY3RfdG9fYWN0b3IoaW4sIHNkLCBhY3Rvcik7XG4rXHRpZiAocmV0IFx1MDAzZT0gMClcbitcdFx0ZnNub3RpZnlfYWNjZXNzKGluKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0wodmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3IpO1xuIFxuIHN0YXRpYyBpbnQgZGlyZWN0X3NwbGljZV9hY3RvcihzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3Qgc3BsaWNlX2Rlc2MgKnNkKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BsaWNlLmggYi9pbmNsdWRlL2xpbnV4L3NwbGljZS5oXG5pbmRleCA5ZGVjNDg2MWQwOWY2Li40ZTkxZDAzZWQ2NDVmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zcGxpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zcGxpY2UuaFxuQEAgLTc5LDggKzc5LDggQEAgc3NpemVfdCBhZGRfdG9fcGlwZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1Zik7XG4gc3NpemVfdCB2ZnNfc3BsaWNlX3JlYWQoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKnBwb3MsXG4gXHRcdFx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbixcbiBcdFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuLXNzaXplX3Qgc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNwbGljZV9kZXNjICpzZCxcbi1cdFx0XHQgICAgICAgc3BsaWNlX2RpcmVjdF9hY3RvciAqYWN0b3IpO1xuK3NzaXplX3QgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3Ioc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4rXHRcdFx0XHQgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3Rvcik7XG4gc3NpemVfdCBkb19zcGxpY2Uoc3RydWN0IGZpbGUgKmluLCBsb2ZmX3QgKm9mZl9pbiwgc3RydWN0IGZpbGUgKm91dCxcbiBcdFx0ICBsb2ZmX3QgKm9mZl9vdXQsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncyk7XG4gc3NpemVfdCBkb19zcGxpY2VfZGlyZWN0KHN0cnVjdCBmaWxlICppbiwgbG9mZl90ICpwcG9zLCBzdHJ1Y3QgZmlsZSAqb3V0LFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6MzY6NDkuNTA2ODk4NDc1WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwNDY0MTUwMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgYW5kIENvZGUgTW92ZW1lbnQgaW4gU3BsaWNlIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHJlZmFjdG9yaW5nIG9mIHRoZSBzcGxpY2UgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBkaXJlY3QtdG8tYWN0b3Igb3BlcmF0aW9ucy4gSXQncyBhZGRpbmcgYSBuZXcgZnVuY3Rpb24sIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAsIHdpdGhpbiBgZnMvc3BsaWNlLmNgIGFuZCB0aGVuIHJlcGxhY2luZyB0aGUgZXhpc3RpbmcgYHNwbGljZV9kaXJlY3RfdG9fYWN0b3JgIGNhbGwgd2l0aCBpdCBpbiBgZnMvbmZzZC92ZnMuY2AuIFRoZSBtYWluIG1vdGl2YXRpb24gc2VlbXMgdG8gYmUgdG8gY2VudHJhbGl6ZSBhbmQgZW5jYXBzdWxhdGUgc29tZSBjaGVja3MgYW5kIG5vdGlmaWNhdGlvbnMuIEknbSBzZWVpbmcgdGhhdCBgcndfdmVyaWZ5X2FyZWFgIGFuZCBgZnNub3RpZnlfYWNjZXNzYCBhcmUgYmVpbmcgbW92ZWQgaW50byB0aGlzIG5ldyBoZWxwZXIgZnVuY3Rpb24uIFNlZW1zIHJlYXNvbmFibGUsIGdvb2QgZm9yIGNvZGUgY2xhcml0eSBhbmQgcG90ZW50aWFsIHJldXNlIGRvd24gdGhlIGxpbmUuXG5cbk5vIGltbWVkaWF0ZSByZWQgZmxhZ3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFueXRoaW5nIGxpa2UgdGhhdCwgYXQgbGVhc3Qgbm90IGF0IGZpcnN0IGdsYW5jZS4gVGhpcyBsb29rcyBsaWtlIGEgZmFpcmx5IGxvdy1yaXNrIGNoYW5nZS4gQnV0IGxldCdzIHZlcmlmeSB0aGVzZSBkZXRhaWxzLlxuXG5TcGVjaWZpY2FsbHksIGxvb2tpbmcgYXQgdGhlIGBmcy9uZnNkL3Zmcy5jYCBjaGFuZ2VzLCBJJ20gbm90aW5nIHRoZSBkaXJlY3QgcmVwbGFjZW1lbnQgb2YgdGhlIG9sZCBjYWxsIHdpdGggdGhlIG5ldyBvbmU6XG5cbmBgYGNcbi1cdFx0aG9zdF9lcnIgPSByd192ZXJpZnlfYXJlYShSRUFELCBmaWxlLCBcdTAwMjZvZmZzZXQsICpjb3VudCk7XG4tXHRcdGlmICghaG9zdF9lcnIpXG4tXHRcdFx0aG9zdF9lcnIgPSBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsIFx1MDAyNnNkLFxuLVx0XHRcdFx0XHRcdFx0ICBuZnNkX2RpcmVjdF9zcGxpY2VfYWN0b3IpO1xuK1x0XHRob3N0X2VyciA9IHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yKGZpbGUsIFx1MDAyNnNkLFxuK1x0XHRcdFx0XHRcdCAgICAgIG5mc2RfZGlyZWN0X3NwbGljZV9hY3Rvcik7XG5gYGBcblxuYW5kIHRoZSBuZXcgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCBmdW5jdGlvbiwgd2hpY2ggbm93IGNvbnRhaW5zIGByd192ZXJpZnlfYXJlYWAgYW5kIGBmc25vdGlmeV9hY2Nlc3NgOlxuXG5gYGBjXG4rc3NpemVfdCB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sIHN0cnVjdCBzcGxpY2VfZGVzYyAqc2QsXG4rXHRcdFx0XHQgICBzcGxpY2VfZGlyZWN0X2FjdG9yICphY3Rvcilcbit7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdHJldCA9IHJ3X3ZlcmlmeV9hcmVhKFJFQUQsIGluLCBcdTAwMjZzZC1cdTAwM2Vwb3MsIHNkLVx1MDAzZXRvdGFsX2xlbik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gc3BsaWNlX2RpcmVjdF90b19hY3Rvcihpbiwgc2QsIGFjdG9yKTtcbitcdGlmIChyZXQgXHUwMDNlPSAwKVxuK1x0XHRmc25vdGlmeV9hY2Nlc3MoaW4pO1xuK1x0cmV0dXJuIHJldDtcbit9XG5gYGBcblxuT2theSwgdGhlIHRoaW5nIHRoYXQgaW1tZWRpYXRlbHkganVtcHMgb3V0IGF0IG1lIGlzIHRoaXM6IGluIHRoZSBvcmlnaW5hbCBgZnMvbmZzZC92ZnMuY2AgY29kZSwgYHJ3X3ZlcmlmeV9hcmVhYCB3YXMgY2FsbGVkIHdpdGggYFx1MDAyNm9mZnNldGAsIGJ1dCBpbiB0aGUgbmV3IGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAsIGl0IGlzIGNhbGxlZCB3aXRoIGBcdTAwMjZzZC1cdTAwM2Vwb3NgLiBOb3csIGlzIGBzZC1cdTAwM2Vwb3NgIGluaXRpYWxpemVkIHRvIGBvZmZzZXRgPyBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgYHNkLVx1MDAzZXBvc2AgaXMgaW5kZWVkIGluaXRpYWxpemVkIGFwcHJvcHJpYXRlbHkuIEkgd2lsbCB1c2UgdGhlIGBkZWZhdWx0X2FwaTpyZWFkLWZpbGVgIHRvb2wgdG8gcXVpY2tseSBjaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgdXNhZ2Ugb2YgYG5mc2Rfc3BsaWNlX3JlYWRgIHRvIHNlZSB3aGVyZSBgc2QtXHUwMDNlcG9zYCBpcyBjb21pbmcgZnJvbS4gR290dGEgbWFrZSBzdXJlIHdlJ3JlIG5vdCBpbnRyb2R1Y2luZyBhIHN1YnRsZSBidWcgd2l0aCBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0ODAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozNjo1OC41NTMzMTY0MDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL25mc2QvdmZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA3MDpcXHQgKiBAZmlsZTogb3BlbmVkIHN0cnVjdCBmaWxlIG9mIGZpbGUgdG8gYmUgcmVhZFxcbjEwNzE6XFx0ICogQG9mZnNldDogc3RhcnRpbmcgYnl0ZSBvZmZzZXRcXG4xMDcyOlxcdCAqIEBjb3VudDogSU46IHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXM7IE9VVDogbnVtYmVyIG9mIGJ5dGVzIHJlYWRcXG4xMDczOlxcdCAqIEBlb2Y6IE9VVDogc2V0IG5vbi16ZXJvIGlmIG9wZXJhdGlvbiByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGZpbGVcXG4xMDc0OlxcdCAqXFxuMTA3NTpcXHQgKiBSZXR1cm5zIG5mc19vayBvbiBzdWNjZXNzLCBvdGhlcndpc2UgYW4gbmZzZXJyIHN0YXQgdmFsdWUgaXNcXG4xMDc2OlxcdCAqIHJldHVybmVkLlxcbjEwNzc6XFx0ICovXFxuMTA3ODpcXHRfX2JlMzIgbmZzZF9zcGxpY2VfcmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXFxuMTA3OTpcXHRcXHRcXHRcXHRzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgdW5zaWduZWQgbG9uZyAqY291bnQsXFxuMTA4MDpcXHRcXHRcXHRcXHR1MzIgKmVvZilcXG4xMDgxOlxcdHtcXG4xMDgyOlxcdFxcdHN0cnVjdCBzcGxpY2VfZGVzYyBzZCA9IHtcXG4xMDgzOlxcdFxcdFxcdC5sZW5cXHRcXHQ9IDAsXFxuMTA4NDpcXHRcXHRcXHQudG90YWxfbGVuXFx0PSAqY291bnQsXFxuMTA4NTpcXHRcXHRcXHQucG9zXFx0XFx0PSBvZmZzZXQsXFxuMTA4NjpcXHRcXHRcXHQudS5kYXRhXFx0XFx0PSBycXN0cCxcXG4xMDg3OlxcdFxcdH07XFxuMTA4ODpcXHRcXHRzc2l6ZV90IGhvc3RfZXJyO1xcbjEwODk6XFx0XFxuMTA5MDpcXHRcXHR0cmFjZV9uZnNkX3JlYWRfc3BsaWNlKHJxc3RwLCBmaHAsIG9mZnNldCwgKmNvdW50KTtcXG4xMDkxOlxcdFxcdGhvc3RfZXJyID0gdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3IoZmlsZSwgXFx1MDAyNnNkLFxcbjEwOTI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmZzZF9kaXJlY3Rfc3BsaWNlX2FjdG9yKTtcXG4xMDkzOlxcdFxcdHJldHVybiBuZnNkX2ZpbmlzaF9yZWFkKHJxc3RwLCBmaHAsIGZpbGUsIG9mZnNldCwgY291bnQsIGVvZiwgaG9zdF9lcnIpO1xcbjEwOTQ6XFx0fVxcbjEwOTU6XFx0XFxuMTA5NjpcXHQvKlxcbjEwOTc6XFx0ICogVGhlIGJ5dGUgcmFuZ2Ugb2YgdGhlIGNsaWVudCdzIFJFQUQgcmVxdWVzdCBpcyBleHBhbmRlZCBvbiBib3RoIGVuZHNcXG4xMDk4OlxcdCAqIHVudGlsIGl0IG1lZXRzIHRoZSB1bmRlcmx5aW5nIGZpbGUgc3lzdGVtJ3MgZGlyZWN0IEkvTyBhbGlnbm1lbnRcXG4xMDk5OlxcdCAqIHJlcXVpcmVtZW50cy4gQWZ0ZXIgdGhlIGludGVybmFsIHJlYWQgaXMgY29tcGxldGUsIHRoZSBieXRlIHJhbmdlIG9mXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjM2OjU4LjU1MzQ5Njk4MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc0NDA0MzY3MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3NpdGlvbiBQb2ludGVyIGluIE5GU2QgUmVhZCBPcGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIE5GU2QgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCByZWFkIG9wZXJhdGlvbnMuIEZpcnN0IHRoaW5nLCBJIHNlZSB0aGF0IGBzZC5wb3NgIGlzIGluZGVlZCBpbml0aWFsaXplZCB0byBgb2Zmc2V0YC4gTWFrZXMgc2Vuc2UuIE5vdyBJIGhhdmUgdG8gYmUgY2FyZWZ1bCwgYmVjYXVzZSBpdCBsb29rcyBsaWtlIGByd192ZXJpZnlfYXJlYWAgY291bGQgcG90ZW50aWFsbHkgYmUgbWVzc2luZyB3aXRoIHRoYXQgYHNkLVx1MDAzZXBvc2AgdmFsdWUuIEFoLCBubywgd2FpdCBhIHNlY29uZC4gVGhhdCdzIHJpZ2h0LCBgcndfdmVyaWZ5X2FyZWFgIHRha2VzIGEgYGxvZmZfdCAqcHBvc2AgYXJndW1lbnQuIFRoYXQncyBhIHBvaW50ZXIuIFNvLCB0aGUgb2xkIGNvZGUgcGFzc2VkIGEgcG9pbnRlciB0byBgb2Zmc2V0YCwgd2hpY2ggd291bGQgYmUgbW9kaWZpZWQgYnkgYHJ3X3ZlcmlmeV9hcmVhYC4gVGhlbiwgdGhhdCAqbW9kaWZpZWQqIGBvZmZzZXRgIHZhbHVlIHdhcyBwYXNzZWQgdG8gYG5mc2RfZmluaXNoX3JlYWRgLlxuXG5CdXQgaGFuZyBvbiwgdGhlICpuZXcqIGNvZGUhIEluIHRoZSAqbmV3KiBjb2RlLCBgcndfdmVyaWZ5X2FyZWFgIGlzIG1vZGlmeWluZyBgc2QtXHUwMDNlcG9zYCBkaXJlY3RseSwgKm5vdCogYG9mZnNldGAuIEFuZCB0aGVuIHRoZSBvcmlnaW5hbCwgdW5tb2RpZmllZCBgb2Zmc2V0YCB2YWx1ZSBpcyBiZWluZyBwYXNzZWQgdG8gYG5mc2RfZmluaXNoX3JlYWRgLiBUaGF0J3MgYSBrZXkgZGlzdGluY3Rpb24uIEFuZCBub3cgSSBuZWVkIHRvIHJlbWVtYmVyIGBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yYC4gVGhhdCAqYWxzbyogbW9kaWZpZXMgYHNkLVx1MDAzZXBvc2AuIFNvLCBJJ3ZlIGdvdCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBzZC1cdTAwM2Vwb3NgLCBgb2Zmc2V0YCwgYHJ3X3ZlcmlmeV9hcmVhYCwgYHNwbGljZV9kaXJlY3RfdG9fYWN0b3JgIGFuZCB1bHRpbWF0ZWx5IGhvdyBgbmZzZF9maW5pc2hfcmVhZGAgaXMgdXNpbmcgdGhvc2UgdmFsdWVzLiBHb3R0YSBjaGVjayBgbmZzZF9maW5pc2hfcmVhZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0MzowNS45OTM5MzU4OTlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL25mc2QvdmZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTA0MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA0MDpcXHR7XFxuMTA0MTpcXHRcXHRpZiAoZXhwZWN0ZWQgIT0gMCBcXHUwMDI2XFx1MDAyNiBsZW4gPT0gMClcXG4xMDQyOlxcdFxcdFxcdHJldHVybiAxO1xcbjEwNDM6XFx0XFx0aWYgKG9mZnNldCtsZW4gXFx1MDAzZT0gaV9zaXplX3JlYWQoZmlsZV9pbm9kZShmaWxlKSkpXFxuMTA0NDpcXHRcXHRcXHRyZXR1cm4gMTtcXG4xMDQ1OlxcdFxcdHJldHVybiAwO1xcbjEwNDY6XFx0fVxcbjEwNDc6XFx0XFxuMTA0ODpcXHRzdGF0aWMgX19iZTMyIG5mc2RfZmluaXNoX3JlYWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgc3RydWN0IHN2Y19maCAqZmhwLFxcbjEwNDk6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxcbjEwNTA6XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgKmNvdW50LCB1MzIgKmVvZiwgc3NpemVfdCBob3N0X2VycilcXG4xMDUxOlxcdHtcXG4xMDUyOlxcdFxcdGlmIChob3N0X2VyciBcXHUwMDNlPSAwKSB7XFxuMTA1MzpcXHRcXHRcXHRzdHJ1Y3QgbmZzZF9uZXQgKm5uID0gbmV0X2dlbmVyaWMoU1ZDX05FVChycXN0cCksIG5mc2RfbmV0X2lkKTtcXG4xMDU0OlxcdFxcbjEwNTU6XFx0XFx0XFx0bmZzZF9zdGF0c19pb19yZWFkX2FkZChubiwgZmhwLVxcdTAwM2VmaF9leHBvcnQsIGhvc3RfZXJyKTtcXG4xMDU2OlxcdFxcdFxcdCplb2YgPSBuZnNkX2VvZl9vbl9yZWFkKGZpbGUsIG9mZnNldCwgaG9zdF9lcnIsICpjb3VudCk7XFxuMTA1NzpcXHRcXHRcXHQqY291bnQgPSBob3N0X2VycjtcXG4xMDU4OlxcdFxcdFxcdHRyYWNlX25mc2RfcmVhZF9pb19kb25lKHJxc3RwLCBmaHAsIG9mZnNldCwgKmNvdW50KTtcXG4xMDU5OlxcdFxcdFxcdHJldHVybiAwO1xcbjEwNjA6XFx0XFx0fSBlbHNlIHtcXG4xMDYxOlxcdFxcdFxcdHRyYWNlX25mc2RfcmVhZF9lcnIocnFzdHAsIGZocCwgb2Zmc2V0LCBob3N0X2Vycik7XFxuMTA2MjpcXHRcXHRcXHRyZXR1cm4gbmZzZXJybm8oaG9zdF9lcnIpO1xcbjEwNjM6XFx0XFx0fVxcbjEwNjQ6XFx0fVxcbjEwNjU6XFx0XFxuMTA2NjpcXHQvKipcXG4xMDY3OlxcdCAqIG5mc2Rfc3BsaWNlX3JlYWQgLSBQZXJmb3JtIGEgVkZTIHJlYWQgdXNpbmcgYSBzcGxpY2UgcGlwZVxcbjEwNjg6XFx0ICogQHJxc3RwOiBSUEMgdHJhbnNhY3Rpb24gY29udGV4dFxcbjEwNjk6XFx0ICogQGZocDogZmlsZSBoYW5kbGUgb2YgZmlsZSB0byBiZSByZWFkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQzOjA1Ljk5NDA2MTA2OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzY5ODg0MzgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbmZzZF9maW5pc2hfcmVhZCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuZnNkX2ZpbmlzaF9yZWFkYCBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGZpbGUgb2Zmc2V0LiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBgb2Zmc2V0YCBwYXJhbWV0ZXIgZm9yIGJvdGggdGhlIGBuZnNkX2VvZl9vbl9yZWFkYCBjaGVjayBhbmQgZm9yIHRyYWNlcG9pbnRzLCByaWdodD8gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoZSBjaGFuZ2UgY29tcGFyZWQgdG8gdGhlIG9sZGVyIGNvZGUuIFByZXZpb3VzbHksIGByd192ZXJpZnlfYXJlYWAgaGFkIHRoZSBwb3RlbnRpYWwgdG8gbW9kaWZ5IHRoYXQgdmVyeSBgb2Zmc2V0YCB2YWx1ZS4gSWYgdGhhdCBoYXBwZW5lZCwgYG5mc2RfZmluaXNoX3JlYWRgIHdvdWxkIHRoZW4gdXNlIHRoZSBhbHRlcmVkIG9mZnNldCwgd2hpY2ggY291bGQgaGF2ZSBzb21lIGludGVyZXN0aW5nIGltcGxpY2F0aW9ucyBmb3IgZGF0YSBjb25zaXN0ZW5jeSBvciBFT0YgZGV0ZWN0aW9uLCBkZXBlbmRpbmcgb24gdGhlIG5hdHVyZSBvZiB0aGUgb2Zmc2V0IGNoYW5nZS5cblxuQnV0IG5vdywgaXQgc2VlbXMgYHJ3X3ZlcmlmeV9hcmVhYCBvcGVyYXRlcyBkaWZmZXJlbnRseS4gSXTigJlzIHVwZGF0aW5nIGBzZC1cdTAwM2Vwb3NgLCBpbnN0ZWFkIG9mIG1vZGlmeWluZyB0aGUgYG9mZnNldGAgZGlyZWN0bHkuIFRoZXJlZm9yZSwgdGhlIGBvZmZzZXRgIHBhcmFtZXRlciBwYXNzZWQgdG8gYG5mc2RfZmluaXNoX3JlYWRgIHJlbWFpbnMgdW5jaGFuZ2VkIGluIHRoZSBjdXJyZW50IGl0ZXJhdGlvbi5cblxuV2FpdCBhIHNlY29uZOKApiBkb2Vzbid0IGByd192ZXJpZnlfYXJlYWAgKnVzdWFsbHkqIGxlYXZlIHRoZSBmaWxlIHBvaW50ZXIgYWxvbmUgdW5sZXNzIHRoZXJlJ3Mgc29tZXRoaW5nIHNwZWNpZmljIGdvaW5nIG9uLCBsaWtlIG1hbmRhdG9yeSBsb2NraW5nIG9yIHNvbWV0aGluZyBlcXVhbGx5IGV4b3RpYz8gSSBkb24ndCByZWNhbGwgaXQgYmVpbmcgYSByb3V0aW5lIG1vZGlmaWVyIG9mIHRoZSBwb3NpdGlvbi4gSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGF0OyBpdCdzIGVhc3kgdG8gZ2V0IGxvc3QgaW4gdGhlIGRldGFpbHMuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgcndfdmVyaWZ5X2FyZWFgIGZ1bmN0aW9uIGl0c2VsZiBhbmQgY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBpbXBhY3RzIGZpbGUgcG9zaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMjcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0MzoxMS4zNjM5NDc1MzFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzAzNDA0MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IHJ3X3ZlcmlmeV9hcmVhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3JlYWRfd3JpdGUuYz00MjY9U1lTQ0FMTF9ERUZJTkU1KGxsc2VlaywgdW5zaWduZWQgaW50LCBmZCwgdW5zaWduZWQgbG9uZywgb2Zmc2V0X2hpZ2gsXFxuLS1cXG5mcy9yZWFkX3dyaXRlLmMtNDUyLVxcbmZzL3JlYWRfd3JpdGUuYzo0NTM6aW50IHJ3X3ZlcmlmeV9hcmVhKGludCByZWFkX3dyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgbG9mZl90ICpwcG9zLCBzaXplX3QgY291bnQpXFxuZnMvcmVhZF93cml0ZS5jLTQ1NC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MzEwNj1leHRlcm4gbG9mZl90IG5vX3NlZWtfZW5kX2xsc2VlayhzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIGludCk7XFxuaW5jbHVkZS9saW51eC9mcy5oOjMxMDc6aW50IHJ3X3ZlcmlmeV9hcmVhKGludCwgc3RydWN0IGZpbGUgKiwgY29uc3QgbG9mZl90ICosIHNpemVfdCk7XFxuaW5jbHVkZS9saW51eC9mcy5oLTMxMDgtZXh0ZXJuIGludCBnZW5lcmljX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDM6MTMuNDM0Mjk3ODQ4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MzE0MDM1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVmVyaWZ5aW5nIHRoZSBDb25zdCBDb3JyZWN0bmVzcyBvZiBgcndfdmVyaWZ5X2FyZWFgJ3MgT2Zmc2V0IFBhcmFtZXRlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGByd192ZXJpZnlfYXJlYWAgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gaXRzIHBhcmFtZXRlciB1c2FnZS4gUmlnaHQsIGl0IGxvb2tzIGxpa2UgaXQgdGFrZXMgYSBgY29uc3QgbG9mZl90ICpwcG9zYC4gVGhhdCdzIGdvb2Q7IHRoZSBgY29uc3RgIHN1Z2dlc3RzIGl0ICpzaG91bGRuJ3QqIGJlIG1vZGlmeWluZyB0aGUgb2Zmc2V0IHBvaW50ZWQgdG8gYnkgYHBwb3NgLiBJJ2QgZXhwZWN0IHRoYXQgaW4gYSB3ZWxsLWRlc2lnbmVkIGtlcm5lbCBmdW5jdGlvbiBsaWtlIHRoaXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgYXNzdW1wdGlvbnMgYXJlIHNvbGlkIGhlcmUuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQgbWUgZG91YmxlLWNoZWNrIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgZGVmaW5lZC4gSG1tLCB5ZXAsIGNvbmZpcm1pbmcgdGhhdCB0aGUgZGVjbGFyYXRpb24gaW4gYGZzL3JlYWRfd3JpdGUuY2Agc2hvd3MgdGhlIHBhcmFtZXRlciBhcyBgY29uc3QgbG9mZl90ICpwcG9zYC4gR29vZC4gU28sIG15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyBjb3JyZWN0OiB0aGUgZnVuY3Rpb24gcHJvbWlzZXMgbm90IHRvIGFsdGVyIHRoZSBvZmZzZXQgdmFsdWUuIFRoaXMgcmVpbmZvcmNlcyB0aGUgaWRlYSB0aGF0IGl0J3MgYWN0aW5nIG1vcmUgYXMgYW4gaW5mb3JtYXRpb24gcmV0cmlldmVyIHJlZ2FyZGluZyB0aGUgYXJlYSByZXF1ZXN0ZWQsIHJhdGhlciB0aGFuIHNvbWV0aGluZyB0aGF0IHdvdWxkIG1ha2UgYSBjaGFuZ2UgZGlyZWN0bHkgdG8gdGhlIGZpbGUgcG9zaXRpb24uIEV4Y2VsbGVudCwgbm93IEkgY2FuIHVzZSB0aGF0IGluZm9ybWF0aW9uIHRvIGNvbmZpcm0gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAzNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQzOjE4LjE2NTcwNDc0OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvcmVhZF93cml0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ1MDpcXHR9XFxuIDQ1MTpcXHQjZW5kaWZcXG4gNDUyOlxcdFxcbiA0NTM6XFx0aW50IHJ3X3ZlcmlmeV9hcmVhKGludCByZWFkX3dyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgbG9mZl90ICpwcG9zLCBzaXplX3QgY291bnQpXFxuIDQ1NDpcXHR7XFxuIDQ1NTpcXHRcXHRpbnQgbWFzayA9IHJlYWRfd3JpdGUgPT0gUkVBRCA/IE1BWV9SRUFEIDogTUFZX1dSSVRFO1xcbiA0NTY6XFx0XFx0aW50IHJldDtcXG4gNDU3OlxcdFxcbiA0NTg6XFx0XFx0aWYgKHVubGlrZWx5KChzc2l6ZV90KSBjb3VudCBcXHUwMDNjIDApKVxcbiA0NTk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ2MDpcXHRcXG4gNDYxOlxcdFxcdGlmIChwcG9zKSB7XFxuIDQ2MjpcXHRcXHRcXHRsb2ZmX3QgcG9zID0gKnBwb3M7XFxuIDQ2MzpcXHRcXG4gNDY0OlxcdFxcdFxcdGlmICh1bmxpa2VseShwb3MgXFx1MDAzYyAwKSkge1xcbiA0NjU6XFx0XFx0XFx0XFx0aWYgKCF1bnNpZ25lZF9vZmZzZXRzKGZpbGUpKVxcbiA0NjY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ2NzpcXHRcXHRcXHRcXHRpZiAoY291bnQgXFx1MDAzZT0gLXBvcykgLyogYm90aCB2YWx1ZXMgYXJlIGluIDAuLkxMT05HX01BWCAqL1xcbiA0Njg6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuIDQ2OTpcXHRcXHRcXHR9IGVsc2UgaWYgKHVubGlrZWx5KChsb2ZmX3QpIChwb3MgKyBjb3VudCkgXFx1MDAzYyAwKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0MzoxOC4xNjU4MzUwNjhaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTYyMjUzNzQyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFNhZmV0eSoqXG5cbk9rYXksIHNvIEkgc2VlIGBjb25zdCBsb2ZmX3QgKnBwb3NgIGluIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUsIG1lYW5pbmcgdGhpcyBwYXRjaCBpc24ndCBnb2luZyB0byBiZSBtZXNzaW5nIHdpdGggdGhlIGZpbGUgb2Zmc2V0IGRpcmVjdGx5LiBUaGF0J3MgZ29vZC5cblxuUmlnaHQsIHRoZSBjb3JlIG9mIGl0IGlzIHdyYXBwaW5nIGByd192ZXJpZnlfYXJlYWAsIGBzcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCwgYW5kIGBmc25vdGlmeV9hY2Nlc3NgIGludG8gYSBzaW5nbGUgaGVscGVyIGZ1bmN0aW9uIGNhbGxlZCBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgLiBFc3NlbnRpYWxseSwgYSByZWZhY3RvcmluZywgc29tZSBjb2RlIGNsZWFudXAuIEl0IGxvb2tzIGxpa2UgYG5mc2Rfc3BsaWNlX3JlYWRgIGlzIGdldHRpbmcgdXBkYXRlZCB0byB1c2UgdGhpcyBuZXcgaGVscGVyLlxuXG5HaXZlbiB0aGF0LCBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBLTVNBTiBmbGFncyBoZXJlLiBJdCBkb2Vzbid0IGxvb2sgbGlrZSBhbnkgbmV3IG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQsIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGFueSBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5MZXQgbWUgYXJ0aWN1bGF0ZSB0aGF0IHRob3VnaHQgcHJvY2VzcyBmb3IgYSBtb3JlIGZvcm1hbCBhc3Nlc3NtZW50Li4uIFRoaXMgcGF0Y2ggbWFpbmx5IHJlb3JnYW5pemVzIHNvbWUgY2FsbHMgYnkgaW50cm9kdWNpbmcgYHZmc19zcGxpY2VfZGlyZWN0X3RvX2FjdG9yYCwgY29uc29saWRhdGluZyBhIGZldyBvdGhlciBjYWxscy4gSXQgdXBkYXRlcyB0aGUgTkZTIGNvZGUgdG8gdXNlIHRoZSBuZXcgaGVscGVyLiBUaGlzIGlzIGEgcmVmYWN0b3JpbmcsIHB1cmUgYW5kIHNpbXBsZS4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gdGhlIFZGUyB0aGF0IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIHVzZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgY3JlYXRlIG5ldyBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4gYW5kIHRoZSB1c3VhbCBidWcgZGV0ZWN0b3JzIHNob3VsZCBiZSBjb21wbGV0ZWx5IGFkZXF1YXRlIHRvIGRldGVjdCBhbnkgaXNzdWVzIGZyb20gdGhlIFZGUyBjaGFuZ2VzLCBldmVuIHRob3VnaCB0aGlzIHBhdGNoIGlzIHByaW1hcmlseSBzdHJ1Y3R1cmFsLiBUaGVyZWZvcmUsIEkgZG9uJ3Qgc2VlIGFueSBuZWVkIHRvIGRlZGljYXRlIGEgS01TQU4gZnV6emluZyBzZXNzaW9uIHRvIGl0LiBJdCdzIGEgbG93LXJpc2sgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjkwLCJPdXRwdXRUb2tlbnMiOjIxMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQzOjI3Ljc4ODM3NDc3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBgdmZzX3NwbGljZV9kaXJlY3RfdG9fYWN0b3JgIGluIGBmcy9zcGxpY2UuY2AgdGhhdCBjb25zb2xpZGF0ZXMgZXhpc3RpbmcgY2FsbHMgdG8gYHJ3X3ZlcmlmeV9hcmVhYCwgYHNwbGljZV9kaXJlY3RfdG9fYWN0b3JgLCBhbmQgYGZzbm90aWZ5X2FjY2Vzc2AuIEl0IHRoZW4gdXBkYXRlcyBgbmZzZF9zcGxpY2VfcmVhZGAgaW4gYGZzL25mc2QvdmZzLmNgIHRvIHVzZSB0aGlzIG5ldyBoZWxwZXIuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgc3RydWN0dXJhbCByZWZhY3RvcmluZyB0aGF0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG9yIGNoYW5nZXMgdG8gZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoZSBtb2RpZmljYXRpb25zIGRvIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIG9yIGluZm8tbGVha3MuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgaXNzdWVzIChzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpIHRoYXQgbWlnaHQgdGhlb3JldGljYWxseSBhcmlzZSBmcm9tIFZGUyBjaGFuZ2VzLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGB2ZnNfc3BsaWNlX2RpcmVjdF90b19hY3RvcmAgaW4gYGZzL3NwbGljZS5jYCB0aGF0IGNvbnNvbGlkYXRlcyBleGlzdGluZyBjYWxscyB0byBgcndfdmVyaWZ5X2FyZWFgLCBgc3BsaWNlX2RpcmVjdF90b19hY3RvcmAsIGFuZCBgZnNub3RpZnlfYWNjZXNzYC4gSXQgdGhlbiB1cGRhdGVzIGBuZnNkX3NwbGljZV9yZWFkYCBpbiBgZnMvbmZzZC92ZnMuY2AgdG8gdXNlIHRoaXMgbmV3IGhlbHBlci4gVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBzdHJ1Y3R1cmFsIHJlZmFjdG9yaW5nIHRoYXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgb3IgY2hhbmdlcyB0byBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZS4gVGhlIG1vZGlmaWNhdGlvbnMgZG8gbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3Mgb3IgaW5mby1sZWFrcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBpc3N1ZXMgKHN1Y2ggYXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSkgdGhhdCBtaWdodCB0aGVvcmV0aWNhbGx5IGFyaXNlIGZyb20gVkZTIGNoYW5nZXMuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrj9st[1] Phase: Succeeded StartedAt: 2026-08-24 18:43:39 +0000 UTC FinishedAt: 2026-08-24 18:43:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 18:43:39 +0000 UTC FinishedAt: 2026-08-24 18:43:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2] Phase: Succeeded StartedAt: 2026-08-24 18:43:39 +0000 UTC FinishedAt: 2026-08-24 22:49:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-24 18:43:39 +0000 UTC FinishedAt: 2026-08-24 22:49:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-24 18:43:39 +0000 UTC FinishedAt: 2026-08-24 18:43:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-24 18:43:39 +0000 UTC FinishedAt: 2026-08-24 18:43:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowrj9st/series-workflowrj9st-convert-artifact-883802829/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-24 18:43:49 +0000 UTC FinishedAt: 2026-08-24 19:15:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-24 18:43:49 +0000 UTC FinishedAt: 2026-08-24 19:15:05 +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:*2d004f43-ea02-4885-8404-5509a6e5e735,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-workflowrj9st/series-workflowrj9st-convert-artifact-883802829/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": "976e1f54-f9da-470d-bba4-4feae4381d60", "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-workflowrj9st/series-workflowrj9st-build-action-3064070979/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-24 18:43:49 +0000 UTC FinishedAt: 2026-08-24 19:14:38 +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:*2d004f43-ea02-4885-8404-5509a6e5e735,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-workflowrj9st/series-workflowrj9st-convert-artifact-883802829/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": "976e1f54-f9da-470d-bba4-4feae4381d60", "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-workflowrj9st/series-workflowrj9st-build-action-3064070979/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-24 19:15:05 +0000 UTC FinishedAt: 2026-08-24 19:15:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-24 19:15:05 +0000 UTC FinishedAt: 2026-08-24 19:15:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-24 19:15:05 +0000 UTC FinishedAt: 2026-08-24 19:15:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-24 19:15:05 +0000 UTC FinishedAt: 2026-08-24 19:15:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowrj9st/series-workflowrj9st-convert-artifact-3570522408/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-24 19:15:15 +0000 UTC FinishedAt: 2026-08-24 19:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-24 19:15:15 +0000 UTC FinishedAt: 2026-08-24 19:17:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*976e1f54-f9da-470d-bba4-4feae4381d60,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-workflowrj9st/series-workflowrj9st-build-action-3064070979/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-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-24 19:17:17 +0000 UTC FinishedAt: 2026-08-24 19:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-24 19:17:17 +0000 UTC FinishedAt: 2026-08-24 19:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-24 19:17:17 +0000 UTC FinishedAt: 2026-08-24 19:44:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-24 19:17:17 +0000 UTC FinishedAt: 2026-08-24 19:44:41 +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:*2d004f43-ea02-4885-8404-5509a6e5e735,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-workflowrj9st/series-workflowrj9st-convert-artifact-3570522408/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": "8c685f78-7921-43c8-939f-c06bfacb3404", "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-workflowrj9st/series-workflowrj9st-build-action-2216351444/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-24 19:17:17 +0000 UTC FinishedAt: 2026-08-24 19:44:16 +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:*2d004f43-ea02-4885-8404-5509a6e5e735,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-workflowrj9st/series-workflowrj9st-convert-artifact-3570522408/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": "8c685f78-7921-43c8-939f-c06bfacb3404", "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-workflowrj9st/series-workflowrj9st-build-action-2216351444/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-24 19:44:41 +0000 UTC FinishedAt: 2026-08-24 19:44:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-24 19:44:41 +0000 UTC FinishedAt: 2026-08-24 19:44:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-24 19:44:41 +0000 UTC FinishedAt: 2026-08-24 19:46:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-24 19:44:41 +0000 UTC FinishedAt: 2026-08-24 19:46:33 +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:*8c685f78-7921-43c8-939f-c06bfacb3404,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-workflowrj9st/series-workflowrj9st-build-action-2216351444/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-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-24 19:46:43 +0000 UTC FinishedAt: 2026-08-24 22:49:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-24 19:46:43 +0000 UTC FinishedAt: 2026-08-24 22:49:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"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:*976e1f54-f9da-470d-bba4-4feae4381d60,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8c685f78-7921-43c8-939f-c06bfacb3404,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-workflowrj9st/series-workflowrj9st-build-action-3064070979/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-workflowrj9st/series-workflowrj9st-build-action-2216351444/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-24 19:46:43 +0000 UTC FinishedAt: 2026-08-24 19:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-24 19:46:43 +0000 UTC FinishedAt: 2026-08-24 19:46:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"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-workflowrj9st/series-workflowrj9st-convert-artifact-3678207329/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-24 19:46:43 +0000 UTC FinishedAt: 2026-08-24 19:46:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-24 19:46:43 +0000 UTC FinishedAt: 2026-08-24 19:46:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-24 19:46:43 +0000 UTC FinishedAt: 2026-08-24 19:46:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-24 19:46:53 +0000 UTC FinishedAt: 2026-08-24 22:49:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrj9st[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_splice_direct_to_actor","nfsd_splice_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"19f075830e5d874749f55d837fc4e8af98df0559","config_name":"upstream-apparmor-kasan.config","enable_configs":["NFSD"],"series_id":"8dda0a59-8239-465e-a37d-6c8b52bdaed9","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-24 19:46:53 +0000 UTC FinishedAt: 2026-08-24 22:49:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*976e1f54-f9da-470d-bba4-4feae4381d60,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8c685f78-7921-43c8-939f-c06bfacb3404,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-workflowrj9st/series-workflowrj9st-build-action-3064070979/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-workflowrj9st/series-workflowrj9st-build-action-2216351444/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-workflowrj9st/series-workflowrj9st-convert-artifact-3678207329/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,}