Name: series-workflow4gpxs Phase: Succeeded StartedAt: 2026-07-02 04:11:08 +0000 UTC FinishedAt: 2026-07-02 08:51:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[0] Phase: Succeeded StartedAt: 2026-07-02 04:11:08 +0000 UTC FinishedAt: 2026-07-02 04:24:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 04:11:08 +0000 UTC FinishedAt: 2026-07-02 04:24:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_MAPLE_TREE", "PROVE_LOCKING", "LOCKDEP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_MAPLE_TREE", "PROVE_LOCKING", "LOCKDEP" ], "series_id": "f1f4ca05-4aa4-4657-9c56-27366f2402f2" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mas_alloc_cyclic", "mas_erase", "mtree_erase", "mas_nomem", "lock_sequence" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA0OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX01BUExFX1RSRUUmIzM0OywKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtMT0NLREVQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFzX2FsbG9jX2N5Y2xpYyYjMzQ7LAogICAgJiMzNDttYXNfZXJhc2UmIzM0OywKICAgICYjMzQ7bXRyZWVfZXJhc2UmIzM0OywKICAgICYjMzQ7bWFzX25vbWVtJiMzNDssCiAgICAmIzM0O2xvY2tfc2VxdWVuY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBsb2NrIHNlcXVlbmNlIHZhbGlkYXRpb24gZm9yIG1hcGxlIHRyZWUgb3BlcmF0aW9ucyB1c2luZyBsb2NrZGVwLCBhbmQgb3B0aW1pemVzIG1hcGxlIHRyZWUgbm9kZSBzdG9yZSBvcGVyYXRpb25zIGFuZCBwYXJlbnQgcG9pbnRlciB1cGRhdGVzLiBJdCBhbHNvIGZpeGVzIHdyYXAtYXJvdW5kIGhhbmRsaW5nIGluIGBtYXNfYWxsb2NfY3ljbGljYCBhbmQgbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IgaW4gYG1hc19lcmFzZWAgYW5kIGBtYXNfbm9tZW1gLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGRhdGEgc3RydWN0dXJlcyBhbmQgbG9ja2luZyB2YWxpZGF0aW9uLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNDoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY1YWFlNjgxYzczZGFlN2ZlYWFiMDEzYzE2MDk1MjY5YzAxZmFiYWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDA0OjIzOjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0XG5pbmRleCBjY2RkMTYxNWNmOTc0Zi4uMWVhZTI0YTljMThiNGEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0XG5AQCAtMTcsNyAmIzQzOzE3LDggQEAgc3VwcG9ydHMgaXRlcmF0aW5nIG92ZXIgYSByYW5nZSBvZiBlbnRyaWVzIGFuZCBnb2luZyB0byB0aGUgcHJldmlvdXMgb3IgbmV4dFxuIGVudHJ5IGluIGEgY2FjaGUtZWZmaWNpZW50IG1hbm5lci4gIFRoZSB0cmVlIGNhbiBhbHNvIGJlIHB1dCBpbnRvIGFuIFJDVS1zYWZlXG4gbW9kZSBvZiBvcGVyYXRpb24gd2hpY2ggYWxsb3dzIHJlYWRpbmcgYW5kIHdyaXRpbmcgY29uY3VycmVudGx5LiAgV3JpdGVycyBtdXN0XG4gc3luY2hyb25pemUgb24gYSBsb2NrLCB3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQgc3BpbmxvY2ssIG9yIHRoZSB1c2VyIGNhbiBzZXRcbi10aGUgbG9jayB0byBhbiBleHRlcm5hbCBsb2NrIG9mIGEgZGlmZmVyZW50IHR5cGUuXG4mIzQzO3RoZSBsb2NrIHRvIGFuIGV4dGVybmFsIGxvY2sgb2YgYSBkaWZmZXJlbnQgdHlwZS4gIE5vdGUgdGhhdCBleHRlcm5hbCBsb2NrcyBtYXlcbiYjNDM7aW50ZXJmZXJlIHdpdGggYWxsb2NhdGlvbnMgaW4gYSBsb3cgbWVtb3J5IHNpdHVhdGlvbi5cbiBcbiBUaGUgTWFwbGUgVHJlZSBtYWludGFpbnMgYSBzbWFsbCBtZW1vcnkgZm9vdHByaW50IGFuZCB3YXMgZGVzaWduZWQgdG8gdXNlXG4gbW9kZXJuIHByb2Nlc3NvciBjYWNoZSBlZmZpY2llbnRseS4gIFRoZSBtYWpvcml0eSBvZiB0aGUgdXNlcnMgd2lsbCBiZSBhYmxlIHRvXG5AQCAtNDIsNiAmIzQzOzQzLDE1IEBAIHN1Y2Nlc3NmdWwgc3RvcmUgb3BlcmF0aW9uIHdpdGhpbiBhIGdpdmVuXG4gY29kZSBzZWdtZW50IHdoZW4gYWxsb2NhdGluZyBjYW5ub3QgYmUgZG9uZS4gIEFsbG9jYXRpb25zIG9mIG5vZGVzIGFyZVxuIHJlbGF0aXZlbHkgc21hbGwgYXQgYXJvdW5kIDI1NiBieXRlcy5cbiBcbiYjNDM7U2luY2UgdGhlIG1hcGxlIHRyZWUgdXNlcyBpbnRlcm5hbCBub2RlcyB0aGF0IGFyZSBhbGxvY2F0ZWQgYW5kIGhhcyBydWxlcyBvblxuJiM0MztkYXRhIGRlbnNpdHksIGVyYXNpbmcgYW4gZW50cnkgbWF5IGNhdXNlIGFsbG9jYXRpb25zIHRvIG9jY3VyLiAgVGhhdCBpcyxcbiYjNDM7ZXJhc2luZyBhbiBlbnRyeSBtYXkgY29uc3VtZSBtZW1vcnkuICBVc2VycyBtdXN0IHRha2UgY2FyZSB0byBlbnN1cmUgdGhhdCB0aGV5XG4mIzQzO2RvIG5vdCB2aW9sYXRlIHRoZSBsYXJnZXIgc3lzdGVtIGNvbnN0cmFpbnRzIG9uIHdoZW4gYW5kIGhvdyBtZW1vcnkgaXNcbiYjNDM7YWxsb2NhdGVkLiAgTW9zdCBzaXR1YXRpb25zIGFyZSBmaW5lIHRvIGFsbG9jYXRlLCBidXQgdGhlIHByZS1hbGxvY2F0aW9uXG4mIzQzO3N1cHBvcnQgaXMgcHJvdmlkZWQgYXMgYSBtZWNoYW5pc20gdG8gYXZvaWQgdHJpY2tpZXIgc2l0dWF0aW9ucy4gIFRoZXJlIGlzIGFsc29cbiYjNDM7dGhlIHBvc3NpYmlsaXR5IG9mIHVzaW5nIHNwZWNpYWwgZW50cmllcyBhbmQgY2xlYW4gdXAgdGhlIHRyZWUgbGF0ZXIsIGluXG4mIzQzO2V4dHJlbWUgY2lyY3Vtc3RhbmNlcy5cbiYjNDM7XG4gLi4gX21hcGxlLXRyZWUtbm9ybWFsLWFwaTpcbiBcbiBOb3JtYWwgQVBJXG5AQCAtNjMsNyAmIzQzOzczLDggQEAgc3VjY2VzcyBvciBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS4gIG10cmVlX3N0b3JlX3JhbmdlKCkgd29ya3MgaW4gdGhlIHNhbWUgd2F5XG4gYnV0IHRha2VzIGEgcmFuZ2UuICBtdHJlZV9sb2FkKCkgaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgZW50cnkgc3RvcmVkIGF0IGFcbiBnaXZlbiBpbmRleC4gIFlvdSBjYW4gdXNlIG10cmVlX2VyYXNlKCkgdG8gZXJhc2UgYW4gZW50aXJlIHJhbmdlIGJ5IG9ubHlcbiBrbm93aW5nIG9uZSB2YWx1ZSB3aXRoaW4gdGhhdCByYW5nZSwgb3IgbXRyZWVfc3RvcmUoKSBjYWxsIHdpdGggYW4gZW50cnkgb2Zcbi1OVUxMIG1heSBiZSB1c2VkIHRvIHBhcnRpYWxseSBlcmFzZSBhIHJhbmdlIG9yIG1hbnkgcmFuZ2VzIGF0IG9uY2UuXG4mIzQzO05VTEwgbWF5IGJlIHVzZWQgdG8gcGFydGlhbGx5IGVyYXNlIGEgcmFuZ2Ugb3IgbWFueSByYW5nZXMgYXQgb25jZS4gIE5vdGUgdGhhdFxuJiM0MzttdHJlZV9lcmFzZSgpIG1heSB1c2UgR0ZQX0tFUk5FTCBvbiBhbGxvY2F0aW9ucy5cbiBcbiBJZiB5b3Ugd2FudCB0byBvbmx5IHN0b3JlIGEgbmV3IGVudHJ5IHRvIGEgcmFuZ2UgKG9yIGluZGV4KSBpZiB0aGF0IHJhbmdlIGlzXG4gY3VycmVudGx5IGBgTlVMTGBgLCB5b3UgY2FuIHVzZSBtdHJlZV9pbnNlcnRfcmFuZ2UoKSBvciBtdHJlZV9pbnNlcnQoKSB3aGljaFxuQEAgLTE2Myw3ICYjNDM7MTc0LDkgQEAgWW91IGNhbiB1c2UgbWFzX2VyYXNlKCkgdG8gZXJhc2UgYW4gZW50aXJlIHJhbmdlIGJ5IHNldHRpbmcgaW5kZXggYW5kXG4gbGFzdCBvZiB0aGUgbWFwbGUgc3RhdGUgdG8gdGhlIGRlc2lyZWQgcmFuZ2UgdG8gZXJhc2UuICBUaGlzIHdpbGwgZXJhc2VcbiB0aGUgZmlyc3QgcmFuZ2UgdGhhdCBpcyBmb3VuZCBpbiB0aGF0IHJhbmdlLCBzZXQgdGhlIG1hcGxlIHN0YXRlIGluZGV4XG4gYW5kIGxhc3QgYXMgdGhlIHJhbmdlIHRoYXQgd2FzIGVyYXNlZCBhbmQgcmV0dXJuIHRoZSBlbnRyeSB0aGF0IGV4aXN0ZWRcbi1hdCB0aGF0IGxvY2F0aW9uLlxuJiM0MzthdCB0aGF0IGxvY2F0aW9uLiAgTm90ZSB0aGF0IG1hc19lcmFzZSgpIG1heSBhbGxvY2F0ZSB3aXRoIHRoZSBHRlBfS0VSTkVMIGZsYWcuXG4mIzQzO0lmIHRoaXMgaXMgbm90IG9rYXksIGNvbnNpZGVyIHVzaW5nIG1hc19zdG9yZV9nZnAoKSBhbmQgcGFzcyBpdCBhIGBgTlVMTGBgLFxuJiM0MzthZnRlciBzZXR0aW5nIHVwIHRoZSBjb3JyZWN0IHJhbmdlIGJ5IHdhbGtpbmcgdG8gdGhlIGVudHJ5LlxuIFxuIFlvdSBjYW4gd2FsayBlYWNoIGVudHJ5IHdpdGhpbiBhIHJhbmdlIGJ5IHVzaW5nIG1hc19mb3JfZWFjaCgpLiAgSWYgeW91IHdhbnRcbiB0byB3YWxrIGVhY2ggZWxlbWVudCBvZiB0aGUgdHJlZSB0aGVuIGBgMGBgIGFuZCBgYFVMT05HX01BWGBgIG1heSBiZSB1c2VkIGFzXG5AQCAtMjExLDcgJiM0MzsyMjQsNyBAQCBBZHZhbmNlZCBMb2NraW5nXG4gXG4gVGhlIG1hcGxlIHRyZWUgdXNlcyBhIHNwaW5sb2NrIGJ5IGRlZmF1bHQsIGJ1dCBleHRlcm5hbCBsb2NrcyBjYW4gYmUgdXNlZCBmb3JcbiB0cmVlIHVwZGF0ZXMgYXMgd2VsbC4gIFRvIHVzZSBhbiBleHRlcm5hbCBsb2NrLCB0aGUgdHJlZSBtdXN0IGJlIGluaXRpYWxpemVkXG4td2l0aCB0aGUgYGBNVF9GTEFHU19MT0NLX0VYVEVSTiBmbGFnYGAsIHRoaXMgaXMgdXN1YWxseSBkb25lIHdpdGggdGhlXG4mIzQzO3dpdGggdGhlIGBgTVRfRkxBR1NfTE9DS19FWFRFUk5gYCBmbGFnLCB0aGlzIGlzIHVzdWFsbHkgZG9uZSB3aXRoIHRoZVxuIE1UUkVFX0lOSVRfRVhUKCkgI2RlZmluZSwgd2hpY2ggdGFrZXMgYW4gZXh0ZXJuYWwgbG9jayBhcyBhbiBhcmd1bWVudC5cbiBcbiBGdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oXG5pbmRleCA2MjE1NjYzNDU0MDZkZC4uYTY0NTFlY2JiZTlhMDUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcbkBAIC0yNzMsNiAmIzQzOzI3Myw5IEBAIGV4dGVybiBzdHJ1Y3QgcGluX2Nvb2tpZSBsb2NrX3Bpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jayk7XG4gZXh0ZXJuIHZvaWQgbG9ja19yZXBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUpO1xuIGV4dGVybiB2b2lkIGxvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llKTtcbiBcbiYjNDM7ZXh0ZXJuIHUzMiBsb2NrX3NlcXVlbmNlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jayk7XG4mIzQzOyNkZWZpbmUgbG9ja2RlcF9zZXF1ZW5jZShsb2NrKVx0bG9ja19zZXF1ZW5jZShcdTAwMjYobG9jayktXHUwMDNlZGVwX21hcClcbiYjNDM7XG4gI2RlZmluZSBsb2NrZGVwX2RlcHRoKHRzaylcdChkZWJ1Z19sb2NrcyA/ICh0c2spLVx1MDAzZWxvY2tkZXBfZGVwdGggOiAwKVxuIFxuICNkZWZpbmUgbG9ja2RlcF9hc3NlcnQoY29uZClcdFx0XFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oXG5pbmRleCBlYWUxMTVhMjY0ODg1Ni4uNTVjNGIxNTJmZWRmN2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmhcbkBAIC0yNTMsNyAmIzQzOzI1Myw4IEBAIHN0cnVjdCBoZWxkX2xvY2sge1xuIFx0dW5zaWduZWQgaW50IGhhcmRpcnFzX29mZjoxO1xuIFx0dW5zaWduZWQgaW50IHN5bmM6MTtcbiBcdHVuc2lnbmVkIGludCByZWZlcmVuY2VzOjExO1x0XHRcdFx0XHQvKiAzMiBiaXRzICovXG4tXHR1bnNpZ25lZCBpbnQgcGluX2NvdW50O1xuJiM0MztcdHVuc2lnbmVkIGludCBwaW5fY291bnQ6MjQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IHNlcV9jb3VudDo4O1xuIH07XG4gXG4gI2Vsc2UgLyogIUNPTkZJR19MT0NLREVQICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmggYi9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaFxuaW5kZXggNGE1NjMxOTA2YWZmYjUuLjVlMGJkMjg1N2Q5NDFlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oXG5AQCAtMjksMTMgJiM0MzsyOSwxMSBAQFxuICNkZWZpbmUgTUFQTEVfTk9ERV9TTE9UU1x0MzFcdC8qIDI1NiBieXRlcyBpbmNsdWRpbmcgLVx1MDAzZXBhcmVudCAqL1xuICNkZWZpbmUgTUFQTEVfUkFOR0U2NF9TTE9UU1x0MTZcdC8qIDI1NiBieXRlcyAqL1xuICNkZWZpbmUgTUFQTEVfQVJBTkdFNjRfU0xPVFNcdDEwXHQvKiAyNDAgYnl0ZXMgKi9cbi0jZGVmaW5lIE1BUExFX0FMTE9DX1NMT1RTXHQoTUFQTEVfTk9ERV9TTE9UUyAtIDEpXG4gI2Vsc2VcbiAvKiAzMmJpdCBzaXplcyAqL1xuICNkZWZpbmUgTUFQTEVfTk9ERV9TTE9UU1x0NjNcdC8qIDI1NiBieXRlcyBpbmNsdWRpbmcgLVx1MDAzZXBhcmVudCAqL1xuICNkZWZpbmUgTUFQTEVfUkFOR0U2NF9TTE9UU1x0MzJcdC8qIDI1NiBieXRlcyAqL1xuICNkZWZpbmUgTUFQTEVfQVJBTkdFNjRfU0xPVFNcdDIxXHQvKiAyNDAgYnl0ZXMgKi9cbi0jZGVmaW5lIE1BUExFX0FMTE9DX1NMT1RTXHQoTUFQTEVfTk9ERV9TTE9UUyAtIDIpXG4gI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHXzY0QklUKSB8fCBkZWZpbmVkKEJVSUxEX1ZEU08zMl82NCkgKi9cbiBcbiAjZGVmaW5lIE1BUExFX05PREVfTUFTS1x0XHQyNTVVTFxuQEAgLTQ4NSw2ICYjNDM7NDgzLDEyIEBAIHN0cnVjdCBtYV9zdGF0ZSB7XG4gXHR1bnNpZ25lZCBjaGFyIG1hc19mbGFncztcbiBcdHVuc2lnbmVkIGNoYXIgZW5kO1x0XHQvKiBUaGUgZW5kIG9mIHRoZSBub2RlICovXG4gXHRlbnVtIHN0b3JlX3R5cGUgc3RvcmVfdHlwZTtcdC8qIFRoZSB0eXBlIG9mIHN0b3JlIG5lZWRlZCBmb3IgdGhpcyBvcGVyYXRpb24gKi9cbiYjNDM7I2lmZGVmIENPTkZJR19MT0NLREVQXG4mIzQzO1x0dTMyIGxkX3NlcTtcbiYjNDM7I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxuJiM0MztcdHVuc2lnbmVkIGxvbmcgcmN1X2dwO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xuIH07XG4gXG4gc3RydWN0IG1hX3dyX3N0YXRlIHtcbkBAIC01NzIsNyAmIzQzOzU3Niw3IEBAIHZvaWQgbWFwbGVfdHJlZV9pbml0KHZvaWQpO1xuIHZvaWQgbWFzX2Rlc3Ryb3koc3RydWN0IG1hX3N0YXRlICptYXMpO1xuIFxuIHZvaWQgKm1hc19wcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbik7XG4tdm9pZCAqbWFzX3ByZXZfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KTtcbiYjNDM7dm9pZCAqbWFzX3ByZXZfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKTtcbiB2b2lkICptYXNfbmV4dChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xuIHZvaWQgKm1hc19uZXh0X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heCk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5pbmRleCAzNzNiY2MwNTk4ZDEwYi4uMTRkNWNlOGRkNjEzNjUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuQEAgLTEyODgsNiAmIzQzOzEyODgsNyBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3Qge1xuIFx0dTY0XHRcdFx0XHRjdXJyX2NoYWluX2tleTtcbiBcdGludFx0XHRcdFx0bG9ja2RlcF9kZXB0aDtcbiBcdHVuc2lnbmVkIGludFx0XHRcdGxvY2tkZXBfcmVjdXJzaW9uO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRcdGxvY2tkZXBfc2VxO1xuIFx0c3RydWN0IGhlbGRfbG9ja1x0XHRoZWxkX2xvY2tzW01BWF9MT0NLX0RFUFRIXTtcbiAjZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbmluZGV4IDJkNGM1YmFiNWFmODg3Li5iMmIwYTUwNjk2MGIxNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG5AQCAtNTA3Nyw3ICYjNDM7NTA3Nyw3IEBAIHN0YXRpYyBpbnQgX19sb2NrX2lzX2hlbGQoY29uc3Qgc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBpbnQgcmVhZCk7XG4gc3RhdGljIGludCBfX2xvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcyxcbiBcdFx0XHQgIGludCB0cnlsb2NrLCBpbnQgcmVhZCwgaW50IGNoZWNrLCBpbnQgaGFyZGlycXNfb2ZmLFxuIFx0XHRcdCAgc3RydWN0IGxvY2tkZXBfbWFwICpuZXN0X2xvY2ssIHVuc2lnbmVkIGxvbmcgaXAsXG4tXHRcdFx0ICBpbnQgcmVmZXJlbmNlcywgaW50IHBpbl9jb3VudCwgaW50IHN5bmMpXG4mIzQzO1x0XHRcdCAgaW50IHJlZmVyZW5jZXMsIGludCBwaW5fY291bnQsIGludCBzeW5jLCBpbnQgc2VxKVxuIHtcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7XG4gXHRzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBOVUxMO1xuQEAgLTUxODMsNiAmIzQzOzUxODMsNyBAQCBzdGF0aWMgaW50IF9fbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLFxuIFx0aGxvY2stXHUwMDNlaG9sZHRpbWVfc3RhbXAgPSBsb2Nrc3RhdF9jbG9jaygpO1xuICNlbmRpZlxuIFx0aGxvY2stXHUwMDNlcGluX2NvdW50ID0gcGluX2NvdW50O1xuJiM0MztcdGhsb2NrLVx1MDAzZXNlcV9jb3VudCA9IHNlcTtcbiBcbiBcdGlmIChjaGVja193YWl0X2NvbnRleHQoY3VyciwgaGxvY2spKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC01Mzg4LDcgJiM0Mzs1Mzg5LDcgQEAgc3RhdGljIGludCByZWFjcXVpcmVfaGVsZF9sb2NrcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHVuc2lnbmVkIGludCBkZXB0aCxcbiBcdFx0XHRcdCAgICBobG9jay1cdTAwM2VyZWFkLCBobG9jay1cdTAwM2VjaGVjayxcbiBcdFx0XHRcdCAgICBobG9jay1cdTAwM2VoYXJkaXJxc19vZmYsXG4gXHRcdFx0XHQgICAgaGxvY2stXHUwMDNlbmVzdF9sb2NrLCBobG9jay1cdTAwM2VhY3F1aXJlX2lwLFxuLVx0XHRcdFx0ICAgIGhsb2NrLVx1MDAzZXJlZmVyZW5jZXMsIGhsb2NrLVx1MDAzZXBpbl9jb3VudCwgMCkpIHtcbiYjNDM7XHRcdFx0XHQgICAgaGxvY2stXHUwMDNlcmVmZXJlbmNlcywgaGxvY2stXHUwMDNlcGluX2NvdW50LCAwLCBobG9jay1cdTAwM2VzZXFfY291bnQpKSB7XG4gXHRcdGNhc2UgMDpcbiBcdFx0XHRyZXR1cm4gMTtcbiBcdFx0Y2FzZSAxOlxuQEAgLTU2ODQsNiAmIzQzOzU2ODUsMjQgQEAgc3RhdGljIHZvaWQgX19sb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSBjb29raWVcbiBcdFdBUk4oMSwgXCYjMzQ7dW5waW5uaW5nIGFuIHVuaGVsZCBsb2NrXFxuXCYjMzQ7KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1MzIgX19sb2NrX3NlcXVlbmNlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghZGVidWdfbG9ja3MpKVxuJiM0MztcdFx0cmV0dXJuIH4wO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjdXJyLVx1MDAzZWxvY2tkZXBfZGVwdGg7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaGVsZF9sb2NrICpobG9jayA9IGN1cnItXHUwMDNlaGVsZF9sb2NrcyAmIzQzOyBpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChtYXRjaF9oZWxkX2xvY2soaGxvY2ssIGxvY2spKVxuJiM0MztcdFx0XHRyZXR1cm4gaGxvY2stXHUwMDNlc2VxX2NvdW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIH4wO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQ2hlY2sgd2hldGhlciB3ZSBmb2xsb3cgdGhlIGlycS1mbGFncyBzdGF0ZSBwcmVjaXNlbHk6XG4gICovXG5AQCAtNTg2Niw3ICYjNDM7NTg4NSw4IEBAIHZvaWQgbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLFxuIFxuIFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XG4gXHRfX2xvY2tfYWNxdWlyZShsb2NrLCBzdWJjbGFzcywgdHJ5bG9jaywgcmVhZCwgY2hlY2ssXG4tXHRcdCAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMCk7XG4mIzQzO1x0XHQgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDAsIDAsIDAsXG4mIzQzO1x0XHQgICAgICAgJiM0MzsmIzQzO2N1cnJlbnQtXHUwMDNlbG9ja2RlcF9zZXEpO1xuIFx0bG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7XG4gXHRyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIH1cbkBAIC01OTE0LDcgJiM0Mzs1OTM0LDggQEAgdm9pZCBsb2NrX3N5bmMoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBzdWJjbGFzcywgaW50IHJlYWQsXG4gXG4gXHRsb2NrZGVwX3JlY3Vyc2lvbl9pbmMoKTtcbiBcdF9fbG9ja19hY3F1aXJlKGxvY2ssIHN1YmNsYXNzLCAwLCByZWFkLCBjaGVjayxcbi1cdFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAxKTtcbiYjNDM7XHRcdCAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMSxcbiYjNDM7XHRcdCAgICAgICAmIzQzOyYjNDM7Y3VycmVudC1cdTAwM2Vsb2NrZGVwX3NlcSk7XG4gXHRjaGVja19jaGFpbl9rZXkoY3VycmVudCk7XG4gXHRsb2NrZGVwX3JlY3Vyc2lvbl9maW5pc2goKTtcbiBcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG5AQCAtNjAwMCw2ICYjNDM7NjAyMSwyNiBAQCB2b2lkIGxvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llIGNvb2tpZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobG9ja191bnBpbl9sb2NrKTtcbiBcbiYjNDM7dTMyIGxvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHR1MzIgc2VxID0gfjA7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghbG9ja2RlcF9lbmFibGVkKCkpKVxuJiM0MztcdFx0cmV0dXJuIHNlcTtcbiYjNDM7XG4mIzQzO1x0cmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiYjNDM7XHRjaGVja19mbGFncyhmbGFncyk7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfcmVjdXJzaW9uX2luYygpO1xuJiM0MztcdHNlcSA9IF9fbG9ja19zZXF1ZW5jZShsb2NrKTtcbiYjNDM7XHRsb2NrZGVwX3JlY3Vyc2lvbl9maW5pc2goKTtcbiYjNDM7XHRyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2VxO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxvY2tfc2VxdWVuY2UpO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVFxuIHN0YXRpYyB2b2lkIHByaW50X2xvY2tfY29udGVudGlvbl9idWcoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLFxuZGlmZiAtLWdpdCBhL2xpYi9tYXBsZV90cmVlLmMgYi9saWIvbWFwbGVfdHJlZS5jXG5pbmRleCBlNTI4NzY0MzViNzdmMC4uNmQ3MWZkYzQxNDcwNjQgMTAwNjQ0XG4tLS0gYS9saWIvbWFwbGVfdHJlZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvbWFwbGVfdHJlZS5jXG5AQCAtNDY5LDcgJiM0Mzs0NjksNyBAQCBzdGF0aWMgaW5saW5lXG4gdm9pZCBtYXNfc2V0X3BhcmVudChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICplbm9kZSxcbiBcdFx0ICAgIGNvbnN0IHN0cnVjdCBtYXBsZV9lbm9kZSAqcGFyZW50LCB1bnNpZ25lZCBjaGFyIHNsb3QpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyB2YWwgPSAodW5zaWduZWQgbG9uZylwYXJlbnQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB2YWw7XG4gXHR1bnNpZ25lZCBsb25nIHNoaWZ0O1xuIFx0dW5zaWduZWQgbG9uZyB0eXBlO1xuIFx0ZW51bSBtYXBsZV90eXBlIHBfdHlwZSA9IG10ZV9ub2RlX3R5cGUocGFyZW50KTtcbkBAIC00OTAsMTEgJiM0Mzs0OTAsNDcgQEAgdm9pZCBtYXNfc2V0X3BhcmVudChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICplbm9kZSxcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4mIzQzO1x0dmFsID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50O1xuIFx0dmFsIFx1MDAyNj0gfk1BUExFX05PREVfTUFTSzsgLyogQ2xlYXIgYWxsIG5vZGUgbWV0YWRhdGEgaW4gcGFyZW50ICovXG4gXHR2YWwgfD0gKHNsb3QgXHUwMDNjXHUwMDNjIHNoaWZ0KSB8IHR5cGU7XG4gXHRtdGVfdG9fbm9kZShlbm9kZSktXHUwMDNlcGFyZW50ID0gbWFfcGFyZW50X3B0cih2YWwpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogbWFzX3NldF9wYXJlbnRfc2xvdHMoKSAtIEJ1bGsgb3BlcmF0aW9uIHRvIHNldCBtYW55IHNsb3QgcGFyZW50IHBvaW50ZXJzXG4mIzQzOyAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZVxuJiM0MzsgKiBAcGFyZW50OiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlIHRoYXQgaXMgdGhlIHBhcmVudCBvZiBAZW5vZGUuXG4mIzQzOyAqIEBzbG90OiBUaGUgc2xvdCB0aGF0IG9mIHRoZSBAZW5vZGUuXG4mIzQzOyAqIEBzdGFydF9zbG90OiBUaGUgb2Zmc2V0IGludG8gQHNsb3RcbiYjNDM7ICogQGNvdW50OiBUaGUgbnVtYmVyIG9mIHNsb3RzIHRvIHNldCAoZWc6IGV4Y2x1c2l2ZSlcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmVcbiYjNDM7dm9pZCBtYXNfc2V0X3BhcmVudF9zbG90cyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICpwYXJlbnQsXG4mIzQzO1x0dm9pZCBfX3JjdSAqKnNsb3RzLCB1bnNpZ25lZCBjaGFyIHN0YXJ0X3Nsb3QsIHVuc2lnbmVkIGNoYXIgY291bnQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZhbDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNoaWZ0O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdHlwZTtcbiYjNDM7XHRlbnVtIG1hcGxlX3R5cGUgcF90eXBlID0gbXRlX25vZGVfdHlwZShwYXJlbnQpO1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgaTtcbiYjNDM7XG4mIzQzO1x0TUFTX0JVR19PTihtYXMsIHBfdHlwZSAhPSBtYXBsZV9yYW5nZV82NCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0cF90eXBlICE9IG1hcGxlX2FyYW5nZV82NCk7XG4mIzQzO1xuJiM0MztcdHNoaWZ0ID0gTUFQTEVfUEFSRU5UX1NMT1RfU0hJRlQ7XG4mIzQzO1x0dHlwZSA9IE1BUExFX1BBUkVOVF9SQU5HRTY0O1xuJiM0MztcbiYjNDM7XHR2YWwgPSAodW5zaWduZWQgbG9uZylwYXJlbnQ7XG4mIzQzO1x0dmFsIFx1MDAyNj0gfk1BUExFX05PREVfTUFTSztcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHB2YWwgPSB2YWwgfCAoKHN0YXJ0X3Nsb3QgJiM0MzsgaSkgXHUwMDNjXHUwMDNjIHNoaWZ0KSB8IHR5cGU7XG4mIzQzO1x0XHRzdHJ1Y3QgbWFwbGVfZW5vZGUgKmNoaWxkID0gKHN0cnVjdCBtYXBsZV9lbm9kZSAqKXNsb3RzW2ldO1xuJiM0MztcbiYjNDM7XHRcdG10ZV90b19ub2RlKGNoaWxkKS1cdTAwM2VwYXJlbnQgPSBtYV9wYXJlbnRfcHRyKHB2YWwpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIG10ZV9wYXJlbnRfc2xvdCgpIC0gZ2V0IHRoZSBwYXJlbnQgc2xvdCBvZiBAZW5vZGUuXG4gICogQGVub2RlOiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlLlxuQEAgLTExNTMsNiAmIzQzOzExODksNzAgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19mcmVlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnVzZWQpXG4gXHRtYV9mcmVlX3JjdShtdGVfdG9fbm9kZSh1c2VkKSk7XG4gfVxuIFxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19MT0NLREVQXG4mIzQzO3N0cnVjdCBsb2NrZGVwX21hcCAqbWFzX2xvY2tkZXBfbWFwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1hcGxlX3RyZWUgKm10ID0gbWFzLVx1MDAzZXRyZWU7XG4mIzQzO1xuJiM0MztcdGlmIChtdF9leHRlcm5hbF9sb2NrKG10KSlcbiYjNDM7XHRcdHJldHVybiBtdC1cdTAwM2VtYV9leHRlcm5hbF9sb2NrO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2KG10LVx1MDAzZW1hX2xvY2spLmRlcF9tYXA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWFzX2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpXG4mIzQzO3tcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUFxuJiM0MztcdGlmICghbWFzX2lzX2FjdGl2ZShtYXMpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxuJiM0MztcdGlmICghbXRfbG9ja19pc19oZWxkKG1hcy1cdTAwM2V0cmVlKSkge1xuJiM0MztcdFx0aWYgKG10X2luX3JjdShtYXMtXHUwMDNldHJlZSkpXG4mIzQzO1x0XHRcdFdBUk5fT05fT05DRShwb2xsX3N0YXRlX3N5bmNocm9uaXplX3JjdShtYXMtXHUwMDNlcmN1X2dwKSk7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXG4mIzQzO1xuJiM0MztcdGlmIChtdF9sb2NrX2lzX2hlbGQobWFzLVx1MDAzZXRyZWUpKVxuJiM0MztcdFx0V0FSTl9PTl9PTkNFKG1hcy1cdTAwM2VsZF9zZXEgIT0gbG9ja19zZXF1ZW5jZShtYXNfbG9ja2RlcF9tYXAobWFzKSkpO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi9cbiYjNDM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1hc19pbml0X2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpXG4mIzQzO3tcbiYjNDM7I2lmZGVmIENPTkZJR19MT0NLREVQXG4mIzQzOyNpZmRlZiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RcbiYjNDM7XHRpZiAoIW10X2xvY2tfaXNfaGVsZChtYXMtXHUwMDNldHJlZSkpIHtcbiYjNDM7XHRcdGlmIChtdF9pbl9yY3UobWFzLVx1MDAzZXRyZWUpKVxuJiM0MztcdFx0XHRtYXMtXHUwMDNlcmN1X2dwID0gZ2V0X3N0YXRlX3N5bmNocm9uaXplX3JjdSgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xuJiM0MztcbiYjNDM7XHRpZiAobXRfbG9ja19pc19oZWxkKG1hcy1cdTAwM2V0cmVlKSlcbiYjNDM7XHRcdG1hcy1cdTAwM2VsZF9zZXEgPSBsb2NrX3NlcXVlbmNlKG1hc19sb2NrZGVwX21hcChtYXMpKTtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19MT0NLREVQICovXG4mIzQzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtYXNfbWF5X2luaXRfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiYjNDM7I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxuJiM0MztcdGlmIChtYXNfaXNfc3RhcnQobWFzKSB8fCBtYXNfaXNfcGF1c2VkKG1hcykpIHtcbiYjNDM7XHRcdG1hc19pbml0X2xvY2tfY2hlY2sobWFzKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QgKi9cbiYjNDM7XHRtYXNfbG9ja19jaGVjayhtYXMpO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi9cbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIG1hc19zdGFydCgpIC0gU2V0cyB1cCBtYXBsZSBzdGF0ZSBmb3Igb3BlcmF0aW9ucy5cbiAgKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGUuXG5AQCAtMTE3MSw2ICYjNDM7MTI3MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1hcGxlX2Vub2RlICptYXNfc3RhcnQoc3RydWN0IG1hX3N0YXRlICptYXMpXG4gXHRpZiAobGlrZWx5KG1hc19pc19zdGFydChtYXMpKSkge1xuIFx0XHRzdHJ1Y3QgbWFwbGVfZW5vZGUgKnJvb3Q7XG4gXG4mIzQzO1x0XHRtYXNfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRcdG1hcy1cdTAwM2VtaW4gPSAwO1xuIFx0XHRtYXMtXHUwMDNlbWF4ID0gVUxPTkdfTUFYO1xuIFxuQEAgLTE1MDEsMTQgJiM0MzsxNjAyLDI2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfcGFyZW50X2dhcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgY2hhciBvZmZzZXQsXG4gXHRnb3RvIGFzY2VuZDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtYXNfdXBkYXRlX2dhcF9rbm93bihzdHJ1Y3QgbWFfc3RhdGUgKm1hcyxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgZ2FwKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgY2hhciBwc2xvdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBfZ2FwO1xuJiM0MztcbiYjNDM7XHRwc2xvdCA9IG10ZV9wYXJlbnRfc2xvdChtYXMtXHUwMDNlbm9kZSk7XG4mIzQzO1x0cF9nYXAgPSBtYV9nYXBzKG10ZV9wYXJlbnQobWFzLVx1MDAzZW5vZGUpLFxuJiM0MztcdFx0XHRtYXNfcGFyZW50X3R5cGUobWFzLCBtYXMtXHUwMDNlbm9kZSkpW3BzbG90XTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBfZ2FwICE9IGdhcClcbiYjNDM7XHRcdG1hc19wYXJlbnRfZ2FwKG1hcywgcHNsb3QsIGdhcCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBtYXNfdXBkYXRlX2dhcCgpIC0gVXBkYXRlIGEgbm9kZXMgZ2FwcyBhbmQgcHJvcGFnYXRlIHVwIGlmIG5lY2Vzc2FyeS5cbiAgKiBAbWFzOiB0aGUgbWFwbGUgc3RhdGUuXG4gICovXG4gc3RhdGljIGlubGluZSB2b2lkIG1hc191cGRhdGVfZ2FwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIHtcbi1cdHVuc2lnbmVkIGNoYXIgcHNsb3Q7XG4tXHR1bnNpZ25lZCBsb25nIHBfZ2FwO1xuIFx0dW5zaWduZWQgbG9uZyBtYXhfZ2FwO1xuIFxuIFx0aWYgKCFtdF9pc19hbGxvYyhtYXMtXHUwMDNldHJlZSkpXG5AQCAtMTUxOCwxMyAmIzQzOzE2MzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3VwZGF0ZV9nYXAoc3RydWN0IG1hX3N0YXRlICptYXMpXG4gXHRcdHJldHVybjtcbiBcbiBcdG1heF9nYXAgPSBtYXNfbWF4X2dhcChtYXMpO1xuLVxuLVx0cHNsb3QgPSBtdGVfcGFyZW50X3Nsb3QobWFzLVx1MDAzZW5vZGUpO1xuLVx0cF9nYXAgPSBtYV9nYXBzKG10ZV9wYXJlbnQobWFzLVx1MDAzZW5vZGUpLFxuLVx0XHRcdG1hc19wYXJlbnRfdHlwZShtYXMsIG1hcy1cdTAwM2Vub2RlKSlbcHNsb3RdO1xuLVxuLVx0aWYgKHBfZ2FwICE9IG1heF9nYXApXG4tXHRcdG1hc19wYXJlbnRfZ2FwKG1hcywgcHNsb3QsIG1heF9nYXApO1xuJiM0MztcdG1hc191cGRhdGVfZ2FwX2tub3duKG1hcywgbWF4X2dhcCk7XG4gfVxuIFxuIC8qXG5AQCAtMTU0MCwxNCAmIzQzOzE2NDcsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19hZG9wdF9jaGlsZHJlbihzdHJ1Y3QgbWFfc3RhdGUgKm1hcyxcbiBcdHN0cnVjdCBtYXBsZV9ub2RlICpub2RlID0gbXRlX3RvX25vZGUocGFyZW50KTtcbiBcdHZvaWQgX19yY3UgKipzbG90cyA9IG1hX3Nsb3RzKG5vZGUsIHR5cGUpO1xuIFx0dW5zaWduZWQgbG9uZyAqcGl2b3RzID0gbWFfcGl2b3RzKG5vZGUsIHR5cGUpO1xuLVx0c3RydWN0IG1hcGxlX2Vub2RlICpjaGlsZDtcbi1cdHVuc2lnbmVkIGNoYXIgb2Zmc2V0O1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgZW5kO1xuIFxuLVx0b2Zmc2V0ID0gbWFfZGF0YV9lbmQobm9kZSwgdHlwZSwgcGl2b3RzLCBtYXMtXHUwMDNlbWF4KTtcbi1cdGRvIHtcbi1cdFx0Y2hpbGQgPSBtYXNfc2xvdF9sb2NrZWQobWFzLCBzbG90cywgb2Zmc2V0KTtcbi1cdFx0bWFzX3NldF9wYXJlbnQobWFzLCBjaGlsZCwgcGFyZW50LCBvZmZzZXQpO1xuLVx0fSB3aGlsZSAob2Zmc2V0LS0pO1xuJiM0MztcdGVuZCA9IG1hX2RhdGFfZW5kKG5vZGUsIHR5cGUsIHBpdm90cywgbWFzLVx1MDAzZW1heCk7XG4mIzQzO1x0bWFzX3NldF9wYXJlbnRfc2xvdHMobWFzLCBwYXJlbnQsIHNsb3RzLCAwLCBlbmQgJiM0MzsgMSk7XG4gfVxuIFxuIC8qXG5AQCAtMTkyOSwxNSAmIzQzOzIwMzIsMTAgQEAgdW5zaWduZWQgbG9uZyBub2RlX2NvcHkoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9ub2RlICpzcmMsXG4gXHRzX3Nsb3RzID0gbWFfc2xvdHMoc3JjLCBzX210KSAmIzQzOyBzdGFydDtcbiBcdHNfcGl2b3RzID0gbWFfcGl2b3RzKHNyYywgc19tdCkgJiM0Mzsgc3RhcnQ7XG4gXHRtZW1jcHkoZF9zbG90cywgc19zbG90cywgc2l6ZSAqIHNpemVvZih2b2lkIF9fcmN1ICopKTtcbi1cdGlmICghbWFfaXNfbGVhZihkX210KSBcdTAwMjZcdTAwMjYgc19tdCA9PSBtYXBsZV9jb3B5KSB7XG4tXHRcdHN0cnVjdCBtYXBsZV9lbm9kZSAqZWRzdCA9IG10X21rX25vZGUoZHN0LCBkX210KTtcbiBcbi1cbi1cdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHNpemU7IGkmIzQzOyYjNDM7KVxuLVx0XHRcdG1hc19zZXRfcGFyZW50KG1hcyxcbi1cdFx0XHRcdCAgICAgICBtdF9zbG90X2xvY2tlZChtYXMtXHUwMDNldHJlZSwgZF9zbG90cywgaSksXG4tXHRcdFx0XHQgICAgICAgZWRzdCwgZF9zdGFydCAmIzQzOyBpKTtcbi1cdH1cbiYjNDM7XHRpZiAoIW1hX2lzX2xlYWYoZF9tdCkgXHUwMDI2XHUwMDI2IHNfbXQgPT0gbWFwbGVfY29weSlcbiYjNDM7XHRcdG1hc19zZXRfcGFyZW50X3Nsb3RzKG1hcywgbXRfbWtfbm9kZShkc3QsIGRfbXQpLFxuJiM0MztcdFx0XHRcdCAgICAgZF9zbG90cywgZF9zdGFydCwgc2l6ZSk7XG4gXG4gXHRkX2dhcHMgPSBtYV9nYXBzKGRzdCwgZF9tdCk7XG4gXHRpZiAoZF9nYXBzKSB7XG5AQCAtMjA4MSw4ICYjNDM7MjE3OSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd21iX3JlcGxhY2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9jb3B5ICpjcClcbiBcdG1hcy1cdTAwM2Vub2RlID0gbXRfc2xvdF9sb2NrZWQobWFzLVx1MDAzZXRyZWUsIGNwLVx1MDAzZXNsb3QsIDApO1xuIFx0LyogSW5zZXJ0IHRoZSBuZXcgZGF0YSBpbiB0aGUgdHJlZSAqL1xuIFx0bWFzX3RvcGlhcnlfcmVwbGFjZShtYXMsIG9sZF9lbm9kZSwgY3AtXHUwMDNlaGVpZ2h0KTtcbi1cdGlmICghbXRlX2lzX2xlYWYobWFzLVx1MDAzZW5vZGUpKVxuLVx0XHRtYXNfdXBkYXRlX2dhcChtYXMpO1xuJiM0MztcdGlmIChtdF9pc19hbGxvYyhtYXMtXHUwMDNldHJlZSkgXHUwMDI2XHUwMDI2ICFtdGVfaXNfcm9vdChtYXMtXHUwMDNlbm9kZSkpXG4mIzQzO1x0XHRtYXNfdXBkYXRlX2dhcF9rbm93bihtYXMsIGNwLVx1MDAzZWdhcFswXSk7XG4gXG4gXHRtdHJlZV9yYW5nZV93YWxrKG1hcyk7XG4gfVxuQEAgLTI5MjgsMTMgJiM0MzszMDI2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19leHRlbmRfc3Bhbm5pbmdfbnVsbChzdHJ1Y3QgbWFfd3Jfc3RhdGUgKmxfd3JfbWFzLFxuIFx0XHRpZiAocl9tYXMtXHUwMDNlbGFzdCBcdTAwM2Mgcl93cl9tYXMtXHUwMDNlcl9tYXgpXG4gXHRcdFx0cl9tYXMtXHUwMDNlbGFzdCA9IHJfd3JfbWFzLVx1MDAzZXJfbWF4O1xuIFx0XHRyX21hcy1cdTAwM2VvZmZzZXQmIzQzOyYjNDM7O1xuLVx0fSBlbHNlIGlmICgocl9tYXMtXHUwMDNlbGFzdCA9PSByX3dyX21hcy1cdTAwM2VyX21heCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKHJfbWFzLVx1MDAzZWxhc3QgXHUwMDNjIHJfbWFzLVx1MDAzZW1heCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIW1hc19zbG90X2xvY2tlZChyX21hcywgcl93cl9tYXMtXHUwMDNlc2xvdHMsIHJfbWFzLVx1MDAzZW9mZnNldCAmIzQzOyAxKSkge1xuLVx0XHRyX21hcy1cdTAwM2VsYXN0ID0gbWFzX3NhZmVfcGl2b3Qocl9tYXMsIHJfd3JfbWFzLVx1MDAzZXBpdm90cyxcbi1cdFx0XHRcdFx0ICAgICByX3dyX21hcy1cdTAwM2V0eXBlLCByX21hcy1cdTAwM2VvZmZzZXQgJiM0MzsgMSk7XG4tXHRcdHJfbWFzLVx1MDAzZW9mZnNldCYjNDM7JiM0Mzs7XG4tXHRcdHJfd3JfbWFzLVx1MDAzZXJfbWF4ID0gcl9tYXMtXHUwMDNlbGFzdDtcbiBcdH1cbiB9XG4gXG5AQCAtMzEyNSw3ICYjNDM7MzIxNiw3IEBAIHN0YXRpYyB2b2lkIG1hc193cl9zcGFubmluZ19zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4ge1xuIFx0dW5zaWduZWQgY2hhciBkc3Rfb2Zmc2V0LCBvZmZzZXRfZW5kO1xuLVx0dW5zaWduZWQgY2hhciBjb3B5X3NpemUsIG5vZGVfcGl2b3RzO1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgY29weV9zaXplLCBub2RlX3Bpdm90cywgbm9kZV9zbG90cztcbiBcdHN0cnVjdCBtYXBsZV9ub2RlIHJldXNlLCAqbmV3bm9kZTtcbiBcdHVuc2lnbmVkIGxvbmcgKmRzdF9waXZvdHM7XG4gXHR2b2lkIF9fcmN1ICoqZHN0X3Nsb3RzO1xuQEAgLTMxMzgsNiAmIzQzOzMyMjksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4gXHRpbl9yY3UgPSBtdF9pbl9yY3UobWFzLVx1MDAzZXRyZWUpO1xuIFx0b2Zmc2V0X2VuZCA9IHdyX21hcy1cdTAwM2VvZmZzZXRfZW5kO1xuIFx0bm9kZV9waXZvdHMgPSBtdF9waXZvdHNbd3JfbWFzLVx1MDAzZXR5cGVdO1xuJiM0MztcdG5vZGVfc2xvdHMgPSBtdF9zbG90c1t3cl9tYXMtXHUwMDNldHlwZV07XG4gXHQvKiBBc3N1bWUgbGFzdCBhZGRzIGFuIGVudHJ5ICovXG4gXHRuZXdfZW5kID0gbWFzLVx1MDAzZWVuZCAmIzQzOyAxIC0gb2Zmc2V0X2VuZCAmIzQzOyBtYXMtXHUwMDNlb2Zmc2V0O1xuIFx0aWYgKG1hcy1cdTAwM2VsYXN0ID09IHdyX21hcy1cdTAwM2VlbmRfcGl2KSB7XG5AQCAtMzE0OSw3ICYjNDM7MzI0MSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiBcdGlmIChpbl9yY3UpIHtcbiBcdFx0bmV3bm9kZSA9IG1hc19wb3Bfbm9kZShtYXMpO1xuIFx0fSBlbHNlIHtcbi1cdFx0bWVtc2V0KFx1MDAyNnJldXNlLCAwLCBzaXplb2Yoc3RydWN0IG1hcGxlX25vZGUpKTtcbiBcdFx0bmV3bm9kZSA9IFx1MDAyNnJldXNlO1xuIFx0fVxuIFxuQEAgLTMxOTMsNyAmIzQzOzMyODQsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIFx0XHRkc3RfcGl2b3RzW25ld19lbmRdID0gbWFzLVx1MDAzZW1heDtcbiBcbiBkb25lOlxuLVx0bWFzX2xlYWZfc2V0X21ldGEobmV3bm9kZSwgbWFwbGVfbGVhZl82NCwgbmV3X2VuZCk7XG4mIzQzO1x0aWYgKCFpbl9yY3UgXHUwMDI2XHUwMDI2IG5ld19lbmQgJiM0MzsgMiBcdTAwM2Mgbm9kZV9zbG90cykge1xuJiM0MztcdFx0dW5zaWduZWQgY2hhciBjbGVhcl9mcm9tID0gbmV3X2VuZCAmIzQzOyAxO1xuJiM0MztcbiYjNDM7XHRcdG1lbXNldChkc3Rfc2xvdHMgJiM0MzsgY2xlYXJfZnJvbSwgMCxcbiYjNDM7XHRcdCAgICAgICBzaXplb2Yodm9pZCBfX3JjdSAqKSAqIChub2RlX3Nsb3RzIC0gY2xlYXJfZnJvbSkpO1xuJiM0MztcdFx0aWYgKGNsZWFyX2Zyb20gXHUwMDNjIG5vZGVfcGl2b3RzKVxuJiM0MztcdFx0XHRtZW1zZXQoZHN0X3Bpdm90cyAmIzQzOyBjbGVhcl9mcm9tLCAwLFxuJiM0MztcdFx0XHQgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogKG5vZGVfcGl2b3RzIC0gY2xlYXJfZnJvbSkpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWFzX2xlYWZfc2V0X21ldGEobmV3bm9kZSwgd3JfbWFzLVx1MDAzZXR5cGUsIG5ld19lbmQpO1xuIFx0aWYgKGluX3JjdSkge1xuIFx0XHRzdHJ1Y3QgbWFwbGVfZW5vZGUgKm9sZF9lbm9kZSA9IG1hcy1cdTAwM2Vub2RlO1xuIFxuQEAgLTMyMTgsNyAmIzQzOzMzMTksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX3Nsb3Rfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4gXHR2b2lkIF9fcmN1ICoqc2xvdHMgPSB3cl9tYXMtXHUwMDNlc2xvdHM7XG4gXHRib29sIGdhcCA9IGZhbHNlO1xuIFxuLVx0Z2FwIHw9ICFtdF9zbG90X2xvY2tlZChtYXMtXHUwMDNldHJlZSwgc2xvdHMsIG9mZnNldCk7XG4mIzQzO1x0Z2FwIHw9ICF3cl9tYXMtXHUwMDNlY29udGVudDtcbiBcdGdhcCB8PSAhbXRfc2xvdF9sb2NrZWQobWFzLVx1MDAzZXRyZWUsIHNsb3RzLCBvZmZzZXQgJiM0MzsgMSk7XG4gXG4gXHRpZiAod3JfbWFzLVx1MDAzZW9mZnNldF9lbmQgLSBvZmZzZXQgPT0gMSkge1xuQEAgLTM2NjEsNiAmIzQzOzM3NjIsOSBAQCBzdGF0aWMgaW5saW5lIGVudW0gc3RvcmVfdHlwZSBtYXNfd3Jfc3RvcmVfdHlwZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiB7XG4gXHRzdHJ1Y3QgbWFfc3RhdGUgKm1hcyA9IHdyX21hcy1cdTAwM2VtYXM7XG4gXHR1bnNpZ25lZCBjaGFyIG5ld19lbmQ7XG4mIzQzO1x0Ym9vbCBhcHBlbmRpbmc7XG4mIzQzO1x0Ym9vbCBvbmVfc2xvdDtcbiYjNDM7XHRib29sIGluX3JjdTtcbiBcbiBcdGlmICh1bmxpa2VseShtYXNfaXNfbm9uZShtYXMpIHx8IG1hc19pc19wdHIobWFzKSkpXG4gXHRcdHJldHVybiB3cl9zdG9yZV9yb290O1xuQEAgLTM2ODAsMjEgJiM0MzszNzg0LDMwIEBAIHN0YXRpYyBpbmxpbmUgZW51bSBzdG9yZV90eXBlIG1hc193cl9zdG9yZV90eXBlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIFx0XHRyZXR1cm4gd3JfbmV3X3Jvb3Q7XG4gXG4gXHRuZXdfZW5kID0gbWFzX3dyX25ld19lbmQod3JfbWFzKTtcbiYjNDM7XHRpbl9yY3UgPSBtdF9pbl9yY3UobWFzLVx1MDAzZXRyZWUpO1xuJiM0MztcdGFwcGVuZGluZyA9IG1hcy1cdTAwM2VvZmZzZXQgPT0gbWFzLVx1MDAzZWVuZDtcbiYjNDM7XHRvbmVfc2xvdCA9IHdyX21hcy1cdTAwM2VvZmZzZXRfZW5kIC0gbWFzLVx1MDAzZW9mZnNldCA9PSAxO1xuJiM0MztcbiBcdC8qIFBvdGVudGlhbCBzcGFubmluZyByZWJhbGFuY2UgY29sbGFwc2luZyBhIG5vZGUgKi9cbiBcdGlmIChuZXdfZW5kIFx1MDAzYyBtdF9taW5fc2xvdHNbd3JfbWFzLVx1MDAzZXR5cGVdKSB7XG4gXHRcdGlmICghbXRlX2lzX3Jvb3QobWFzLVx1MDAzZW5vZGUpKVxuIFx0XHRcdHJldHVybiAgd3JfcmViYWxhbmNlO1xuJiM0MztcdFx0aWYgKCFpbl9yY3UpIHtcbiYjNDM7XHRcdFx0aWYgKGFwcGVuZGluZylcbiYjNDM7XHRcdFx0XHRyZXR1cm4gd3JfYXBwZW5kO1xuJiM0MztcdFx0XHRlbHNlIGlmIChtYXMtXHUwMDNlZW5kID09IG5ld19lbmQgXHUwMDI2XHUwMDI2IG9uZV9zbG90KVxuJiM0MztcdFx0XHRcdHJldHVybiB3cl9zbG90X3N0b3JlO1xuJiM0MztcdFx0fVxuIFx0XHRyZXR1cm4gd3Jfbm9kZV9zdG9yZTtcbiBcdH1cbiBcbiBcdGlmIChuZXdfZW5kIFx1MDAzZT0gbXRfc2xvdHNbd3JfbWFzLVx1MDAzZXR5cGVdKVxuIFx0XHRyZXR1cm4gd3Jfc3BsaXRfc3RvcmU7XG4gXG4tXHRpZiAoIW10X2luX3JjdShtYXMtXHUwMDNldHJlZSkgXHUwMDI2XHUwMDI2IChtYXMtXHUwMDNlb2Zmc2V0ID09IG1hcy1cdTAwM2VlbmQpKVxuJiM0MztcdGlmICghaW5fcmN1IFx1MDAyNlx1MDAyNiBhcHBlbmRpbmcpXG4gXHRcdHJldHVybiB3cl9hcHBlbmQ7XG4gXG4tXHRpZiAoKG5ld19lbmQgPT0gbWFzLVx1MDAzZWVuZCkgXHUwMDI2XHUwMDI2ICghbXRfaW5fcmN1KG1hcy1cdTAwM2V0cmVlKSB8fFxuLVx0XHQod3JfbWFzLVx1MDAzZW9mZnNldF9lbmQgLSBtYXMtXHUwMDNlb2Zmc2V0ID09IDEpKSlcbiYjNDM7XHRpZiAobmV3X2VuZCA9PSBtYXMtXHUwMDNlZW5kIFx1MDAyNlx1MDAyNiAoIWluX3JjdSB8fCBvbmVfc2xvdCkpXG4gXHRcdHJldHVybiB3cl9zbG90X3N0b3JlO1xuIFxuIFx0cmV0dXJuIHdyX25vZGVfc3RvcmU7XG5AQCAtMzc5MywyNyAmIzQzOzM5MDYsMjkgQEAgaW50IG1hc19hbGxvY19jeWNsaWMoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0cCxcbiBcdFx0dm9pZCAqZW50cnksIHVuc2lnbmVkIGxvbmcgcmFuZ2VfbG8sIHVuc2lnbmVkIGxvbmcgcmFuZ2VfaGksXG4gXHRcdHVuc2lnbmVkIGxvbmcgKm5leHQsIGdmcF90IGdmcClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG1pbiA9IHJhbmdlX2xvO1xuLVx0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1pbjtcbiBcbi1cdHJhbmdlX2xvID0gbWF4KG1pbiwgKm5leHQpO1xuLVx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCByYW5nZV9sbywgcmFuZ2VfaGksIDEpO1xuLVx0aWYgKChtYXMtXHUwMDNldHJlZS1cdTAwM2VtYV9mbGFncyBcdTAwMjYgTVRfRkxBR1NfQUxMT0NfV1JBUFBFRCkgXHUwMDI2XHUwMDI2IHJldCA9PSAwKSB7XG4tXHRcdG1hcy1cdTAwM2V0cmVlLVx1MDAzZW1hX2ZsYWdzIFx1MDAyNj0gfk1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQ7XG4tXHRcdHJldCA9IDE7XG4tXHR9XG4tXHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByYW5nZV9sbyBcdTAwM2UgbWluKSB7XG4tXHRcdG1hc19yZXNldChtYXMpO1xuLVx0XHRyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIG1pbiwgcmFuZ2VfaGksIDEpO1xuLVx0XHRpZiAocmV0ID09IDApXG4mIzQzO1x0bWluID0gcmFuZ2VfbG87XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0cmFuZ2VfbG8gPSBtYXgobWluLCAqbmV4dCk7XG4mIzQzO1x0XHRyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIHJhbmdlX2xvLCByYW5nZV9oaSwgMSk7XG4mIzQzO1x0XHRpZiAoKG1hcy1cdTAwM2V0cmVlLVx1MDAzZW1hX2ZsYWdzIFx1MDAyNiBNVF9GTEFHU19BTExPQ19XUkFQUEVEKSBcdTAwMjZcdTAwMjYgcmV0ID09IDApIHtcbiYjNDM7XHRcdFx0bWFzLVx1MDAzZXRyZWUtXHUwMDNlbWFfZmxhZ3MgXHUwMDI2PSB+TVRfRkxBR1NfQUxMT0NfV1JBUFBFRDtcbiBcdFx0XHRyZXQgPSAxO1xuLVx0fVxuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHJhbmdlX2xvIFx1MDAzZSBtaW4pIHtcbiYjNDM7XHRcdFx0bWFzX3Jlc2V0KG1hcyk7XG4mIzQzO1x0XHRcdHJldCA9IG1hc19lbXB0eV9hcmVhKG1hcywgbWluLCByYW5nZV9oaSwgMSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgPT0gMClcbiYjNDM7XHRcdFx0XHRyZXQgPSAxO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGRvIHtcbiBcdFx0bWFzX2luc2VydChtYXMsIGVudHJ5KTtcbiBcdH0gd2hpbGUgKG1hc19ub21lbShtYXMsIGdmcCkpO1xuJiM0MztcbiBcdGlmIChtYXNfaXNfZXJyKG1hcykpXG4gXHRcdHJldHVybiB4YV9lcnIobWFzLVx1MDAzZW5vZGUpO1xuIFxuQEAgLTQzNjAsNiAmIzQzOzQ0NzUsNyBAQCB2b2lkICptYXNfd2FsayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiB7XG4gXHR2b2lkICplbnRyeTtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKCFtYXNfaXNfYWN0aXZlKG1hcykgXHUwMDI2XHUwMDI2ICFtYXNfaXNfc3RhcnQobWFzKSlcbiBcdFx0bWFzLVx1MDAzZXN0YXR1cyA9IG1hX3N0YXJ0O1xuIHJldHJ5OlxuQEAgLTQ4MzEsNiAmIzQzOzQ5NDcsNyBAQCB2b2lkICptYXNfc3RvcmUoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5KVxuIHtcbiBcdE1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBlbnRyeSk7XG4gXG4mIzQzO1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdHRyYWNlX21hX3dyaXRlKFRQX0ZDVCwgbWFzLCAwLCBlbnRyeSk7XG4gI2lmZGVmIENPTkZJR19ERUJVR19NQVBMRV9UUkVFXG4gXHRpZiAoTUFTX1dBUk5fT04obWFzLCBtYXMtXHUwMDNlaW5kZXggXHUwMDNlIG1hcy1cdTAwM2VsYXN0KSlcbkBAIC00ODg5LDYgJiM0Mzs1MDA2LDcgQEAgaW50IG1hc19zdG9yZV9nZnAoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5LCBnZnBfdCBnZnApXG4gXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xuIFx0aW50IHJldCA9IDA7XG4gXG4mIzQzO1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiByZXRyeTpcbiBcdG1hc193cl9wcmVhbGxvY2F0ZShcdTAwMjZ3cl9tYXMsIGVudHJ5KTtcbiBcdGlmICh1bmxpa2VseShtYXNfbm9tZW0obWFzLCBnZnApKSkge1xuQEAgLTQ5MTksNiAmIzQzOzUwMzcsNyBAQCB2b2lkIG1hc19zdG9yZV9wcmVhbGxvYyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnkpXG4ge1xuIFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIGVudHJ5KTtcbiBcbiYjNDM7XHRtYXNfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hcy1cdTAwM2VzdG9yZV90eXBlID09IHdyX3N0b3JlX3Jvb3QpIHtcbiBcdFx0bWFzX3dyX3ByZWFsbG9jX3NldHVwKFx1MDAyNndyX21hcyk7XG4gXHRcdGdvdG8gc3RvcmU7XG5AQCAtNDk1MSw2ICYjNDM7NTA3MCw3IEBAIGludCBtYXNfcHJlYWxsb2NhdGUoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5LCBnZnBfdCBnZnApXG4ge1xuIFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIGVudHJ5KTtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0bWFzX3dyX3ByZWFsbG9jX3NldHVwKFx1MDAyNndyX21hcyk7XG4gXHRtYXMtXHUwMDNlc3RvcmVfdHlwZSA9IG1hc193cl9zdG9yZV90eXBlKFx1MDAyNndyX21hcyk7XG4gXHRtYXNfcHJlYWxsb2NfY2FsYyhcdTAwMjZ3cl9tYXMsIGVudHJ5KTtcbkBAIC01MDc0LDYgJiM0Mzs1MTk0LDcgQEAgdm9pZCAqbWFzX25leHQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19uZXh0X3NldHVwKG1hcywgbWF4LCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01MDk3LDYgJiM0Mzs1MjE4LDcgQEAgdm9pZCAqbWFzX25leHRfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19uZXh0X3NldHVwKG1hcywgbWF4LCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01MjA1LDYgJiM0Mzs1MzI3LDcgQEAgdm9pZCAqbWFzX3ByZXYoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19wcmV2X3NldHVwKG1hcywgbWluLCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01MjI4LDYgJiM0Mzs1MzUxLDcgQEAgdm9pZCAqbWFzX3ByZXZfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19wcmV2X3NldHVwKG1hcywgbWluLCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01Mjc0LDYgJiM0Mzs1Mzk4LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwobXRfcHJldik7XG4gICovXG4gdm9pZCBtYXNfcGF1c2Uoc3RydWN0IG1hX3N0YXRlICptYXMpXG4ge1xuJiM0MztcdG1hc19sb2NrX2NoZWNrKG1hcyk7XG4gXHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfcGF1c2U7XG4gXHRtYXMtXHUwMDNlbm9kZSA9IE5VTEw7XG4gfVxuQEAgLTUzODIsNiAmIzQzOzU1MDcsNyBAQCB2b2lkICptYXNfZmluZChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpXG4ge1xuIFx0dm9pZCAqZW50cnkgPSBOVUxMO1xuIFxuJiM0MztcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzX2ZpbmRfc2V0dXAobWFzLCBtYXgsIFx1MDAyNmVudHJ5KSlcbiBcdFx0cmV0dXJuIGVudHJ5O1xuIFxuQEAgLTU0MDksNiAmIzQzOzU1MzUsNyBAQCB2b2lkICptYXNfZmluZF9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpXG4ge1xuIFx0dm9pZCAqZW50cnkgPSBOVUxMO1xuIFxuJiM0MztcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzX2ZpbmRfc2V0dXAobWFzLCBtYXgsIFx1MDAyNmVudHJ5KSlcbiBcdFx0cmV0dXJuIGVudHJ5O1xuIFxuQEAgLTU0MjgsNyAmIzQzOzU1NTUsNiBAQCBFWFBPUlRfU1lNQk9MX0dQTChtYXNfZmluZF9yYW5nZSk7XG4gc3RhdGljIGJvb2wgbWFzX2ZpbmRfcmV2X3NldHVwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbixcbiBcdFx0dm9pZCAqKmVudHJ5KVxuIHtcbi1cbiBcdHN3aXRjaCAobWFzLVx1MDAzZXN0YXR1cykge1xuIFx0Y2FzZSBtYV9hY3RpdmU6XG4gXHRcdGdvdG8gYWN0aXZlO1xuQEAgLTU1MjEsNiAmIzQzOzU2NDcsNyBAQCB2b2lkICptYXNfZmluZF9yZXYoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19maW5kX3Jldl9zZXR1cChtYXMsIG1pbiwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTU0Nyw2ICYjNDM7NTY3NCw3IEBAIHZvaWQgKm1hc19maW5kX3JhbmdlX3JldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pXG4ge1xuIFx0dm9pZCAqZW50cnkgPSBOVUxMO1xuIFxuJiM0MztcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzX2ZpbmRfcmV2X3NldHVwKG1hcywgbWluLCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01NTY0LDYgJiM0Mzs1NjkyLDEwIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1hc19maW5kX3JhbmdlX3Jldik7XG4gICogU2VhcmNoZXMgZm9yIEBtYXMtXHUwMDNlaW5kZXgsIHNldHMgQG1hcy1cdTAwM2VpbmRleCBhbmQgQG1hcy1cdTAwM2VsYXN0IHRvIHRoZSByYW5nZSBhbmRcbiAgKiBlcmFzZXMgdGhhdCByYW5nZS5cbiAgKlxuJiM0MzsgKiBOb3RlIHRoYXQgZXJhc2UgcmVxdWlyZXMgYWxsb2NhdGlvbnMgYW5kIHdpbGwgdXNlIEdGUF9LRVJORUwgdG8gZG8gc28gaWZcbiYjNDM7ICogbmVjZXNzYXJ5LiAgSWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBpbnRlcm5hbCBsb2NrIHdpbGwgYmUgZHJvcHBlZCB0b1xuJiM0MzsgKiByZXRyeS5cbiYjNDM7ICpcbiAgKiBSZXR1cm46IHRoZSBlbnRyeSB0aGF0IHdhcyBlcmFzZWQgb3IgJU5VTEwsIEBtYXMtXHUwMDNlaW5kZXggYW5kIEBtYXMtXHUwMDNlbGFzdCBhcmUgdXBkYXRlZC5cbiAgKi9cbiB2b2lkICptYXNfZXJhc2Uoc3RydWN0IG1hX3N0YXRlICptYXMpXG5AQCAtNTU3Miw2ICYjNDM7NTcwNCwxNCBAQCB2b2lkICptYXNfZXJhc2Uoc3RydWN0IG1hX3N0YXRlICptYXMpXG4gXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gbWFzLVx1MDAzZWluZGV4O1xuIFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIE5VTEwpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogSW4gbG93IG1lbW9yeSBzaXR1YXRpb25zLCB0aGUgYWxsb2NhdGlvbiBpcyByZXRyaWVkIHdpdGggdGhlIGdmcCBmbGFnXG4mIzQzO1x0ICogR0ZQX0tFUk5FTC4gIFRoZSBpbnRlcm5hbCBzcGlubG9jayBpcyBkcm9wcGVkIGluIG1hc19ub21lbSgpLCBob3dldmVyXG4mIzQzO1x0ICogdGhlIGV4dGVybmFsIGxvY2sgaXMgbm90IGRyb3BwZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG10X2V4dGVybmFsX2xvY2sobWFzLVx1MDAzZXRyZWUpKVxuJiM0MztcdFx0bWlnaHRfYWxsb2MoR0ZQX0tFUk5FTCk7XG4mIzQzO1xuIFx0aWYgKCFtYXNfaXNfYWN0aXZlKG1hcykgfHwgIW1hc19pc19zdGFydChtYXMpKVxuIFx0XHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XG4gXG5AQCAtNTYwMSwxMCAmIzQzOzU3NDEsMTEgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWFzX2VyYXNlKTtcbiBcbiAvKipcbiAgKiBtYXNfbm9tZW0oKSAtIENoZWNrIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBhbGxvY2F0aW5nIGFuZCBkbyB0aGUgYWxsb2NhdGlvblxuLSAqIGlmIG5lY2Vzc2FyeSBJZiB0aGVyZSBhcmUgYWxsb2NhdGlvbnMsIHRoZW4gZnJlZSB0aGVtLlxuJiM0MzsgKiBpZiBuZWNlc3NhcnkuXG4mIzQzOyAqXG4gICogQG1hczogVGhlIG1hcGxlIHN0YXRlXG4gICogQGdmcDogVGhlIEdGUF9GTEFHUyB0byB1c2UgZm9yIGFsbG9jYXRpb25zXG4tICogUmV0dXJuOiB0cnVlIG9uIGFsbG9jYXRpb24sIGZhbHNlIG90aGVyd2lzZS5cbiYjNDM7ICogUmV0dXJuOiBGYWxzZSBvbiBubyBtZW1vcnkuICBUcnVlIG90aGVyd2lzZSAocGFydGlhbCBzdWNjZXNzIGFzIHdlbGwpXG4gICovXG4gYm9vbCBtYXNfbm9tZW0oc3RydWN0IG1hX3N0YXRlICptYXMsIGdmcF90IGdmcClcbiBcdF9fbXVzdF9ob2xkKG1hcy1cdTAwM2V0cmVlLVx1MDAzZW1hX2xvY2spXG5AQCAtNTYxMiw2ICYjNDM7NTc1MywxMCBAQCBib29sIG1hc19ub21lbShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgZ2ZwX3QgZ2ZwKVxuIFx0aWYgKGxpa2VseShtYXMtXHUwMDNlbm9kZSAhPSBNQV9FUlJPUigtRU5PTUVNKSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHQvKiBBbGxvY2F0aW9ucyBjYW4gZmFpbCwgZG9uJiMzOTt0IGRvIHRoaXMuICovXG4mIzQzO1x0V0FSTl9PTl9PTkNFKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICBtdF9leHRlcm5hbF9sb2NrKG1hcy1cdTAwM2V0cmVlKSk7XG4mIzQzO1xuIFx0aWYgKGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkgXHUwMDI2XHUwMDI2ICFtdF9leHRlcm5hbF9sb2NrKG1hcy1cdTAwM2V0cmVlKSkge1xuIFx0XHRtdHJlZV91bmxvY2sobWFzLVx1MDAzZXRyZWUpO1xuIFx0XHRtYXNfYWxsb2Nfbm9kZXMobWFzLCBnZnApO1xuQEAgLTU2MjAsMTAgJiM0Mzs1NzY1LDE3IEBAIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApXG4gXHRcdG1hc19hbGxvY19ub2RlcyhtYXMsIGdmcCk7XG4gXHR9XG4gXG4tXHRpZiAoIW1hcy1cdTAwM2VzaGVhZiBcdTAwMjZcdTAwMjYgIW1hcy1cdTAwM2VhbGxvYylcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJldHVybiBmYWxzZSBvbiB6ZXJvIGZvcndhcmQgcHJvZ3Jlc3MuICBQYXJ0aWFsIGFsbG9jYXRpb25zIGFyZSBrZXB0XG4mIzQzO1x0ICogc28gdGhlIHJldHJ5IHBhdGggd2lsbCBhdHRlbXB0IHRvIGdldCB0aGUgcmVzdC4gIFRoZSBmYWlsdXJlIHNob3VsZFxuJiM0MztcdCAqIG5vdCBoYXBwZW4gYXMgd2UgdHJ5IG91ciBiZXN0IHRvIHJlY2xhaW0uICBUaGUgdXNlciB3b3VsZCBuZWVkIGFuXG4mIzQzO1x0ICogZXh0ZXJuYWwgbG9jayB3aXRoIGEgbm9uLWJsb2NraW5nIGdmcCBpbiBhIGxvdyBtZW1vcnkgc2l0dWF0aW9uIC1cbiYjNDM7XHQgKiB3aGljaCB3b3VsZCBoYXZlIHRyaWdnZXJlZCB0aGUgZmlyc3Qgd2FybmluZyBpbiB0aGlzIGZ1bmN0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIW1hcy1cdTAwM2VzaGVhZiBcdTAwMjZcdTAwMjYgIW1hcy1cdTAwM2VhbGxvYykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdG1hcy1cdTAwM2VzdGF0dXMgPSBtYV9zdGFydDtcbiYjNDM7XHRtYXNfcmVzZXQobWFzKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbkBAIC01OTEzLDYgJiM0Mzs2MDY1LDEwIEBAIEVYUE9SVF9TWU1CT0wobXRyZWVfYWxsb2NfcnJhbmdlKTtcbiAgKiBFcmFzaW5nIGlzIHRoZSBzYW1lIGFzIGEgd2FsayB0byBhbiBlbnRyeSB0aGVuIGEgc3RvcmUgb2YgYSBOVUxMIHRvIHRoYXRcbiAgKiBFTlRJUkUgcmFuZ2UuICBJbiBmYWN0LCBpdCBpcyBpbXBsZW1lbnRlZCBhcyBzdWNoIHVzaW5nIHRoZSBhZHZhbmNlZCBBUEkuXG4gICpcbiYjNDM7ICogTm90ZSB0aGF0IGVyYXNlIHJlcXVpcmVzIGFsbG9jYXRpb25zIGFuZCB3aWxsIHVzZSBHRlBfS0VSTkVMIHRvIGRvIHNvIGlmXG4mIzQzOyAqIG5lY2Vzc2FyeS4gIElmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgaW50ZXJuYWwgbG9jayB3aWxsIGJlIGRyb3BwZWQgdG9cbiYjNDM7ICogcmV0cnkuXG4mIzQzOyAqXG4gICogUmV0dXJuOiBUaGUgZW50cnkgc3RvcmVkIGF0IHRoZSBAaW5kZXggb3IgJU5VTExcbiAgKi9cbiB2b2lkICptdHJlZV9lcmFzZShzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQsIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY1xuaW5kZXggMDYwNzkxM2EzMDIyZDUuLmQ5NjdlNzZhM2MwNjUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jXG5AQCAtMzUyMzQsNyAmIzQzOzM1MjM0LDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGNoZWNrX3ByZWFsbG9jKHN0cnVjdCBtYXBsZV90cmVlICptdClcbiBcdG10X3NldF9ub25fa2VybmVsKDEpO1xuIFx0LyogU3Bhbm5pbmcgc3RvcmUgKi9cbiBcdG1hc19zZXRfcmFuZ2UoXHUwMDI2bWFzLCAxLCAxMDApO1xuLVx0TVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoXHUwMDI2bWFzLCBwdHIsIEdGUF9LRVJORUwgXHUwMDI2IEdGUF9OT1dBSVQpID09IDApO1xuJiM0MztcdE1UX0JVR19PTihtdCwgbWFzX3ByZWFsbG9jYXRlKFx1MDAyNm1hcywgcHRyLCBHRlBfTk9XQUlUKSA9PSAwKTtcbiBcdGFsbG9jYXRlZCA9IG1hc19hbGxvY2F0ZWQoXHUwMDI2bWFzKTtcbiBcdGhlaWdodCA9IG1hc19tdF9oZWlnaHQoXHUwMDI2bWFzKTtcbiBcdE1UX0JVR19PTihtdCwgYWxsb2NhdGVkICE9IDApO1xuQEAgLTM1MjU3LDcgJiM0MzszNTI1Nyw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19wcmVhbGxvYyhzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQpXG4gXHRNVF9CVUdfT04obXQsIG1hc19hbGxvY2F0ZWQoXHUwMDI2bWFzKSAhPSAwKTtcbiBcdG1hc19zZXRfcmFuZ2UoXHUwMDI2bWFzLCAwLCAyMDApO1xuIFx0bXRfc2V0X25vbl9rZXJuZWwoMSk7XG4tXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX0tFUk5FTCBcdTAwMjYgR0ZQX05PV0FJVCkgPT0gMCk7XG4mIzQzO1x0TVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoXHUwMDI2bWFzLCBwdHIsIEdGUF9OT1dBSVQpID09IDApO1xuIFx0YWxsb2NhdGVkID0gbWFzX2FsbG9jYXRlZChcdTAwMjZtYXMpO1xuIFx0aGVpZ2h0ID0gbWFzX210X2hlaWdodChcdTAwMjZtYXMpO1xuIFx0TVRfQlVHX09OKG10LCBhbGxvY2F0ZWQgIT0gMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVCVUdfTUFQTEVfVFJFRSYjMzQ7LAogICAgJiMzNDtQUk9WRV9MT0NLSU5HJiMzNDssCiAgICAmIzM0O0xPQ0tERVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYXNfYWxsb2NfY3ljbGljJiMzNDssCiAgICAmIzM0O21hc19lcmFzZSYjMzQ7LAogICAgJiMzNDttdHJlZV9lcmFzZSYjMzQ7LAogICAgJiMzNDttYXNfbm9tZW0mIzM0OywKICAgICYjMzQ7bG9ja19zZXF1ZW5jZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvY2sgc2VxdWVuY2UgdmFsaWRhdGlvbiBmb3IgbWFwbGUgdHJlZSBvcGVyYXRpb25zIHVzaW5nIGxvY2tkZXAsIGFuZCBvcHRpbWl6ZXMgbWFwbGUgdHJlZSBub2RlIHN0b3JlIG9wZXJhdGlvbnMgYW5kIHBhcmVudCBwb2ludGVyIHVwZGF0ZXMuIEl0IGFsc28gZml4ZXMgd3JhcC1hcm91bmQgaGFuZGxpbmcgaW4gYG1hc19hbGxvY19jeWNsaWNgIGFuZCBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBpbiBgbWFzX2VyYXNlYCBhbmQgYG1hc19ub21lbWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNWFhZTY4MWM3M2RhZTdmZWFhYjAxM2MxNjA5NTI2OWMwMWZhYmFhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAwNDoyMzo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0CmluZGV4IGNjZGQxNjE1Y2Y5NzRmLi4xZWFlMjRhOWMxOGI0YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0CkBAIC0xNyw3ICYjNDM7MTcsOCBAQCBzdXBwb3J0cyBpdGVyYXRpbmcgb3ZlciBhIHJhbmdlIG9mIGVudHJpZXMgYW5kIGdvaW5nIHRvIHRoZSBwcmV2aW91cyBvciBuZXh0CiBlbnRyeSBpbiBhIGNhY2hlLWVmZmljaWVudCBtYW5uZXIuICBUaGUgdHJlZSBjYW4gYWxzbyBiZSBwdXQgaW50byBhbiBSQ1Utc2FmZQogbW9kZSBvZiBvcGVyYXRpb24gd2hpY2ggYWxsb3dzIHJlYWRpbmcgYW5kIHdyaXRpbmcgY29uY3VycmVudGx5LiAgV3JpdGVycyBtdXN0CiBzeW5jaHJvbml6ZSBvbiBhIGxvY2ssIHdoaWNoIGNhbiBiZSB0aGUgZGVmYXVsdCBzcGlubG9jaywgb3IgdGhlIHVzZXIgY2FuIHNldAotdGhlIGxvY2sgdG8gYW4gZXh0ZXJuYWwgbG9jayBvZiBhIGRpZmZlcmVudCB0eXBlLgomIzQzO3RoZSBsb2NrIHRvIGFuIGV4dGVybmFsIGxvY2sgb2YgYSBkaWZmZXJlbnQgdHlwZS4gIE5vdGUgdGhhdCBleHRlcm5hbCBsb2NrcyBtYXkKJiM0MztpbnRlcmZlcmUgd2l0aCBhbGxvY2F0aW9ucyBpbiBhIGxvdyBtZW1vcnkgc2l0dWF0aW9uLgogCiBUaGUgTWFwbGUgVHJlZSBtYWludGFpbnMgYSBzbWFsbCBtZW1vcnkgZm9vdHByaW50IGFuZCB3YXMgZGVzaWduZWQgdG8gdXNlCiBtb2Rlcm4gcHJvY2Vzc29yIGNhY2hlIGVmZmljaWVudGx5LiAgVGhlIG1ham9yaXR5IG9mIHRoZSB1c2VycyB3aWxsIGJlIGFibGUgdG8KQEAgLTQyLDYgJiM0Mzs0MywxNSBAQCBzdWNjZXNzZnVsIHN0b3JlIG9wZXJhdGlvbiB3aXRoaW4gYSBnaXZlbgogY29kZSBzZWdtZW50IHdoZW4gYWxsb2NhdGluZyBjYW5ub3QgYmUgZG9uZS4gIEFsbG9jYXRpb25zIG9mIG5vZGVzIGFyZQogcmVsYXRpdmVseSBzbWFsbCBhdCBhcm91bmQgMjU2IGJ5dGVzLgogCiYjNDM7U2luY2UgdGhlIG1hcGxlIHRyZWUgdXNlcyBpbnRlcm5hbCBub2RlcyB0aGF0IGFyZSBhbGxvY2F0ZWQgYW5kIGhhcyBydWxlcyBvbgomIzQzO2RhdGEgZGVuc2l0eSwgZXJhc2luZyBhbiBlbnRyeSBtYXkgY2F1c2UgYWxsb2NhdGlvbnMgdG8gb2NjdXIuICBUaGF0IGlzLAomIzQzO2VyYXNpbmcgYW4gZW50cnkgbWF5IGNvbnN1bWUgbWVtb3J5LiAgVXNlcnMgbXVzdCB0YWtlIGNhcmUgdG8gZW5zdXJlIHRoYXQgdGhleQomIzQzO2RvIG5vdCB2aW9sYXRlIHRoZSBsYXJnZXIgc3lzdGVtIGNvbnN0cmFpbnRzIG9uIHdoZW4gYW5kIGhvdyBtZW1vcnkgaXMKJiM0MzthbGxvY2F0ZWQuICBNb3N0IHNpdHVhdGlvbnMgYXJlIGZpbmUgdG8gYWxsb2NhdGUsIGJ1dCB0aGUgcHJlLWFsbG9jYXRpb24KJiM0MztzdXBwb3J0IGlzIHByb3ZpZGVkIGFzIGEgbWVjaGFuaXNtIHRvIGF2b2lkIHRyaWNraWVyIHNpdHVhdGlvbnMuICBUaGVyZSBpcyBhbHNvCiYjNDM7dGhlIHBvc3NpYmlsaXR5IG9mIHVzaW5nIHNwZWNpYWwgZW50cmllcyBhbmQgY2xlYW4gdXAgdGhlIHRyZWUgbGF0ZXIsIGluCiYjNDM7ZXh0cmVtZSBjaXJjdW1zdGFuY2VzLgomIzQzOwogLi4gX21hcGxlLXRyZWUtbm9ybWFsLWFwaToKIAogTm9ybWFsIEFQSQpAQCAtNjMsNyAmIzQzOzczLDggQEAgc3VjY2VzcyBvciBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS4gIG10cmVlX3N0b3JlX3JhbmdlKCkgd29ya3MgaW4gdGhlIHNhbWUgd2F5CiBidXQgdGFrZXMgYSByYW5nZS4gIG10cmVlX2xvYWQoKSBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBlbnRyeSBzdG9yZWQgYXQgYQogZ2l2ZW4gaW5kZXguICBZb3UgY2FuIHVzZSBtdHJlZV9lcmFzZSgpIHRvIGVyYXNlIGFuIGVudGlyZSByYW5nZSBieSBvbmx5CiBrbm93aW5nIG9uZSB2YWx1ZSB3aXRoaW4gdGhhdCByYW5nZSwgb3IgbXRyZWVfc3RvcmUoKSBjYWxsIHdpdGggYW4gZW50cnkgb2YKLU5VTEwgbWF5IGJlIHVzZWQgdG8gcGFydGlhbGx5IGVyYXNlIGEgcmFuZ2Ugb3IgbWFueSByYW5nZXMgYXQgb25jZS4KJiM0MztOVUxMIG1heSBiZSB1c2VkIHRvIHBhcnRpYWxseSBlcmFzZSBhIHJhbmdlIG9yIG1hbnkgcmFuZ2VzIGF0IG9uY2UuICBOb3RlIHRoYXQKJiM0MzttdHJlZV9lcmFzZSgpIG1heSB1c2UgR0ZQX0tFUk5FTCBvbiBhbGxvY2F0aW9ucy4KIAogSWYgeW91IHdhbnQgdG8gb25seSBzdG9yZSBhIG5ldyBlbnRyeSB0byBhIHJhbmdlIChvciBpbmRleCkgaWYgdGhhdCByYW5nZSBpcwogY3VycmVudGx5IGBgTlVMTGBgLCB5b3UgY2FuIHVzZSBtdHJlZV9pbnNlcnRfcmFuZ2UoKSBvciBtdHJlZV9pbnNlcnQoKSB3aGljaApAQCAtMTYzLDcgJiM0MzsxNzQsOSBAQCBZb3UgY2FuIHVzZSBtYXNfZXJhc2UoKSB0byBlcmFzZSBhbiBlbnRpcmUgcmFuZ2UgYnkgc2V0dGluZyBpbmRleCBhbmQKIGxhc3Qgb2YgdGhlIG1hcGxlIHN0YXRlIHRvIHRoZSBkZXNpcmVkIHJhbmdlIHRvIGVyYXNlLiAgVGhpcyB3aWxsIGVyYXNlCiB0aGUgZmlyc3QgcmFuZ2UgdGhhdCBpcyBmb3VuZCBpbiB0aGF0IHJhbmdlLCBzZXQgdGhlIG1hcGxlIHN0YXRlIGluZGV4CiBhbmQgbGFzdCBhcyB0aGUgcmFuZ2UgdGhhdCB3YXMgZXJhc2VkIGFuZCByZXR1cm4gdGhlIGVudHJ5IHRoYXQgZXhpc3RlZAotYXQgdGhhdCBsb2NhdGlvbi4KJiM0MzthdCB0aGF0IGxvY2F0aW9uLiAgTm90ZSB0aGF0IG1hc19lcmFzZSgpIG1heSBhbGxvY2F0ZSB3aXRoIHRoZSBHRlBfS0VSTkVMIGZsYWcuCiYjNDM7SWYgdGhpcyBpcyBub3Qgb2theSwgY29uc2lkZXIgdXNpbmcgbWFzX3N0b3JlX2dmcCgpIGFuZCBwYXNzIGl0IGEgYGBOVUxMYGAsCiYjNDM7YWZ0ZXIgc2V0dGluZyB1cCB0aGUgY29ycmVjdCByYW5nZSBieSB3YWxraW5nIHRvIHRoZSBlbnRyeS4KIAogWW91IGNhbiB3YWxrIGVhY2ggZW50cnkgd2l0aGluIGEgcmFuZ2UgYnkgdXNpbmcgbWFzX2Zvcl9lYWNoKCkuICBJZiB5b3Ugd2FudAogdG8gd2FsayBlYWNoIGVsZW1lbnQgb2YgdGhlIHRyZWUgdGhlbiBgYDBgYCBhbmQgYGBVTE9OR19NQVhgYCBtYXkgYmUgdXNlZCBhcwpAQCAtMjExLDcgJiM0MzsyMjQsNyBAQCBBZHZhbmNlZCBMb2NraW5nCiAKIFRoZSBtYXBsZSB0cmVlIHVzZXMgYSBzcGlubG9jayBieSBkZWZhdWx0LCBidXQgZXh0ZXJuYWwgbG9ja3MgY2FuIGJlIHVzZWQgZm9yCiB0cmVlIHVwZGF0ZXMgYXMgd2VsbC4gIFRvIHVzZSBhbiBleHRlcm5hbCBsb2NrLCB0aGUgdHJlZSBtdXN0IGJlIGluaXRpYWxpemVkCi13aXRoIHRoZSBgYE1UX0ZMQUdTX0xPQ0tfRVhURVJOIGZsYWdgYCwgdGhpcyBpcyB1c3VhbGx5IGRvbmUgd2l0aCB0aGUKJiM0Mzt3aXRoIHRoZSBgYE1UX0ZMQUdTX0xPQ0tfRVhURVJOYGAgZmxhZywgdGhpcyBpcyB1c3VhbGx5IGRvbmUgd2l0aCB0aGUKIE1UUkVFX0lOSVRfRVhUKCkgI2RlZmluZSwgd2hpY2ggdGFrZXMgYW4gZXh0ZXJuYWwgbG9jayBhcyBhbiBhcmd1bWVudC4KIAogRnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCmluZGV4IDYyMTU2NjM0NTQwNmRkLi5hNjQ1MWVjYmJlOWEwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKQEAgLTI3Myw2ICYjNDM7MjczLDkgQEAgZXh0ZXJuIHN0cnVjdCBwaW5fY29va2llIGxvY2tfcGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKTsKIGV4dGVybiB2b2lkIGxvY2tfcmVwaW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llKTsKIGV4dGVybiB2b2lkIGxvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llKTsKIAomIzQzO2V4dGVybiB1MzIgbG9ja19zZXF1ZW5jZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spOwomIzQzOyNkZWZpbmUgbG9ja2RlcF9zZXF1ZW5jZShsb2NrKQlsb2NrX3NlcXVlbmNlKCZhbXA7KGxvY2spLSZndDtkZXBfbWFwKQomIzQzOwogI2RlZmluZSBsb2NrZGVwX2RlcHRoKHRzaykJKGRlYnVnX2xvY2tzID8gKHRzayktJmd0O2xvY2tkZXBfZGVwdGggOiAwKQogCiAjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0KGNvbmQpCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oCmluZGV4IGVhZTExNWEyNjQ4ODU2Li41NWM0YjE1MmZlZGY3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmgKQEAgLTI1Myw3ICYjNDM7MjUzLDggQEAgc3RydWN0IGhlbGRfbG9jayB7CiAJdW5zaWduZWQgaW50IGhhcmRpcnFzX29mZjoxOwogCXVuc2lnbmVkIGludCBzeW5jOjE7CiAJdW5zaWduZWQgaW50IHJlZmVyZW5jZXM6MTE7CQkJCQkvKiAzMiBiaXRzICovCi0JdW5zaWduZWQgaW50IHBpbl9jb3VudDsKJiM0MzsJdW5zaWduZWQgaW50IHBpbl9jb3VudDoyNDsKJiM0MzsJdW5zaWduZWQgaW50IHNlcV9jb3VudDo4OwogfTsKIAogI2Vsc2UgLyogIUNPTkZJR19MT0NLREVQICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaCBiL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oCmluZGV4IDRhNTYzMTkwNmFmZmI1Li41ZTBiZDI4NTdkOTQxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmgKQEAgLTI5LDEzICYjNDM7MjksMTEgQEAKICNkZWZpbmUgTUFQTEVfTk9ERV9TTE9UUwkzMQkvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC0mZ3Q7cGFyZW50ICovCiAjZGVmaW5lIE1BUExFX1JBTkdFNjRfU0xPVFMJMTYJLyogMjU2IGJ5dGVzICovCiAjZGVmaW5lIE1BUExFX0FSQU5HRTY0X1NMT1RTCTEwCS8qIDI0MCBieXRlcyAqLwotI2RlZmluZSBNQVBMRV9BTExPQ19TTE9UUwkoTUFQTEVfTk9ERV9TTE9UUyAtIDEpCiAjZWxzZQogLyogMzJiaXQgc2l6ZXMgKi8KICNkZWZpbmUgTUFQTEVfTk9ERV9TTE9UUwk2MwkvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC0mZ3Q7cGFyZW50ICovCiAjZGVmaW5lIE1BUExFX1JBTkdFNjRfU0xPVFMJMzIJLyogMjU2IGJ5dGVzICovCiAjZGVmaW5lIE1BUExFX0FSQU5HRTY0X1NMT1RTCTIxCS8qIDI0MCBieXRlcyAqLwotI2RlZmluZSBNQVBMRV9BTExPQ19TTE9UUwkoTUFQTEVfTk9ERV9TTE9UUyAtIDIpCiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfNjRCSVQpIHx8IGRlZmluZWQoQlVJTERfVkRTTzMyXzY0KSAqLwogCiAjZGVmaW5lIE1BUExFX05PREVfTUFTSwkJMjU1VUwKQEAgLTQ4NSw2ICYjNDM7NDgzLDEyIEBAIHN0cnVjdCBtYV9zdGF0ZSB7CiAJdW5zaWduZWQgY2hhciBtYXNfZmxhZ3M7CiAJdW5zaWduZWQgY2hhciBlbmQ7CQkvKiBUaGUgZW5kIG9mIHRoZSBub2RlICovCiAJZW51bSBzdG9yZV90eXBlIHN0b3JlX3R5cGU7CS8qIFRoZSB0eXBlIG9mIHN0b3JlIG5lZWRlZCBmb3IgdGhpcyBvcGVyYXRpb24gKi8KJiM0MzsjaWZkZWYgQ09ORklHX0xPQ0tERVAKJiM0MzsJdTMyIGxkX3NlcTsKJiM0MzsjaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9ECiYjNDM7CXVuc2lnbmVkIGxvbmcgcmN1X2dwOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QgKi8KJiM0MzsjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi8KIH07CiAKIHN0cnVjdCBtYV93cl9zdGF0ZSB7CkBAIC01NzIsNyAmIzQzOzU3Niw3IEBAIHZvaWQgbWFwbGVfdHJlZV9pbml0KHZvaWQpOwogdm9pZCBtYXNfZGVzdHJveShzdHJ1Y3QgbWFfc3RhdGUgKm1hcyk7CiAKIHZvaWQgKm1hc19wcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbik7Ci12b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpOwomIzQzO3ZvaWQgKm1hc19wcmV2X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbik7CiB2b2lkICptYXNfbmV4dChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpOwogdm9pZCAqbWFzX25leHRfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDM3M2JjYzA1OThkMTBiLi4xNGQ1Y2U4ZGQ2MTM2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtMTI4OCw2ICYjNDM7MTI4OCw3IEBAIHN0cnVjdCB0YXNrX3N0cnVjdCB7CiAJdTY0CQkJCWN1cnJfY2hhaW5fa2V5OwogCWludAkJCQlsb2NrZGVwX2RlcHRoOwogCXVuc2lnbmVkIGludAkJCWxvY2tkZXBfcmVjdXJzaW9uOwomIzQzOwl1bnNpZ25lZCBpbnQJCQlsb2NrZGVwX3NlcTsKIAlzdHJ1Y3QgaGVsZF9sb2NrCQloZWxkX2xvY2tzW01BWF9MT0NLX0RFUFRIXTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMKaW5kZXggMmQ0YzViYWI1YWY4ODcuLmIyYjBhNTA2OTYwYjE2IDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jCkBAIC01MDc3LDcgJiM0Mzs1MDc3LDcgQEAgc3RhdGljIGludCBfX2xvY2tfaXNfaGVsZChjb25zdCBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIGludCByZWFkKTsKIHN0YXRpYyBpbnQgX19sb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsCiAJCQkgIGludCB0cnlsb2NrLCBpbnQgcmVhZCwgaW50IGNoZWNrLCBpbnQgaGFyZGlycXNfb2ZmLAogCQkJICBzdHJ1Y3QgbG9ja2RlcF9tYXAgKm5lc3RfbG9jaywgdW5zaWduZWQgbG9uZyBpcCwKLQkJCSAgaW50IHJlZmVyZW5jZXMsIGludCBwaW5fY291bnQsIGludCBzeW5jKQomIzQzOwkJCSAgaW50IHJlZmVyZW5jZXMsIGludCBwaW5fY291bnQsIGludCBzeW5jLCBpbnQgc2VxKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7CiAJc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gTlVMTDsKQEAgLTUxODMsNiAmIzQzOzUxODMsNyBAQCBzdGF0aWMgaW50IF9fbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLAogCWhsb2NrLSZndDtob2xkdGltZV9zdGFtcCA9IGxvY2tzdGF0X2Nsb2NrKCk7CiAjZW5kaWYKIAlobG9jay0mZ3Q7cGluX2NvdW50ID0gcGluX2NvdW50OwomIzQzOwlobG9jay0mZ3Q7c2VxX2NvdW50ID0gc2VxOwogCiAJaWYgKGNoZWNrX3dhaXRfY29udGV4dChjdXJyLCBobG9jaykpCiAJCXJldHVybiAwOwpAQCAtNTM4OCw3ICYjNDM7NTM4OSw3IEBAIHN0YXRpYyBpbnQgcmVhY3F1aXJlX2hlbGRfbG9ja3Moc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCB1bnNpZ25lZCBpbnQgZGVwdGgsCiAJCQkJICAgIGhsb2NrLSZndDtyZWFkLCBobG9jay0mZ3Q7Y2hlY2ssCiAJCQkJICAgIGhsb2NrLSZndDtoYXJkaXJxc19vZmYsCiAJCQkJICAgIGhsb2NrLSZndDtuZXN0X2xvY2ssIGhsb2NrLSZndDthY3F1aXJlX2lwLAotCQkJCSAgICBobG9jay0mZ3Q7cmVmZXJlbmNlcywgaGxvY2stJmd0O3Bpbl9jb3VudCwgMCkpIHsKJiM0MzsJCQkJICAgIGhsb2NrLSZndDtyZWZlcmVuY2VzLCBobG9jay0mZ3Q7cGluX2NvdW50LCAwLCBobG9jay0mZ3Q7c2VxX2NvdW50KSkgewogCQljYXNlIDA6CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSAxOgpAQCAtNTY4NCw2ICYjNDM7NTY4NSwyNCBAQCBzdGF0aWMgdm9pZCBfX2xvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llIGNvb2tpZQogCVdBUk4oMSwgJiMzNDt1bnBpbm5pbmcgYW4gdW5oZWxkIGxvY2tcbiYjMzQ7KTsKIH0KIAomIzQzO3N0YXRpYyB1MzIgX19sb2NrX3NlcXVlbmNlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIWRlYnVnX2xvY2tzKSkKJiM0MzsJCXJldHVybiB+MDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGN1cnItJmd0O2xvY2tkZXBfZGVwdGg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgaGVsZF9sb2NrICpobG9jayA9IGN1cnItJmd0O2hlbGRfbG9ja3MgJiM0MzsgaTsKJiM0MzsKJiM0MzsJCWlmIChtYXRjaF9oZWxkX2xvY2soaGxvY2ssIGxvY2spKQomIzQzOwkJCXJldHVybiBobG9jay0mZ3Q7c2VxX2NvdW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB+MDsKJiM0Mzt9CiYjNDM7CiAvKgogICogQ2hlY2sgd2hldGhlciB3ZSBmb2xsb3cgdGhlIGlycS1mbGFncyBzdGF0ZSBwcmVjaXNlbHk6CiAgKi8KQEAgLTU4NjYsNyAmIzQzOzU4ODUsOCBAQCB2b2lkIGxvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcywKIAogCWxvY2tkZXBfcmVjdXJzaW9uX2luYygpOwogCV9fbG9ja19hY3F1aXJlKGxvY2ssIHN1YmNsYXNzLCB0cnlsb2NrLCByZWFkLCBjaGVjaywKLQkJICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAwKTsKJiM0MzsJCSAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMCwKJiM0MzsJCSAgICAgICAmIzQzOyYjNDM7Y3VycmVudC0mZ3Q7bG9ja2RlcF9zZXEpOwogCWxvY2tkZXBfcmVjdXJzaW9uX2ZpbmlzaCgpOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CkBAIC01OTE0LDcgJiM0Mzs1OTM0LDggQEAgdm9pZCBsb2NrX3N5bmMoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBzdWJjbGFzcywgaW50IHJlYWQsCiAKIAlsb2NrZGVwX3JlY3Vyc2lvbl9pbmMoKTsKIAlfX2xvY2tfYWNxdWlyZShsb2NrLCBzdWJjbGFzcywgMCwgcmVhZCwgY2hlY2ssCi0JCSAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMSk7CiYjNDM7CQkgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDAsIDAsIDEsCiYjNDM7CQkgICAgICAgJiM0MzsmIzQzO2N1cnJlbnQtJmd0O2xvY2tkZXBfc2VxKTsKIAljaGVja19jaGFpbl9rZXkoY3VycmVudCk7CiAJbG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7CiAJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTYwMDAsNiAmIzQzOzYwMjEsMjYgQEAgdm9pZCBsb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSBjb29raWUpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChsb2NrX3VucGluX2xvY2spOwogCiYjNDM7dTMyIGxvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJdTMyIHNlcSA9IH4wOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIWxvY2tkZXBfZW5hYmxlZCgpKSkKJiM0MzsJCXJldHVybiBzZXE7CiYjNDM7CiYjNDM7CXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CiYjNDM7CWNoZWNrX2ZsYWdzKGZsYWdzKTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9yZWN1cnNpb25faW5jKCk7CiYjNDM7CXNlcSA9IF9fbG9ja19zZXF1ZW5jZShsb2NrKTsKJiM0MzsJbG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7CiYjNDM7CXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiYjNDM7CiYjNDM7CXJldHVybiBzZXE7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxvY2tfc2VxdWVuY2UpOwomIzQzOwogI2lmZGVmIENPTkZJR19MT0NLX1NUQVQKIHN0YXRpYyB2b2lkIHByaW50X2xvY2tfY29udGVudGlvbl9idWcoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLAogCQkJCSAgICAgIHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywKZGlmZiAtLWdpdCBhL2xpYi9tYXBsZV90cmVlLmMgYi9saWIvbWFwbGVfdHJlZS5jCmluZGV4IGU1Mjg3NjQzNWI3N2YwLi42ZDcxZmRjNDE0NzA2NCAxMDA2NDQKLS0tIGEvbGliL21hcGxlX3RyZWUuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvbWFwbGVfdHJlZS5jCkBAIC00NjksNyAmIzQzOzQ2OSw3IEBAIHN0YXRpYyBpbmxpbmUKIHZvaWQgbWFzX3NldF9wYXJlbnQoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUsCiAJCSAgICBjb25zdCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnBhcmVudCwgdW5zaWduZWQgY2hhciBzbG90KQogewotCXVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50OwomIzQzOwl1bnNpZ25lZCBsb25nIHZhbDsKIAl1bnNpZ25lZCBsb25nIHNoaWZ0OwogCXVuc2lnbmVkIGxvbmcgdHlwZTsKIAllbnVtIG1hcGxlX3R5cGUgcF90eXBlID0gbXRlX25vZGVfdHlwZShwYXJlbnQpOwpAQCAtNDkwLDExICYjNDM7NDkwLDQ3IEBAIHZvaWQgbWFzX3NldF9wYXJlbnQoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUsCiAJCWJyZWFrOwogCX0KIAomIzQzOwl2YWwgPSAodW5zaWduZWQgbG9uZylwYXJlbnQ7CiAJdmFsICZhbXA7PSB+TUFQTEVfTk9ERV9NQVNLOyAvKiBDbGVhciBhbGwgbm9kZSBtZXRhZGF0YSBpbiBwYXJlbnQgKi8KIAl2YWwgfD0gKHNsb3QgJmx0OyZsdDsgc2hpZnQpIHwgdHlwZTsKIAltdGVfdG9fbm9kZShlbm9kZSktJmd0O3BhcmVudCA9IG1hX3BhcmVudF9wdHIodmFsKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogbWFzX3NldF9wYXJlbnRfc2xvdHMoKSAtIEJ1bGsgb3BlcmF0aW9uIHRvIHNldCBtYW55IHNsb3QgcGFyZW50IHBvaW50ZXJzCiYjNDM7ICogQG1hczogVGhlIG1hcGxlIHN0YXRlCiYjNDM7ICogQHBhcmVudDogVGhlIGVuY29kZWQgbWFwbGUgbm9kZSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgQGVub2RlLgomIzQzOyAqIEBzbG90OiBUaGUgc2xvdCB0aGF0IG9mIHRoZSBAZW5vZGUuCiYjNDM7ICogQHN0YXJ0X3Nsb3Q6IFRoZSBvZmZzZXQgaW50byBAc2xvdAomIzQzOyAqIEBjb3VudDogVGhlIG51bWJlciBvZiBzbG90cyB0byBzZXQgKGVnOiBleGNsdXNpdmUpCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZQomIzQzO3ZvaWQgbWFzX3NldF9wYXJlbnRfc2xvdHMoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqcGFyZW50LAomIzQzOwl2b2lkIF9fcmN1ICoqc2xvdHMsIHVuc2lnbmVkIGNoYXIgc3RhcnRfc2xvdCwgdW5zaWduZWQgY2hhciBjb3VudCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdmFsOwomIzQzOwl1bnNpZ25lZCBsb25nIHNoaWZ0OwomIzQzOwl1bnNpZ25lZCBsb25nIHR5cGU7CiYjNDM7CWVudW0gbWFwbGVfdHlwZSBwX3R5cGUgPSBtdGVfbm9kZV90eXBlKHBhcmVudCk7CiYjNDM7CXVuc2lnbmVkIGNoYXIgaTsKJiM0MzsKJiM0MzsJTUFTX0JVR19PTihtYXMsIHBfdHlwZSAhPSBtYXBsZV9yYW5nZV82NCAmYW1wOyZhbXA7CiYjNDM7CQkJcF90eXBlICE9IG1hcGxlX2FyYW5nZV82NCk7CiYjNDM7CiYjNDM7CXNoaWZ0ID0gTUFQTEVfUEFSRU5UX1NMT1RfU0hJRlQ7CiYjNDM7CXR5cGUgPSBNQVBMRV9QQVJFTlRfUkFOR0U2NDsKJiM0MzsKJiM0MzsJdmFsID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50OwomIzQzOwl2YWwgJmFtcDs9IH5NQVBMRV9OT0RFX01BU0s7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcHZhbCA9IHZhbCB8ICgoc3RhcnRfc2xvdCAmIzQzOyBpKSAmbHQ7Jmx0OyBzaGlmdCkgfCB0eXBlOwomIzQzOwkJc3RydWN0IG1hcGxlX2Vub2RlICpjaGlsZCA9IChzdHJ1Y3QgbWFwbGVfZW5vZGUgKilzbG90c1tpXTsKJiM0MzsKJiM0MzsJCW10ZV90b19ub2RlKGNoaWxkKS0mZ3Q7cGFyZW50ID0gbWFfcGFyZW50X3B0cihwdmFsKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qCiAgKiBtdGVfcGFyZW50X3Nsb3QoKSAtIGdldCB0aGUgcGFyZW50IHNsb3Qgb2YgQGVub2RlLgogICogQGVub2RlOiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlLgpAQCAtMTE1Myw2ICYjNDM7MTE4OSw3MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX2ZyZWUoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqdXNlZCkKIAltYV9mcmVlX3JjdShtdGVfdG9fbm9kZSh1c2VkKSk7CiB9CiAKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0xPQ0tERVAKJiM0MztzdHJ1Y3QgbG9ja2RlcF9tYXAgKm1hc19sb2NrZGVwX21hcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYXBsZV90cmVlICptdCA9IG1hcy0mZ3Q7dHJlZTsKJiM0MzsKJiM0MzsJaWYgKG10X2V4dGVybmFsX2xvY2sobXQpKQomIzQzOwkJcmV0dXJuIG10LSZndDttYV9leHRlcm5hbF9sb2NrOwomIzQzOwomIzQzOwlyZXR1cm4gJmFtcDsobXQtJmd0O21hX2xvY2spLmRlcF9tYXA7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1hc19sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQomIzQzO3sKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0xPQ0tERVAKJiM0MzsJaWYgKCFtYXNfaXNfYWN0aXZlKG1hcykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRAomIzQzOwlpZiAoIW10X2xvY2tfaXNfaGVsZChtYXMtJmd0O3RyZWUpKSB7CiYjNDM7CQlpZiAobXRfaW5fcmN1KG1hcy0mZ3Q7dHJlZSkpCiYjNDM7CQkJV0FSTl9PTl9PTkNFKHBvbGxfc3RhdGVfc3luY2hyb25pemVfcmN1KG1hcy0mZ3Q7cmN1X2dwKSk7CiYjNDM7CX0KJiM0MzsjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovCiYjNDM7CiYjNDM7CWlmIChtdF9sb2NrX2lzX2hlbGQobWFzLSZndDt0cmVlKSkKJiM0MzsJCVdBUk5fT05fT05DRShtYXMtJmd0O2xkX3NlcSAhPSBsb2NrX3NlcXVlbmNlKG1hc19sb2NrZGVwX21hcChtYXMpKSk7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19MT0NLREVQICovCiYjNDM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1hc19pbml0X2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUAomIzQzOyNpZmRlZiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QKJiM0MzsJaWYgKCFtdF9sb2NrX2lzX2hlbGQobWFzLSZndDt0cmVlKSkgewomIzQzOwkJaWYgKG10X2luX3JjdShtYXMtJmd0O3RyZWUpKQomIzQzOwkJCW1hcy0mZ3Q7cmN1X2dwID0gZ2V0X3N0YXRlX3N5bmNocm9uaXplX3JjdSgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqLwomIzQzOwomIzQzOwlpZiAobXRfbG9ja19pc19oZWxkKG1hcy0mZ3Q7dHJlZSkpCiYjNDM7CQltYXMtJmd0O2xkX3NlcSA9IGxvY2tfc2VxdWVuY2UobWFzX2xvY2tkZXBfbWFwKG1hcykpOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqLwomIzQzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtYXNfbWF5X2luaXRfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcykKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19MT0NLREVQCiYjNDM7I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRAomIzQzOwlpZiAobWFzX2lzX3N0YXJ0KG1hcykgfHwgbWFzX2lzX3BhdXNlZChtYXMpKSB7CiYjNDM7CQltYXNfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovCiYjNDM7CW1hc19sb2NrX2NoZWNrKG1hcyk7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19MT0NLREVQICovCiYjNDM7fQomIzQzOwogLyoKICAqIG1hc19zdGFydCgpIC0gU2V0cyB1cCBtYXBsZSBzdGF0ZSBmb3Igb3BlcmF0aW9ucy4KICAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZS4KQEAgLTExNzEsNiAmIzQzOzEyNzEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXBsZV9lbm9kZSAqbWFzX3N0YXJ0KHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQogCWlmIChsaWtlbHkobWFzX2lzX3N0YXJ0KG1hcykpKSB7CiAJCXN0cnVjdCBtYXBsZV9lbm9kZSAqcm9vdDsKIAomIzQzOwkJbWFzX2luaXRfbG9ja19jaGVjayhtYXMpOwogCQltYXMtJmd0O21pbiA9IDA7CiAJCW1hcy0mZ3Q7bWF4ID0gVUxPTkdfTUFYOwogCkBAIC0xNTAxLDE0ICYjNDM7MTYwMiwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3BhcmVudF9nYXAoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGNoYXIgb2Zmc2V0LAogCWdvdG8gYXNjZW5kOwogfQogCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1hc191cGRhdGVfZ2FwX2tub3duKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLAomIzQzOwkJdW5zaWduZWQgbG9uZyBnYXApCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBjaGFyIHBzbG90OwomIzQzOwl1bnNpZ25lZCBsb25nIHBfZ2FwOwomIzQzOwomIzQzOwlwc2xvdCA9IG10ZV9wYXJlbnRfc2xvdChtYXMtJmd0O25vZGUpOwomIzQzOwlwX2dhcCA9IG1hX2dhcHMobXRlX3BhcmVudChtYXMtJmd0O25vZGUpLAomIzQzOwkJCW1hc19wYXJlbnRfdHlwZShtYXMsIG1hcy0mZ3Q7bm9kZSkpW3BzbG90XTsKJiM0MzsKJiM0MzsJaWYgKHBfZ2FwICE9IGdhcCkKJiM0MzsJCW1hc19wYXJlbnRfZ2FwKG1hcywgcHNsb3QsIGdhcCk7CiYjNDM7fQomIzQzOwogLyoKICAqIG1hc191cGRhdGVfZ2FwKCkgLSBVcGRhdGUgYSBub2RlcyBnYXBzIGFuZCBwcm9wYWdhdGUgdXAgaWYgbmVjZXNzYXJ5LgogICogQG1hczogdGhlIG1hcGxlIHN0YXRlLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3VwZGF0ZV9nYXAoc3RydWN0IG1hX3N0YXRlICptYXMpCiB7Ci0JdW5zaWduZWQgY2hhciBwc2xvdDsKLQl1bnNpZ25lZCBsb25nIHBfZ2FwOwogCXVuc2lnbmVkIGxvbmcgbWF4X2dhcDsKIAogCWlmICghbXRfaXNfYWxsb2MobWFzLSZndDt0cmVlKSkKQEAgLTE1MTgsMTMgJiM0MzsxNjMxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc191cGRhdGVfZ2FwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQogCQlyZXR1cm47CiAKIAltYXhfZ2FwID0gbWFzX21heF9nYXAobWFzKTsKLQotCXBzbG90ID0gbXRlX3BhcmVudF9zbG90KG1hcy0mZ3Q7bm9kZSk7Ci0JcF9nYXAgPSBtYV9nYXBzKG10ZV9wYXJlbnQobWFzLSZndDtub2RlKSwKLQkJCW1hc19wYXJlbnRfdHlwZShtYXMsIG1hcy0mZ3Q7bm9kZSkpW3BzbG90XTsKLQotCWlmIChwX2dhcCAhPSBtYXhfZ2FwKQotCQltYXNfcGFyZW50X2dhcChtYXMsIHBzbG90LCBtYXhfZ2FwKTsKJiM0MzsJbWFzX3VwZGF0ZV9nYXBfa25vd24obWFzLCBtYXhfZ2FwKTsKIH0KIAogLyoKQEAgLTE1NDAsMTQgJiM0MzsxNjQ3LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfYWRvcHRfY2hpbGRyZW4oc3RydWN0IG1hX3N0YXRlICptYXMsCiAJc3RydWN0IG1hcGxlX25vZGUgKm5vZGUgPSBtdGVfdG9fbm9kZShwYXJlbnQpOwogCXZvaWQgX19yY3UgKipzbG90cyA9IG1hX3Nsb3RzKG5vZGUsIHR5cGUpOwogCXVuc2lnbmVkIGxvbmcgKnBpdm90cyA9IG1hX3Bpdm90cyhub2RlLCB0eXBlKTsKLQlzdHJ1Y3QgbWFwbGVfZW5vZGUgKmNoaWxkOwotCXVuc2lnbmVkIGNoYXIgb2Zmc2V0OwomIzQzOwl1bnNpZ25lZCBjaGFyIGVuZDsKIAotCW9mZnNldCA9IG1hX2RhdGFfZW5kKG5vZGUsIHR5cGUsIHBpdm90cywgbWFzLSZndDttYXgpOwotCWRvIHsKLQkJY2hpbGQgPSBtYXNfc2xvdF9sb2NrZWQobWFzLCBzbG90cywgb2Zmc2V0KTsKLQkJbWFzX3NldF9wYXJlbnQobWFzLCBjaGlsZCwgcGFyZW50LCBvZmZzZXQpOwotCX0gd2hpbGUgKG9mZnNldC0tKTsKJiM0MzsJZW5kID0gbWFfZGF0YV9lbmQobm9kZSwgdHlwZSwgcGl2b3RzLCBtYXMtJmd0O21heCk7CiYjNDM7CW1hc19zZXRfcGFyZW50X3Nsb3RzKG1hcywgcGFyZW50LCBzbG90cywgMCwgZW5kICYjNDM7IDEpOwogfQogCiAvKgpAQCAtMTkyOSwxNSAmIzQzOzIwMzIsMTAgQEAgdW5zaWduZWQgbG9uZyBub2RlX2NvcHkoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9ub2RlICpzcmMsCiAJc19zbG90cyA9IG1hX3Nsb3RzKHNyYywgc19tdCkgJiM0Mzsgc3RhcnQ7CiAJc19waXZvdHMgPSBtYV9waXZvdHMoc3JjLCBzX210KSAmIzQzOyBzdGFydDsKIAltZW1jcHkoZF9zbG90cywgc19zbG90cywgc2l6ZSAqIHNpemVvZih2b2lkIF9fcmN1ICopKTsKLQlpZiAoIW1hX2lzX2xlYWYoZF9tdCkgJmFtcDsmYW1wOyBzX210ID09IG1hcGxlX2NvcHkpIHsKLQkJc3RydWN0IG1hcGxlX2Vub2RlICplZHN0ID0gbXRfbWtfbm9kZShkc3QsIGRfbXQpOwogCi0KLQkJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBzaXplOyBpJiM0MzsmIzQzOykKLQkJCW1hc19zZXRfcGFyZW50KG1hcywKLQkJCQkgICAgICAgbXRfc2xvdF9sb2NrZWQobWFzLSZndDt0cmVlLCBkX3Nsb3RzLCBpKSwKLQkJCQkgICAgICAgZWRzdCwgZF9zdGFydCAmIzQzOyBpKTsKLQl9CiYjNDM7CWlmICghbWFfaXNfbGVhZihkX210KSAmYW1wOyZhbXA7IHNfbXQgPT0gbWFwbGVfY29weSkKJiM0MzsJCW1hc19zZXRfcGFyZW50X3Nsb3RzKG1hcywgbXRfbWtfbm9kZShkc3QsIGRfbXQpLAomIzQzOwkJCQkgICAgIGRfc2xvdHMsIGRfc3RhcnQsIHNpemUpOwogCiAJZF9nYXBzID0gbWFfZ2Fwcyhkc3QsIGRfbXQpOwogCWlmIChkX2dhcHMpIHsKQEAgLTIwODEsOCAmIzQzOzIxNzksOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dtYl9yZXBsYWNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfY29weSAqY3ApCiAJbWFzLSZndDtub2RlID0gbXRfc2xvdF9sb2NrZWQobWFzLSZndDt0cmVlLCBjcC0mZ3Q7c2xvdCwgMCk7CiAJLyogSW5zZXJ0IHRoZSBuZXcgZGF0YSBpbiB0aGUgdHJlZSAqLwogCW1hc190b3BpYXJ5X3JlcGxhY2UobWFzLCBvbGRfZW5vZGUsIGNwLSZndDtoZWlnaHQpOwotCWlmICghbXRlX2lzX2xlYWYobWFzLSZndDtub2RlKSkKLQkJbWFzX3VwZGF0ZV9nYXAobWFzKTsKJiM0MzsJaWYgKG10X2lzX2FsbG9jKG1hcy0mZ3Q7dHJlZSkgJmFtcDsmYW1wOyAhbXRlX2lzX3Jvb3QobWFzLSZndDtub2RlKSkKJiM0MzsJCW1hc191cGRhdGVfZ2FwX2tub3duKG1hcywgY3AtJmd0O2dhcFswXSk7CiAKIAltdHJlZV9yYW5nZV93YWxrKG1hcyk7CiB9CkBAIC0yOTI4LDEzICYjNDM7MzAyNiw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfZXh0ZW5kX3NwYW5uaW5nX251bGwoc3RydWN0IG1hX3dyX3N0YXRlICpsX3dyX21hcywKIAkJaWYgKHJfbWFzLSZndDtsYXN0ICZsdDsgcl93cl9tYXMtJmd0O3JfbWF4KQogCQkJcl9tYXMtJmd0O2xhc3QgPSByX3dyX21hcy0mZ3Q7cl9tYXg7CiAJCXJfbWFzLSZndDtvZmZzZXQmIzQzOyYjNDM7OwotCX0gZWxzZSBpZiAoKHJfbWFzLSZndDtsYXN0ID09IHJfd3JfbWFzLSZndDtyX21heCkgJmFtcDsmYW1wOwotCSAgICAocl9tYXMtJmd0O2xhc3QgJmx0OyByX21hcy0mZ3Q7bWF4KSAmYW1wOyZhbXA7Ci0JICAgICFtYXNfc2xvdF9sb2NrZWQocl9tYXMsIHJfd3JfbWFzLSZndDtzbG90cywgcl9tYXMtJmd0O29mZnNldCAmIzQzOyAxKSkgewotCQlyX21hcy0mZ3Q7bGFzdCA9IG1hc19zYWZlX3Bpdm90KHJfbWFzLCByX3dyX21hcy0mZ3Q7cGl2b3RzLAotCQkJCQkgICAgIHJfd3JfbWFzLSZndDt0eXBlLCByX21hcy0mZ3Q7b2Zmc2V0ICYjNDM7IDEpOwotCQlyX21hcy0mZ3Q7b2Zmc2V0JiM0MzsmIzQzOzsKLQkJcl93cl9tYXMtJmd0O3JfbWF4ID0gcl9tYXMtJmd0O2xhc3Q7CiAJfQogfQogCkBAIC0zMTI1LDcgJiM0MzszMjE2LDcgQEAgc3RhdGljIHZvaWQgbWFzX3dyX3NwYW5uaW5nX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKQogc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKQogewogCXVuc2lnbmVkIGNoYXIgZHN0X29mZnNldCwgb2Zmc2V0X2VuZDsKLQl1bnNpZ25lZCBjaGFyIGNvcHlfc2l6ZSwgbm9kZV9waXZvdHM7CiYjNDM7CXVuc2lnbmVkIGNoYXIgY29weV9zaXplLCBub2RlX3Bpdm90cywgbm9kZV9zbG90czsKIAlzdHJ1Y3QgbWFwbGVfbm9kZSByZXVzZSwgKm5ld25vZGU7CiAJdW5zaWduZWQgbG9uZyAqZHN0X3Bpdm90czsKIAl2b2lkIF9fcmN1ICoqZHN0X3Nsb3RzOwpAQCAtMzEzOCw2ICYjNDM7MzIyOSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcykKIAlpbl9yY3UgPSBtdF9pbl9yY3UobWFzLSZndDt0cmVlKTsKIAlvZmZzZXRfZW5kID0gd3JfbWFzLSZndDtvZmZzZXRfZW5kOwogCW5vZGVfcGl2b3RzID0gbXRfcGl2b3RzW3dyX21hcy0mZ3Q7dHlwZV07CiYjNDM7CW5vZGVfc2xvdHMgPSBtdF9zbG90c1t3cl9tYXMtJmd0O3R5cGVdOwogCS8qIEFzc3VtZSBsYXN0IGFkZHMgYW4gZW50cnkgKi8KIAluZXdfZW5kID0gbWFzLSZndDtlbmQgJiM0MzsgMSAtIG9mZnNldF9lbmQgJiM0MzsgbWFzLSZndDtvZmZzZXQ7CiAJaWYgKG1hcy0mZ3Q7bGFzdCA9PSB3cl9tYXMtJmd0O2VuZF9waXYpIHsKQEAgLTMxNDksNyAmIzQzOzMyNDEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpCiAJaWYgKGluX3JjdSkgewogCQluZXdub2RlID0gbWFzX3BvcF9ub2RlKG1hcyk7CiAJfSBlbHNlIHsKLQkJbWVtc2V0KCZhbXA7cmV1c2UsIDAsIHNpemVvZihzdHJ1Y3QgbWFwbGVfbm9kZSkpOwogCQluZXdub2RlID0gJmFtcDtyZXVzZTsKIAl9CiAKQEAgLTMxOTMsNyAmIzQzOzMyODQsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKQogCQlkc3RfcGl2b3RzW25ld19lbmRdID0gbWFzLSZndDttYXg7CiAKIGRvbmU6Ci0JbWFzX2xlYWZfc2V0X21ldGEobmV3bm9kZSwgbWFwbGVfbGVhZl82NCwgbmV3X2VuZCk7CiYjNDM7CWlmICghaW5fcmN1ICZhbXA7JmFtcDsgbmV3X2VuZCAmIzQzOyAyICZsdDsgbm9kZV9zbG90cykgewomIzQzOwkJdW5zaWduZWQgY2hhciBjbGVhcl9mcm9tID0gbmV3X2VuZCAmIzQzOyAxOwomIzQzOwomIzQzOwkJbWVtc2V0KGRzdF9zbG90cyAmIzQzOyBjbGVhcl9mcm9tLCAwLAomIzQzOwkJICAgICAgIHNpemVvZih2b2lkIF9fcmN1ICopICogKG5vZGVfc2xvdHMgLSBjbGVhcl9mcm9tKSk7CiYjNDM7CQlpZiAoY2xlYXJfZnJvbSAmbHQ7IG5vZGVfcGl2b3RzKQomIzQzOwkJCW1lbXNldChkc3RfcGl2b3RzICYjNDM7IGNsZWFyX2Zyb20sIDAsCiYjNDM7CQkJICAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nKSAqIChub2RlX3Bpdm90cyAtIGNsZWFyX2Zyb20pKTsKJiM0MzsJfQomIzQzOwomIzQzOwltYXNfbGVhZl9zZXRfbWV0YShuZXdub2RlLCB3cl9tYXMtJmd0O3R5cGUsIG5ld19lbmQpOwogCWlmIChpbl9yY3UpIHsKIAkJc3RydWN0IG1hcGxlX2Vub2RlICpvbGRfZW5vZGUgPSBtYXMtJmd0O25vZGU7CiAKQEAgLTMyMTgsNyAmIzQzOzMzMTksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX3Nsb3Rfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpCiAJdm9pZCBfX3JjdSAqKnNsb3RzID0gd3JfbWFzLSZndDtzbG90czsKIAlib29sIGdhcCA9IGZhbHNlOwogCi0JZ2FwIHw9ICFtdF9zbG90X2xvY2tlZChtYXMtJmd0O3RyZWUsIHNsb3RzLCBvZmZzZXQpOwomIzQzOwlnYXAgfD0gIXdyX21hcy0mZ3Q7Y29udGVudDsKIAlnYXAgfD0gIW10X3Nsb3RfbG9ja2VkKG1hcy0mZ3Q7dHJlZSwgc2xvdHMsIG9mZnNldCAmIzQzOyAxKTsKIAogCWlmICh3cl9tYXMtJmd0O29mZnNldF9lbmQgLSBvZmZzZXQgPT0gMSkgewpAQCAtMzY2MSw2ICYjNDM7Mzc2Miw5IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBzdG9yZV90eXBlIG1hc193cl9zdG9yZV90eXBlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKQogewogCXN0cnVjdCBtYV9zdGF0ZSAqbWFzID0gd3JfbWFzLSZndDttYXM7CiAJdW5zaWduZWQgY2hhciBuZXdfZW5kOwomIzQzOwlib29sIGFwcGVuZGluZzsKJiM0MzsJYm9vbCBvbmVfc2xvdDsKJiM0MzsJYm9vbCBpbl9yY3U7CiAKIAlpZiAodW5saWtlbHkobWFzX2lzX25vbmUobWFzKSB8fCBtYXNfaXNfcHRyKG1hcykpKQogCQlyZXR1cm4gd3Jfc3RvcmVfcm9vdDsKQEAgLTM2ODAsMjEgJiM0MzszNzg0LDMwIEBAIHN0YXRpYyBpbmxpbmUgZW51bSBzdG9yZV90eXBlIG1hc193cl9zdG9yZV90eXBlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKQogCQlyZXR1cm4gd3JfbmV3X3Jvb3Q7CiAKIAluZXdfZW5kID0gbWFzX3dyX25ld19lbmQod3JfbWFzKTsKJiM0MzsJaW5fcmN1ID0gbXRfaW5fcmN1KG1hcy0mZ3Q7dHJlZSk7CiYjNDM7CWFwcGVuZGluZyA9IG1hcy0mZ3Q7b2Zmc2V0ID09IG1hcy0mZ3Q7ZW5kOwomIzQzOwlvbmVfc2xvdCA9IHdyX21hcy0mZ3Q7b2Zmc2V0X2VuZCAtIG1hcy0mZ3Q7b2Zmc2V0ID09IDE7CiYjNDM7CiAJLyogUG90ZW50aWFsIHNwYW5uaW5nIHJlYmFsYW5jZSBjb2xsYXBzaW5nIGEgbm9kZSAqLwogCWlmIChuZXdfZW5kICZsdDsgbXRfbWluX3Nsb3RzW3dyX21hcy0mZ3Q7dHlwZV0pIHsKIAkJaWYgKCFtdGVfaXNfcm9vdChtYXMtJmd0O25vZGUpKQogCQkJcmV0dXJuICB3cl9yZWJhbGFuY2U7CiYjNDM7CQlpZiAoIWluX3JjdSkgewomIzQzOwkJCWlmIChhcHBlbmRpbmcpCiYjNDM7CQkJCXJldHVybiB3cl9hcHBlbmQ7CiYjNDM7CQkJZWxzZSBpZiAobWFzLSZndDtlbmQgPT0gbmV3X2VuZCAmYW1wOyZhbXA7IG9uZV9zbG90KQomIzQzOwkJCQlyZXR1cm4gd3Jfc2xvdF9zdG9yZTsKJiM0MzsJCX0KIAkJcmV0dXJuIHdyX25vZGVfc3RvcmU7CiAJfQogCiAJaWYgKG5ld19lbmQgJmd0Oz0gbXRfc2xvdHNbd3JfbWFzLSZndDt0eXBlXSkKIAkJcmV0dXJuIHdyX3NwbGl0X3N0b3JlOwogCi0JaWYgKCFtdF9pbl9yY3UobWFzLSZndDt0cmVlKSAmYW1wOyZhbXA7IChtYXMtJmd0O29mZnNldCA9PSBtYXMtJmd0O2VuZCkpCiYjNDM7CWlmICghaW5fcmN1ICZhbXA7JmFtcDsgYXBwZW5kaW5nKQogCQlyZXR1cm4gd3JfYXBwZW5kOwogCi0JaWYgKChuZXdfZW5kID09IG1hcy0mZ3Q7ZW5kKSAmYW1wOyZhbXA7ICghbXRfaW5fcmN1KG1hcy0mZ3Q7dHJlZSkgfHwKLQkJKHdyX21hcy0mZ3Q7b2Zmc2V0X2VuZCAtIG1hcy0mZ3Q7b2Zmc2V0ID09IDEpKSkKJiM0MzsJaWYgKG5ld19lbmQgPT0gbWFzLSZndDtlbmQgJmFtcDsmYW1wOyAoIWluX3JjdSB8fCBvbmVfc2xvdCkpCiAJCXJldHVybiB3cl9zbG90X3N0b3JlOwogCiAJcmV0dXJuIHdyX25vZGVfc3RvcmU7CkBAIC0zNzkzLDI3ICYjNDM7MzkwNiwyOSBAQCBpbnQgbWFzX2FsbG9jX2N5Y2xpYyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyAqc3RhcnRwLAogCQl2b2lkICplbnRyeSwgdW5zaWduZWQgbG9uZyByYW5nZV9sbywgdW5zaWduZWQgbG9uZyByYW5nZV9oaSwKIAkJdW5zaWduZWQgbG9uZyAqbmV4dCwgZ2ZwX3QgZ2ZwKQogewotCXVuc2lnbmVkIGxvbmcgbWluID0gcmFuZ2VfbG87Ci0JaW50IHJldCA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWluOwogCi0JcmFuZ2VfbG8gPSBtYXgobWluLCAqbmV4dCk7Ci0JcmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCByYW5nZV9sbywgcmFuZ2VfaGksIDEpOwotCWlmICgobWFzLSZndDt0cmVlLSZndDttYV9mbGFncyAmYW1wOyBNVF9GTEFHU19BTExPQ19XUkFQUEVEKSAmYW1wOyZhbXA7IHJldCA9PSAwKSB7Ci0JCW1hcy0mZ3Q7dHJlZS0mZ3Q7bWFfZmxhZ3MgJmFtcDs9IH5NVF9GTEFHU19BTExPQ19XUkFQUEVEOwotCQlyZXQgPSAxOwotCX0KLQlpZiAocmV0ICZsdDsgMCAmYW1wOyZhbXA7IHJhbmdlX2xvICZndDsgbWluKSB7Ci0JCW1hc19yZXNldChtYXMpOwotCQlyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIG1pbiwgcmFuZ2VfaGksIDEpOwotCQlpZiAocmV0ID09IDApCiYjNDM7CW1pbiA9IHJhbmdlX2xvOwomIzQzOwlkbyB7CiYjNDM7CQlyYW5nZV9sbyA9IG1heChtaW4sICpuZXh0KTsKJiM0MzsJCXJldCA9IG1hc19lbXB0eV9hcmVhKG1hcywgcmFuZ2VfbG8sIHJhbmdlX2hpLCAxKTsKJiM0MzsJCWlmICgobWFzLSZndDt0cmVlLSZndDttYV9mbGFncyAmYW1wOyBNVF9GTEFHU19BTExPQ19XUkFQUEVEKSAmYW1wOyZhbXA7IHJldCA9PSAwKSB7CiYjNDM7CQkJbWFzLSZndDt0cmVlLSZndDttYV9mbGFncyAmYW1wOz0gfk1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQ7CiAJCQlyZXQgPSAxOwotCX0KLQlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KJiM0MzsJCWlmIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgcmFuZ2VfbG8gJmd0OyBtaW4pIHsKJiM0MzsJCQltYXNfcmVzZXQobWFzKTsKJiM0MzsJCQlyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIG1pbiwgcmFuZ2VfaGksIDEpOwomIzQzOwkJCWlmIChyZXQgPT0gMCkKJiM0MzsJCQkJcmV0ID0gMTsKJiM0MzsJCX0KJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiAKLQlkbyB7CiAJCW1hc19pbnNlcnQobWFzLCBlbnRyeSk7CiAJfSB3aGlsZSAobWFzX25vbWVtKG1hcywgZ2ZwKSk7CiYjNDM7CiAJaWYgKG1hc19pc19lcnIobWFzKSkKIAkJcmV0dXJuIHhhX2VycihtYXMtJmd0O25vZGUpOwogCkBAIC00MzYwLDYgJiM0Mzs0NDc1LDcgQEAgdm9pZCAqbWFzX3dhbGsoc3RydWN0IG1hX3N0YXRlICptYXMpCiB7CiAJdm9pZCAqZW50cnk7CiAKJiM0MzsJbWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTsKIAlpZiAoIW1hc19pc19hY3RpdmUobWFzKSAmYW1wOyZhbXA7ICFtYXNfaXNfc3RhcnQobWFzKSkKIAkJbWFzLSZndDtzdGF0dXMgPSBtYV9zdGFydDsKIHJldHJ5OgpAQCAtNDgzMSw2ICYjNDM7NDk0Nyw3IEBAIHZvaWQgKm1hc19zdG9yZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnkpCiB7CiAJTUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIGVudHJ5KTsKIAomIzQzOwltYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpOwogCXRyYWNlX21hX3dyaXRlKFRQX0ZDVCwgbWFzLCAwLCBlbnRyeSk7CiAjaWZkZWYgQ09ORklHX0RFQlVHX01BUExFX1RSRUUKIAlpZiAoTUFTX1dBUk5fT04obWFzLCBtYXMtJmd0O2luZGV4ICZndDsgbWFzLSZndDtsYXN0KSkKQEAgLTQ4ODksNiAmIzQzOzUwMDYsNyBAQCBpbnQgbWFzX3N0b3JlX2dmcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnksIGdmcF90IGdmcCkKIAlNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpOwogCWludCByZXQgPSAwOwogCiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiByZXRyeToKIAltYXNfd3JfcHJlYWxsb2NhdGUoJmFtcDt3cl9tYXMsIGVudHJ5KTsKIAlpZiAodW5saWtlbHkobWFzX25vbWVtKG1hcywgZ2ZwKSkpIHsKQEAgLTQ5MTksNiAmIzQzOzUwMzcsNyBAQCB2b2lkIG1hc19zdG9yZV9wcmVhbGxvYyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnkpCiB7CiAJTUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIGVudHJ5KTsKIAomIzQzOwltYXNfbG9ja19jaGVjayhtYXMpOwogCWlmIChtYXMtJmd0O3N0b3JlX3R5cGUgPT0gd3Jfc3RvcmVfcm9vdCkgewogCQltYXNfd3JfcHJlYWxsb2Nfc2V0dXAoJmFtcDt3cl9tYXMpOwogCQlnb3RvIHN0b3JlOwpAQCAtNDk1MSw2ICYjNDM7NTA3MCw3IEBAIGludCBtYXNfcHJlYWxsb2NhdGUoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5LCBnZnBfdCBnZnApCiB7CiAJTUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIGVudHJ5KTsKIAomIzQzOwltYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpOwogCW1hc193cl9wcmVhbGxvY19zZXR1cCgmYW1wO3dyX21hcyk7CiAJbWFzLSZndDtzdG9yZV90eXBlID0gbWFzX3dyX3N0b3JlX3R5cGUoJmFtcDt3cl9tYXMpOwogCW1hc19wcmVhbGxvY19jYWxjKCZhbXA7d3JfbWFzLCBlbnRyeSk7CkBAIC01MDc0LDYgJiM0Mzs1MTk0LDcgQEAgdm9pZCAqbWFzX25leHQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KQogewogCXZvaWQgKmVudHJ5ID0gTlVMTDsKIAomIzQzOwltYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpOwogCWlmIChtYXNfbmV4dF9zZXR1cChtYXMsIG1heCwgJmFtcDtlbnRyeSkpCiAJCXJldHVybiBlbnRyeTsKIApAQCAtNTA5Nyw2ICYjNDM7NTIxOCw3IEBAIHZvaWQgKm1hc19uZXh0X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heCkKIHsKIAl2b2lkICplbnRyeSA9IE5VTEw7CiAKJiM0MzsJbWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTsKIAlpZiAobWFzX25leHRfc2V0dXAobWFzLCBtYXgsICZhbXA7ZW50cnkpKQogCQlyZXR1cm4gZW50cnk7CiAKQEAgLTUyMDUsNiAmIzQzOzUzMjcsNyBAQCB2b2lkICptYXNfcHJldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pCiB7CiAJdm9pZCAqZW50cnkgPSBOVUxMOwogCiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiAJaWYgKG1hc19wcmV2X3NldHVwKG1hcywgbWluLCAmYW1wO2VudHJ5KSkKIAkJcmV0dXJuIGVudHJ5OwogCkBAIC01MjI4LDYgJiM0Mzs1MzUxLDcgQEAgdm9pZCAqbWFzX3ByZXZfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKQogewogCXZvaWQgKmVudHJ5ID0gTlVMTDsKIAomIzQzOwltYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpOwogCWlmIChtYXNfcHJldl9zZXR1cChtYXMsIG1pbiwgJmFtcDtlbnRyeSkpCiAJCXJldHVybiBlbnRyeTsKIApAQCAtNTI3NCw2ICYjNDM7NTM5OCw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG10X3ByZXYpOwogICovCiB2b2lkIG1hc19wYXVzZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcykKIHsKJiM0MzsJbWFzX2xvY2tfY2hlY2sobWFzKTsKIAltYXMtJmd0O3N0YXR1cyA9IG1hX3BhdXNlOwogCW1hcy0mZ3Q7bm9kZSA9IE5VTEw7CiB9CkBAIC01MzgyLDYgJiM0Mzs1NTA3LDcgQEAgdm9pZCAqbWFzX2ZpbmQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KQogewogCXZvaWQgKmVudHJ5ID0gTlVMTDsKIAomIzQzOwltYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpOwogCWlmIChtYXNfZmluZF9zZXR1cChtYXMsIG1heCwgJmFtcDtlbnRyeSkpCiAJCXJldHVybiBlbnRyeTsKIApAQCAtNTQwOSw2ICYjNDM7NTUzNSw3IEBAIHZvaWQgKm1hc19maW5kX3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heCkKIHsKIAl2b2lkICplbnRyeSA9IE5VTEw7CiAKJiM0MzsJbWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTsKIAlpZiAobWFzX2ZpbmRfc2V0dXAobWFzLCBtYXgsICZhbXA7ZW50cnkpKQogCQlyZXR1cm4gZW50cnk7CiAKQEAgLTU0MjgsNyAmIzQzOzU1NTUsNiBAQCBFWFBPUlRfU1lNQk9MX0dQTChtYXNfZmluZF9yYW5nZSk7CiBzdGF0aWMgYm9vbCBtYXNfZmluZF9yZXZfc2V0dXAoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluLAogCQl2b2lkICoqZW50cnkpCiB7Ci0KIAlzd2l0Y2ggKG1hcy0mZ3Q7c3RhdHVzKSB7CiAJY2FzZSBtYV9hY3RpdmU6CiAJCWdvdG8gYWN0aXZlOwpAQCAtNTUyMSw2ICYjNDM7NTY0Nyw3IEBAIHZvaWQgKm1hc19maW5kX3JldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pCiB7CiAJdm9pZCAqZW50cnkgPSBOVUxMOwogCiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiAJaWYgKG1hc19maW5kX3Jldl9zZXR1cChtYXMsIG1pbiwgJmFtcDtlbnRyeSkpCiAJCXJldHVybiBlbnRyeTsKIApAQCAtNTU0Nyw2ICYjNDM7NTY3NCw3IEBAIHZvaWQgKm1hc19maW5kX3JhbmdlX3JldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pCiB7CiAJdm9pZCAqZW50cnkgPSBOVUxMOwogCiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiAJaWYgKG1hc19maW5kX3Jldl9zZXR1cChtYXMsIG1pbiwgJmFtcDtlbnRyeSkpCiAJCXJldHVybiBlbnRyeTsKIApAQCAtNTU2NCw2ICYjNDM7NTY5MiwxMCBAQCBFWFBPUlRfU1lNQk9MX0dQTChtYXNfZmluZF9yYW5nZV9yZXYpOwogICogU2VhcmNoZXMgZm9yIEBtYXMtJmd0O2luZGV4LCBzZXRzIEBtYXMtJmd0O2luZGV4IGFuZCBAbWFzLSZndDtsYXN0IHRvIHRoZSByYW5nZSBhbmQKICAqIGVyYXNlcyB0aGF0IHJhbmdlLgogICoKJiM0MzsgKiBOb3RlIHRoYXQgZXJhc2UgcmVxdWlyZXMgYWxsb2NhdGlvbnMgYW5kIHdpbGwgdXNlIEdGUF9LRVJORUwgdG8gZG8gc28gaWYKJiM0MzsgKiBuZWNlc3NhcnkuICBJZiB0aGUgYWxsb2NhdGlvbiBmYWlscywgdGhlIGludGVybmFsIGxvY2sgd2lsbCBiZSBkcm9wcGVkIHRvCiYjNDM7ICogcmV0cnkuCiYjNDM7ICoKICAqIFJldHVybjogdGhlIGVudHJ5IHRoYXQgd2FzIGVyYXNlZCBvciAlTlVMTCwgQG1hcy0mZ3Q7aW5kZXggYW5kIEBtYXMtJmd0O2xhc3QgYXJlIHVwZGF0ZWQuCiAgKi8KIHZvaWQgKm1hc19lcmFzZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcykKQEAgLTU1NzIsNiAmIzQzOzU3MDQsMTQgQEAgdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQogCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBtYXMtJmd0O2luZGV4OwogCU1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBOVUxMKTsKIAomIzQzOwkvKgomIzQzOwkgKiBJbiBsb3cgbWVtb3J5IHNpdHVhdGlvbnMsIHRoZSBhbGxvY2F0aW9uIGlzIHJldHJpZWQgd2l0aCB0aGUgZ2ZwIGZsYWcKJiM0MzsJICogR0ZQX0tFUk5FTC4gIFRoZSBpbnRlcm5hbCBzcGlubG9jayBpcyBkcm9wcGVkIGluIG1hc19ub21lbSgpLCBob3dldmVyCiYjNDM7CSAqIHRoZSBleHRlcm5hbCBsb2NrIGlzIG5vdCBkcm9wcGVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKG10X2V4dGVybmFsX2xvY2sobWFzLSZndDt0cmVlKSkKJiM0MzsJCW1pZ2h0X2FsbG9jKEdGUF9LRVJORUwpOwomIzQzOwogCWlmICghbWFzX2lzX2FjdGl2ZShtYXMpIHx8ICFtYXNfaXNfc3RhcnQobWFzKSkKIAkJbWFzLSZndDtzdGF0dXMgPSBtYV9zdGFydDsKIApAQCAtNTYwMSwxMCAmIzQzOzU3NDEsMTEgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWFzX2VyYXNlKTsKIAogLyoqCiAgKiBtYXNfbm9tZW0oKSAtIENoZWNrIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBhbGxvY2F0aW5nIGFuZCBkbyB0aGUgYWxsb2NhdGlvbgotICogaWYgbmVjZXNzYXJ5IElmIHRoZXJlIGFyZSBhbGxvY2F0aW9ucywgdGhlbiBmcmVlIHRoZW0uCiYjNDM7ICogaWYgbmVjZXNzYXJ5LgomIzQzOyAqCiAgKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGUKICAqIEBnZnA6IFRoZSBHRlBfRkxBR1MgdG8gdXNlIGZvciBhbGxvY2F0aW9ucwotICogUmV0dXJuOiB0cnVlIG9uIGFsbG9jYXRpb24sIGZhbHNlIG90aGVyd2lzZS4KJiM0MzsgKiBSZXR1cm46IEZhbHNlIG9uIG5vIG1lbW9yeS4gIFRydWUgb3RoZXJ3aXNlIChwYXJ0aWFsIHN1Y2Nlc3MgYXMgd2VsbCkKICAqLwogYm9vbCBtYXNfbm9tZW0oc3RydWN0IG1hX3N0YXRlICptYXMsIGdmcF90IGdmcCkKIAlfX211c3RfaG9sZChtYXMtJmd0O3RyZWUtJmd0O21hX2xvY2spCkBAIC01NjEyLDYgJiM0Mzs1NzUzLDEwIEBAIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApCiAJaWYgKGxpa2VseShtYXMtJmd0O25vZGUgIT0gTUFfRVJST1IoLUVOT01FTSkpKQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJLyogQWxsb2NhdGlvbnMgY2FuIGZhaWwsIGRvbiYjMzk7dCBkbyB0aGlzLiAqLwomIzQzOwlXQVJOX09OX09OQ0UoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkgJmFtcDsmYW1wOwomIzQzOwkJICAgICBtdF9leHRlcm5hbF9sb2NrKG1hcy0mZ3Q7dHJlZSkpOwomIzQzOwogCWlmIChnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApICZhbXA7JmFtcDsgIW10X2V4dGVybmFsX2xvY2sobWFzLSZndDt0cmVlKSkgewogCQltdHJlZV91bmxvY2sobWFzLSZndDt0cmVlKTsKIAkJbWFzX2FsbG9jX25vZGVzKG1hcywgZ2ZwKTsKQEAgLTU2MjAsMTAgJiM0Mzs1NzY1LDE3IEBAIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApCiAJCW1hc19hbGxvY19ub2RlcyhtYXMsIGdmcCk7CiAJfQogCi0JaWYgKCFtYXMtJmd0O3NoZWFmICZhbXA7JmFtcDsgIW1hcy0mZ3Q7YWxsb2MpCiYjNDM7CS8qCiYjNDM7CSAqIFJldHVybiBmYWxzZSBvbiB6ZXJvIGZvcndhcmQgcHJvZ3Jlc3MuICBQYXJ0aWFsIGFsbG9jYXRpb25zIGFyZSBrZXB0CiYjNDM7CSAqIHNvIHRoZSByZXRyeSBwYXRoIHdpbGwgYXR0ZW1wdCB0byBnZXQgdGhlIHJlc3QuICBUaGUgZmFpbHVyZSBzaG91bGQKJiM0MzsJICogbm90IGhhcHBlbiBhcyB3ZSB0cnkgb3VyIGJlc3QgdG8gcmVjbGFpbS4gIFRoZSB1c2VyIHdvdWxkIG5lZWQgYW4KJiM0MzsJICogZXh0ZXJuYWwgbG9jayB3aXRoIGEgbm9uLWJsb2NraW5nIGdmcCBpbiBhIGxvdyBtZW1vcnkgc2l0dWF0aW9uIC0KJiM0MzsJICogd2hpY2ggd291bGQgaGF2ZSB0cmlnZ2VyZWQgdGhlIGZpcnN0IHdhcm5pbmcgaW4gdGhpcyBmdW5jdGlvbi4KJiM0MzsJICovCiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIW1hcy0mZ3Q7c2hlYWYgJmFtcDsmYW1wOyAhbWFzLSZndDthbGxvYykpCiAJCXJldHVybiBmYWxzZTsKIAotCW1hcy0mZ3Q7c3RhdHVzID0gbWFfc3RhcnQ7CiYjNDM7CW1hc19yZXNldChtYXMpOwogCXJldHVybiB0cnVlOwogfQogCkBAIC01OTEzLDYgJiM0Mzs2MDY1LDEwIEBAIEVYUE9SVF9TWU1CT0wobXRyZWVfYWxsb2NfcnJhbmdlKTsKICAqIEVyYXNpbmcgaXMgdGhlIHNhbWUgYXMgYSB3YWxrIHRvIGFuIGVudHJ5IHRoZW4gYSBzdG9yZSBvZiBhIE5VTEwgdG8gdGhhdAogICogRU5USVJFIHJhbmdlLiAgSW4gZmFjdCwgaXQgaXMgaW1wbGVtZW50ZWQgYXMgc3VjaCB1c2luZyB0aGUgYWR2YW5jZWQgQVBJLgogICoKJiM0MzsgKiBOb3RlIHRoYXQgZXJhc2UgcmVxdWlyZXMgYWxsb2NhdGlvbnMgYW5kIHdpbGwgdXNlIEdGUF9LRVJORUwgdG8gZG8gc28gaWYKJiM0MzsgKiBuZWNlc3NhcnkuICBJZiB0aGUgYWxsb2NhdGlvbiBmYWlscywgdGhlIGludGVybmFsIGxvY2sgd2lsbCBiZSBkcm9wcGVkIHRvCiYjNDM7ICogcmV0cnkuCiYjNDM7ICoKICAqIFJldHVybjogVGhlIGVudHJ5IHN0b3JlZCBhdCB0aGUgQGluZGV4IG9yICVOVUxMCiAgKi8KIHZvaWQgKm10cmVlX2VyYXNlKHN0cnVjdCBtYXBsZV90cmVlICptdCwgdW5zaWduZWQgbG9uZyBpbmRleCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jIGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMKaW5kZXggMDYwNzkxM2EzMDIyZDUuLmQ5NjdlNzZhM2MwNjUwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYwpAQCAtMzUyMzQsNyAmIzQzOzM1MjM0LDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGNoZWNrX3ByZWFsbG9jKHN0cnVjdCBtYXBsZV90cmVlICptdCkKIAltdF9zZXRfbm9uX2tlcm5lbCgxKTsKIAkvKiBTcGFubmluZyBzdG9yZSAqLwogCW1hc19zZXRfcmFuZ2UoJmFtcDttYXMsIDEsIDEwMCk7Ci0JTVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoJmFtcDttYXMsIHB0ciwgR0ZQX0tFUk5FTCAmYW1wOyBHRlBfTk9XQUlUKSA9PSAwKTsKJiM0MzsJTVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoJmFtcDttYXMsIHB0ciwgR0ZQX05PV0FJVCkgPT0gMCk7CiAJYWxsb2NhdGVkID0gbWFzX2FsbG9jYXRlZCgmYW1wO21hcyk7CiAJaGVpZ2h0ID0gbWFzX210X2hlaWdodCgmYW1wO21hcyk7CiAJTVRfQlVHX09OKG10LCBhbGxvY2F0ZWQgIT0gMCk7CkBAIC0zNTI1Nyw3ICYjNDM7MzUyNTcsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfcHJlYWxsb2Moc3RydWN0IG1hcGxlX3RyZWUgKm10KQogCU1UX0JVR19PTihtdCwgbWFzX2FsbG9jYXRlZCgmYW1wO21hcykgIT0gMCk7CiAJbWFzX3NldF9yYW5nZSgmYW1wO21hcywgMCwgMjAwKTsKIAltdF9zZXRfbm9uX2tlcm5lbCgxKTsKLQlNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZSgmYW1wO21hcywgcHRyLCBHRlBfS0VSTkVMICZhbXA7IEdGUF9OT1dBSVQpID09IDApOwomIzQzOwlNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZSgmYW1wO21hcywgcHRyLCBHRlBfTk9XQUlUKSA9PSAwKTsKIAlhbGxvY2F0ZWQgPSBtYXNfYWxsb2NhdGVkKCZhbXA7bWFzKTsKIAloZWlnaHQgPSBtYXNfbXRfaGVpZ2h0KCZhbXA7bWFzKTsKIAlNVF9CVUdfT04obXQsIGFsbG9jYXRlZCAhPSAwKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMTgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA4NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggRXZhbHVhdGlvbiBmb3IgRnV6emluZzogTWFwbGUgVHJlZSBhbmQgTG9ja2RlcCBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCwgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgd2FycmFudHMgYSBkZWVwIGRpdmUgZm9yIGZ1enppbmcuIEl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGNyaXRpY2FsIGFyZWFzOiB0aGUgYERvY3VtZW50YXRpb25gLCBgaW5jbHVkZWAgZmlsZXMgZm9yIGNvcmUgbG9ja2luZyBhbmQgdGhlIGBtYXBsZV90cmVlYCwgYW5kIHRoZW4sIG1vc3Qgc2lnbmlmaWNhbnRseSwgdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYg4oCTIHNwZWNpZmljYWxseSBgbG9ja2RlcC5jYCBhbmQgYGxpYi9tYXBsZV90cmVlLmNgLCBhbG9uZyB3aXRoIGEgdGVzdCBmaWxlLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSByZWZhY3Rvci4gQSBuZXcgYGxvY2tfc2VxdWVuY2UoKWAgZnVuY3Rpb24gaW4gYGxvY2tkZXBgIGlzIGJlaW5nIGludHJvZHVjZWQgYW5kIHRoZW4gbGV2ZXJhZ2VkIHdpdGhpbiB0aGUgbWFwbGUgdHJlZSBjb2RlIHRvIGVuZm9yY2UgbG9jayBvcmRlcmluZy4gVGhpcyBzY3JlYW1zIHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgY29uY3VycmVuY3kgYnVncyBpZiBub3QgaGFuZGxlZCBwZXJmZWN0bHkuIEFic29sdXRlbHksIHRoaXMgaXMgZnV6ei13b3J0aHkhCgpOb3csIGxldCYjMzk7cyB6b29tIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgbW9kaWZpZWQsIHBhcnRpY3VsYXJseSBpbiBgbGliL21hcGxlX3RyZWUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZS4gSSBzZWUgaXQgdG91Y2hlcyBhICpsb3QqIG9mIGZ1bmN0aW9ucy4gU2VlbXMgdGhlIHBhdGNoIGhhcyBxdWl0ZSBhIGJyb2FkIGltcGFjdCBvbiB0aGUgbG9ja2luZyBzZW1hbnRpY3MgYXJvdW5kIHRoZSBjb3JlIG1hcGxlIHRyZWUgb3BlcmF0aW9ucy4gSSBzZWUgaXQgaW1wYWN0cyBtYW55IGZ1bmN0aW9uczogYG1hc19zZXRfcGFyZW50YCwgYG1hc19zZXRfcGFyZW50X3Nsb3RzYCwgYG1hc19sb2NrZGVwX21hcGAsIGBtYXNfbG9ja19jaGVja2AsIGBtYXNfaW5pdF9sb2NrX2NoZWNrYCwgYG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrYCwgYG1hc19zdGFydGAsIGBtYXNfdXBkYXRlX2dhcF9rbm93bmAsIGBtYXNfdXBkYXRlX2dhcGAsIGBtYXNfYWRvcHRfY2hpbGRyZW5gLCBgbm9kZV9jb3B5YCwgYG1hc193bWJfcmVwbGFjZWAsIGBtYXNfZXh0ZW5kX3NwYW5uaW5nX251bGxgLCBgbWFzX3dyX25vZGVfc3RvcmVgLCBgbWFzX3dyX3Nsb3Rfc3RvcmVgLCBgbWFzX3dyX3N0b3JlX3R5cGVgLCBgbWFzX2FsbG9jX2N5Y2xpY2AsIGBtYXNfd2Fsa2AsIGBtYXNfc3RvcmVgLCBgbWFzX3N0b3JlX2dmcGAsIGBtYXNfc3RvcmVfcHJlYWxsb2NgLCBgbWFzX3ByZWFsbG9jYXRlYCwgYG1hc19uZXh0YCwgYG1hc19uZXh0X3JhbmdlYCwgYG1hc19wcmV2YCwgYG1hc19wcmV2X3JhbmdlYCwgYG1hc19wYXVzZWAsIGBtYXNfZmluZGAsIGBtYXNfZmluZF9yYW5nZWAsIGBtYXNfZmluZF9yZXZfc2V0dXBgLCBgbWFzX2ZpbmRfcmV2YCwgYG1hc19maW5kX3JhbmdlX3JldmAsIGBtYXNfZXJhc2VgLCBgbWFzX25vbWVtYCwgYG10cmVlX2VyYXNlYC4KCkFuZCB0aGVuLCBsb29raW5nIGF0IGBrZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNgLCBJIHNlZSBjb3JlIGxvY2tpbmcgZnVuY3Rpb25zIGFyZSBhZmZlY3RlZCB0b28sIHRoYXQgY2FuIGJlIGEgc2lnbmFsIG9mIGEgY29yZSBpc3N1ZTogYF9fbG9ja19hY3F1aXJlYCwgYHJlYWNxdWlyZV9oZWxkX2xvY2tzYCwgYF9fbG9ja19zZXF1ZW5jZWAsIGBsb2NrX2FjcXVpcmVgLCBgbG9ja19zeW5jYCwgYGxvY2tfc2VxdWVuY2VgLgoKVGhlcmVmb3JlLCBJIG5lZWQgdG8gcHJpb3JpdGl6ZSBteSBmdXp6aW5nIGVmZm9ydHMuIFRoZSBmb2N1cyBzaG91bGQgYmUgb24gdGhvc2UgbWFwbGUgdHJlZSBmdW5jdGlvbnMgYW5kIHRob3NlIGxvY2tkZXAgc2VxdWVuY2UgZnVuY3Rpb25zIHdoaWNoIGFyZSBtb3N0IGxpa2VseSB0byBpbnRyb2R1Y2UgYSBidWcuIExvY2tkZXAgaXRzZWxmIGlzIGEgZGVidWdnaW5nIHRvb2wsIHNvIHRoZSByaXNrIGlzIHNvbWV3aGF0IGxvd2VyIGluICppdCogYnV0IHN0aWxsIHBvc3NpYmxlIHRvIGNyZWF0ZSBidWdzLiBCdXQgdGhlIG1hcGxlIHRyZWUgaXMgYSBjb3JlIGRhdGEgc3RydWN0dXJlLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHBheSBleHRyYSBhdHRlbnRpb24gdG8gdGhhdCEgTGV0IG1lIGxpc3Qgc29tZSBrZXkgbWFwbGUgdHJlZSBmdW5jdGlvbnMgdG8gaGlnaGxpZ2h0IHRoZXNlIGNyaXRpY2FsIGFyZWFzOiBgbWFzX2FsbG9jX2N5Y2xpY2AsIGBtYXNfZXJhc2VgLCBgbXRyZWVfZXJhc2VgLCBgbWFzX25vbWVtYCwgYG1hc193cl9ub2RlX3N0b3JlYCwgYG1hc193cl9zdG9yZV90eXBlYCwgYG1hc191cGRhdGVfZ2FwX2tub3duYCwgYG1hc19zZXRfcGFyZW50X3Nsb3RzYC4KCk5vdywgYmVmb3JlIEkgbGF1bmNoIGludG8gZnV6emluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgY29uZmlndXJhdGlvbiByaWdodC4gSSYjMzk7bGwgbmVlZCBgQ09ORklHX0xPQ0tERVBgIGVuYWJsZWQgZm9yIHRoZXNlIGxvY2sgc2VxdWVuY2UgY2hlY2tzIHRvIGFjdHVhbGx5IGZ1bmN0aW9uLiBgQ09ORklHX0RFQlVHX01BUExFX1RSRUVgICptaWdodCogYmUgaGVscGZ1bCBkdXJpbmcgYW5hbHlzaXMsIGJ1dCBzdGFuZGFyZCBtYXBsZSB0cmVlIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZC4gSXQgaXMgYWx3YXlzIGdvb2QgdG8gY2hlY2sgYGxpYi9LY29uZmlnLmRlYnVnYCB0byBkb3VibGUgY2hlY2sgYW55IGhlbHBmdWwgY29uZmlndXJhdGlvbnMgdGhlcmUuIE5vdywgbGV0JiMzOTtzIGdldCBmdXp6aW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERUJVR19NQVBMRV9UUkVFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTE4MjU9Y29uZmlnIERFQlVHX0NMT1NVUkVTXG4tLVxubGliL0tjb25maWcuZGVidWctMTgzMy1cbmxpYi9LY29uZmlnLmRlYnVnOjE4MzQ6Y29uZmlnIERFQlVHX01BUExFX1RSRUVcbmxpYi9LY29uZmlnLmRlYnVnLTE4MzUtXHRib29sIFwmIzM0O0RlYnVnIG1hcGxlIHRyZWVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4OTkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQ2hlY2tpbmcgTG9ja2RlcCBhbmQgTWFwbGUgVHJlZSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJIHNlZSBgREVCVUdfTUFQTEVfVFJFRWAgbGlzdGVkIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCBJIGFsc28gbm90ZSBgUFJPVkVfTE9DS0lOR2Agb3IgYExPQ0tERVBgIGluIHRoZSBjb250ZXh0IG9mIGxvY2tkZXAgY2hhbmdlcy4gVGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRob3NlIGxvY2tkZXAgbW9kaWZpY2F0aW9ucyBub3cuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHByaW1hcnkgc2V0dGluZ3MuIEl0IGxvb2tzIGxpa2UgYGxvY2tfc2VxdWVuY2VgIGlzIGV4cG9ydGVkLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBsb2NraW5nIHdvcmtzLiBBaCwgaGVyZSBpdCBpczogYENPTkZJR19MT0NLREVQYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhhdCYjMzk7cyB0aGUgbWFpbiBzd2l0Y2ggZm9yIGVuYWJsaW5nIHRoZSBsb2NrIGRlcGVuZGVuY3kgY2hlY2tlci4gVGhhdCYjMzk7cyB0aGUgc2V0dGluZyB0aGF0IHRlbGxzIHRoZSBrZXJuZWwgdG8gcGF5IGF0dGVudGlvbiB0byBwb3RlbnRpYWwgbG9jayBwcm9ibGVtcy4KCk5vdywgbGV0IG1lIHNoaWZ0IGdlYXJzIGEgYml0LiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgdXNhZ2Ugb2YgYG1hc19hbGxvY19jeWNsaWNgLiBMZXQgbWUgc2VlIHdoZXJlIHRoYXQgY29tZXMgaW50byBwbGF5LiBJdCYjMzk7cyByZWxhdGVkIHNvbWVob3cgdG8gdGhpcyBsb2NrZGVwIHN0dWZmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hc19hbGxvY19jeWNsaWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmg9NTY4PWludCBtYXNfcHJlYWxsb2NhdGUoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5LCBnZnBfdCBnZnApO1xuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmg6NTY5OmludCBtYXNfYWxsb2NfY3ljbGljKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nICpzdGFydHAsXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaC01NzAtXHRcdHZvaWQgKmVudHJ5LCB1bnNpZ25lZCBsb25nIHJhbmdlX2xvLCB1bnNpZ25lZCBsb25nIHJhbmdlX2hpLFxuLS1cbmxpYi9tYXBsZV90cmVlLmM9Mzg0Mz1zdGF0aWMgaW5saW5lIHZvaWQgKm1hc19pbnNlcnQoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5KVxuLS1cbmxpYi9tYXBsZV90cmVlLmMtMzg5MS0vKipcbmxpYi9tYXBsZV90cmVlLmM6Mzg5MjogKiBtYXNfYWxsb2NfY3ljbGljKCkgLSBJbnRlcm5hbCBjYWxsIHRvIGZpbmQgc29tZXdoZXJlIHRvIHN0b3JlIGFuIGVudHJ5XG5saWIvbWFwbGVfdHJlZS5jLTM4OTMtICogQG1hczogVGhlIG1hcGxlIHN0YXRlLlxuLS1cbmxpYi9tYXBsZV90cmVlLmMtMzkwNC0gKi9cbmxpYi9tYXBsZV90cmVlLmM6MzkwNTppbnQgbWFzX2FsbG9jX2N5Y2xpYyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyAqc3RhcnRwLFxubGliL21hcGxlX3RyZWUuYy0zOTA2LVx0XHR2b2lkICplbnRyeSwgdW5zaWduZWQgbG9uZyByYW5nZV9sbywgdW5zaWduZWQgbG9uZyByYW5nZV9oaSxcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTM5NDItfVxubGliL21hcGxlX3RyZWUuYzozOTQzOkVYUE9SVF9TWU1CT0wobWFzX2FsbG9jX2N5Y2xpYyk7XG5saWIvbWFwbGVfdHJlZS5jLTM5NDQtXG4tLVxubGliL21hcGxlX3RyZWUuYz02MDAxPWludCBtdHJlZV9hbGxvY19jeWNsaWMoc3RydWN0IG1hcGxlX3RyZWUgKm10LCB1bnNpZ25lZCBsb25nICpzdGFydHAsXG4tLVxubGliL21hcGxlX3RyZWUuYy02MDEzLVx0bXRyZWVfbG9jayhtdCk7XG5saWIvbWFwbGVfdHJlZS5jOjYwMTQ6XHRyZXQgPSBtYXNfYWxsb2NfY3ljbGljKFx1MDAyNm1hcywgc3RhcnRwLCBlbnRyeSwgcmFuZ2VfbG8sIHJhbmdlX2hpLFxubGliL21hcGxlX3RyZWUuYy02MDE1LVx0XHRcdCAgICAgICBuZXh0LCBnZnApO1xuLS1cbmxpYi90ZXN0X21hcGxlX3RyZWUuYz0zNjQ2PXN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBhbGxvY19jeWNsaWNfdGVzdGluZyhzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQpXG4tLVxubGliL3Rlc3RfbWFwbGVfdHJlZS5jLTM2NTUtXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgMTAwOyBpJiM0MzsmIzQzOykge1xubGliL3Rlc3RfbWFwbGVfdHJlZS5jOjM2NTY6XHRcdG1hc19hbGxvY19jeWNsaWMoXHUwMDI2bWFzLCBcdTAwMjZsb2NhdGlvbiwgbXQsIDIsIFVMT05HX01BWCwgXHUwMDI2bmV4dCwgR0ZQX0tFUk5FTCk7XG5saWIvdGVzdF9tYXBsZV90cmVlLmMtMzY1Ny1cdFx0TUFTX0JVR19PTihcdTAwMjZtYXMsIGkgIT0gbG9jYXRpb24gLSAyKTtcbi0tXG5saWIvdGVzdF9tYXBsZV90cmVlLmMtMzY3OS1cdCAqIEV4aGF1c3RpbmcgdGhlIGFsbG9jYXRpb24gYXJlYSBhbmQgZm9yY2luZyB0aGUgc2VhcmNoIHRvIHdyYXAgbmVlZHMgYVxubGliL3Rlc3RfbWFwbGVfdHJlZS5jOjM2ODA6XHQgKiBtYXNfcmVzZXQoKSBpbiBtYXNfYWxsb2NfY3ljbGljKCkuXG5saWIvdGVzdF9tYXBsZV90cmVlLmMtMzY4MS1cdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTQ0CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgcHJvbXB0LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBgbWFzX2VyYXNlYCBVc2FnZSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhlIHByb21wdCBpcyBpbmNyZWRpYmx5IHNwZWNpZmljIC0gaXQgbWVudGlvbnMgYG1hc19lcmFzZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0ICp3aHkqIHdlJiMzOTtyZSBmb2N1c2luZyBvbiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIElzIHRoZXJlIGEgc3BlY2lmaWMgcHJvYmxlbSB0aGF0IHRoaXMgc3VnZ2VzdHM/IEl0IGNvdWxkIGJlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3IgcGVyaGFwcyBkYXRhIHNhbml0YXRpb24uIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCBwb3NzaWJsZSBzY2VuYXJpb3MgYmFzZWQgb24gbXkgZXhwZXJpZW5jZS4KCk15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHRoZSByaWdodCBmdW5jdGlvbiB0byB1c2UsIHRvIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyB0aGUgYmVzdCBvcHRpb24gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXNfZXJhc2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdD0xNzE9VGhlIHJhbmdlIGlzIHBhc3NlZCBpbiBhcyBtZW1iZXJzIG9mIHRoZSBtYXBsZSBzdGF0ZTogaW5kZXggYW5kIGxhc3QuXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0LTE3Mi1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3Q6MTczOllvdSBjYW4gdXNlIG1hc19lcmFzZSgpIHRvIGVyYXNlIGFuIGVudGlyZSByYW5nZSBieSBzZXR0aW5nIGluZGV4IGFuZFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdC0xNzQtbGFzdCBvZiB0aGUgbWFwbGUgc3RhdGUgdG8gdGhlIGRlc2lyZWQgcmFuZ2UgdG8gZXJhc2UuICBUaGlzIHdpbGwgZXJhc2Vcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0PTE3Nj1hbmQgbGFzdCBhcyB0aGUgcmFuZ2UgdGhhdCB3YXMgZXJhc2VkIGFuZCByZXR1cm4gdGhlIGVudHJ5IHRoYXQgZXhpc3RlZFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdDoxNzc6YXQgdGhhdCBsb2NhdGlvbi4gIE5vdGUgdGhhdCBtYXNfZXJhc2UoKSBtYXkgYWxsb2NhdGUgd2l0aCB0aGUgR0ZQX0tFUk5FTCBmbGFnLlxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdC0xNzgtSWYgdGhpcyBpcyBub3Qgb2theSwgY29uc2lkZXIgdXNpbmcgbWFzX3N0b3JlX2dmcCgpIGFuZCBwYXNzIGl0IGEgYGBOVUxMYGAsXG4tLVxuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS1tYXBsZS5jPTEwNz1zdGF0aWMgaW50IHJlZ2NhY2hlX21hcGxlX2Ryb3Aoc3RydWN0IHJlZ21hcCAqbWFwLCB1bnNpZ25lZCBpbnQgbWluLFxuLS1cbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtbWFwbGUuYy0xNTktXHRcdG1hc19sb2NrKFx1MDAyNm1hcyk7XG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLW1hcGxlLmM6MTYwOlx0XHRtYXNfZXJhc2UoXHUwMDI2bWFzKTtcbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtbWFwbGUuYy0xNjEtXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTUzMTE9c3RhdGljIHZvaWQgdWJsa19idWZfZXJhc2VfcmFuZ2VzKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsIGludCBidWZfaW5kZXgpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUzMTgtXHRcdGlmIChyYW5nZS1cdTAwM2VidWZfaW5kZXggPT0gYnVmX2luZGV4KSB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTMxOTpcdFx0XHRtYXNfZXJhc2UoXHUwMDI2bWFzKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MzIwLVx0XHRcdGtmcmVlKHJhbmdlKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTQ4MD1zdGF0aWMgYm9vbCBfX3VibGtfc2htZW1fcmVtb3ZlX3JhbmdlcyhzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NTA0LVx0XHRcdGdvdG8gdW5sb2NrO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU1MDU6XHRcdG1hc19lcmFzZShcdTAwMjZtYXMpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU1MDYtXHRcdGtmcmVlKHJhbmdlKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYz0zMjM9bm91dmVhdV91dm1hX3JlZ2lvbl9yZW1vdmUoc3RydWN0IG5vdXZlYXVfdXZtYV9yZWdpb24gKnJlZylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYy0zMjctXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYzozMjg6XHRtYXNfZXJhc2UoXHUwMDI2bWFzKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdXZtbS5jLTMyOS19XG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmM9MTk2Mj1ub3V2ZWF1X3V2bW1fZmluaShzdHJ1Y3Qgbm91dmVhdV91dm1tICp1dm1tKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdXZtbS5jLTE5OTAtXHRtYXNfZm9yX2VhY2goXHUwMDI2bWFzLCByZWcsIFVMT05HX01BWCkge1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmM6MTk5MTpcdFx0bWFzX2VyYXNlKFx1MDAyNm1hcyk7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYy0xOTkyLVx0XHRub3V2ZWF1X3V2bWFfcmVnaW9uX3NwYXJzZV91bnJlZihyZWcpO1xuLS1cbmRyaXZlcnMvaW9tbXUvZ2VuZXJpY19wdC9rdW5pdF9pb21tdV9wdC5oPTI4Nz1zdGF0aWMgdm9pZCB1bm1hcF9jb2xsaXNpb25zKHN0cnVjdCBrdW5pdCAqdGVzdCwgc3RydWN0IG1hcGxlX3RyZWUgKm10LFxuLS1cbmRyaXZlcnMvaW9tbXUvZ2VuZXJpY19wdC9rdW5pdF9pb21tdV9wdC5oLTI5OS1cbmRyaXZlcnMvaW9tbXUvZ2VuZXJpY19wdC9rdW5pdF9pb21tdV9wdC5oOjMwMDpcdFx0bWFzX2VyYXNlKFx1MDAyNm1hcyk7XG5kcml2ZXJzL2lvbW11L2dlbmVyaWNfcHQva3VuaXRfaW9tbXVfcHQuaC0zMDEtXHRcdG1hc19wYXVzZShcdTAwMjZtYXMpO1xuLS1cbmluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oPTU2MD12b2lkICptYXNfc3RvcmUoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5KTtcbmluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oOjU2MTp2b2lkICptYXNfZXJhc2Uoc3RydWN0IG1hX3N0YXRlICptYXMpO1xuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmgtNTYyLWludCBtYXNfc3RvcmVfZ2ZwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSwgZ2ZwX3QgZ2ZwKTtcbi0tXG5rZXJuZWwvaXJxL2lycWRlc2MuYz0xOTg9c3RhdGljIHZvaWQgZGVsZXRlX2lycV9kZXNjKHVuc2lnbmVkIGludCBpcnEpXG4tLVxua2VybmVsL2lycS9pcnFkZXNjLmMtMjAwLVx0TUFfU1RBVEUobWFzLCBcdTAwMjZzcGFyc2VfaXJxcywgaXJxLCBpcnEpO1xua2VybmVsL2lycS9pcnFkZXNjLmM6MjAxOlx0bWFzX2VyYXNlKFx1MDAyNm1hcyk7XG5rZXJuZWwvaXJxL2lycWRlc2MuYy0yMDItfVxuLS1cbmxpYi9tYXBsZV90cmVlLmM9NTY4ND1FWFBPUlRfU1lNQk9MX0dQTChtYXNfZmluZF9yYW5nZV9yZXYpO1xuLS1cbmxpYi9tYXBsZV90cmVlLmMtNTY4Ni0vKipcbmxpYi9tYXBsZV90cmVlLmM6NTY4NzogKiBtYXNfZXJhc2UoKSAtIEZpbmQgdGhlIHJhbmdlIGluIHdoaWNoIGluZGV4IHJlc2lkZXMgYW5kIGVyYXNlIHRoZSBlbnRpcmVcbmxpYi9tYXBsZV90cmVlLmMtNTY4OC0gKiByYW5nZS5cbi0tXG5saWIvbWFwbGVfdHJlZS5jLTU3MDAtICovXG5saWIvbWFwbGVfdHJlZS5jOjU3MDE6dm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxubGliL21hcGxlX3RyZWUuYy01NzAyLXtcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTU3MzktfVxubGliL21hcGxlX3RyZWUuYzo1NzQwOkVYUE9SVF9TWU1CT0xfR1BMKG1hc19lcmFzZSk7XG5saWIvbWFwbGVfdHJlZS5jLTU3NDEtXG4tLVxubGliL21hcGxlX3RyZWUuYz02MDc0PXZvaWQgKm10cmVlX2VyYXNlKHN0cnVjdCBtYXBsZV90cmVlICptdCwgdW5zaWduZWQgbG9uZyBpbmRleClcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTYwODEtXHRtdHJlZV9sb2NrKG10KTtcbmxpYi9tYXBsZV90cmVlLmM6NjA4MjpcdGVudHJ5ID0gbWFzX2VyYXNlKFx1MDAyNm1hcyk7XG5saWIvbWFwbGVfdHJlZS5jLTYwODMtXHRtdHJlZV91bmxvY2sobXQpO1xuLS1cbmxpYi90ZXN0X21hcGxlX3RyZWUuYz0zODc9c3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGNoZWNrX2ZpbmQoc3RydWN0IG1hcGxlX3RyZWUgKm10KVxuLS1cbmxpYi90ZXN0X21hcGxlX3RyZWUuYy01NzgtXHRtYXMubGFzdCA9IFVMT05HX01BWDtcbmxpYi90ZXN0X21hcGxlX3RyZWUuYzo1Nzk6XHRtYXNfZXJhc2UoXHUwMDI2bWFzKTtcbmxpYi90ZXN0X21hcGxlX3RyZWUuYy01ODAtXG4tLVxubW0vYWxsb2NfdGFnLmM9MzczPXN0YXRpYyB2b2lkIGNsZWFuX3VudXNlZF9tb2R1bGVfYXJlYXNfbG9ja2VkKHZvaWQpXG4tLVxubW0vYWxsb2NfdGFnLmMtMzg4LVx0XHRpZiAoY2xlYW5fdW51c2VkX2NvdW50ZXJzKHN0YXJ0X3RhZywgZW5kX3RhZykpXG5tbS9hbGxvY190YWcuYzozODk6XHRcdFx0bWFzX2VyYXNlKFx1MDAyNm1hcyk7XG5tbS9hbGxvY190YWcuYy0zOTAtXHR9XG4tLVxubW0vYWxsb2NfdGFnLmM9NDg0PXN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxuLS1cbm1tL2FsbG9jX3RhZy5jLTUzMy1cdFx0XHRtYXMuaW5kZXggPSBwYWRfc3RhcnQ7XG5tbS9hbGxvY190YWcuYzo1MzQ6XHRcdFx0bWFzX2VyYXNlKFx1MDAyNm1hcyk7XG5tbS9hbGxvY190YWcuYy01MzUtXHRcdFx0cmV0ID0gRVJSX1BUUih4YV9lcnIobWFzLm5vZGUpKTtcbi0tXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYz0zNTkwMj1zdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfZXJhc2VfcmViYWxhbmNlKHN0cnVjdCBtYXBsZV90cmVlICptdClcbi0tXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYy0zNTk0Ny1cdHdoaWxlIChtYXNfZGF0YV9lbmQoXHUwMDI2bWFzKSBcdTAwM2UgNikge1xudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmM6MzU5NDg6XHRcdG1hc19lcmFzZShcdTAwMjZtYXMpO1xudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMtMzU5NDktXHRcdG1hc19uZXh0KFx1MDAyNm1hcywgVUxPTkdfTUFYKTtcbi0tXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYy0zNTk1OS1cdHdoaWxlIChtYXNfZGF0YV9lbmQoXHUwMDI2bWFzKSBcdTAwM2UgOSkge1xudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmM6MzU5NjA6XHRcdG1hc19lcmFzZShcdTAwMjZtYXMpO1xudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMtMzU5NjEtXHRcdG1hc19uZXh0KFx1MDAyNm1hcywgVUxPTkdfTUFYKTtcbi0tXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYy0zNTk2OS1cdFx0bWFzX3NldChcdTAwMjZtYXMsIHZhbCk7XG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYzozNTk3MDpcdFx0bWFzX2VyYXNlKFx1MDAyNm1hcyk7XG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYy0zNTk3MS1cdFx0bWFzX3ByZXYoXHUwMDI2bWFzLCAwKTtcbi0tXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYz0zNjIwMD1zdGF0aWMgdm9pZCBjaGVja19jb2xsYXBzaW5nX3JlYmFsYW5jZShzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQpXG4tLVxudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMtMzYyMTItXHRkbyB7XG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYzozNjIxMzpcdFx0bWFzX2VyYXNlKFx1MDAyNm1hcyk7XG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYy0zNjIxNC1cdH0gd2hpbGUgKG1hc19wcmV2KFx1MDAyNm1hcywgMCkgIT0gTlVMTCk7XG4tLVxudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmM9MzYyNDA9c3RhdGljIHZvaWQgY2hlY2tfbm9tZW1fd3JpdGVyX3JhY2Uoc3RydWN0IG1hcGxlX3RyZWUgKm10KVxuLS1cbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jLTM2MjU1LVx0LyogZXJhc2UgMC01ICovXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYzozNjI1NjpcdG1hc19lcmFzZShcdTAwMjZtYXMpO1xudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMtMzYyNTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NjcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxODExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1hcGxlIFRyZWUgTG9ja2RlcCBhbmQgU3RvcmUgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2gsIGFuZCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGNoYW5nZXMuIFRoZSBpbml0aWFsIGFkZGl0aW9uIG9mIGBtYXNfbG9ja19jaGVja2AsIGBtYXNfaW5pdF9sb2NrX2NoZWNrYCwgYW5kIGBtYXNfbWF5X2luaXRfbG9ja19jaGVja2AsIGFsbCBsZXZlcmFnaW5nIGBsb2NrX3NlcXVlbmNlYCwgYXJlIGNsZWFybHkgYWJvdXQgaW50ZWdyYXRpbmcgbG9ja2RlcCBpbnRvIHRoZSBNYXBsZSBUcmVlLiBUaGlzIGlzIGEgc29saWQgbW92ZSBmb3IgaW1wcm92aW5nIGRlYnVnZ2luZyBhbmQgZW5zdXJpbmcgcHJvcGVyIGxvY2tpbmcgYmVoYXZpb3IsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBsaWtlIHRoaXMuICBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYENPTkZJR19MT0NLREVQYCBhbmQgcG90ZW50aWFsbHkgYENPTkZJR19QUk9WRV9MT0NLSU5HYCAod2hpY2ggZW5hYmxlcyBgTE9DS0RFUGApIGFuZCBgQ09ORklHX0RFQlVHX01BUExFX1RSRUVgICh3aGljaCBkZXBlbmRzIG9uIGBERUJVR19LRVJORUxgKSB3aWxsIGJlIGVzc2VudGlhbCBmb3IgdGVzdGluZyB0aGlzIHByb3Blcmx5LgoKVGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcywgaG93ZXZlciwgc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiBvcHRpbWl6aW5nIHRoZSBgbWFzX3dyX25vZGVfc3RvcmVgIGFuZCBgbWFzX3dyX3N0b3JlX3R5cGVgIGZ1bmN0aW9ucy4gIEluIGBtYXNfd3Jfbm9kZV9zdG9yZWAsIGluc3RlYWQgb2YgYSBmdWxsIGBtZW1zZXRgIG9uIGByZXVzZWAgZm9yIHRoZSBuZXcgbm9kZSwgdGhlcmUmIzM5O3MgYSBtb3JlIHRhcmdldGVkIGNsZWFyaW5nIG9mIHVudXNlZCBzbG90cyBhbmQgcGl2b3RzIGF0IHRoZSBlbmQgb2YgdGhlIG5vZGUuICBUaGlzIGxvb2tzIGxpa2UgYSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBieSByZWR1Y2luZyB1bm5lY2Vzc2FyeSBtZW1vcnkgd3JpdGVzLCB3aGljaCBpcyBhbHdheXMgd2VsY29tZS4gIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgbm9kZV9zbG90c2AgYW5kIGBub2RlX3Bpdm90c2AgdmFyaWFibGVzIGhlcmUsIHRvIGJlIHN1cmUgdGhpcyBpcyBjb3JyZWN0LgoKYG1hc193cl9zdG9yZV90eXBlYCBpcyBhbHNvIG1vZGlmaWVkLCB0byBtb3JlIGludGVsbGlnZW50bHkgY2xhc3NpZnkgc3RvcmUgdHlwZXMuICBUaGVyZSYjMzk7cyBhZGRlZCBsb2dpYyB0byBkZXRlcm1pbmUgaWYgdGhlIHN0b3JlIGlzIGFuIGFwcGVuZCwgYSBzbG90IHN0b3JlLCBvciByZWJhbGFuY2UgYmFzZWQgb24gZmFjdG9ycyBsaWtlIG5ld19lbmQsIGBpbl9yY3VgLCBgYXBwZW5kaW5nYCwgYW5kIGBvbmVfc2xvdGAuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgZm9yIHBlcmZvcm1hbmNlLCBhbmQgdGhlIGNvZGUgbG9va3MgbGlrZSBpdCBtYWtlcyB0aGVzZSBuZXcgY2hlY2tzIHByb3Blcmx5LiBJIHdpbGwgbmVlZCB0byByZWFsbHkgZm9jdXMgb24gdGhpcyBjb2RlIHNlY3Rpb24gZm9yIHRlc3RpbmcuIEkgYWxzbyBzZWUgdGhleSBoYXZlIGFsc28gbW9kaWZpZWQgYG1hc19hbGxvY19jeWNsaWNgLCBhbmQgYW0gbm90IHN1cmUgaWYgaXQgaXMgYSBzaWRlIGVmZmVjdCBvZiB0aGUgb3RoZXIgY2hhbmdlcy4KClRoZSBtb2RpZmljYXRpb25zIHRvIGBtYXNfZXJhc2VgIGFyZSBpbnRlcmVzdGluZywgd2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlIGBtaWdodF9hbGxvY2AgY2FsbCB3aXRoaW4gYW4gZXh0ZXJuYWwgbG9jayBjaGVjay4gVGhpcyBpcyBkZXNpZ25lZCBmb3IgbG93LW1lbW9yeSBzaXR1YXRpb25zLCBhbmQgdGhpcyBsb29rcyBsaWtlIGEgcmVhc29uYWJsZSBhcHByb2FjaC4gSSBuZWVkIHRvIG1ha2UgYSBub3RlIG9mIHRoaXMuCgpGaW5hbGx5LCB0aGUgY2hhbmdlcyB0byBgbWFzX25vbWVtYCBhcmUgYWxzbyBpbXBvcnRhbnQuIFRoZSBgV0FSTl9PTl9PTkNFYCBhbmQgdGhlIGxvZ2ljIGFyb3VuZCBleHRlcm5hbCBsb2NrcyBhbmQgYmxvY2tpbmcgR0ZQIGZsYWdzIGlzIGNydWNpYWwgZm9yIHByZXZlbnRpbmcgZGVhZGxvY2tzIGFuZCBoYW5kbGluZyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBncmFjZWZ1bGx5LiBUaGUgbmV3IGBtYXNfcmVzZXQobWFzKWAgY2FsbCBpcyBhZGRlZCB0byBoYW5kbGUgdGhpcy4KClNvLCBvdmVyYWxsLCB0aGVzZSBwYXRjaGVzIGFyZSBmb2N1c2VkIG9uIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBhbmQgcm9idXN0bmVzcy4gVGhlIG9wdGltaXphdGlvbiBvZiBtZW1vcnkgd3JpdGVzIGluIHRoZSBub2RlIHN0b3JlIGlzIGdvb2QsIGFuZCB0aGUgaW1wcm92ZWQgc3RvcmUgdHlwZSBkZXRlcm1pbmF0aW9uIGxvb2tzIGJlbmVmaWNpYWwuIExvY2tkZXAgaW50ZWdyYXRpb24gaXMgYSBzb2xpZCBhZGRpdGlvbiwgYW5kIHRoZSBsb3ctbWVtb3J5IGhhbmRsaW5nIHNlZW1zIHdlbGwgdGhvdWdodCBvdXQuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGBtYXNfd3Jfbm9kZV9zdG9yZWAsIGBtYXNfd3Jfc3RvcmVfdHlwZWAsIGBtYXNfYWxsb2NfY3ljbGljYCwgYG1hc19lcmFzZWAsIGFuZCBgbWFzX25vbWVtYC4gSSB3aWxsIGFsc28gaGF2ZSB0byBhZGQgYG1hc19zZXRfcGFyZW50X3Nsb3RzYCBhbmQgYG1hc191cGRhdGVfZ2FwX2tub3duYCB0byBteSBmdXp6IGxpc3QgdG8gbWFrZSBzdXJlIEkgY292ZXIgYWxsIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hc19zZXRfcGFyZW50X3Nsb3RzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9tYXBsZV90cmVlLmM9NDY5PXZvaWQgbWFzX3NldF9wYXJlbnQoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUsXG4tLVxubGliL21hcGxlX3RyZWUuYy00OTktLypcbmxpYi9tYXBsZV90cmVlLmM6NTAwOiAqIG1hc19zZXRfcGFyZW50X3Nsb3RzKCkgLSBCdWxrIG9wZXJhdGlvbiB0byBzZXQgbWFueSBzbG90IHBhcmVudCBwb2ludGVyc1xubGliL21hcGxlX3RyZWUuYy01MDEtICogQG1hczogVGhlIG1hcGxlIHN0YXRlXG4tLVxubGliL21hcGxlX3RyZWUuYz01MDc9c3RhdGljIGlubGluZVxubGliL21hcGxlX3RyZWUuYzo1MDg6dm9pZCBtYXNfc2V0X3BhcmVudF9zbG90cyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICpwYXJlbnQsXG5saWIvbWFwbGVfdHJlZS5jLTUwOS1cdHZvaWQgX19yY3UgKipzbG90cywgdW5zaWduZWQgY2hhciBzdGFydF9zbG90LCB1bnNpZ25lZCBjaGFyIGNvdW50KVxuLS1cbmxpYi9tYXBsZV90cmVlLmM9MTY0Mz1zdGF0aWMgaW5saW5lIHZvaWQgbWFzX2Fkb3B0X2NoaWxkcmVuKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLFxuLS1cbmxpYi9tYXBsZV90cmVlLmMtMTY1Mi1cdGVuZCA9IG1hX2RhdGFfZW5kKG5vZGUsIHR5cGUsIHBpdm90cywgbWFzLVx1MDAzZW1heCk7XG5saWIvbWFwbGVfdHJlZS5jOjE2NTM6XHRtYXNfc2V0X3BhcmVudF9zbG90cyhtYXMsIHBhcmVudCwgc2xvdHMsIDAsIGVuZCAmIzQzOyAxKTtcbmxpYi9tYXBsZV90cmVlLmMtMTY1NC19XG4tLVxubGliL21hcGxlX3RyZWUuYz0yMDIwPXVuc2lnbmVkIGxvbmcgbm9kZV9jb3B5KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfbm9kZSAqc3JjLFxuLS1cbmxpYi9tYXBsZV90cmVlLmMtMjAzNi1cdGlmICghbWFfaXNfbGVhZihkX210KSBcdTAwMjZcdTAwMjYgc19tdCA9PSBtYXBsZV9jb3B5KVxubGliL21hcGxlX3RyZWUuYzoyMDM3Olx0XHRtYXNfc2V0X3BhcmVudF9zbG90cyhtYXMsIG10X21rX25vZGUoZHN0LCBkX210KSxcbmxpYi9tYXBsZV90cmVlLmMtMjAzOC1cdFx0XHRcdCAgICAgZF9zbG90cywgZF9zdGFydCwgc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTU3CgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDkzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgRm9jdXMgZm9yIE1hcGxlIFRyZWUgTG9jayBTZXF1ZW5jZSBWYWxpZGF0aW9uIGFuZCBPcHRpbWl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjb25zaWRlciB0aGUgZm9sbG93aW5nIHN5bWJvbHMsIHBhcnRpY3VsYXJseSBnaXZlbiB0aGUgY29udGV4dCBvZiBsb2NrIHNlcXVlbmNlIHZhbGlkYXRpb24gYW5kIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIE1hcGxlIFRyZWU6IGBtYXNfd3Jfbm9kZV9zdG9yZWAsIGBtYXNfd3Jfc3RvcmVfdHlwZWAsIGBtYXNfYWxsb2NfY3ljbGljYCwgYG1hc19lcmFzZWAsIGBtYXNfbm9tZW1gLCBgbWFzX3NldF9wYXJlbnRfc2xvdHNgLCBgbWFzX3VwZGF0ZV9nYXBfa25vd25gLCBgbWFzX2xvY2tfY2hlY2tgLCBgbWFzX2luaXRfbG9ja19jaGVja2AsIGFuZCBgbWFzX21heV9pbml0X2xvY2tfY2hlY2tgLiBIb3dldmVyLCBzaW5jZSBzb21lIGFyZSBgc3RhdGljYCBvciBgc3RhdGljIGlubGluZWAsIHRoZXkgbWlnaHQgYmUgaW5saW5lZCwgc28gdGhleSYjMzk7cmUgbm90IHVzZWZ1bCBlbnRyeSBwb2ludHMgZm9yIGFuYWx5c2lzLgoKSSBrbm93IHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgbG9jayBzZXF1ZW5jZSB2YWxpZGF0aW9uIHVzaW5nIGBsb2NrZGVwYCwgb3B0aW1pemluZyBzdG9yZSBvcGVyYXRpb25zLCBhbmQgZml4aW5nIHdyYXAtYXJvdW5kIGluIG1lbW9yeSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIE1hcGxlIFRyZWUgaW1wbGVtZW50YXRpb24uCgpTbywgSSBkZWNpZGVkIHRvIGZvY3VzIG9uIHRoZSBmb2xsb3dpbmcgbm9uLWlubGluZSBvciBleHBvcnRlZCBmdW5jdGlvbnM6IGBtYXNfYWxsb2NfY3ljbGljYCwgYG1hc19lcmFzZWAsIGBtdHJlZV9lcmFzZWAsIGBtYXNfbm9tZW1gLCBhbmQgYGxvY2tfc2VxdWVuY2VgLiBJIGFsc28gaW5pdGlhbGx5IGlkZW50aWZpZWQgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGxpa2UgYG1hc19zdG9yZWAsIGBtYXNfc3RvcmVfZ2ZwYCwgYG1hc19zdG9yZV9wcmVhbGxvY2AsIGFuZCBgbWFzX3ByZWFsbG9jYXRlYCwgYnV0IHRoZXNlIGFyZSBsaWtlbHkgaG90IHBhdGggZnVuY3Rpb25zLiBBdm9pZGluZyBob3QgcGF0aHMgaXMgaW1wb3J0YW50IGhlcmUuIFNvLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBJIGp1c3QgbGlzdGVkOiBgbWFzX2FsbG9jX2N5Y2xpY2AsIGBtYXNfZXJhc2VgLCBgbXRyZWVfZXJhc2VgLCBgbWFzX25vbWVtYCwgYW5kIGBsb2NrX3NlcXVlbmNlYC4KCkkmIzM5O20gdmVyaWZ5aW5nIHRoYXQgYG1hc19hbGxvY19jeWNsaWNgIGlzIHVzZWQgaW4gYG10cmVlX2FsbG9jX2N5Y2xpY2AsIGBtYXNfZXJhc2VgIGlzIHVzZWQgaW4gYG10cmVlX2VyYXNlYCBhbmQgYSBmZXcgZHJpdmVycywgYW5kIGBtYXNfbm9tZW1gIGlzIHVzZWQgaW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBjYXNlcy4gVGhlIGNvbmZpZ3VyYXRpb25zIG9mIGludGVyZXN0IGFyZSBgREVCVUdfTUFQTEVfVFJFRWAsIGBQUk9WRV9MT0NLSU5HYCwgYW5kIGBMT0NLREVQYC4gVGhlc2UgZnVuY3Rpb25zIGFuZCBjb25maWdzIHJlcHJlc2VudCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGRldGFpbGVkIGluc3BlY3Rpb24gYW5kIHBvc3NpYmxlIGZ1enppbmcgZWZmb3J0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDQ6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX01BUExFX1RSRUUmIzM0OywKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtMT0NLREVQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFzX2FsbG9jX2N5Y2xpYyYjMzQ7LAogICAgJiMzNDttYXNfZXJhc2UmIzM0OywKICAgICYjMzQ7bXRyZWVfZXJhc2UmIzM0OywKICAgICYjMzQ7bWFzX25vbWVtJiMzNDssCiAgICAmIzM0O2xvY2tfc2VxdWVuY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBsb2NrIHNlcXVlbmNlIHZhbGlkYXRpb24gZm9yIG1hcGxlIHRyZWUgb3BlcmF0aW9ucyB1c2luZyBsb2NrZGVwLCBhbmQgb3B0aW1pemVzIG1hcGxlIHRyZWUgbm9kZSBzdG9yZSBvcGVyYXRpb25zIGFuZCBwYXJlbnQgcG9pbnRlciB1cGRhdGVzLiBJdCBhbHNvIGZpeGVzIHdyYXAtYXJvdW5kIGhhbmRsaW5nIGluIGBtYXNfYWxsb2NfY3ljbGljYCBhbmQgbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IgaW4gYG1hc19lcmFzZWAgYW5kIGBtYXNfbm9tZW1gLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGRhdGEgc3RydWN0dXJlcyBhbmQgbG9ja2luZyB2YWxpZGF0aW9uLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVCVUdfTUFQTEVfVFJFRSYjMzQ7LAogICAgJiMzNDtQUk9WRV9MT0NLSU5HJiMzNDssCiAgICAmIzM0O0xPQ0tERVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYXNfYWxsb2NfY3ljbGljJiMzNDssCiAgICAmIzM0O21hc19lcmFzZSYjMzQ7LAogICAgJiMzNDttdHJlZV9lcmFzZSYjMzQ7LAogICAgJiMzNDttYXNfbm9tZW0mIzM0OywKICAgICYjMzQ7bG9ja19zZXF1ZW5jZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvY2sgc2VxdWVuY2UgdmFsaWRhdGlvbiBmb3IgbWFwbGUgdHJlZSBvcGVyYXRpb25zIHVzaW5nIGxvY2tkZXAsIGFuZCBvcHRpbWl6ZXMgbWFwbGUgdHJlZSBub2RlIHN0b3JlIG9wZXJhdGlvbnMgYW5kIHBhcmVudCBwb2ludGVyIHVwZGF0ZXMuIEl0IGFsc28gZml4ZXMgd3JhcC1hcm91bmQgaGFuZGxpbmcgaW4gYG1hc19hbGxvY19jeWNsaWNgIGFuZCBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBpbiBgbWFzX2VyYXNlYCBhbmQgYG1hc19ub21lbWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDJUMDQ6MjM6NDYuNTQwMTE1NjY2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5NjMwNzYxMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVCVUdfTUFQTEVfVFJFRVwiLFxuICAgIFwiUFJPVkVfTE9DS0lOR1wiLFxuICAgIFwiTE9DS0RFUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hc19hbGxvY19jeWNsaWNcIixcbiAgICBcIm1hc19lcmFzZVwiLFxuICAgIFwibXRyZWVfZXJhc2VcIixcbiAgICBcIm1hc19ub21lbVwiLFxuICAgIFwibG9ja19zZXF1ZW5jZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbG9jayBzZXF1ZW5jZSB2YWxpZGF0aW9uIGZvciBtYXBsZSB0cmVlIG9wZXJhdGlvbnMgdXNpbmcgbG9ja2RlcCwgYW5kIG9wdGltaXplcyBtYXBsZSB0cmVlIG5vZGUgc3RvcmUgb3BlcmF0aW9ucyBhbmQgcGFyZW50IHBvaW50ZXIgdXBkYXRlcy4gSXQgYWxzbyBmaXhlcyB3cmFwLWFyb3VuZCBoYW5kbGluZyBpbiBgbWFzX2FsbG9jX2N5Y2xpY2AgYW5kIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yIGluIGBtYXNfZXJhc2VgIGFuZCBgbWFzX25vbWVtYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvY2tpbmcgdmFsaWRhdGlvbiwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA0OjIzOjQ2LjU0MDEyMDkzNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxNDM2NzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjVhYWU2ODFjNzNkYWU3ZmVhYWIwMTNjMTYwOTUyNjljMDFmYWJhYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyIDA0OjIzOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0XFxuaW5kZXggY2NkZDE2MTVjZjk3NGYuLjFlYWUyNGE5YzE4YjRhIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0XFxuQEAgLTE3LDcgKzE3LDggQEAgc3VwcG9ydHMgaXRlcmF0aW5nIG92ZXIgYSByYW5nZSBvZiBlbnRyaWVzIGFuZCBnb2luZyB0byB0aGUgcHJldmlvdXMgb3IgbmV4dFxcbiBlbnRyeSBpbiBhIGNhY2hlLWVmZmljaWVudCBtYW5uZXIuICBUaGUgdHJlZSBjYW4gYWxzbyBiZSBwdXQgaW50byBhbiBSQ1Utc2FmZVxcbiBtb2RlIG9mIG9wZXJhdGlvbiB3aGljaCBhbGxvd3MgcmVhZGluZyBhbmQgd3JpdGluZyBjb25jdXJyZW50bHkuICBXcml0ZXJzIG11c3RcXG4gc3luY2hyb25pemUgb24gYSBsb2NrLCB3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQgc3BpbmxvY2ssIG9yIHRoZSB1c2VyIGNhbiBzZXRcXG4tdGhlIGxvY2sgdG8gYW4gZXh0ZXJuYWwgbG9jayBvZiBhIGRpZmZlcmVudCB0eXBlLlxcbit0aGUgbG9jayB0byBhbiBleHRlcm5hbCBsb2NrIG9mIGEgZGlmZmVyZW50IHR5cGUuICBOb3RlIHRoYXQgZXh0ZXJuYWwgbG9ja3MgbWF5XFxuK2ludGVyZmVyZSB3aXRoIGFsbG9jYXRpb25zIGluIGEgbG93IG1lbW9yeSBzaXR1YXRpb24uXFxuIFxcbiBUaGUgTWFwbGUgVHJlZSBtYWludGFpbnMgYSBzbWFsbCBtZW1vcnkgZm9vdHByaW50IGFuZCB3YXMgZGVzaWduZWQgdG8gdXNlXFxuIG1vZGVybiBwcm9jZXNzb3IgY2FjaGUgZWZmaWNpZW50bHkuICBUaGUgbWFqb3JpdHkgb2YgdGhlIHVzZXJzIHdpbGwgYmUgYWJsZSB0b1xcbkBAIC00Miw2ICs0MywxNSBAQCBzdWNjZXNzZnVsIHN0b3JlIG9wZXJhdGlvbiB3aXRoaW4gYSBnaXZlblxcbiBjb2RlIHNlZ21lbnQgd2hlbiBhbGxvY2F0aW5nIGNhbm5vdCBiZSBkb25lLiAgQWxsb2NhdGlvbnMgb2Ygbm9kZXMgYXJlXFxuIHJlbGF0aXZlbHkgc21hbGwgYXQgYXJvdW5kIDI1NiBieXRlcy5cXG4gXFxuK1NpbmNlIHRoZSBtYXBsZSB0cmVlIHVzZXMgaW50ZXJuYWwgbm9kZXMgdGhhdCBhcmUgYWxsb2NhdGVkIGFuZCBoYXMgcnVsZXMgb25cXG4rZGF0YSBkZW5zaXR5LCBlcmFzaW5nIGFuIGVudHJ5IG1heSBjYXVzZSBhbGxvY2F0aW9ucyB0byBvY2N1ci4gIFRoYXQgaXMsXFxuK2VyYXNpbmcgYW4gZW50cnkgbWF5IGNvbnN1bWUgbWVtb3J5LiAgVXNlcnMgbXVzdCB0YWtlIGNhcmUgdG8gZW5zdXJlIHRoYXQgdGhleVxcbitkbyBub3QgdmlvbGF0ZSB0aGUgbGFyZ2VyIHN5c3RlbSBjb25zdHJhaW50cyBvbiB3aGVuIGFuZCBob3cgbWVtb3J5IGlzXFxuK2FsbG9jYXRlZC4gIE1vc3Qgc2l0dWF0aW9ucyBhcmUgZmluZSB0byBhbGxvY2F0ZSwgYnV0IHRoZSBwcmUtYWxsb2NhdGlvblxcbitzdXBwb3J0IGlzIHByb3ZpZGVkIGFzIGEgbWVjaGFuaXNtIHRvIGF2b2lkIHRyaWNraWVyIHNpdHVhdGlvbnMuICBUaGVyZSBpcyBhbHNvXFxuK3RoZSBwb3NzaWJpbGl0eSBvZiB1c2luZyBzcGVjaWFsIGVudHJpZXMgYW5kIGNsZWFuIHVwIHRoZSB0cmVlIGxhdGVyLCBpblxcbitleHRyZW1lIGNpcmN1bXN0YW5jZXMuXFxuK1xcbiAuLiBfbWFwbGUtdHJlZS1ub3JtYWwtYXBpOlxcbiBcXG4gTm9ybWFsIEFQSVxcbkBAIC02Myw3ICs3Myw4IEBAIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UuICBtdHJlZV9zdG9yZV9yYW5nZSgpIHdvcmtzIGluIHRoZSBzYW1lIHdheVxcbiBidXQgdGFrZXMgYSByYW5nZS4gIG10cmVlX2xvYWQoKSBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBlbnRyeSBzdG9yZWQgYXQgYVxcbiBnaXZlbiBpbmRleC4gIFlvdSBjYW4gdXNlIG10cmVlX2VyYXNlKCkgdG8gZXJhc2UgYW4gZW50aXJlIHJhbmdlIGJ5IG9ubHlcXG4ga25vd2luZyBvbmUgdmFsdWUgd2l0aGluIHRoYXQgcmFuZ2UsIG9yIG10cmVlX3N0b3JlKCkgY2FsbCB3aXRoIGFuIGVudHJ5IG9mXFxuLU5VTEwgbWF5IGJlIHVzZWQgdG8gcGFydGlhbGx5IGVyYXNlIGEgcmFuZ2Ugb3IgbWFueSByYW5nZXMgYXQgb25jZS5cXG4rTlVMTCBtYXkgYmUgdXNlZCB0byBwYXJ0aWFsbHkgZXJhc2UgYSByYW5nZSBvciBtYW55IHJhbmdlcyBhdCBvbmNlLiAgTm90ZSB0aGF0XFxuK210cmVlX2VyYXNlKCkgbWF5IHVzZSBHRlBfS0VSTkVMIG9uIGFsbG9jYXRpb25zLlxcbiBcXG4gSWYgeW91IHdhbnQgdG8gb25seSBzdG9yZSBhIG5ldyBlbnRyeSB0byBhIHJhbmdlIChvciBpbmRleCkgaWYgdGhhdCByYW5nZSBpc1xcbiBjdXJyZW50bHkgYGBOVUxMYGAsIHlvdSBjYW4gdXNlIG10cmVlX2luc2VydF9yYW5nZSgpIG9yIG10cmVlX2luc2VydCgpIHdoaWNoXFxuQEAgLTE2Myw3ICsxNzQsOSBAQCBZb3UgY2FuIHVzZSBtYXNfZXJhc2UoKSB0byBlcmFzZSBhbiBlbnRpcmUgcmFuZ2UgYnkgc2V0dGluZyBpbmRleCBhbmRcXG4gbGFzdCBvZiB0aGUgbWFwbGUgc3RhdGUgdG8gdGhlIGRlc2lyZWQgcmFuZ2UgdG8gZXJhc2UuICBUaGlzIHdpbGwgZXJhc2VcXG4gdGhlIGZpcnN0IHJhbmdlIHRoYXQgaXMgZm91bmQgaW4gdGhhdCByYW5nZSwgc2V0IHRoZSBtYXBsZSBzdGF0ZSBpbmRleFxcbiBhbmQgbGFzdCBhcyB0aGUgcmFuZ2UgdGhhdCB3YXMgZXJhc2VkIGFuZCByZXR1cm4gdGhlIGVudHJ5IHRoYXQgZXhpc3RlZFxcbi1hdCB0aGF0IGxvY2F0aW9uLlxcbithdCB0aGF0IGxvY2F0aW9uLiAgTm90ZSB0aGF0IG1hc19lcmFzZSgpIG1heSBhbGxvY2F0ZSB3aXRoIHRoZSBHRlBfS0VSTkVMIGZsYWcuXFxuK0lmIHRoaXMgaXMgbm90IG9rYXksIGNvbnNpZGVyIHVzaW5nIG1hc19zdG9yZV9nZnAoKSBhbmQgcGFzcyBpdCBhIGBgTlVMTGBgLFxcbithZnRlciBzZXR0aW5nIHVwIHRoZSBjb3JyZWN0IHJhbmdlIGJ5IHdhbGtpbmcgdG8gdGhlIGVudHJ5LlxcbiBcXG4gWW91IGNhbiB3YWxrIGVhY2ggZW50cnkgd2l0aGluIGEgcmFuZ2UgYnkgdXNpbmcgbWFzX2Zvcl9lYWNoKCkuICBJZiB5b3Ugd2FudFxcbiB0byB3YWxrIGVhY2ggZWxlbWVudCBvZiB0aGUgdHJlZSB0aGVuIGBgMGBgIGFuZCBgYFVMT05HX01BWGBgIG1heSBiZSB1c2VkIGFzXFxuQEAgLTIxMSw3ICsyMjQsNyBAQCBBZHZhbmNlZCBMb2NraW5nXFxuIFxcbiBUaGUgbWFwbGUgdHJlZSB1c2VzIGEgc3BpbmxvY2sgYnkgZGVmYXVsdCwgYnV0IGV4dGVybmFsIGxvY2tzIGNhbiBiZSB1c2VkIGZvclxcbiB0cmVlIHVwZGF0ZXMgYXMgd2VsbC4gIFRvIHVzZSBhbiBleHRlcm5hbCBsb2NrLCB0aGUgdHJlZSBtdXN0IGJlIGluaXRpYWxpemVkXFxuLXdpdGggdGhlIGBgTVRfRkxBR1NfTE9DS19FWFRFUk4gZmxhZ2BgLCB0aGlzIGlzIHVzdWFsbHkgZG9uZSB3aXRoIHRoZVxcbit3aXRoIHRoZSBgYE1UX0ZMQUdTX0xPQ0tfRVhURVJOYGAgZmxhZywgdGhpcyBpcyB1c3VhbGx5IGRvbmUgd2l0aCB0aGVcXG4gTVRSRUVfSU5JVF9FWFQoKSAjZGVmaW5lLCB3aGljaCB0YWtlcyBhbiBleHRlcm5hbCBsb2NrIGFzIGFuIGFyZ3VtZW50LlxcbiBcXG4gRnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcXG5pbmRleCA2MjE1NjYzNDU0MDZkZC4uYTY0NTFlY2JiZTlhMDUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFxcbkBAIC0yNzMsNiArMjczLDkgQEAgZXh0ZXJuIHN0cnVjdCBwaW5fY29va2llIGxvY2tfcGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKTtcXG4gZXh0ZXJuIHZvaWQgbG9ja19yZXBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUpO1xcbiBleHRlcm4gdm9pZCBsb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSk7XFxuIFxcbitleHRlcm4gdTMyIGxvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKTtcXG4rI2RlZmluZSBsb2NrZGVwX3NlcXVlbmNlKGxvY2spXFx0bG9ja19zZXF1ZW5jZShcXHUwMDI2KGxvY2spLVxcdTAwM2VkZXBfbWFwKVxcbitcXG4gI2RlZmluZSBsb2NrZGVwX2RlcHRoKHRzaylcXHQoZGVidWdfbG9ja3MgPyAodHNrKS1cXHUwMDNlbG9ja2RlcF9kZXB0aCA6IDApXFxuIFxcbiAjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0KGNvbmQpXFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oXFxuaW5kZXggZWFlMTE1YTI2NDg4NTYuLjU1YzRiMTUyZmVkZjdjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmhcXG5AQCAtMjUzLDcgKzI1Myw4IEBAIHN0cnVjdCBoZWxkX2xvY2sge1xcbiBcXHR1bnNpZ25lZCBpbnQgaGFyZGlycXNfb2ZmOjE7XFxuIFxcdHVuc2lnbmVkIGludCBzeW5jOjE7XFxuIFxcdHVuc2lnbmVkIGludCByZWZlcmVuY2VzOjExO1xcdFxcdFxcdFxcdFxcdC8qIDMyIGJpdHMgKi9cXG4tXFx0dW5zaWduZWQgaW50IHBpbl9jb3VudDtcXG4rXFx0dW5zaWduZWQgaW50IHBpbl9jb3VudDoyNDtcXG4rXFx0dW5zaWduZWQgaW50IHNlcV9jb3VudDo4O1xcbiB9O1xcbiBcXG4gI2Vsc2UgLyogIUNPTkZJR19MT0NLREVQICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oIGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcXG5pbmRleCA0YTU2MzE5MDZhZmZiNS4uNWUwYmQyODU3ZDk0MWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaFxcbkBAIC0yOSwxMyArMjksMTEgQEBcXG4gI2RlZmluZSBNQVBMRV9OT0RFX1NMT1RTXFx0MzFcXHQvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC1cXHUwMDNlcGFyZW50ICovXFxuICNkZWZpbmUgTUFQTEVfUkFOR0U2NF9TTE9UU1xcdDE2XFx0LyogMjU2IGJ5dGVzICovXFxuICNkZWZpbmUgTUFQTEVfQVJBTkdFNjRfU0xPVFNcXHQxMFxcdC8qIDI0MCBieXRlcyAqL1xcbi0jZGVmaW5lIE1BUExFX0FMTE9DX1NMT1RTXFx0KE1BUExFX05PREVfU0xPVFMgLSAxKVxcbiAjZWxzZVxcbiAvKiAzMmJpdCBzaXplcyAqL1xcbiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFNcXHQ2M1xcdC8qIDI1NiBieXRlcyBpbmNsdWRpbmcgLVxcdTAwM2VwYXJlbnQgKi9cXG4gI2RlZmluZSBNQVBMRV9SQU5HRTY0X1NMT1RTXFx0MzJcXHQvKiAyNTYgYnl0ZXMgKi9cXG4gI2RlZmluZSBNQVBMRV9BUkFOR0U2NF9TTE9UU1xcdDIxXFx0LyogMjQwIGJ5dGVzICovXFxuLSNkZWZpbmUgTUFQTEVfQUxMT0NfU0xPVFNcXHQoTUFQTEVfTk9ERV9TTE9UUyAtIDIpXFxuICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR182NEJJVCkgfHwgZGVmaW5lZChCVUlMRF9WRFNPMzJfNjQpICovXFxuIFxcbiAjZGVmaW5lIE1BUExFX05PREVfTUFTS1xcdFxcdDI1NVVMXFxuQEAgLTQ4NSw2ICs0ODMsMTIgQEAgc3RydWN0IG1hX3N0YXRlIHtcXG4gXFx0dW5zaWduZWQgY2hhciBtYXNfZmxhZ3M7XFxuIFxcdHVuc2lnbmVkIGNoYXIgZW5kO1xcdFxcdC8qIFRoZSBlbmQgb2YgdGhlIG5vZGUgKi9cXG4gXFx0ZW51bSBzdG9yZV90eXBlIHN0b3JlX3R5cGU7XFx0LyogVGhlIHR5cGUgb2Ygc3RvcmUgbmVlZGVkIGZvciB0aGlzIG9wZXJhdGlvbiAqL1xcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4rXFx0dTMyIGxkX3NlcTtcXG4rI2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxcbitcXHR1bnNpZ25lZCBsb25nIHJjdV9ncDtcXG4rI2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xcbisjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi9cXG4gfTtcXG4gXFxuIHN0cnVjdCBtYV93cl9zdGF0ZSB7XFxuQEAgLTU3Miw3ICs1NzYsNyBAQCB2b2lkIG1hcGxlX3RyZWVfaW5pdCh2b2lkKTtcXG4gdm9pZCBtYXNfZGVzdHJveShzdHJ1Y3QgbWFfc3RhdGUgKm1hcyk7XFxuIFxcbiB2b2lkICptYXNfcHJldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pO1xcbi12b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xcbit2b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pO1xcbiB2b2lkICptYXNfbmV4dChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xcbiB2b2lkICptYXNfbmV4dF9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXFxuaW5kZXggMzczYmNjMDU5OGQxMGIuLjE0ZDVjZThkZDYxMzY1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxcbkBAIC0xMjg4LDYgKzEyODgsNyBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3Qge1xcbiBcXHR1NjRcXHRcXHRcXHRcXHRjdXJyX2NoYWluX2tleTtcXG4gXFx0aW50XFx0XFx0XFx0XFx0bG9ja2RlcF9kZXB0aDtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0XFx0bG9ja2RlcF9yZWN1cnNpb247XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdFxcdGxvY2tkZXBfc2VxO1xcbiBcXHRzdHJ1Y3QgaGVsZF9sb2NrXFx0XFx0aGVsZF9sb2Nrc1tNQVhfTE9DS19ERVBUSF07XFxuICNlbmRpZlxcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXFxuaW5kZXggMmQ0YzViYWI1YWY4ODcuLmIyYjBhNTA2OTYwYjE2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xcbisrKyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xcbkBAIC01MDc3LDcgKzUwNzcsNyBAQCBzdGF0aWMgaW50IF9fbG9ja19pc19oZWxkKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgaW50IHJlYWQpO1xcbiBzdGF0aWMgaW50IF9fbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLFxcbiBcXHRcXHRcXHQgIGludCB0cnlsb2NrLCBpbnQgcmVhZCwgaW50IGNoZWNrLCBpbnQgaGFyZGlycXNfb2ZmLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBsb2NrZGVwX21hcCAqbmVzdF9sb2NrLCB1bnNpZ25lZCBsb25nIGlwLFxcbi1cXHRcXHRcXHQgIGludCByZWZlcmVuY2VzLCBpbnQgcGluX2NvdW50LCBpbnQgc3luYylcXG4rXFx0XFx0XFx0ICBpbnQgcmVmZXJlbmNlcywgaW50IHBpbl9jb3VudCwgaW50IHN5bmMsIGludCBzZXEpXFxuIHtcXG4gXFx0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDtcXG4gXFx0c3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gTlVMTDtcXG5AQCAtNTE4Myw2ICs1MTgzLDcgQEAgc3RhdGljIGludCBfX2xvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcyxcXG4gXFx0aGxvY2stXFx1MDAzZWhvbGR0aW1lX3N0YW1wID0gbG9ja3N0YXRfY2xvY2soKTtcXG4gI2VuZGlmXFxuIFxcdGhsb2NrLVxcdTAwM2VwaW5fY291bnQgPSBwaW5fY291bnQ7XFxuK1xcdGhsb2NrLVxcdTAwM2VzZXFfY291bnQgPSBzZXE7XFxuIFxcbiBcXHRpZiAoY2hlY2tfd2FpdF9jb250ZXh0KGN1cnIsIGhsb2NrKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTUzODgsNyArNTM4OSw3IEBAIHN0YXRpYyBpbnQgcmVhY3F1aXJlX2hlbGRfbG9ja3Moc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCB1bnNpZ25lZCBpbnQgZGVwdGgsXFxuIFxcdFxcdFxcdFxcdCAgICBobG9jay1cXHUwMDNlcmVhZCwgaGxvY2stXFx1MDAzZWNoZWNrLFxcbiBcXHRcXHRcXHRcXHQgICAgaGxvY2stXFx1MDAzZWhhcmRpcnFzX29mZixcXG4gXFx0XFx0XFx0XFx0ICAgIGhsb2NrLVxcdTAwM2VuZXN0X2xvY2ssIGhsb2NrLVxcdTAwM2VhY3F1aXJlX2lwLFxcbi1cXHRcXHRcXHRcXHQgICAgaGxvY2stXFx1MDAzZXJlZmVyZW5jZXMsIGhsb2NrLVxcdTAwM2VwaW5fY291bnQsIDApKSB7XFxuK1xcdFxcdFxcdFxcdCAgICBobG9jay1cXHUwMDNlcmVmZXJlbmNlcywgaGxvY2stXFx1MDAzZXBpbl9jb3VudCwgMCwgaGxvY2stXFx1MDAzZXNlcV9jb3VudCkpIHtcXG4gXFx0XFx0Y2FzZSAwOlxcbiBcXHRcXHRcXHRyZXR1cm4gMTtcXG4gXFx0XFx0Y2FzZSAxOlxcbkBAIC01Njg0LDYgKzU2ODUsMjQgQEAgc3RhdGljIHZvaWQgX19sb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSBjb29raWVcXG4gXFx0V0FSTigxLCBcXFwidW5waW5uaW5nIGFuIHVuaGVsZCBsb2NrXFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIHUzMiBfX2xvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KCFkZWJ1Z19sb2NrcykpXFxuK1xcdFxcdHJldHVybiB+MDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjdXJyLVxcdTAwM2Vsb2NrZGVwX2RlcHRoOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGhlbGRfbG9jayAqaGxvY2sgPSBjdXJyLVxcdTAwM2VoZWxkX2xvY2tzICsgaTtcXG4rXFxuK1xcdFxcdGlmIChtYXRjaF9oZWxkX2xvY2soaGxvY2ssIGxvY2spKVxcbitcXHRcXHRcXHRyZXR1cm4gaGxvY2stXFx1MDAzZXNlcV9jb3VudDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIH4wO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBDaGVjayB3aGV0aGVyIHdlIGZvbGxvdyB0aGUgaXJxLWZsYWdzIHN0YXRlIHByZWNpc2VseTpcXG4gICovXFxuQEAgLTU4NjYsNyArNTg4NSw4IEBAIHZvaWQgbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLFxcbiBcXG4gXFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XFxuIFxcdF9fbG9ja19hY3F1aXJlKGxvY2ssIHN1YmNsYXNzLCB0cnlsb2NrLCByZWFkLCBjaGVjayxcXG4tXFx0XFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAwKTtcXG4rXFx0XFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAwLFxcbitcXHRcXHQgICAgICAgKytjdXJyZW50LVxcdTAwM2Vsb2NrZGVwX3NlcSk7XFxuIFxcdGxvY2tkZXBfcmVjdXJzaW9uX2ZpbmlzaCgpO1xcbiBcXHRyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbiB9XFxuQEAgLTU5MTQsNyArNTkzNCw4IEBAIHZvaWQgbG9ja19zeW5jKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgc3ViY2xhc3MsIGludCByZWFkLFxcbiBcXG4gXFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XFxuIFxcdF9fbG9ja19hY3F1aXJlKGxvY2ssIHN1YmNsYXNzLCAwLCByZWFkLCBjaGVjayxcXG4tXFx0XFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAxKTtcXG4rXFx0XFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAxLFxcbitcXHRcXHQgICAgICAgKytjdXJyZW50LVxcdTAwM2Vsb2NrZGVwX3NlcSk7XFxuIFxcdGNoZWNrX2NoYWluX2tleShjdXJyZW50KTtcXG4gXFx0bG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7XFxuIFxcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuQEAgLTYwMDAsNiArNjAyMSwyNiBAQCB2b2lkIGxvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llIGNvb2tpZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChsb2NrX3VucGluX2xvY2spO1xcbiBcXG4rdTMyIGxvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHUzMiBzZXEgPSB+MDtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghbG9ja2RlcF9lbmFibGVkKCkpKVxcbitcXHRcXHRyZXR1cm4gc2VxO1xcbitcXG4rXFx0cmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4rXFx0Y2hlY2tfZmxhZ3MoZmxhZ3MpO1xcbitcXG4rXFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XFxuK1xcdHNlcSA9IF9fbG9ja19zZXF1ZW5jZShsb2NrKTtcXG4rXFx0bG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7XFxuK1xcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuK1xcbitcXHRyZXR1cm4gc2VxO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGxvY2tfc2VxdWVuY2UpO1xcbitcXG4gI2lmZGVmIENPTkZJR19MT0NLX1NUQVRcXG4gc3RhdGljIHZvaWQgcHJpbnRfbG9ja19jb250ZW50aW9uX2J1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jayxcXG5kaWZmIC0tZ2l0IGEvbGliL21hcGxlX3RyZWUuYyBiL2xpYi9tYXBsZV90cmVlLmNcXG5pbmRleCBlNTI4NzY0MzViNzdmMC4uNmQ3MWZkYzQxNDcwNjQgMTAwNjQ0XFxuLS0tIGEvbGliL21hcGxlX3RyZWUuY1xcbisrKyBiL2xpYi9tYXBsZV90cmVlLmNcXG5AQCAtNDY5LDcgKzQ2OSw3IEBAIHN0YXRpYyBpbmxpbmVcXG4gdm9pZCBtYXNfc2V0X3BhcmVudChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICplbm9kZSxcXG4gXFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBtYXBsZV9lbm9kZSAqcGFyZW50LCB1bnNpZ25lZCBjaGFyIHNsb3QpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyB2YWwgPSAodW5zaWduZWQgbG9uZylwYXJlbnQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdmFsO1xcbiBcXHR1bnNpZ25lZCBsb25nIHNoaWZ0O1xcbiBcXHR1bnNpZ25lZCBsb25nIHR5cGU7XFxuIFxcdGVudW0gbWFwbGVfdHlwZSBwX3R5cGUgPSBtdGVfbm9kZV90eXBlKHBhcmVudCk7XFxuQEAgLTQ5MCwxMSArNDkwLDQ3IEBAIHZvaWQgbWFzX3NldF9wYXJlbnQoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUsXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbitcXHR2YWwgPSAodW5zaWduZWQgbG9uZylwYXJlbnQ7XFxuIFxcdHZhbCBcXHUwMDI2PSB+TUFQTEVfTk9ERV9NQVNLOyAvKiBDbGVhciBhbGwgbm9kZSBtZXRhZGF0YSBpbiBwYXJlbnQgKi9cXG4gXFx0dmFsIHw9IChzbG90IFxcdTAwM2NcXHUwMDNjIHNoaWZ0KSB8IHR5cGU7XFxuIFxcdG10ZV90b19ub2RlKGVub2RlKS1cXHUwMDNlcGFyZW50ID0gbWFfcGFyZW50X3B0cih2YWwpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBtYXNfc2V0X3BhcmVudF9zbG90cygpIC0gQnVsayBvcGVyYXRpb24gdG8gc2V0IG1hbnkgc2xvdCBwYXJlbnQgcG9pbnRlcnNcXG4rICogQG1hczogVGhlIG1hcGxlIHN0YXRlXFxuKyAqIEBwYXJlbnQ6IFRoZSBlbmNvZGVkIG1hcGxlIG5vZGUgdGhhdCBpcyB0aGUgcGFyZW50IG9mIEBlbm9kZS5cXG4rICogQHNsb3Q6IFRoZSBzbG90IHRoYXQgb2YgdGhlIEBlbm9kZS5cXG4rICogQHN0YXJ0X3Nsb3Q6IFRoZSBvZmZzZXQgaW50byBAc2xvdFxcbisgKiBAY291bnQ6IFRoZSBudW1iZXIgb2Ygc2xvdHMgdG8gc2V0IChlZzogZXhjbHVzaXZlKVxcbisgKi9cXG4rc3RhdGljIGlubGluZVxcbit2b2lkIG1hc19zZXRfcGFyZW50X3Nsb3RzKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnBhcmVudCxcXG4rXFx0dm9pZCBfX3JjdSAqKnNsb3RzLCB1bnNpZ25lZCBjaGFyIHN0YXJ0X3Nsb3QsIHVuc2lnbmVkIGNoYXIgY291bnQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB2YWw7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2hpZnQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdHlwZTtcXG4rXFx0ZW51bSBtYXBsZV90eXBlIHBfdHlwZSA9IG10ZV9ub2RlX3R5cGUocGFyZW50KTtcXG4rXFx0dW5zaWduZWQgY2hhciBpO1xcbitcXG4rXFx0TUFTX0JVR19PTihtYXMsIHBfdHlwZSAhPSBtYXBsZV9yYW5nZV82NCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRwX3R5cGUgIT0gbWFwbGVfYXJhbmdlXzY0KTtcXG4rXFxuK1xcdHNoaWZ0ID0gTUFQTEVfUEFSRU5UX1NMT1RfU0hJRlQ7XFxuK1xcdHR5cGUgPSBNQVBMRV9QQVJFTlRfUkFOR0U2NDtcXG4rXFxuK1xcdHZhbCA9ICh1bnNpZ25lZCBsb25nKXBhcmVudDtcXG4rXFx0dmFsIFxcdTAwMjY9IH5NQVBMRV9OT0RFX01BU0s7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQ7IGkrKykge1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIHB2YWwgPSB2YWwgfCAoKHN0YXJ0X3Nsb3QgKyBpKSBcXHUwMDNjXFx1MDAzYyBzaGlmdCkgfCB0eXBlO1xcbitcXHRcXHRzdHJ1Y3QgbWFwbGVfZW5vZGUgKmNoaWxkID0gKHN0cnVjdCBtYXBsZV9lbm9kZSAqKXNsb3RzW2ldO1xcbitcXG4rXFx0XFx0bXRlX3RvX25vZGUoY2hpbGQpLVxcdTAwM2VwYXJlbnQgPSBtYV9wYXJlbnRfcHRyKHB2YWwpO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qXFxuICAqIG10ZV9wYXJlbnRfc2xvdCgpIC0gZ2V0IHRoZSBwYXJlbnQgc2xvdCBvZiBAZW5vZGUuXFxuICAqIEBlbm9kZTogVGhlIGVuY29kZWQgbWFwbGUgbm9kZS5cXG5AQCAtMTE1Myw2ICsxMTg5LDcwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfZnJlZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICp1c2VkKVxcbiBcXHRtYV9mcmVlX3JjdShtdGVfdG9fbm9kZSh1c2VkKSk7XFxuIH1cXG4gXFxuK1xcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4rc3RydWN0IGxvY2tkZXBfbWFwICptYXNfbG9ja2RlcF9tYXAoc3RydWN0IG1hX3N0YXRlICptYXMpXFxuK3tcXG4rXFx0c3RydWN0IG1hcGxlX3RyZWUgKm10ID0gbWFzLVxcdTAwM2V0cmVlO1xcbitcXG4rXFx0aWYgKG10X2V4dGVybmFsX2xvY2sobXQpKVxcbitcXHRcXHRyZXR1cm4gbXQtXFx1MDAzZW1hX2V4dGVybmFsX2xvY2s7XFxuK1xcbitcXHRyZXR1cm4gXFx1MDAyNihtdC1cXHUwMDNlbWFfbG9jaykuZGVwX21hcDtcXG4rfVxcbitcXG4rI2VuZGlmXFxuK1xcbitzdGF0aWMgdm9pZCBtYXNfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcXG4re1xcbitcXG4rI2lmZGVmIENPTkZJR19MT0NLREVQXFxuK1xcdGlmICghbWFzX2lzX2FjdGl2ZShtYXMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbisjaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXFxuK1xcdGlmICghbXRfbG9ja19pc19oZWxkKG1hcy1cXHUwMDNldHJlZSkpIHtcXG4rXFx0XFx0aWYgKG10X2luX3JjdShtYXMtXFx1MDAzZXRyZWUpKVxcbitcXHRcXHRcXHRXQVJOX09OX09OQ0UocG9sbF9zdGF0ZV9zeW5jaHJvbml6ZV9yY3UobWFzLVxcdTAwM2VyY3VfZ3ApKTtcXG4rXFx0fVxcbisjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXFxuK1xcbitcXHRpZiAobXRfbG9ja19pc19oZWxkKG1hcy1cXHUwMDNldHJlZSkpXFxuK1xcdFxcdFdBUk5fT05fT05DRShtYXMtXFx1MDAzZWxkX3NlcSAhPSBsb2NrX3NlcXVlbmNlKG1hc19sb2NrZGVwX21hcChtYXMpKSk7XFxuKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xcbitcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWFzX2luaXRfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcXG4re1xcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4rI2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxcbitcXHRpZiAoIW10X2xvY2tfaXNfaGVsZChtYXMtXFx1MDAzZXRyZWUpKSB7XFxuK1xcdFxcdGlmIChtdF9pbl9yY3UobWFzLVxcdTAwM2V0cmVlKSlcXG4rXFx0XFx0XFx0bWFzLVxcdTAwM2VyY3VfZ3AgPSBnZXRfc3RhdGVfc3luY2hyb25pemVfcmN1KCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbisjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXFxuK1xcbitcXHRpZiAobXRfbG9ja19pc19oZWxkKG1hcy1cXHUwMDNldHJlZSkpXFxuK1xcdFxcdG1hcy1cXHUwMDNlbGRfc2VxID0gbG9ja19zZXF1ZW5jZShtYXNfbG9ja2RlcF9tYXAobWFzKSk7XFxuKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xcbitcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWFzX21heV9pbml0X2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19MT0NLREVQXFxuKyNpZmRlZiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RcXG4rXFx0aWYgKG1hc19pc19zdGFydChtYXMpIHx8IG1hc19pc19wYXVzZWQobWFzKSkge1xcbitcXHRcXHRtYXNfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbisjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXFxuK1xcdG1hc19sb2NrX2NoZWNrKG1hcyk7XFxuKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xcbit9XFxuK1xcbiAvKlxcbiAgKiBtYXNfc3RhcnQoKSAtIFNldHMgdXAgbWFwbGUgc3RhdGUgZm9yIG9wZXJhdGlvbnMuXFxuICAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZS5cXG5AQCAtMTE3MSw2ICsxMjcxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWFwbGVfZW5vZGUgKm1hc19zdGFydChzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcXG4gXFx0aWYgKGxpa2VseShtYXNfaXNfc3RhcnQobWFzKSkpIHtcXG4gXFx0XFx0c3RydWN0IG1hcGxlX2Vub2RlICpyb290O1xcbiBcXG4rXFx0XFx0bWFzX2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiBcXHRcXHRtYXMtXFx1MDAzZW1pbiA9IDA7XFxuIFxcdFxcdG1hcy1cXHUwMDNlbWF4ID0gVUxPTkdfTUFYO1xcbiBcXG5AQCAtMTUwMSwxNCArMTYwMiwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3BhcmVudF9nYXAoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGNoYXIgb2Zmc2V0LFxcbiBcXHRnb3RvIGFzY2VuZDtcXG4gfVxcbiBcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1hc191cGRhdGVfZ2FwX2tub3duKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGdhcClcXG4re1xcbitcXHR1bnNpZ25lZCBjaGFyIHBzbG90O1xcbitcXHR1bnNpZ25lZCBsb25nIHBfZ2FwO1xcbitcXG4rXFx0cHNsb3QgPSBtdGVfcGFyZW50X3Nsb3QobWFzLVxcdTAwM2Vub2RlKTtcXG4rXFx0cF9nYXAgPSBtYV9nYXBzKG10ZV9wYXJlbnQobWFzLVxcdTAwM2Vub2RlKSxcXG4rXFx0XFx0XFx0bWFzX3BhcmVudF90eXBlKG1hcywgbWFzLVxcdTAwM2Vub2RlKSlbcHNsb3RdO1xcbitcXG4rXFx0aWYgKHBfZ2FwICE9IGdhcClcXG4rXFx0XFx0bWFzX3BhcmVudF9nYXAobWFzLCBwc2xvdCwgZ2FwKTtcXG4rfVxcbitcXG4gLypcXG4gICogbWFzX3VwZGF0ZV9nYXAoKSAtIFVwZGF0ZSBhIG5vZGVzIGdhcHMgYW5kIHByb3BhZ2F0ZSB1cCBpZiBuZWNlc3NhcnkuXFxuICAqIEBtYXM6IHRoZSBtYXBsZSBzdGF0ZS5cXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfdXBkYXRlX2dhcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcXG4ge1xcbi1cXHR1bnNpZ25lZCBjaGFyIHBzbG90O1xcbi1cXHR1bnNpZ25lZCBsb25nIHBfZ2FwO1xcbiBcXHR1bnNpZ25lZCBsb25nIG1heF9nYXA7XFxuIFxcbiBcXHRpZiAoIW10X2lzX2FsbG9jKG1hcy1cXHUwMDNldHJlZSkpXFxuQEAgLTE1MTgsMTMgKzE2MzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3VwZGF0ZV9nYXAoc3RydWN0IG1hX3N0YXRlICptYXMpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdG1heF9nYXAgPSBtYXNfbWF4X2dhcChtYXMpO1xcbi1cXG4tXFx0cHNsb3QgPSBtdGVfcGFyZW50X3Nsb3QobWFzLVxcdTAwM2Vub2RlKTtcXG4tXFx0cF9nYXAgPSBtYV9nYXBzKG10ZV9wYXJlbnQobWFzLVxcdTAwM2Vub2RlKSxcXG4tXFx0XFx0XFx0bWFzX3BhcmVudF90eXBlKG1hcywgbWFzLVxcdTAwM2Vub2RlKSlbcHNsb3RdO1xcbi1cXG4tXFx0aWYgKHBfZ2FwICE9IG1heF9nYXApXFxuLVxcdFxcdG1hc19wYXJlbnRfZ2FwKG1hcywgcHNsb3QsIG1heF9nYXApO1xcbitcXHRtYXNfdXBkYXRlX2dhcF9rbm93bihtYXMsIG1heF9nYXApO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xNTQwLDE0ICsxNjQ3LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfYWRvcHRfY2hpbGRyZW4oc3RydWN0IG1hX3N0YXRlICptYXMsXFxuIFxcdHN0cnVjdCBtYXBsZV9ub2RlICpub2RlID0gbXRlX3RvX25vZGUocGFyZW50KTtcXG4gXFx0dm9pZCBfX3JjdSAqKnNsb3RzID0gbWFfc2xvdHMobm9kZSwgdHlwZSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKnBpdm90cyA9IG1hX3Bpdm90cyhub2RlLCB0eXBlKTtcXG4tXFx0c3RydWN0IG1hcGxlX2Vub2RlICpjaGlsZDtcXG4tXFx0dW5zaWduZWQgY2hhciBvZmZzZXQ7XFxuK1xcdHVuc2lnbmVkIGNoYXIgZW5kO1xcbiBcXG4tXFx0b2Zmc2V0ID0gbWFfZGF0YV9lbmQobm9kZSwgdHlwZSwgcGl2b3RzLCBtYXMtXFx1MDAzZW1heCk7XFxuLVxcdGRvIHtcXG4tXFx0XFx0Y2hpbGQgPSBtYXNfc2xvdF9sb2NrZWQobWFzLCBzbG90cywgb2Zmc2V0KTtcXG4tXFx0XFx0bWFzX3NldF9wYXJlbnQobWFzLCBjaGlsZCwgcGFyZW50LCBvZmZzZXQpO1xcbi1cXHR9IHdoaWxlIChvZmZzZXQtLSk7XFxuK1xcdGVuZCA9IG1hX2RhdGFfZW5kKG5vZGUsIHR5cGUsIHBpdm90cywgbWFzLVxcdTAwM2VtYXgpO1xcbitcXHRtYXNfc2V0X3BhcmVudF9zbG90cyhtYXMsIHBhcmVudCwgc2xvdHMsIDAsIGVuZCArIDEpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xOTI5LDE1ICsyMDMyLDEwIEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9jb3B5KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfbm9kZSAqc3JjLFxcbiBcXHRzX3Nsb3RzID0gbWFfc2xvdHMoc3JjLCBzX210KSArIHN0YXJ0O1xcbiBcXHRzX3Bpdm90cyA9IG1hX3Bpdm90cyhzcmMsIHNfbXQpICsgc3RhcnQ7XFxuIFxcdG1lbWNweShkX3Nsb3RzLCBzX3Nsb3RzLCBzaXplICogc2l6ZW9mKHZvaWQgX19yY3UgKikpO1xcbi1cXHRpZiAoIW1hX2lzX2xlYWYoZF9tdCkgXFx1MDAyNlxcdTAwMjYgc19tdCA9PSBtYXBsZV9jb3B5KSB7XFxuLVxcdFxcdHN0cnVjdCBtYXBsZV9lbm9kZSAqZWRzdCA9IG10X21rX25vZGUoZHN0LCBkX210KTtcXG4gXFxuLVxcbi1cXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHNpemU7IGkrKylcXG4tXFx0XFx0XFx0bWFzX3NldF9wYXJlbnQobWFzLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgbXRfc2xvdF9sb2NrZWQobWFzLVxcdTAwM2V0cmVlLCBkX3Nsb3RzLCBpKSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGVkc3QsIGRfc3RhcnQgKyBpKTtcXG4tXFx0fVxcbitcXHRpZiAoIW1hX2lzX2xlYWYoZF9tdCkgXFx1MDAyNlxcdTAwMjYgc19tdCA9PSBtYXBsZV9jb3B5KVxcbitcXHRcXHRtYXNfc2V0X3BhcmVudF9zbG90cyhtYXMsIG10X21rX25vZGUoZHN0LCBkX210KSxcXG4rXFx0XFx0XFx0XFx0ICAgICBkX3Nsb3RzLCBkX3N0YXJ0LCBzaXplKTtcXG4gXFxuIFxcdGRfZ2FwcyA9IG1hX2dhcHMoZHN0LCBkX210KTtcXG4gXFx0aWYgKGRfZ2Fwcykge1xcbkBAIC0yMDgxLDggKzIxNzksOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dtYl9yZXBsYWNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfY29weSAqY3ApXFxuIFxcdG1hcy1cXHUwMDNlbm9kZSA9IG10X3Nsb3RfbG9ja2VkKG1hcy1cXHUwMDNldHJlZSwgY3AtXFx1MDAzZXNsb3QsIDApO1xcbiBcXHQvKiBJbnNlcnQgdGhlIG5ldyBkYXRhIGluIHRoZSB0cmVlICovXFxuIFxcdG1hc190b3BpYXJ5X3JlcGxhY2UobWFzLCBvbGRfZW5vZGUsIGNwLVxcdTAwM2VoZWlnaHQpO1xcbi1cXHRpZiAoIW10ZV9pc19sZWFmKG1hcy1cXHUwMDNlbm9kZSkpXFxuLVxcdFxcdG1hc191cGRhdGVfZ2FwKG1hcyk7XFxuK1xcdGlmIChtdF9pc19hbGxvYyhtYXMtXFx1MDAzZXRyZWUpIFxcdTAwMjZcXHUwMDI2ICFtdGVfaXNfcm9vdChtYXMtXFx1MDAzZW5vZGUpKVxcbitcXHRcXHRtYXNfdXBkYXRlX2dhcF9rbm93bihtYXMsIGNwLVxcdTAwM2VnYXBbMF0pO1xcbiBcXG4gXFx0bXRyZWVfcmFuZ2Vfd2FsayhtYXMpO1xcbiB9XFxuQEAgLTI5MjgsMTMgKzMwMjYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX2V4dGVuZF9zcGFubmluZ19udWxsKHN0cnVjdCBtYV93cl9zdGF0ZSAqbF93cl9tYXMsXFxuIFxcdFxcdGlmIChyX21hcy1cXHUwMDNlbGFzdCBcXHUwMDNjIHJfd3JfbWFzLVxcdTAwM2VyX21heClcXG4gXFx0XFx0XFx0cl9tYXMtXFx1MDAzZWxhc3QgPSByX3dyX21hcy1cXHUwMDNlcl9tYXg7XFxuIFxcdFxcdHJfbWFzLVxcdTAwM2VvZmZzZXQrKztcXG4tXFx0fSBlbHNlIGlmICgocl9tYXMtXFx1MDAzZWxhc3QgPT0gcl93cl9tYXMtXFx1MDAzZXJfbWF4KSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKHJfbWFzLVxcdTAwM2VsYXN0IFxcdTAwM2Mgcl9tYXMtXFx1MDAzZW1heCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICFtYXNfc2xvdF9sb2NrZWQocl9tYXMsIHJfd3JfbWFzLVxcdTAwM2VzbG90cywgcl9tYXMtXFx1MDAzZW9mZnNldCArIDEpKSB7XFxuLVxcdFxcdHJfbWFzLVxcdTAwM2VsYXN0ID0gbWFzX3NhZmVfcGl2b3Qocl9tYXMsIHJfd3JfbWFzLVxcdTAwM2VwaXZvdHMsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgcl93cl9tYXMtXFx1MDAzZXR5cGUsIHJfbWFzLVxcdTAwM2VvZmZzZXQgKyAxKTtcXG4tXFx0XFx0cl9tYXMtXFx1MDAzZW9mZnNldCsrO1xcbi1cXHRcXHRyX3dyX21hcy1cXHUwMDNlcl9tYXggPSByX21hcy1cXHUwMDNlbGFzdDtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0zMTI1LDcgKzMyMTYsNyBAQCBzdGF0aWMgdm9pZCBtYXNfd3Jfc3Bhbm5pbmdfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcXG4ge1xcbiBcXHR1bnNpZ25lZCBjaGFyIGRzdF9vZmZzZXQsIG9mZnNldF9lbmQ7XFxuLVxcdHVuc2lnbmVkIGNoYXIgY29weV9zaXplLCBub2RlX3Bpdm90cztcXG4rXFx0dW5zaWduZWQgY2hhciBjb3B5X3NpemUsIG5vZGVfcGl2b3RzLCBub2RlX3Nsb3RzO1xcbiBcXHRzdHJ1Y3QgbWFwbGVfbm9kZSByZXVzZSwgKm5ld25vZGU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKmRzdF9waXZvdHM7XFxuIFxcdHZvaWQgX19yY3UgKipkc3Rfc2xvdHM7XFxuQEAgLTMxMzgsNiArMzIyOSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcXG4gXFx0aW5fcmN1ID0gbXRfaW5fcmN1KG1hcy1cXHUwMDNldHJlZSk7XFxuIFxcdG9mZnNldF9lbmQgPSB3cl9tYXMtXFx1MDAzZW9mZnNldF9lbmQ7XFxuIFxcdG5vZGVfcGl2b3RzID0gbXRfcGl2b3RzW3dyX21hcy1cXHUwMDNldHlwZV07XFxuK1xcdG5vZGVfc2xvdHMgPSBtdF9zbG90c1t3cl9tYXMtXFx1MDAzZXR5cGVdO1xcbiBcXHQvKiBBc3N1bWUgbGFzdCBhZGRzIGFuIGVudHJ5ICovXFxuIFxcdG5ld19lbmQgPSBtYXMtXFx1MDAzZWVuZCArIDEgLSBvZmZzZXRfZW5kICsgbWFzLVxcdTAwM2VvZmZzZXQ7XFxuIFxcdGlmIChtYXMtXFx1MDAzZWxhc3QgPT0gd3JfbWFzLVxcdTAwM2VlbmRfcGl2KSB7XFxuQEAgLTMxNDksNyArMzI0MSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcXG4gXFx0aWYgKGluX3JjdSkge1xcbiBcXHRcXHRuZXdub2RlID0gbWFzX3BvcF9ub2RlKG1hcyk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdG1lbXNldChcXHUwMDI2cmV1c2UsIDAsIHNpemVvZihzdHJ1Y3QgbWFwbGVfbm9kZSkpO1xcbiBcXHRcXHRuZXdub2RlID0gXFx1MDAyNnJldXNlO1xcbiBcXHR9XFxuIFxcbkBAIC0zMTkzLDcgKzMyODQsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxcbiBcXHRcXHRkc3RfcGl2b3RzW25ld19lbmRdID0gbWFzLVxcdTAwM2VtYXg7XFxuIFxcbiBkb25lOlxcbi1cXHRtYXNfbGVhZl9zZXRfbWV0YShuZXdub2RlLCBtYXBsZV9sZWFmXzY0LCBuZXdfZW5kKTtcXG4rXFx0aWYgKCFpbl9yY3UgXFx1MDAyNlxcdTAwMjYgbmV3X2VuZCArIDIgXFx1MDAzYyBub2RlX3Nsb3RzKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGNoYXIgY2xlYXJfZnJvbSA9IG5ld19lbmQgKyAxO1xcbitcXG4rXFx0XFx0bWVtc2V0KGRzdF9zbG90cyArIGNsZWFyX2Zyb20sIDAsXFxuK1xcdFxcdCAgICAgICBzaXplb2Yodm9pZCBfX3JjdSAqKSAqIChub2RlX3Nsb3RzIC0gY2xlYXJfZnJvbSkpO1xcbitcXHRcXHRpZiAoY2xlYXJfZnJvbSBcXHUwMDNjIG5vZGVfcGl2b3RzKVxcbitcXHRcXHRcXHRtZW1zZXQoZHN0X3Bpdm90cyArIGNsZWFyX2Zyb20sIDAsXFxuK1xcdFxcdFxcdCAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZykgKiAobm9kZV9waXZvdHMgLSBjbGVhcl9mcm9tKSk7XFxuK1xcdH1cXG4rXFxuK1xcdG1hc19sZWFmX3NldF9tZXRhKG5ld25vZGUsIHdyX21hcy1cXHUwMDNldHlwZSwgbmV3X2VuZCk7XFxuIFxcdGlmIChpbl9yY3UpIHtcXG4gXFx0XFx0c3RydWN0IG1hcGxlX2Vub2RlICpvbGRfZW5vZGUgPSBtYXMtXFx1MDAzZW5vZGU7XFxuIFxcbkBAIC0zMjE4LDcgKzMzMTksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX3Nsb3Rfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXFxuIFxcdHZvaWQgX19yY3UgKipzbG90cyA9IHdyX21hcy1cXHUwMDNlc2xvdHM7XFxuIFxcdGJvb2wgZ2FwID0gZmFsc2U7XFxuIFxcbi1cXHRnYXAgfD0gIW10X3Nsb3RfbG9ja2VkKG1hcy1cXHUwMDNldHJlZSwgc2xvdHMsIG9mZnNldCk7XFxuK1xcdGdhcCB8PSAhd3JfbWFzLVxcdTAwM2Vjb250ZW50O1xcbiBcXHRnYXAgfD0gIW10X3Nsb3RfbG9ja2VkKG1hcy1cXHUwMDNldHJlZSwgc2xvdHMsIG9mZnNldCArIDEpO1xcbiBcXG4gXFx0aWYgKHdyX21hcy1cXHUwMDNlb2Zmc2V0X2VuZCAtIG9mZnNldCA9PSAxKSB7XFxuQEAgLTM2NjEsNiArMzc2Miw5IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBzdG9yZV90eXBlIG1hc193cl9zdG9yZV90eXBlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxcbiB7XFxuIFxcdHN0cnVjdCBtYV9zdGF0ZSAqbWFzID0gd3JfbWFzLVxcdTAwM2VtYXM7XFxuIFxcdHVuc2lnbmVkIGNoYXIgbmV3X2VuZDtcXG4rXFx0Ym9vbCBhcHBlbmRpbmc7XFxuK1xcdGJvb2wgb25lX3Nsb3Q7XFxuK1xcdGJvb2wgaW5fcmN1O1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KG1hc19pc19ub25lKG1hcykgfHwgbWFzX2lzX3B0cihtYXMpKSlcXG4gXFx0XFx0cmV0dXJuIHdyX3N0b3JlX3Jvb3Q7XFxuQEAgLTM2ODAsMjEgKzM3ODQsMzAgQEAgc3RhdGljIGlubGluZSBlbnVtIHN0b3JlX3R5cGUgbWFzX3dyX3N0b3JlX3R5cGUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXFxuIFxcdFxcdHJldHVybiB3cl9uZXdfcm9vdDtcXG4gXFxuIFxcdG5ld19lbmQgPSBtYXNfd3JfbmV3X2VuZCh3cl9tYXMpO1xcbitcXHRpbl9yY3UgPSBtdF9pbl9yY3UobWFzLVxcdTAwM2V0cmVlKTtcXG4rXFx0YXBwZW5kaW5nID0gbWFzLVxcdTAwM2VvZmZzZXQgPT0gbWFzLVxcdTAwM2VlbmQ7XFxuK1xcdG9uZV9zbG90ID0gd3JfbWFzLVxcdTAwM2VvZmZzZXRfZW5kIC0gbWFzLVxcdTAwM2VvZmZzZXQgPT0gMTtcXG4rXFxuIFxcdC8qIFBvdGVudGlhbCBzcGFubmluZyByZWJhbGFuY2UgY29sbGFwc2luZyBhIG5vZGUgKi9cXG4gXFx0aWYgKG5ld19lbmQgXFx1MDAzYyBtdF9taW5fc2xvdHNbd3JfbWFzLVxcdTAwM2V0eXBlXSkge1xcbiBcXHRcXHRpZiAoIW10ZV9pc19yb290KG1hcy1cXHUwMDNlbm9kZSkpXFxuIFxcdFxcdFxcdHJldHVybiAgd3JfcmViYWxhbmNlO1xcbitcXHRcXHRpZiAoIWluX3JjdSkge1xcbitcXHRcXHRcXHRpZiAoYXBwZW5kaW5nKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gd3JfYXBwZW5kO1xcbitcXHRcXHRcXHRlbHNlIGlmIChtYXMtXFx1MDAzZWVuZCA9PSBuZXdfZW5kIFxcdTAwMjZcXHUwMDI2IG9uZV9zbG90KVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gd3Jfc2xvdF9zdG9yZTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRyZXR1cm4gd3Jfbm9kZV9zdG9yZTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKG5ld19lbmQgXFx1MDAzZT0gbXRfc2xvdHNbd3JfbWFzLVxcdTAwM2V0eXBlXSlcXG4gXFx0XFx0cmV0dXJuIHdyX3NwbGl0X3N0b3JlO1xcbiBcXG4tXFx0aWYgKCFtdF9pbl9yY3UobWFzLVxcdTAwM2V0cmVlKSBcXHUwMDI2XFx1MDAyNiAobWFzLVxcdTAwM2VvZmZzZXQgPT0gbWFzLVxcdTAwM2VlbmQpKVxcbitcXHRpZiAoIWluX3JjdSBcXHUwMDI2XFx1MDAyNiBhcHBlbmRpbmcpXFxuIFxcdFxcdHJldHVybiB3cl9hcHBlbmQ7XFxuIFxcbi1cXHRpZiAoKG5ld19lbmQgPT0gbWFzLVxcdTAwM2VlbmQpIFxcdTAwMjZcXHUwMDI2ICghbXRfaW5fcmN1KG1hcy1cXHUwMDNldHJlZSkgfHxcXG4tXFx0XFx0KHdyX21hcy1cXHUwMDNlb2Zmc2V0X2VuZCAtIG1hcy1cXHUwMDNlb2Zmc2V0ID09IDEpKSlcXG4rXFx0aWYgKG5ld19lbmQgPT0gbWFzLVxcdTAwM2VlbmQgXFx1MDAyNlxcdTAwMjYgKCFpbl9yY3UgfHwgb25lX3Nsb3QpKVxcbiBcXHRcXHRyZXR1cm4gd3Jfc2xvdF9zdG9yZTtcXG4gXFxuIFxcdHJldHVybiB3cl9ub2RlX3N0b3JlO1xcbkBAIC0zNzkzLDI3ICszOTA2LDI5IEBAIGludCBtYXNfYWxsb2NfY3ljbGljKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nICpzdGFydHAsXFxuIFxcdFxcdHZvaWQgKmVudHJ5LCB1bnNpZ25lZCBsb25nIHJhbmdlX2xvLCB1bnNpZ25lZCBsb25nIHJhbmdlX2hpLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nICpuZXh0LCBnZnBfdCBnZnApXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBtaW4gPSByYW5nZV9sbztcXG4tXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbWluO1xcbiBcXG4tXFx0cmFuZ2VfbG8gPSBtYXgobWluLCAqbmV4dCk7XFxuLVxcdHJldCA9IG1hc19lbXB0eV9hcmVhKG1hcywgcmFuZ2VfbG8sIHJhbmdlX2hpLCAxKTtcXG4tXFx0aWYgKChtYXMtXFx1MDAzZXRyZWUtXFx1MDAzZW1hX2ZsYWdzIFxcdTAwMjYgTVRfRkxBR1NfQUxMT0NfV1JBUFBFRCkgXFx1MDAyNlxcdTAwMjYgcmV0ID09IDApIHtcXG4tXFx0XFx0bWFzLVxcdTAwM2V0cmVlLVxcdTAwM2VtYV9mbGFncyBcXHUwMDI2PSB+TVRfRkxBR1NfQUxMT0NfV1JBUFBFRDtcXG4tXFx0XFx0cmV0ID0gMTtcXG4tXFx0fVxcbi1cXHRpZiAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiByYW5nZV9sbyBcXHUwMDNlIG1pbikge1xcbi1cXHRcXHRtYXNfcmVzZXQobWFzKTtcXG4tXFx0XFx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCBtaW4sIHJhbmdlX2hpLCAxKTtcXG4tXFx0XFx0aWYgKHJldCA9PSAwKVxcbitcXHRtaW4gPSByYW5nZV9sbztcXG4rXFx0ZG8ge1xcbitcXHRcXHRyYW5nZV9sbyA9IG1heChtaW4sICpuZXh0KTtcXG4rXFx0XFx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCByYW5nZV9sbywgcmFuZ2VfaGksIDEpO1xcbitcXHRcXHRpZiAoKG1hcy1cXHUwMDNldHJlZS1cXHUwMDNlbWFfZmxhZ3MgXFx1MDAyNiBNVF9GTEFHU19BTExPQ19XUkFQUEVEKSBcXHUwMDI2XFx1MDAyNiByZXQgPT0gMCkge1xcbitcXHRcXHRcXHRtYXMtXFx1MDAzZXRyZWUtXFx1MDAzZW1hX2ZsYWdzIFxcdTAwMjY9IH5NVF9GTEFHU19BTExPQ19XUkFQUEVEO1xcbiBcXHRcXHRcXHRyZXQgPSAxO1xcbi1cXHR9XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IHJhbmdlX2xvIFxcdTAwM2UgbWluKSB7XFxuK1xcdFxcdFxcdG1hc19yZXNldChtYXMpO1xcbitcXHRcXHRcXHRyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIG1pbiwgcmFuZ2VfaGksIDEpO1xcbitcXHRcXHRcXHRpZiAocmV0ID09IDApXFxuK1xcdFxcdFxcdFxcdHJldCA9IDE7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRkbyB7XFxuIFxcdFxcdG1hc19pbnNlcnQobWFzLCBlbnRyeSk7XFxuIFxcdH0gd2hpbGUgKG1hc19ub21lbShtYXMsIGdmcCkpO1xcbitcXG4gXFx0aWYgKG1hc19pc19lcnIobWFzKSlcXG4gXFx0XFx0cmV0dXJuIHhhX2VycihtYXMtXFx1MDAzZW5vZGUpO1xcbiBcXG5AQCAtNDM2MCw2ICs0NDc1LDcgQEAgdm9pZCAqbWFzX3dhbGsoc3RydWN0IG1hX3N0YXRlICptYXMpXFxuIHtcXG4gXFx0dm9pZCAqZW50cnk7XFxuIFxcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiBcXHRpZiAoIW1hc19pc19hY3RpdmUobWFzKSBcXHUwMDI2XFx1MDAyNiAhbWFzX2lzX3N0YXJ0KG1hcykpXFxuIFxcdFxcdG1hcy1cXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XFxuIHJldHJ5OlxcbkBAIC00ODMxLDYgKzQ5NDcsNyBAQCB2b2lkICptYXNfc3RvcmUoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5KVxcbiB7XFxuIFxcdE1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBlbnRyeSk7XFxuIFxcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiBcXHR0cmFjZV9tYV93cml0ZShUUF9GQ1QsIG1hcywgMCwgZW50cnkpO1xcbiAjaWZkZWYgQ09ORklHX0RFQlVHX01BUExFX1RSRUVcXG4gXFx0aWYgKE1BU19XQVJOX09OKG1hcywgbWFzLVxcdTAwM2VpbmRleCBcXHUwMDNlIG1hcy1cXHUwMDNlbGFzdCkpXFxuQEAgLTQ4ODksNiArNTAwNiw3IEBAIGludCBtYXNfc3RvcmVfZ2ZwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSwgZ2ZwX3QgZ2ZwKVxcbiBcXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuK1xcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XFxuIHJldHJ5OlxcbiBcXHRtYXNfd3JfcHJlYWxsb2NhdGUoXFx1MDAyNndyX21hcywgZW50cnkpO1xcbiBcXHRpZiAodW5saWtlbHkobWFzX25vbWVtKG1hcywgZ2ZwKSkpIHtcXG5AQCAtNDkxOSw2ICs1MDM3LDcgQEAgdm9pZCBtYXNfc3RvcmVfcHJlYWxsb2Moc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5KVxcbiB7XFxuIFxcdE1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBlbnRyeSk7XFxuIFxcbitcXHRtYXNfbG9ja19jaGVjayhtYXMpO1xcbiBcXHRpZiAobWFzLVxcdTAwM2VzdG9yZV90eXBlID09IHdyX3N0b3JlX3Jvb3QpIHtcXG4gXFx0XFx0bWFzX3dyX3ByZWFsbG9jX3NldHVwKFxcdTAwMjZ3cl9tYXMpO1xcbiBcXHRcXHRnb3RvIHN0b3JlO1xcbkBAIC00OTUxLDYgKzUwNzAsNyBAQCBpbnQgbWFzX3ByZWFsbG9jYXRlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSwgZ2ZwX3QgZ2ZwKVxcbiB7XFxuIFxcdE1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBlbnRyeSk7XFxuIFxcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiBcXHRtYXNfd3JfcHJlYWxsb2Nfc2V0dXAoXFx1MDAyNndyX21hcyk7XFxuIFxcdG1hcy1cXHUwMDNlc3RvcmVfdHlwZSA9IG1hc193cl9zdG9yZV90eXBlKFxcdTAwMjZ3cl9tYXMpO1xcbiBcXHRtYXNfcHJlYWxsb2NfY2FsYyhcXHUwMDI2d3JfbWFzLCBlbnRyeSk7XFxuQEAgLTUwNzQsNiArNTE5NCw3IEBAIHZvaWQgKm1hc19uZXh0KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heClcXG4ge1xcbiBcXHR2b2lkICplbnRyeSA9IE5VTEw7XFxuIFxcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiBcXHRpZiAobWFzX25leHRfc2V0dXAobWFzLCBtYXgsIFxcdTAwMjZlbnRyeSkpXFxuIFxcdFxcdHJldHVybiBlbnRyeTtcXG4gXFxuQEAgLTUwOTcsNiArNTIxOCw3IEBAIHZvaWQgKm1hc19uZXh0X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heClcXG4ge1xcbiBcXHR2b2lkICplbnRyeSA9IE5VTEw7XFxuIFxcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiBcXHRpZiAobWFzX25leHRfc2V0dXAobWFzLCBtYXgsIFxcdTAwMjZlbnRyeSkpXFxuIFxcdFxcdHJldHVybiBlbnRyeTtcXG4gXFxuQEAgLTUyMDUsNiArNTMyNyw3IEBAIHZvaWQgKm1hc19wcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbilcXG4ge1xcbiBcXHR2b2lkICplbnRyeSA9IE5VTEw7XFxuIFxcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiBcXHRpZiAobWFzX3ByZXZfc2V0dXAobWFzLCBtaW4sIFxcdTAwMjZlbnRyeSkpXFxuIFxcdFxcdHJldHVybiBlbnRyeTtcXG4gXFxuQEAgLTUyMjgsNiArNTM1MSw3IEBAIHZvaWQgKm1hc19wcmV2X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbilcXG4ge1xcbiBcXHR2b2lkICplbnRyeSA9IE5VTEw7XFxuIFxcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiBcXHRpZiAobWFzX3ByZXZfc2V0dXAobWFzLCBtaW4sIFxcdTAwMjZlbnRyeSkpXFxuIFxcdFxcdHJldHVybiBlbnRyeTtcXG4gXFxuQEAgLTUyNzQsNiArNTM5OCw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG10X3ByZXYpO1xcbiAgKi9cXG4gdm9pZCBtYXNfcGF1c2Uoc3RydWN0IG1hX3N0YXRlICptYXMpXFxuIHtcXG4rXFx0bWFzX2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0bWFzLVxcdTAwM2VzdGF0dXMgPSBtYV9wYXVzZTtcXG4gXFx0bWFzLVxcdTAwM2Vub2RlID0gTlVMTDtcXG4gfVxcbkBAIC01MzgyLDYgKzU1MDcsNyBAQCB2b2lkICptYXNfZmluZChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpXFxuIHtcXG4gXFx0dm9pZCAqZW50cnkgPSBOVUxMO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0aWYgKG1hc19maW5kX3NldHVwKG1hcywgbWF4LCBcXHUwMDI2ZW50cnkpKVxcbiBcXHRcXHRyZXR1cm4gZW50cnk7XFxuIFxcbkBAIC01NDA5LDYgKzU1MzUsNyBAQCB2b2lkICptYXNfZmluZF9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpXFxuIHtcXG4gXFx0dm9pZCAqZW50cnkgPSBOVUxMO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0aWYgKG1hc19maW5kX3NldHVwKG1hcywgbWF4LCBcXHUwMDI2ZW50cnkpKVxcbiBcXHRcXHRyZXR1cm4gZW50cnk7XFxuIFxcbkBAIC01NDI4LDcgKzU1NTUsNiBAQCBFWFBPUlRfU1lNQk9MX0dQTChtYXNfZmluZF9yYW5nZSk7XFxuIHN0YXRpYyBib29sIG1hc19maW5kX3Jldl9zZXR1cChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4sXFxuIFxcdFxcdHZvaWQgKiplbnRyeSlcXG4ge1xcbi1cXG4gXFx0c3dpdGNoIChtYXMtXFx1MDAzZXN0YXR1cykge1xcbiBcXHRjYXNlIG1hX2FjdGl2ZTpcXG4gXFx0XFx0Z290byBhY3RpdmU7XFxuQEAgLTU1MjEsNiArNTY0Nyw3IEBAIHZvaWQgKm1hc19maW5kX3JldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pXFxuIHtcXG4gXFx0dm9pZCAqZW50cnkgPSBOVUxMO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0aWYgKG1hc19maW5kX3Jldl9zZXR1cChtYXMsIG1pbiwgXFx1MDAyNmVudHJ5KSlcXG4gXFx0XFx0cmV0dXJuIGVudHJ5O1xcbiBcXG5AQCAtNTU0Nyw2ICs1Njc0LDcgQEAgdm9pZCAqbWFzX2ZpbmRfcmFuZ2VfcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbilcXG4ge1xcbiBcXHR2b2lkICplbnRyeSA9IE5VTEw7XFxuIFxcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiBcXHRpZiAobWFzX2ZpbmRfcmV2X3NldHVwKG1hcywgbWluLCBcXHUwMDI2ZW50cnkpKVxcbiBcXHRcXHRyZXR1cm4gZW50cnk7XFxuIFxcbkBAIC01NTY0LDYgKzU2OTIsMTAgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWFzX2ZpbmRfcmFuZ2VfcmV2KTtcXG4gICogU2VhcmNoZXMgZm9yIEBtYXMtXFx1MDAzZWluZGV4LCBzZXRzIEBtYXMtXFx1MDAzZWluZGV4IGFuZCBAbWFzLVxcdTAwM2VsYXN0IHRvIHRoZSByYW5nZSBhbmRcXG4gICogZXJhc2VzIHRoYXQgcmFuZ2UuXFxuICAqXFxuKyAqIE5vdGUgdGhhdCBlcmFzZSByZXF1aXJlcyBhbGxvY2F0aW9ucyBhbmQgd2lsbCB1c2UgR0ZQX0tFUk5FTCB0byBkbyBzbyBpZlxcbisgKiBuZWNlc3NhcnkuICBJZiB0aGUgYWxsb2NhdGlvbiBmYWlscywgdGhlIGludGVybmFsIGxvY2sgd2lsbCBiZSBkcm9wcGVkIHRvXFxuKyAqIHJldHJ5LlxcbisgKlxcbiAgKiBSZXR1cm46IHRoZSBlbnRyeSB0aGF0IHdhcyBlcmFzZWQgb3IgJU5VTEwsIEBtYXMtXFx1MDAzZWluZGV4IGFuZCBAbWFzLVxcdTAwM2VsYXN0IGFyZSB1cGRhdGVkLlxcbiAgKi9cXG4gdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbkBAIC01NTcyLDYgKzU3MDQsMTQgQEAgdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbiBcXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gbWFzLVxcdTAwM2VpbmRleDtcXG4gXFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIE5VTEwpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogSW4gbG93IG1lbW9yeSBzaXR1YXRpb25zLCB0aGUgYWxsb2NhdGlvbiBpcyByZXRyaWVkIHdpdGggdGhlIGdmcCBmbGFnXFxuK1xcdCAqIEdGUF9LRVJORUwuICBUaGUgaW50ZXJuYWwgc3BpbmxvY2sgaXMgZHJvcHBlZCBpbiBtYXNfbm9tZW0oKSwgaG93ZXZlclxcbitcXHQgKiB0aGUgZXh0ZXJuYWwgbG9jayBpcyBub3QgZHJvcHBlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChtdF9leHRlcm5hbF9sb2NrKG1hcy1cXHUwMDNldHJlZSkpXFxuK1xcdFxcdG1pZ2h0X2FsbG9jKEdGUF9LRVJORUwpO1xcbitcXG4gXFx0aWYgKCFtYXNfaXNfYWN0aXZlKG1hcykgfHwgIW1hc19pc19zdGFydChtYXMpKVxcbiBcXHRcXHRtYXMtXFx1MDAzZXN0YXR1cyA9IG1hX3N0YXJ0O1xcbiBcXG5AQCAtNTYwMSwxMCArNTc0MSwxMSBAQCBFWFBPUlRfU1lNQk9MX0dQTChtYXNfZXJhc2UpO1xcbiBcXG4gLyoqXFxuICAqIG1hc19ub21lbSgpIC0gQ2hlY2sgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGFsbG9jYXRpbmcgYW5kIGRvIHRoZSBhbGxvY2F0aW9uXFxuLSAqIGlmIG5lY2Vzc2FyeSBJZiB0aGVyZSBhcmUgYWxsb2NhdGlvbnMsIHRoZW4gZnJlZSB0aGVtLlxcbisgKiBpZiBuZWNlc3NhcnkuXFxuKyAqXFxuICAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZVxcbiAgKiBAZ2ZwOiBUaGUgR0ZQX0ZMQUdTIHRvIHVzZSBmb3IgYWxsb2NhdGlvbnNcXG4tICogUmV0dXJuOiB0cnVlIG9uIGFsbG9jYXRpb24sIGZhbHNlIG90aGVyd2lzZS5cXG4rICogUmV0dXJuOiBGYWxzZSBvbiBubyBtZW1vcnkuICBUcnVlIG90aGVyd2lzZSAocGFydGlhbCBzdWNjZXNzIGFzIHdlbGwpXFxuICAqL1xcbiBib29sIG1hc19ub21lbShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgZ2ZwX3QgZ2ZwKVxcbiBcXHRfX211c3RfaG9sZChtYXMtXFx1MDAzZXRyZWUtXFx1MDAzZW1hX2xvY2spXFxuQEAgLTU2MTIsNiArNTc1MywxMCBAQCBib29sIG1hc19ub21lbShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgZ2ZwX3QgZ2ZwKVxcbiBcXHRpZiAobGlrZWx5KG1hcy1cXHUwMDNlbm9kZSAhPSBNQV9FUlJPUigtRU5PTUVNKSkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuK1xcdC8qIEFsbG9jYXRpb25zIGNhbiBmYWlsLCBkb24ndCBkbyB0aGlzLiAqL1xcbitcXHRXQVJOX09OX09OQ0UoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICBtdF9leHRlcm5hbF9sb2NrKG1hcy1cXHUwMDNldHJlZSkpO1xcbitcXG4gXFx0aWYgKGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkgXFx1MDAyNlxcdTAwMjYgIW10X2V4dGVybmFsX2xvY2sobWFzLVxcdTAwM2V0cmVlKSkge1xcbiBcXHRcXHRtdHJlZV91bmxvY2sobWFzLVxcdTAwM2V0cmVlKTtcXG4gXFx0XFx0bWFzX2FsbG9jX25vZGVzKG1hcywgZ2ZwKTtcXG5AQCAtNTYyMCwxMCArNTc2NSwxNyBAQCBib29sIG1hc19ub21lbShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgZ2ZwX3QgZ2ZwKVxcbiBcXHRcXHRtYXNfYWxsb2Nfbm9kZXMobWFzLCBnZnApO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIW1hcy1cXHUwMDNlc2hlYWYgXFx1MDAyNlxcdTAwMjYgIW1hcy1cXHUwMDNlYWxsb2MpXFxuK1xcdC8qXFxuK1xcdCAqIFJldHVybiBmYWxzZSBvbiB6ZXJvIGZvcndhcmQgcHJvZ3Jlc3MuICBQYXJ0aWFsIGFsbG9jYXRpb25zIGFyZSBrZXB0XFxuK1xcdCAqIHNvIHRoZSByZXRyeSBwYXRoIHdpbGwgYXR0ZW1wdCB0byBnZXQgdGhlIHJlc3QuICBUaGUgZmFpbHVyZSBzaG91bGRcXG4rXFx0ICogbm90IGhhcHBlbiBhcyB3ZSB0cnkgb3VyIGJlc3QgdG8gcmVjbGFpbS4gIFRoZSB1c2VyIHdvdWxkIG5lZWQgYW5cXG4rXFx0ICogZXh0ZXJuYWwgbG9jayB3aXRoIGEgbm9uLWJsb2NraW5nIGdmcCBpbiBhIGxvdyBtZW1vcnkgc2l0dWF0aW9uIC1cXG4rXFx0ICogd2hpY2ggd291bGQgaGF2ZSB0cmlnZ2VyZWQgdGhlIGZpcnN0IHdhcm5pbmcgaW4gdGhpcyBmdW5jdGlvbi5cXG4rXFx0ICovXFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIW1hcy1cXHUwMDNlc2hlYWYgXFx1MDAyNlxcdTAwMjYgIW1hcy1cXHUwMDNlYWxsb2MpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRtYXMtXFx1MDAzZXN0YXR1cyA9IG1hX3N0YXJ0O1xcbitcXHRtYXNfcmVzZXQobWFzKTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuQEAgLTU5MTMsNiArNjA2NSwxMCBAQCBFWFBPUlRfU1lNQk9MKG10cmVlX2FsbG9jX3JyYW5nZSk7XFxuICAqIEVyYXNpbmcgaXMgdGhlIHNhbWUgYXMgYSB3YWxrIHRvIGFuIGVudHJ5IHRoZW4gYSBzdG9yZSBvZiBhIE5VTEwgdG8gdGhhdFxcbiAgKiBFTlRJUkUgcmFuZ2UuICBJbiBmYWN0LCBpdCBpcyBpbXBsZW1lbnRlZCBhcyBzdWNoIHVzaW5nIHRoZSBhZHZhbmNlZCBBUEkuXFxuICAqXFxuKyAqIE5vdGUgdGhhdCBlcmFzZSByZXF1aXJlcyBhbGxvY2F0aW9ucyBhbmQgd2lsbCB1c2UgR0ZQX0tFUk5FTCB0byBkbyBzbyBpZlxcbisgKiBuZWNlc3NhcnkuICBJZiB0aGUgYWxsb2NhdGlvbiBmYWlscywgdGhlIGludGVybmFsIGxvY2sgd2lsbCBiZSBkcm9wcGVkIHRvXFxuKyAqIHJldHJ5LlxcbisgKlxcbiAgKiBSZXR1cm46IFRoZSBlbnRyeSBzdG9yZWQgYXQgdGhlIEBpbmRleCBvciAlTlVMTFxcbiAgKi9cXG4gdm9pZCAqbXRyZWVfZXJhc2Uoc3RydWN0IG1hcGxlX3RyZWUgKm10LCB1bnNpZ25lZCBsb25nIGluZGV4KVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jXFxuaW5kZXggMDYwNzkxM2EzMDIyZDUuLmQ5NjdlNzZhM2MwNjUwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNcXG5AQCAtMzUyMzQsNyArMzUyMzQsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfcHJlYWxsb2Moc3RydWN0IG1hcGxlX3RyZWUgKm10KVxcbiBcXHRtdF9zZXRfbm9uX2tlcm5lbCgxKTtcXG4gXFx0LyogU3Bhbm5pbmcgc3RvcmUgKi9cXG4gXFx0bWFzX3NldF9yYW5nZShcXHUwMDI2bWFzLCAxLCAxMDApO1xcbi1cXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcXHUwMDI2bWFzLCBwdHIsIEdGUF9LRVJORUwgXFx1MDAyNiBHRlBfTk9XQUlUKSA9PSAwKTtcXG4rXFx0TVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoXFx1MDAyNm1hcywgcHRyLCBHRlBfTk9XQUlUKSA9PSAwKTtcXG4gXFx0YWxsb2NhdGVkID0gbWFzX2FsbG9jYXRlZChcXHUwMDI2bWFzKTtcXG4gXFx0aGVpZ2h0ID0gbWFzX210X2hlaWdodChcXHUwMDI2bWFzKTtcXG4gXFx0TVRfQlVHX09OKG10LCBhbGxvY2F0ZWQgIT0gMCk7XFxuQEAgLTM1MjU3LDcgKzM1MjU3LDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGNoZWNrX3ByZWFsbG9jKHN0cnVjdCBtYXBsZV90cmVlICptdClcXG4gXFx0TVRfQlVHX09OKG10LCBtYXNfYWxsb2NhdGVkKFxcdTAwMjZtYXMpICE9IDApO1xcbiBcXHRtYXNfc2V0X3JhbmdlKFxcdTAwMjZtYXMsIDAsIDIwMCk7XFxuIFxcdG10X3NldF9ub25fa2VybmVsKDEpO1xcbi1cXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcXHUwMDI2bWFzLCBwdHIsIEdGUF9LRVJORUwgXFx1MDAyNiBHRlBfTk9XQUlUKSA9PSAwKTtcXG4rXFx0TVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoXFx1MDAyNm1hcywgcHRyLCBHRlBfTk9XQUlUKSA9PSAwKTtcXG4gXFx0YWxsb2NhdGVkID0gbWFzX2FsbG9jYXRlZChcXHUwMDI2bWFzKTtcXG4gXFx0aGVpZ2h0ID0gbWFzX210X2hlaWdodChcXHUwMDI2bWFzKTtcXG4gXFx0TVRfQlVHX09OKG10LCBhbGxvY2F0ZWQgIT0gMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA0OjIzOjQ3LjAzMjMxMjc0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0NzA4NzAxMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVCVUdfTUFQTEVfVFJFRVwiLFxuICAgIFwiUFJPVkVfTE9DS0lOR1wiLFxuICAgIFwiTE9DS0RFUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hc19hbGxvY19jeWNsaWNcIixcbiAgICBcIm1hc19lcmFzZVwiLFxuICAgIFwibXRyZWVfZXJhc2VcIixcbiAgICBcIm1hc19ub21lbVwiLFxuICAgIFwibG9ja19zZXF1ZW5jZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbG9jayBzZXF1ZW5jZSB2YWxpZGF0aW9uIGZvciBtYXBsZSB0cmVlIG9wZXJhdGlvbnMgdXNpbmcgbG9ja2RlcCwgYW5kIG9wdGltaXplcyBtYXBsZSB0cmVlIG5vZGUgc3RvcmUgb3BlcmF0aW9ucyBhbmQgcGFyZW50IHBvaW50ZXIgdXBkYXRlcy4gSXQgYWxzbyBmaXhlcyB3cmFwLWFyb3VuZCBoYW5kbGluZyBpbiBgbWFzX2FsbG9jX2N5Y2xpY2AgYW5kIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yIGluIGBtYXNfZXJhc2VgIGFuZCBgbWFzX25vbWVtYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvY2tpbmcgdmFsaWRhdGlvbiwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjVhYWU2ODFjNzNkYWU3ZmVhYWIwMTNjMTYwOTUyNjljMDFmYWJhYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMDQ6MjM6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdFxuaW5kZXggY2NkZDE2MTVjZjk3NGYuLjFlYWUyNGE5YzE4YjRhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdFxuQEAgLTE3LDcgKzE3LDggQEAgc3VwcG9ydHMgaXRlcmF0aW5nIG92ZXIgYSByYW5nZSBvZiBlbnRyaWVzIGFuZCBnb2luZyB0byB0aGUgcHJldmlvdXMgb3IgbmV4dFxuIGVudHJ5IGluIGEgY2FjaGUtZWZmaWNpZW50IG1hbm5lci4gIFRoZSB0cmVlIGNhbiBhbHNvIGJlIHB1dCBpbnRvIGFuIFJDVS1zYWZlXG4gbW9kZSBvZiBvcGVyYXRpb24gd2hpY2ggYWxsb3dzIHJlYWRpbmcgYW5kIHdyaXRpbmcgY29uY3VycmVudGx5LiAgV3JpdGVycyBtdXN0XG4gc3luY2hyb25pemUgb24gYSBsb2NrLCB3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQgc3BpbmxvY2ssIG9yIHRoZSB1c2VyIGNhbiBzZXRcbi10aGUgbG9jayB0byBhbiBleHRlcm5hbCBsb2NrIG9mIGEgZGlmZmVyZW50IHR5cGUuXG4rdGhlIGxvY2sgdG8gYW4gZXh0ZXJuYWwgbG9jayBvZiBhIGRpZmZlcmVudCB0eXBlLiAgTm90ZSB0aGF0IGV4dGVybmFsIGxvY2tzIG1heVxuK2ludGVyZmVyZSB3aXRoIGFsbG9jYXRpb25zIGluIGEgbG93IG1lbW9yeSBzaXR1YXRpb24uXG4gXG4gVGhlIE1hcGxlIFRyZWUgbWFpbnRhaW5zIGEgc21hbGwgbWVtb3J5IGZvb3RwcmludCBhbmQgd2FzIGRlc2lnbmVkIHRvIHVzZVxuIG1vZGVybiBwcm9jZXNzb3IgY2FjaGUgZWZmaWNpZW50bHkuICBUaGUgbWFqb3JpdHkgb2YgdGhlIHVzZXJzIHdpbGwgYmUgYWJsZSB0b1xuQEAgLTQyLDYgKzQzLDE1IEBAIHN1Y2Nlc3NmdWwgc3RvcmUgb3BlcmF0aW9uIHdpdGhpbiBhIGdpdmVuXG4gY29kZSBzZWdtZW50IHdoZW4gYWxsb2NhdGluZyBjYW5ub3QgYmUgZG9uZS4gIEFsbG9jYXRpb25zIG9mIG5vZGVzIGFyZVxuIHJlbGF0aXZlbHkgc21hbGwgYXQgYXJvdW5kIDI1NiBieXRlcy5cbiBcbitTaW5jZSB0aGUgbWFwbGUgdHJlZSB1c2VzIGludGVybmFsIG5vZGVzIHRoYXQgYXJlIGFsbG9jYXRlZCBhbmQgaGFzIHJ1bGVzIG9uXG4rZGF0YSBkZW5zaXR5LCBlcmFzaW5nIGFuIGVudHJ5IG1heSBjYXVzZSBhbGxvY2F0aW9ucyB0byBvY2N1ci4gIFRoYXQgaXMsXG4rZXJhc2luZyBhbiBlbnRyeSBtYXkgY29uc3VtZSBtZW1vcnkuICBVc2VycyBtdXN0IHRha2UgY2FyZSB0byBlbnN1cmUgdGhhdCB0aGV5XG4rZG8gbm90IHZpb2xhdGUgdGhlIGxhcmdlciBzeXN0ZW0gY29uc3RyYWludHMgb24gd2hlbiBhbmQgaG93IG1lbW9yeSBpc1xuK2FsbG9jYXRlZC4gIE1vc3Qgc2l0dWF0aW9ucyBhcmUgZmluZSB0byBhbGxvY2F0ZSwgYnV0IHRoZSBwcmUtYWxsb2NhdGlvblxuK3N1cHBvcnQgaXMgcHJvdmlkZWQgYXMgYSBtZWNoYW5pc20gdG8gYXZvaWQgdHJpY2tpZXIgc2l0dWF0aW9ucy4gIFRoZXJlIGlzIGFsc29cbit0aGUgcG9zc2liaWxpdHkgb2YgdXNpbmcgc3BlY2lhbCBlbnRyaWVzIGFuZCBjbGVhbiB1cCB0aGUgdHJlZSBsYXRlciwgaW5cbitleHRyZW1lIGNpcmN1bXN0YW5jZXMuXG4rXG4gLi4gX21hcGxlLXRyZWUtbm9ybWFsLWFwaTpcbiBcbiBOb3JtYWwgQVBJXG5AQCAtNjMsNyArNzMsOCBAQCBzdWNjZXNzIG9yIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlLiAgbXRyZWVfc3RvcmVfcmFuZ2UoKSB3b3JrcyBpbiB0aGUgc2FtZSB3YXlcbiBidXQgdGFrZXMgYSByYW5nZS4gIG10cmVlX2xvYWQoKSBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBlbnRyeSBzdG9yZWQgYXQgYVxuIGdpdmVuIGluZGV4LiAgWW91IGNhbiB1c2UgbXRyZWVfZXJhc2UoKSB0byBlcmFzZSBhbiBlbnRpcmUgcmFuZ2UgYnkgb25seVxuIGtub3dpbmcgb25lIHZhbHVlIHdpdGhpbiB0aGF0IHJhbmdlLCBvciBtdHJlZV9zdG9yZSgpIGNhbGwgd2l0aCBhbiBlbnRyeSBvZlxuLU5VTEwgbWF5IGJlIHVzZWQgdG8gcGFydGlhbGx5IGVyYXNlIGEgcmFuZ2Ugb3IgbWFueSByYW5nZXMgYXQgb25jZS5cbitOVUxMIG1heSBiZSB1c2VkIHRvIHBhcnRpYWxseSBlcmFzZSBhIHJhbmdlIG9yIG1hbnkgcmFuZ2VzIGF0IG9uY2UuICBOb3RlIHRoYXRcbittdHJlZV9lcmFzZSgpIG1heSB1c2UgR0ZQX0tFUk5FTCBvbiBhbGxvY2F0aW9ucy5cbiBcbiBJZiB5b3Ugd2FudCB0byBvbmx5IHN0b3JlIGEgbmV3IGVudHJ5IHRvIGEgcmFuZ2UgKG9yIGluZGV4KSBpZiB0aGF0IHJhbmdlIGlzXG4gY3VycmVudGx5IGBgTlVMTGBgLCB5b3UgY2FuIHVzZSBtdHJlZV9pbnNlcnRfcmFuZ2UoKSBvciBtdHJlZV9pbnNlcnQoKSB3aGljaFxuQEAgLTE2Myw3ICsxNzQsOSBAQCBZb3UgY2FuIHVzZSBtYXNfZXJhc2UoKSB0byBlcmFzZSBhbiBlbnRpcmUgcmFuZ2UgYnkgc2V0dGluZyBpbmRleCBhbmRcbiBsYXN0IG9mIHRoZSBtYXBsZSBzdGF0ZSB0byB0aGUgZGVzaXJlZCByYW5nZSB0byBlcmFzZS4gIFRoaXMgd2lsbCBlcmFzZVxuIHRoZSBmaXJzdCByYW5nZSB0aGF0IGlzIGZvdW5kIGluIHRoYXQgcmFuZ2UsIHNldCB0aGUgbWFwbGUgc3RhdGUgaW5kZXhcbiBhbmQgbGFzdCBhcyB0aGUgcmFuZ2UgdGhhdCB3YXMgZXJhc2VkIGFuZCByZXR1cm4gdGhlIGVudHJ5IHRoYXQgZXhpc3RlZFxuLWF0IHRoYXQgbG9jYXRpb24uXG4rYXQgdGhhdCBsb2NhdGlvbi4gIE5vdGUgdGhhdCBtYXNfZXJhc2UoKSBtYXkgYWxsb2NhdGUgd2l0aCB0aGUgR0ZQX0tFUk5FTCBmbGFnLlxuK0lmIHRoaXMgaXMgbm90IG9rYXksIGNvbnNpZGVyIHVzaW5nIG1hc19zdG9yZV9nZnAoKSBhbmQgcGFzcyBpdCBhIGBgTlVMTGBgLFxuK2FmdGVyIHNldHRpbmcgdXAgdGhlIGNvcnJlY3QgcmFuZ2UgYnkgd2Fsa2luZyB0byB0aGUgZW50cnkuXG4gXG4gWW91IGNhbiB3YWxrIGVhY2ggZW50cnkgd2l0aGluIGEgcmFuZ2UgYnkgdXNpbmcgbWFzX2Zvcl9lYWNoKCkuICBJZiB5b3Ugd2FudFxuIHRvIHdhbGsgZWFjaCBlbGVtZW50IG9mIHRoZSB0cmVlIHRoZW4gYGAwYGAgYW5kIGBgVUxPTkdfTUFYYGAgbWF5IGJlIHVzZWQgYXNcbkBAIC0yMTEsNyArMjI0LDcgQEAgQWR2YW5jZWQgTG9ja2luZ1xuIFxuIFRoZSBtYXBsZSB0cmVlIHVzZXMgYSBzcGlubG9jayBieSBkZWZhdWx0LCBidXQgZXh0ZXJuYWwgbG9ja3MgY2FuIGJlIHVzZWQgZm9yXG4gdHJlZSB1cGRhdGVzIGFzIHdlbGwuICBUbyB1c2UgYW4gZXh0ZXJuYWwgbG9jaywgdGhlIHRyZWUgbXVzdCBiZSBpbml0aWFsaXplZFxuLXdpdGggdGhlIGBgTVRfRkxBR1NfTE9DS19FWFRFUk4gZmxhZ2BgLCB0aGlzIGlzIHVzdWFsbHkgZG9uZSB3aXRoIHRoZVxuK3dpdGggdGhlIGBgTVRfRkxBR1NfTE9DS19FWFRFUk5gYCBmbGFnLCB0aGlzIGlzIHVzdWFsbHkgZG9uZSB3aXRoIHRoZVxuIE1UUkVFX0lOSVRfRVhUKCkgI2RlZmluZSwgd2hpY2ggdGFrZXMgYW4gZXh0ZXJuYWwgbG9jayBhcyBhbiBhcmd1bWVudC5cbiBcbiBGdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oXG5pbmRleCA2MjE1NjYzNDU0MDZkZC4uYTY0NTFlY2JiZTlhMDUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcbkBAIC0yNzMsNiArMjczLDkgQEAgZXh0ZXJuIHN0cnVjdCBwaW5fY29va2llIGxvY2tfcGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKTtcbiBleHRlcm4gdm9pZCBsb2NrX3JlcGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSk7XG4gZXh0ZXJuIHZvaWQgbG9ja191bnBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUpO1xuIFxuK2V4dGVybiB1MzIgbG9ja19zZXF1ZW5jZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spO1xuKyNkZWZpbmUgbG9ja2RlcF9zZXF1ZW5jZShsb2NrKVx0bG9ja19zZXF1ZW5jZShcdTAwMjYobG9jayktXHUwMDNlZGVwX21hcClcbitcbiAjZGVmaW5lIGxvY2tkZXBfZGVwdGgodHNrKVx0KGRlYnVnX2xvY2tzID8gKHRzayktXHUwMDNlbG9ja2RlcF9kZXB0aCA6IDApXG4gXG4gI2RlZmluZSBsb2NrZGVwX2Fzc2VydChjb25kKVx0XHRcXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmhcbmluZGV4IGVhZTExNWEyNjQ4ODU2Li41NWM0YjE1MmZlZGY3YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaFxuQEAgLTI1Myw3ICsyNTMsOCBAQCBzdHJ1Y3QgaGVsZF9sb2NrIHtcbiBcdHVuc2lnbmVkIGludCBoYXJkaXJxc19vZmY6MTtcbiBcdHVuc2lnbmVkIGludCBzeW5jOjE7XG4gXHR1bnNpZ25lZCBpbnQgcmVmZXJlbmNlczoxMTtcdFx0XHRcdFx0LyogMzIgYml0cyAqL1xuLVx0dW5zaWduZWQgaW50IHBpbl9jb3VudDtcbitcdHVuc2lnbmVkIGludCBwaW5fY291bnQ6MjQ7XG4rXHR1bnNpZ25lZCBpbnQgc2VxX2NvdW50Ojg7XG4gfTtcbiBcbiAjZWxzZSAvKiAhQ09ORklHX0xPQ0tERVAgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaCBiL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oXG5pbmRleCA0YTU2MzE5MDZhZmZiNS4uNWUwYmQyODU3ZDk0MWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcbkBAIC0yOSwxMyArMjksMTEgQEBcbiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFNcdDMxXHQvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC1cdTAwM2VwYXJlbnQgKi9cbiAjZGVmaW5lIE1BUExFX1JBTkdFNjRfU0xPVFNcdDE2XHQvKiAyNTYgYnl0ZXMgKi9cbiAjZGVmaW5lIE1BUExFX0FSQU5HRTY0X1NMT1RTXHQxMFx0LyogMjQwIGJ5dGVzICovXG4tI2RlZmluZSBNQVBMRV9BTExPQ19TTE9UU1x0KE1BUExFX05PREVfU0xPVFMgLSAxKVxuICNlbHNlXG4gLyogMzJiaXQgc2l6ZXMgKi9cbiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFNcdDYzXHQvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC1cdTAwM2VwYXJlbnQgKi9cbiAjZGVmaW5lIE1BUExFX1JBTkdFNjRfU0xPVFNcdDMyXHQvKiAyNTYgYnl0ZXMgKi9cbiAjZGVmaW5lIE1BUExFX0FSQU5HRTY0X1NMT1RTXHQyMVx0LyogMjQwIGJ5dGVzICovXG4tI2RlZmluZSBNQVBMRV9BTExPQ19TTE9UU1x0KE1BUExFX05PREVfU0xPVFMgLSAyKVxuICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR182NEJJVCkgfHwgZGVmaW5lZChCVUlMRF9WRFNPMzJfNjQpICovXG4gXG4gI2RlZmluZSBNQVBMRV9OT0RFX01BU0tcdFx0MjU1VUxcbkBAIC00ODUsNiArNDgzLDEyIEBAIHN0cnVjdCBtYV9zdGF0ZSB7XG4gXHR1bnNpZ25lZCBjaGFyIG1hc19mbGFncztcbiBcdHVuc2lnbmVkIGNoYXIgZW5kO1x0XHQvKiBUaGUgZW5kIG9mIHRoZSBub2RlICovXG4gXHRlbnVtIHN0b3JlX3R5cGUgc3RvcmVfdHlwZTtcdC8qIFRoZSB0eXBlIG9mIHN0b3JlIG5lZWRlZCBmb3IgdGhpcyBvcGVyYXRpb24gKi9cbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcbitcdHUzMiBsZF9zZXE7XG4rI2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxuK1x0dW5zaWduZWQgbG9uZyByY3VfZ3A7XG4rI2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xuKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xuIH07XG4gXG4gc3RydWN0IG1hX3dyX3N0YXRlIHtcbkBAIC01NzIsNyArNTc2LDcgQEAgdm9pZCBtYXBsZV90cmVlX2luaXQodm9pZCk7XG4gdm9pZCBtYXNfZGVzdHJveShzdHJ1Y3QgbWFfc3RhdGUgKm1hcyk7XG4gXG4gdm9pZCAqbWFzX3ByZXYoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKTtcbi12b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xuK3ZvaWQgKm1hc19wcmV2X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbik7XG4gdm9pZCAqbWFzX25leHQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KTtcbiB2b2lkICptYXNfbmV4dF9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuaW5kZXggMzczYmNjMDU5OGQxMGIuLjE0ZDVjZThkZDYxMzY1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbkBAIC0xMjg4LDYgKzEyODgsNyBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3Qge1xuIFx0dTY0XHRcdFx0XHRjdXJyX2NoYWluX2tleTtcbiBcdGludFx0XHRcdFx0bG9ja2RlcF9kZXB0aDtcbiBcdHVuc2lnbmVkIGludFx0XHRcdGxvY2tkZXBfcmVjdXJzaW9uO1xuK1x0dW5zaWduZWQgaW50XHRcdFx0bG9ja2RlcF9zZXE7XG4gXHRzdHJ1Y3QgaGVsZF9sb2NrXHRcdGhlbGRfbG9ja3NbTUFYX0xPQ0tfREVQVEhdO1xuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuaW5kZXggMmQ0YzViYWI1YWY4ODcuLmIyYjBhNTA2OTYwYjE2IDEwMDY0NFxuLS0tIGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG4rKysgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbkBAIC01MDc3LDcgKzUwNzcsNyBAQCBzdGF0aWMgaW50IF9fbG9ja19pc19oZWxkKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgaW50IHJlYWQpO1xuIHN0YXRpYyBpbnQgX19sb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsXG4gXHRcdFx0ICBpbnQgdHJ5bG9jaywgaW50IHJlYWQsIGludCBjaGVjaywgaW50IGhhcmRpcnFzX29mZixcbiBcdFx0XHQgIHN0cnVjdCBsb2NrZGVwX21hcCAqbmVzdF9sb2NrLCB1bnNpZ25lZCBsb25nIGlwLFxuLVx0XHRcdCAgaW50IHJlZmVyZW5jZXMsIGludCBwaW5fY291bnQsIGludCBzeW5jKVxuK1x0XHRcdCAgaW50IHJlZmVyZW5jZXMsIGludCBwaW5fY291bnQsIGludCBzeW5jLCBpbnQgc2VxKVxuIHtcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7XG4gXHRzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBOVUxMO1xuQEAgLTUxODMsNiArNTE4Myw3IEBAIHN0YXRpYyBpbnQgX19sb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsXG4gXHRobG9jay1cdTAwM2Vob2xkdGltZV9zdGFtcCA9IGxvY2tzdGF0X2Nsb2NrKCk7XG4gI2VuZGlmXG4gXHRobG9jay1cdTAwM2VwaW5fY291bnQgPSBwaW5fY291bnQ7XG4rXHRobG9jay1cdTAwM2VzZXFfY291bnQgPSBzZXE7XG4gXG4gXHRpZiAoY2hlY2tfd2FpdF9jb250ZXh0KGN1cnIsIGhsb2NrKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNTM4OCw3ICs1Mzg5LDcgQEAgc3RhdGljIGludCByZWFjcXVpcmVfaGVsZF9sb2NrcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHVuc2lnbmVkIGludCBkZXB0aCxcbiBcdFx0XHRcdCAgICBobG9jay1cdTAwM2VyZWFkLCBobG9jay1cdTAwM2VjaGVjayxcbiBcdFx0XHRcdCAgICBobG9jay1cdTAwM2VoYXJkaXJxc19vZmYsXG4gXHRcdFx0XHQgICAgaGxvY2stXHUwMDNlbmVzdF9sb2NrLCBobG9jay1cdTAwM2VhY3F1aXJlX2lwLFxuLVx0XHRcdFx0ICAgIGhsb2NrLVx1MDAzZXJlZmVyZW5jZXMsIGhsb2NrLVx1MDAzZXBpbl9jb3VudCwgMCkpIHtcbitcdFx0XHRcdCAgICBobG9jay1cdTAwM2VyZWZlcmVuY2VzLCBobG9jay1cdTAwM2VwaW5fY291bnQsIDAsIGhsb2NrLVx1MDAzZXNlcV9jb3VudCkpIHtcbiBcdFx0Y2FzZSAwOlxuIFx0XHRcdHJldHVybiAxO1xuIFx0XHRjYXNlIDE6XG5AQCAtNTY4NCw2ICs1Njg1LDI0IEBAIHN0YXRpYyB2b2lkIF9fbG9ja191bnBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUgY29va2llXG4gXHRXQVJOKDEsIFwidW5waW5uaW5nIGFuIHVuaGVsZCBsb2NrXFxuXCIpO1xuIH1cbiBcbitzdGF0aWMgdTMyIF9fbG9ja19zZXF1ZW5jZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDtcbitcdGludCBpO1xuK1xuK1x0aWYgKHVubGlrZWx5KCFkZWJ1Z19sb2NrcykpXG4rXHRcdHJldHVybiB+MDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGN1cnItXHUwMDNlbG9ja2RlcF9kZXB0aDsgaSsrKSB7XG4rXHRcdHN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrID0gY3Vyci1cdTAwM2VoZWxkX2xvY2tzICsgaTtcbitcbitcdFx0aWYgKG1hdGNoX2hlbGRfbG9jayhobG9jaywgbG9jaykpXG4rXHRcdFx0cmV0dXJuIGhsb2NrLVx1MDAzZXNlcV9jb3VudDtcbitcdH1cbitcbitcdHJldHVybiB+MDtcbit9XG4rXG4gLypcbiAgKiBDaGVjayB3aGV0aGVyIHdlIGZvbGxvdyB0aGUgaXJxLWZsYWdzIHN0YXRlIHByZWNpc2VseTpcbiAgKi9cbkBAIC01ODY2LDcgKzU4ODUsOCBAQCB2b2lkIGxvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcyxcbiBcbiBcdGxvY2tkZXBfcmVjdXJzaW9uX2luYygpO1xuIFx0X19sb2NrX2FjcXVpcmUobG9jaywgc3ViY2xhc3MsIHRyeWxvY2ssIHJlYWQsIGNoZWNrLFxuLVx0XHQgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDAsIDAsIDApO1xuK1x0XHQgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDAsIDAsIDAsXG4rXHRcdCAgICAgICArK2N1cnJlbnQtXHUwMDNlbG9ja2RlcF9zZXEpO1xuIFx0bG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7XG4gXHRyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIH1cbkBAIC01OTE0LDcgKzU5MzQsOCBAQCB2b2lkIGxvY2tfc3luYyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIHN1YmNsYXNzLCBpbnQgcmVhZCxcbiBcbiBcdGxvY2tkZXBfcmVjdXJzaW9uX2luYygpO1xuIFx0X19sb2NrX2FjcXVpcmUobG9jaywgc3ViY2xhc3MsIDAsIHJlYWQsIGNoZWNrLFxuLVx0XHQgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDAsIDAsIDEpO1xuK1x0XHQgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDAsIDAsIDEsXG4rXHRcdCAgICAgICArK2N1cnJlbnQtXHUwMDNlbG9ja2RlcF9zZXEpO1xuIFx0Y2hlY2tfY2hhaW5fa2V5KGN1cnJlbnQpO1xuIFx0bG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7XG4gXHRyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuQEAgLTYwMDAsNiArNjAyMSwyNiBAQCB2b2lkIGxvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llIGNvb2tpZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobG9ja191bnBpbl9sb2NrKTtcbiBcbit1MzIgbG9ja19zZXF1ZW5jZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spXG4re1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHUzMiBzZXEgPSB+MDtcbitcbitcdGlmICh1bmxpa2VseSghbG9ja2RlcF9lbmFibGVkKCkpKVxuK1x0XHRyZXR1cm4gc2VxO1xuK1xuK1x0cmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdGNoZWNrX2ZsYWdzKGZsYWdzKTtcbitcbitcdGxvY2tkZXBfcmVjdXJzaW9uX2luYygpO1xuK1x0c2VxID0gX19sb2NrX3NlcXVlbmNlKGxvY2spO1xuK1x0bG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7XG4rXHRyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuK1xuK1x0cmV0dXJuIHNlcTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobG9ja19zZXF1ZW5jZSk7XG4rXG4gI2lmZGVmIENPTkZJR19MT0NLX1NUQVRcbiBzdGF0aWMgdm9pZCBwcmludF9sb2NrX2NvbnRlbnRpb25fYnVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycixcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jayxcbmRpZmYgLS1naXQgYS9saWIvbWFwbGVfdHJlZS5jIGIvbGliL21hcGxlX3RyZWUuY1xuaW5kZXggZTUyODc2NDM1Yjc3ZjAuLjZkNzFmZGM0MTQ3MDY0IDEwMDY0NFxuLS0tIGEvbGliL21hcGxlX3RyZWUuY1xuKysrIGIvbGliL21hcGxlX3RyZWUuY1xuQEAgLTQ2OSw3ICs0NjksNyBAQCBzdGF0aWMgaW5saW5lXG4gdm9pZCBtYXNfc2V0X3BhcmVudChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICplbm9kZSxcbiBcdFx0ICAgIGNvbnN0IHN0cnVjdCBtYXBsZV9lbm9kZSAqcGFyZW50LCB1bnNpZ25lZCBjaGFyIHNsb3QpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyB2YWwgPSAodW5zaWduZWQgbG9uZylwYXJlbnQ7XG4rXHR1bnNpZ25lZCBsb25nIHZhbDtcbiBcdHVuc2lnbmVkIGxvbmcgc2hpZnQ7XG4gXHR1bnNpZ25lZCBsb25nIHR5cGU7XG4gXHRlbnVtIG1hcGxlX3R5cGUgcF90eXBlID0gbXRlX25vZGVfdHlwZShwYXJlbnQpO1xuQEAgLTQ5MCwxMSArNDkwLDQ3IEBAIHZvaWQgbWFzX3NldF9wYXJlbnQoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUsXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuK1x0dmFsID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50O1xuIFx0dmFsIFx1MDAyNj0gfk1BUExFX05PREVfTUFTSzsgLyogQ2xlYXIgYWxsIG5vZGUgbWV0YWRhdGEgaW4gcGFyZW50ICovXG4gXHR2YWwgfD0gKHNsb3QgXHUwMDNjXHUwMDNjIHNoaWZ0KSB8IHR5cGU7XG4gXHRtdGVfdG9fbm9kZShlbm9kZSktXHUwMDNlcGFyZW50ID0gbWFfcGFyZW50X3B0cih2YWwpO1xuIH1cbiBcbisvKlxuKyAqIG1hc19zZXRfcGFyZW50X3Nsb3RzKCkgLSBCdWxrIG9wZXJhdGlvbiB0byBzZXQgbWFueSBzbG90IHBhcmVudCBwb2ludGVyc1xuKyAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZVxuKyAqIEBwYXJlbnQ6IFRoZSBlbmNvZGVkIG1hcGxlIG5vZGUgdGhhdCBpcyB0aGUgcGFyZW50IG9mIEBlbm9kZS5cbisgKiBAc2xvdDogVGhlIHNsb3QgdGhhdCBvZiB0aGUgQGVub2RlLlxuKyAqIEBzdGFydF9zbG90OiBUaGUgb2Zmc2V0IGludG8gQHNsb3RcbisgKiBAY291bnQ6IFRoZSBudW1iZXIgb2Ygc2xvdHMgdG8gc2V0IChlZzogZXhjbHVzaXZlKVxuKyAqL1xuK3N0YXRpYyBpbmxpbmVcbit2b2lkIG1hc19zZXRfcGFyZW50X3Nsb3RzKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnBhcmVudCxcbitcdHZvaWQgX19yY3UgKipzbG90cywgdW5zaWduZWQgY2hhciBzdGFydF9zbG90LCB1bnNpZ25lZCBjaGFyIGNvdW50KVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdmFsO1xuK1x0dW5zaWduZWQgbG9uZyBzaGlmdDtcbitcdHVuc2lnbmVkIGxvbmcgdHlwZTtcbitcdGVudW0gbWFwbGVfdHlwZSBwX3R5cGUgPSBtdGVfbm9kZV90eXBlKHBhcmVudCk7XG4rXHR1bnNpZ25lZCBjaGFyIGk7XG4rXG4rXHRNQVNfQlVHX09OKG1hcywgcF90eXBlICE9IG1hcGxlX3JhbmdlXzY0IFx1MDAyNlx1MDAyNlxuK1x0XHRcdHBfdHlwZSAhPSBtYXBsZV9hcmFuZ2VfNjQpO1xuK1xuK1x0c2hpZnQgPSBNQVBMRV9QQVJFTlRfU0xPVF9TSElGVDtcbitcdHR5cGUgPSBNQVBMRV9QQVJFTlRfUkFOR0U2NDtcbitcbitcdHZhbCA9ICh1bnNpZ25lZCBsb25nKXBhcmVudDtcbitcdHZhbCBcdTAwMjY9IH5NQVBMRV9OT0RFX01BU0s7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSsrKSB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgcHZhbCA9IHZhbCB8ICgoc3RhcnRfc2xvdCArIGkpIFx1MDAzY1x1MDAzYyBzaGlmdCkgfCB0eXBlO1xuK1x0XHRzdHJ1Y3QgbWFwbGVfZW5vZGUgKmNoaWxkID0gKHN0cnVjdCBtYXBsZV9lbm9kZSAqKXNsb3RzW2ldO1xuK1xuK1x0XHRtdGVfdG9fbm9kZShjaGlsZCktXHUwMDNlcGFyZW50ID0gbWFfcGFyZW50X3B0cihwdmFsKTtcbitcdH1cbit9XG4rXG4gLypcbiAgKiBtdGVfcGFyZW50X3Nsb3QoKSAtIGdldCB0aGUgcGFyZW50IHNsb3Qgb2YgQGVub2RlLlxuICAqIEBlbm9kZTogVGhlIGVuY29kZWQgbWFwbGUgbm9kZS5cbkBAIC0xMTUzLDYgKzExODksNzAgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19mcmVlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnVzZWQpXG4gXHRtYV9mcmVlX3JjdShtdGVfdG9fbm9kZSh1c2VkKSk7XG4gfVxuIFxuK1xuKyNpZmRlZiBDT05GSUdfTE9DS0RFUFxuK3N0cnVjdCBsb2NrZGVwX21hcCAqbWFzX2xvY2tkZXBfbWFwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuK3tcbitcdHN0cnVjdCBtYXBsZV90cmVlICptdCA9IG1hcy1cdTAwM2V0cmVlO1xuK1xuK1x0aWYgKG10X2V4dGVybmFsX2xvY2sobXQpKVxuK1x0XHRyZXR1cm4gbXQtXHUwMDNlbWFfZXh0ZXJuYWxfbG9jaztcbitcbitcdHJldHVybiBcdTAwMjYobXQtXHUwMDNlbWFfbG9jaykuZGVwX21hcDtcbit9XG4rXG4rI2VuZGlmXG4rXG4rc3RhdGljIHZvaWQgbWFzX2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpXG4re1xuK1xuKyNpZmRlZiBDT05GSUdfTE9DS0RFUFxuK1x0aWYgKCFtYXNfaXNfYWN0aXZlKG1hcykpXG4rXHRcdHJldHVybjtcbitcbisjaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXG4rXHRpZiAoIW10X2xvY2tfaXNfaGVsZChtYXMtXHUwMDNldHJlZSkpIHtcbitcdFx0aWYgKG10X2luX3JjdShtYXMtXHUwMDNldHJlZSkpXG4rXHRcdFx0V0FSTl9PTl9PTkNFKHBvbGxfc3RhdGVfc3luY2hyb25pemVfcmN1KG1hcy1cdTAwM2VyY3VfZ3ApKTtcbitcdH1cbisjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXG4rXG4rXHRpZiAobXRfbG9ja19pc19oZWxkKG1hcy1cdTAwM2V0cmVlKSlcbitcdFx0V0FSTl9PTl9PTkNFKG1hcy1cdTAwM2VsZF9zZXEgIT0gbG9ja19zZXF1ZW5jZShtYXNfbG9ja2RlcF9tYXAobWFzKSkpO1xuKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xuK1xuK31cbitcbitzdGF0aWMgdm9pZCBtYXNfaW5pdF9sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuK3tcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcbisjaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXG4rXHRpZiAoIW10X2xvY2tfaXNfaGVsZChtYXMtXHUwMDNldHJlZSkpIHtcbitcdFx0aWYgKG10X2luX3JjdShtYXMtXHUwMDNldHJlZSkpXG4rXHRcdFx0bWFzLVx1MDAzZXJjdV9ncCA9IGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9yY3UoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuKyNlbmRpZiAvKiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QgKi9cbitcbitcdGlmIChtdF9sb2NrX2lzX2hlbGQobWFzLVx1MDAzZXRyZWUpKVxuK1x0XHRtYXMtXHUwMDNlbGRfc2VxID0gbG9ja19zZXF1ZW5jZShtYXNfbG9ja2RlcF9tYXAobWFzKSk7XG4rI2VuZGlmIC8qIENPTkZJR19MT0NLREVQICovXG4rXG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuK3tcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcbisjaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXG4rXHRpZiAobWFzX2lzX3N0YXJ0KG1hcykgfHwgbWFzX2lzX3BhdXNlZChtYXMpKSB7XG4rXHRcdG1hc19pbml0X2xvY2tfY2hlY2sobWFzKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuKyNlbmRpZiAvKiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QgKi9cbitcdG1hc19sb2NrX2NoZWNrKG1hcyk7XG4rI2VuZGlmIC8qIENPTkZJR19MT0NLREVQICovXG4rfVxuK1xuIC8qXG4gICogbWFzX3N0YXJ0KCkgLSBTZXRzIHVwIG1hcGxlIHN0YXRlIGZvciBvcGVyYXRpb25zLlxuICAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZS5cbkBAIC0xMTcxLDYgKzEyNzEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXBsZV9lbm9kZSAqbWFzX3N0YXJ0KHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIFx0aWYgKGxpa2VseShtYXNfaXNfc3RhcnQobWFzKSkpIHtcbiBcdFx0c3RydWN0IG1hcGxlX2Vub2RlICpyb290O1xuIFxuK1x0XHRtYXNfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRcdG1hcy1cdTAwM2VtaW4gPSAwO1xuIFx0XHRtYXMtXHUwMDNlbWF4ID0gVUxPTkdfTUFYO1xuIFxuQEAgLTE1MDEsMTQgKzE2MDIsMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19wYXJlbnRfZ2FwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBjaGFyIG9mZnNldCxcbiBcdGdvdG8gYXNjZW5kO1xuIH1cbiBcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWFzX3VwZGF0ZV9nYXBfa25vd24oc3RydWN0IG1hX3N0YXRlICptYXMsXG4rXHRcdHVuc2lnbmVkIGxvbmcgZ2FwKVxuK3tcbitcdHVuc2lnbmVkIGNoYXIgcHNsb3Q7XG4rXHR1bnNpZ25lZCBsb25nIHBfZ2FwO1xuK1xuK1x0cHNsb3QgPSBtdGVfcGFyZW50X3Nsb3QobWFzLVx1MDAzZW5vZGUpO1xuK1x0cF9nYXAgPSBtYV9nYXBzKG10ZV9wYXJlbnQobWFzLVx1MDAzZW5vZGUpLFxuK1x0XHRcdG1hc19wYXJlbnRfdHlwZShtYXMsIG1hcy1cdTAwM2Vub2RlKSlbcHNsb3RdO1xuK1xuK1x0aWYgKHBfZ2FwICE9IGdhcClcbitcdFx0bWFzX3BhcmVudF9nYXAobWFzLCBwc2xvdCwgZ2FwKTtcbit9XG4rXG4gLypcbiAgKiBtYXNfdXBkYXRlX2dhcCgpIC0gVXBkYXRlIGEgbm9kZXMgZ2FwcyBhbmQgcHJvcGFnYXRlIHVwIGlmIG5lY2Vzc2FyeS5cbiAgKiBAbWFzOiB0aGUgbWFwbGUgc3RhdGUuXG4gICovXG4gc3RhdGljIGlubGluZSB2b2lkIG1hc191cGRhdGVfZ2FwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIHtcbi1cdHVuc2lnbmVkIGNoYXIgcHNsb3Q7XG4tXHR1bnNpZ25lZCBsb25nIHBfZ2FwO1xuIFx0dW5zaWduZWQgbG9uZyBtYXhfZ2FwO1xuIFxuIFx0aWYgKCFtdF9pc19hbGxvYyhtYXMtXHUwMDNldHJlZSkpXG5AQCAtMTUxOCwxMyArMTYzMSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfdXBkYXRlX2dhcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bWF4X2dhcCA9IG1hc19tYXhfZ2FwKG1hcyk7XG4tXG4tXHRwc2xvdCA9IG10ZV9wYXJlbnRfc2xvdChtYXMtXHUwMDNlbm9kZSk7XG4tXHRwX2dhcCA9IG1hX2dhcHMobXRlX3BhcmVudChtYXMtXHUwMDNlbm9kZSksXG4tXHRcdFx0bWFzX3BhcmVudF90eXBlKG1hcywgbWFzLVx1MDAzZW5vZGUpKVtwc2xvdF07XG4tXG4tXHRpZiAocF9nYXAgIT0gbWF4X2dhcClcbi1cdFx0bWFzX3BhcmVudF9nYXAobWFzLCBwc2xvdCwgbWF4X2dhcCk7XG4rXHRtYXNfdXBkYXRlX2dhcF9rbm93bihtYXMsIG1heF9nYXApO1xuIH1cbiBcbiAvKlxuQEAgLTE1NDAsMTQgKzE2NDcsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19hZG9wdF9jaGlsZHJlbihzdHJ1Y3QgbWFfc3RhdGUgKm1hcyxcbiBcdHN0cnVjdCBtYXBsZV9ub2RlICpub2RlID0gbXRlX3RvX25vZGUocGFyZW50KTtcbiBcdHZvaWQgX19yY3UgKipzbG90cyA9IG1hX3Nsb3RzKG5vZGUsIHR5cGUpO1xuIFx0dW5zaWduZWQgbG9uZyAqcGl2b3RzID0gbWFfcGl2b3RzKG5vZGUsIHR5cGUpO1xuLVx0c3RydWN0IG1hcGxlX2Vub2RlICpjaGlsZDtcbi1cdHVuc2lnbmVkIGNoYXIgb2Zmc2V0O1xuK1x0dW5zaWduZWQgY2hhciBlbmQ7XG4gXG4tXHRvZmZzZXQgPSBtYV9kYXRhX2VuZChub2RlLCB0eXBlLCBwaXZvdHMsIG1hcy1cdTAwM2VtYXgpO1xuLVx0ZG8ge1xuLVx0XHRjaGlsZCA9IG1hc19zbG90X2xvY2tlZChtYXMsIHNsb3RzLCBvZmZzZXQpO1xuLVx0XHRtYXNfc2V0X3BhcmVudChtYXMsIGNoaWxkLCBwYXJlbnQsIG9mZnNldCk7XG4tXHR9IHdoaWxlIChvZmZzZXQtLSk7XG4rXHRlbmQgPSBtYV9kYXRhX2VuZChub2RlLCB0eXBlLCBwaXZvdHMsIG1hcy1cdTAwM2VtYXgpO1xuK1x0bWFzX3NldF9wYXJlbnRfc2xvdHMobWFzLCBwYXJlbnQsIHNsb3RzLCAwLCBlbmQgKyAxKTtcbiB9XG4gXG4gLypcbkBAIC0xOTI5LDE1ICsyMDMyLDEwIEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9jb3B5KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfbm9kZSAqc3JjLFxuIFx0c19zbG90cyA9IG1hX3Nsb3RzKHNyYywgc19tdCkgKyBzdGFydDtcbiBcdHNfcGl2b3RzID0gbWFfcGl2b3RzKHNyYywgc19tdCkgKyBzdGFydDtcbiBcdG1lbWNweShkX3Nsb3RzLCBzX3Nsb3RzLCBzaXplICogc2l6ZW9mKHZvaWQgX19yY3UgKikpO1xuLVx0aWYgKCFtYV9pc19sZWFmKGRfbXQpIFx1MDAyNlx1MDAyNiBzX210ID09IG1hcGxlX2NvcHkpIHtcbi1cdFx0c3RydWN0IG1hcGxlX2Vub2RlICplZHN0ID0gbXRfbWtfbm9kZShkc3QsIGRfbXQpO1xuIFxuLVxuLVx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mgc2l6ZTsgaSsrKVxuLVx0XHRcdG1hc19zZXRfcGFyZW50KG1hcyxcbi1cdFx0XHRcdCAgICAgICBtdF9zbG90X2xvY2tlZChtYXMtXHUwMDNldHJlZSwgZF9zbG90cywgaSksXG4tXHRcdFx0XHQgICAgICAgZWRzdCwgZF9zdGFydCArIGkpO1xuLVx0fVxuK1x0aWYgKCFtYV9pc19sZWFmKGRfbXQpIFx1MDAyNlx1MDAyNiBzX210ID09IG1hcGxlX2NvcHkpXG4rXHRcdG1hc19zZXRfcGFyZW50X3Nsb3RzKG1hcywgbXRfbWtfbm9kZShkc3QsIGRfbXQpLFxuK1x0XHRcdFx0ICAgICBkX3Nsb3RzLCBkX3N0YXJ0LCBzaXplKTtcbiBcbiBcdGRfZ2FwcyA9IG1hX2dhcHMoZHN0LCBkX210KTtcbiBcdGlmIChkX2dhcHMpIHtcbkBAIC0yMDgxLDggKzIxNzksOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dtYl9yZXBsYWNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfY29weSAqY3ApXG4gXHRtYXMtXHUwMDNlbm9kZSA9IG10X3Nsb3RfbG9ja2VkKG1hcy1cdTAwM2V0cmVlLCBjcC1cdTAwM2VzbG90LCAwKTtcbiBcdC8qIEluc2VydCB0aGUgbmV3IGRhdGEgaW4gdGhlIHRyZWUgKi9cbiBcdG1hc190b3BpYXJ5X3JlcGxhY2UobWFzLCBvbGRfZW5vZGUsIGNwLVx1MDAzZWhlaWdodCk7XG4tXHRpZiAoIW10ZV9pc19sZWFmKG1hcy1cdTAwM2Vub2RlKSlcbi1cdFx0bWFzX3VwZGF0ZV9nYXAobWFzKTtcbitcdGlmIChtdF9pc19hbGxvYyhtYXMtXHUwMDNldHJlZSkgXHUwMDI2XHUwMDI2ICFtdGVfaXNfcm9vdChtYXMtXHUwMDNlbm9kZSkpXG4rXHRcdG1hc191cGRhdGVfZ2FwX2tub3duKG1hcywgY3AtXHUwMDNlZ2FwWzBdKTtcbiBcbiBcdG10cmVlX3JhbmdlX3dhbGsobWFzKTtcbiB9XG5AQCAtMjkyOCwxMyArMzAyNiw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfZXh0ZW5kX3NwYW5uaW5nX251bGwoc3RydWN0IG1hX3dyX3N0YXRlICpsX3dyX21hcyxcbiBcdFx0aWYgKHJfbWFzLVx1MDAzZWxhc3QgXHUwMDNjIHJfd3JfbWFzLVx1MDAzZXJfbWF4KVxuIFx0XHRcdHJfbWFzLVx1MDAzZWxhc3QgPSByX3dyX21hcy1cdTAwM2VyX21heDtcbiBcdFx0cl9tYXMtXHUwMDNlb2Zmc2V0Kys7XG4tXHR9IGVsc2UgaWYgKChyX21hcy1cdTAwM2VsYXN0ID09IHJfd3JfbWFzLVx1MDAzZXJfbWF4KSBcdTAwMjZcdTAwMjZcbi1cdCAgICAocl9tYXMtXHUwMDNlbGFzdCBcdTAwM2Mgcl9tYXMtXHUwMDNlbWF4KSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhbWFzX3Nsb3RfbG9ja2VkKHJfbWFzLCByX3dyX21hcy1cdTAwM2VzbG90cywgcl9tYXMtXHUwMDNlb2Zmc2V0ICsgMSkpIHtcbi1cdFx0cl9tYXMtXHUwMDNlbGFzdCA9IG1hc19zYWZlX3Bpdm90KHJfbWFzLCByX3dyX21hcy1cdTAwM2VwaXZvdHMsXG4tXHRcdFx0XHRcdCAgICAgcl93cl9tYXMtXHUwMDNldHlwZSwgcl9tYXMtXHUwMDNlb2Zmc2V0ICsgMSk7XG4tXHRcdHJfbWFzLVx1MDAzZW9mZnNldCsrO1xuLVx0XHRyX3dyX21hcy1cdTAwM2VyX21heCA9IHJfbWFzLVx1MDAzZWxhc3Q7XG4gXHR9XG4gfVxuIFxuQEAgLTMxMjUsNyArMzIxNiw3IEBAIHN0YXRpYyB2b2lkIG1hc193cl9zcGFubmluZ19zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4ge1xuIFx0dW5zaWduZWQgY2hhciBkc3Rfb2Zmc2V0LCBvZmZzZXRfZW5kO1xuLVx0dW5zaWduZWQgY2hhciBjb3B5X3NpemUsIG5vZGVfcGl2b3RzO1xuK1x0dW5zaWduZWQgY2hhciBjb3B5X3NpemUsIG5vZGVfcGl2b3RzLCBub2RlX3Nsb3RzO1xuIFx0c3RydWN0IG1hcGxlX25vZGUgcmV1c2UsICpuZXdub2RlO1xuIFx0dW5zaWduZWQgbG9uZyAqZHN0X3Bpdm90cztcbiBcdHZvaWQgX19yY3UgKipkc3Rfc2xvdHM7XG5AQCAtMzEzOCw2ICszMjI5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIFx0aW5fcmN1ID0gbXRfaW5fcmN1KG1hcy1cdTAwM2V0cmVlKTtcbiBcdG9mZnNldF9lbmQgPSB3cl9tYXMtXHUwMDNlb2Zmc2V0X2VuZDtcbiBcdG5vZGVfcGl2b3RzID0gbXRfcGl2b3RzW3dyX21hcy1cdTAwM2V0eXBlXTtcbitcdG5vZGVfc2xvdHMgPSBtdF9zbG90c1t3cl9tYXMtXHUwMDNldHlwZV07XG4gXHQvKiBBc3N1bWUgbGFzdCBhZGRzIGFuIGVudHJ5ICovXG4gXHRuZXdfZW5kID0gbWFzLVx1MDAzZWVuZCArIDEgLSBvZmZzZXRfZW5kICsgbWFzLVx1MDAzZW9mZnNldDtcbiBcdGlmIChtYXMtXHUwMDNlbGFzdCA9PSB3cl9tYXMtXHUwMDNlZW5kX3Bpdikge1xuQEAgLTMxNDksNyArMzI0MSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiBcdGlmIChpbl9yY3UpIHtcbiBcdFx0bmV3bm9kZSA9IG1hc19wb3Bfbm9kZShtYXMpO1xuIFx0fSBlbHNlIHtcbi1cdFx0bWVtc2V0KFx1MDAyNnJldXNlLCAwLCBzaXplb2Yoc3RydWN0IG1hcGxlX25vZGUpKTtcbiBcdFx0bmV3bm9kZSA9IFx1MDAyNnJldXNlO1xuIFx0fVxuIFxuQEAgLTMxOTMsNyArMzI4NCwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4gXHRcdGRzdF9waXZvdHNbbmV3X2VuZF0gPSBtYXMtXHUwMDNlbWF4O1xuIFxuIGRvbmU6XG4tXHRtYXNfbGVhZl9zZXRfbWV0YShuZXdub2RlLCBtYXBsZV9sZWFmXzY0LCBuZXdfZW5kKTtcbitcdGlmICghaW5fcmN1IFx1MDAyNlx1MDAyNiBuZXdfZW5kICsgMiBcdTAwM2Mgbm9kZV9zbG90cykge1xuK1x0XHR1bnNpZ25lZCBjaGFyIGNsZWFyX2Zyb20gPSBuZXdfZW5kICsgMTtcbitcbitcdFx0bWVtc2V0KGRzdF9zbG90cyArIGNsZWFyX2Zyb20sIDAsXG4rXHRcdCAgICAgICBzaXplb2Yodm9pZCBfX3JjdSAqKSAqIChub2RlX3Nsb3RzIC0gY2xlYXJfZnJvbSkpO1xuK1x0XHRpZiAoY2xlYXJfZnJvbSBcdTAwM2Mgbm9kZV9waXZvdHMpXG4rXHRcdFx0bWVtc2V0KGRzdF9waXZvdHMgKyBjbGVhcl9mcm9tLCAwLFxuK1x0XHRcdCAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZykgKiAobm9kZV9waXZvdHMgLSBjbGVhcl9mcm9tKSk7XG4rXHR9XG4rXG4rXHRtYXNfbGVhZl9zZXRfbWV0YShuZXdub2RlLCB3cl9tYXMtXHUwMDNldHlwZSwgbmV3X2VuZCk7XG4gXHRpZiAoaW5fcmN1KSB7XG4gXHRcdHN0cnVjdCBtYXBsZV9lbm9kZSAqb2xkX2Vub2RlID0gbWFzLVx1MDAzZW5vZGU7XG4gXG5AQCAtMzIxOCw3ICszMzE5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9zbG90X3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIFx0dm9pZCBfX3JjdSAqKnNsb3RzID0gd3JfbWFzLVx1MDAzZXNsb3RzO1xuIFx0Ym9vbCBnYXAgPSBmYWxzZTtcbiBcbi1cdGdhcCB8PSAhbXRfc2xvdF9sb2NrZWQobWFzLVx1MDAzZXRyZWUsIHNsb3RzLCBvZmZzZXQpO1xuK1x0Z2FwIHw9ICF3cl9tYXMtXHUwMDNlY29udGVudDtcbiBcdGdhcCB8PSAhbXRfc2xvdF9sb2NrZWQobWFzLVx1MDAzZXRyZWUsIHNsb3RzLCBvZmZzZXQgKyAxKTtcbiBcbiBcdGlmICh3cl9tYXMtXHUwMDNlb2Zmc2V0X2VuZCAtIG9mZnNldCA9PSAxKSB7XG5AQCAtMzY2MSw2ICszNzYyLDkgQEAgc3RhdGljIGlubGluZSBlbnVtIHN0b3JlX3R5cGUgbWFzX3dyX3N0b3JlX3R5cGUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4ge1xuIFx0c3RydWN0IG1hX3N0YXRlICptYXMgPSB3cl9tYXMtXHUwMDNlbWFzO1xuIFx0dW5zaWduZWQgY2hhciBuZXdfZW5kO1xuK1x0Ym9vbCBhcHBlbmRpbmc7XG4rXHRib29sIG9uZV9zbG90O1xuK1x0Ym9vbCBpbl9yY3U7XG4gXG4gXHRpZiAodW5saWtlbHkobWFzX2lzX25vbmUobWFzKSB8fCBtYXNfaXNfcHRyKG1hcykpKVxuIFx0XHRyZXR1cm4gd3Jfc3RvcmVfcm9vdDtcbkBAIC0zNjgwLDIxICszNzg0LDMwIEBAIHN0YXRpYyBpbmxpbmUgZW51bSBzdG9yZV90eXBlIG1hc193cl9zdG9yZV90eXBlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIFx0XHRyZXR1cm4gd3JfbmV3X3Jvb3Q7XG4gXG4gXHRuZXdfZW5kID0gbWFzX3dyX25ld19lbmQod3JfbWFzKTtcbitcdGluX3JjdSA9IG10X2luX3JjdShtYXMtXHUwMDNldHJlZSk7XG4rXHRhcHBlbmRpbmcgPSBtYXMtXHUwMDNlb2Zmc2V0ID09IG1hcy1cdTAwM2VlbmQ7XG4rXHRvbmVfc2xvdCA9IHdyX21hcy1cdTAwM2VvZmZzZXRfZW5kIC0gbWFzLVx1MDAzZW9mZnNldCA9PSAxO1xuK1xuIFx0LyogUG90ZW50aWFsIHNwYW5uaW5nIHJlYmFsYW5jZSBjb2xsYXBzaW5nIGEgbm9kZSAqL1xuIFx0aWYgKG5ld19lbmQgXHUwMDNjIG10X21pbl9zbG90c1t3cl9tYXMtXHUwMDNldHlwZV0pIHtcbiBcdFx0aWYgKCFtdGVfaXNfcm9vdChtYXMtXHUwMDNlbm9kZSkpXG4gXHRcdFx0cmV0dXJuICB3cl9yZWJhbGFuY2U7XG4rXHRcdGlmICghaW5fcmN1KSB7XG4rXHRcdFx0aWYgKGFwcGVuZGluZylcbitcdFx0XHRcdHJldHVybiB3cl9hcHBlbmQ7XG4rXHRcdFx0ZWxzZSBpZiAobWFzLVx1MDAzZWVuZCA9PSBuZXdfZW5kIFx1MDAyNlx1MDAyNiBvbmVfc2xvdClcbitcdFx0XHRcdHJldHVybiB3cl9zbG90X3N0b3JlO1xuK1x0XHR9XG4gXHRcdHJldHVybiB3cl9ub2RlX3N0b3JlO1xuIFx0fVxuIFxuIFx0aWYgKG5ld19lbmQgXHUwMDNlPSBtdF9zbG90c1t3cl9tYXMtXHUwMDNldHlwZV0pXG4gXHRcdHJldHVybiB3cl9zcGxpdF9zdG9yZTtcbiBcbi1cdGlmICghbXRfaW5fcmN1KG1hcy1cdTAwM2V0cmVlKSBcdTAwMjZcdTAwMjYgKG1hcy1cdTAwM2VvZmZzZXQgPT0gbWFzLVx1MDAzZWVuZCkpXG4rXHRpZiAoIWluX3JjdSBcdTAwMjZcdTAwMjYgYXBwZW5kaW5nKVxuIFx0XHRyZXR1cm4gd3JfYXBwZW5kO1xuIFxuLVx0aWYgKChuZXdfZW5kID09IG1hcy1cdTAwM2VlbmQpIFx1MDAyNlx1MDAyNiAoIW10X2luX3JjdShtYXMtXHUwMDNldHJlZSkgfHxcbi1cdFx0KHdyX21hcy1cdTAwM2VvZmZzZXRfZW5kIC0gbWFzLVx1MDAzZW9mZnNldCA9PSAxKSkpXG4rXHRpZiAobmV3X2VuZCA9PSBtYXMtXHUwMDNlZW5kIFx1MDAyNlx1MDAyNiAoIWluX3JjdSB8fCBvbmVfc2xvdCkpXG4gXHRcdHJldHVybiB3cl9zbG90X3N0b3JlO1xuIFxuIFx0cmV0dXJuIHdyX25vZGVfc3RvcmU7XG5AQCAtMzc5MywyNyArMzkwNiwyOSBAQCBpbnQgbWFzX2FsbG9jX2N5Y2xpYyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyAqc3RhcnRwLFxuIFx0XHR2b2lkICplbnRyeSwgdW5zaWduZWQgbG9uZyByYW5nZV9sbywgdW5zaWduZWQgbG9uZyByYW5nZV9oaSxcbiBcdFx0dW5zaWduZWQgbG9uZyAqbmV4dCwgZ2ZwX3QgZ2ZwKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbWluID0gcmFuZ2VfbG87XG4tXHRpbnQgcmV0ID0gMDtcbitcdGludCByZXQ7XG4rXHR1bnNpZ25lZCBsb25nIG1pbjtcbiBcbi1cdHJhbmdlX2xvID0gbWF4KG1pbiwgKm5leHQpO1xuLVx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCByYW5nZV9sbywgcmFuZ2VfaGksIDEpO1xuLVx0aWYgKChtYXMtXHUwMDNldHJlZS1cdTAwM2VtYV9mbGFncyBcdTAwMjYgTVRfRkxBR1NfQUxMT0NfV1JBUFBFRCkgXHUwMDI2XHUwMDI2IHJldCA9PSAwKSB7XG4tXHRcdG1hcy1cdTAwM2V0cmVlLVx1MDAzZW1hX2ZsYWdzIFx1MDAyNj0gfk1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQ7XG4tXHRcdHJldCA9IDE7XG4tXHR9XG4tXHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByYW5nZV9sbyBcdTAwM2UgbWluKSB7XG4tXHRcdG1hc19yZXNldChtYXMpO1xuLVx0XHRyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIG1pbiwgcmFuZ2VfaGksIDEpO1xuLVx0XHRpZiAocmV0ID09IDApXG4rXHRtaW4gPSByYW5nZV9sbztcbitcdGRvIHtcbitcdFx0cmFuZ2VfbG8gPSBtYXgobWluLCAqbmV4dCk7XG4rXHRcdHJldCA9IG1hc19lbXB0eV9hcmVhKG1hcywgcmFuZ2VfbG8sIHJhbmdlX2hpLCAxKTtcbitcdFx0aWYgKChtYXMtXHUwMDNldHJlZS1cdTAwM2VtYV9mbGFncyBcdTAwMjYgTVRfRkxBR1NfQUxMT0NfV1JBUFBFRCkgXHUwMDI2XHUwMDI2IHJldCA9PSAwKSB7XG4rXHRcdFx0bWFzLVx1MDAzZXRyZWUtXHUwMDNlbWFfZmxhZ3MgXHUwMDI2PSB+TVRfRkxBR1NfQUxMT0NfV1JBUFBFRDtcbiBcdFx0XHRyZXQgPSAxO1xuLVx0fVxuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuK1x0XHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByYW5nZV9sbyBcdTAwM2UgbWluKSB7XG4rXHRcdFx0bWFzX3Jlc2V0KG1hcyk7XG4rXHRcdFx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCBtaW4sIHJhbmdlX2hpLCAxKTtcbitcdFx0XHRpZiAocmV0ID09IDApXG4rXHRcdFx0XHRyZXQgPSAxO1xuK1x0XHR9XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGRvIHtcbiBcdFx0bWFzX2luc2VydChtYXMsIGVudHJ5KTtcbiBcdH0gd2hpbGUgKG1hc19ub21lbShtYXMsIGdmcCkpO1xuK1xuIFx0aWYgKG1hc19pc19lcnIobWFzKSlcbiBcdFx0cmV0dXJuIHhhX2VycihtYXMtXHUwMDNlbm9kZSk7XG4gXG5AQCAtNDM2MCw2ICs0NDc1LDcgQEAgdm9pZCAqbWFzX3dhbGsoc3RydWN0IG1hX3N0YXRlICptYXMpXG4ge1xuIFx0dm9pZCAqZW50cnk7XG4gXG4rXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKCFtYXNfaXNfYWN0aXZlKG1hcykgXHUwMDI2XHUwMDI2ICFtYXNfaXNfc3RhcnQobWFzKSlcbiBcdFx0bWFzLVx1MDAzZXN0YXR1cyA9IG1hX3N0YXJ0O1xuIHJldHJ5OlxuQEAgLTQ4MzEsNiArNDk0Nyw3IEBAIHZvaWQgKm1hc19zdG9yZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnkpXG4ge1xuIFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIGVudHJ5KTtcbiBcbitcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHR0cmFjZV9tYV93cml0ZShUUF9GQ1QsIG1hcywgMCwgZW50cnkpO1xuICNpZmRlZiBDT05GSUdfREVCVUdfTUFQTEVfVFJFRVxuIFx0aWYgKE1BU19XQVJOX09OKG1hcywgbWFzLVx1MDAzZWluZGV4IFx1MDAzZSBtYXMtXHUwMDNlbGFzdCkpXG5AQCAtNDg4OSw2ICs1MDA2LDcgQEAgaW50IG1hc19zdG9yZV9nZnAoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5LCBnZnBfdCBnZnApXG4gXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xuIFx0aW50IHJldCA9IDA7XG4gXG4rXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIHJldHJ5OlxuIFx0bWFzX3dyX3ByZWFsbG9jYXRlKFx1MDAyNndyX21hcywgZW50cnkpO1xuIFx0aWYgKHVubGlrZWx5KG1hc19ub21lbShtYXMsIGdmcCkpKSB7XG5AQCAtNDkxOSw2ICs1MDM3LDcgQEAgdm9pZCBtYXNfc3RvcmVfcHJlYWxsb2Moc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5KVxuIHtcbiBcdE1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBlbnRyeSk7XG4gXG4rXHRtYXNfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hcy1cdTAwM2VzdG9yZV90eXBlID09IHdyX3N0b3JlX3Jvb3QpIHtcbiBcdFx0bWFzX3dyX3ByZWFsbG9jX3NldHVwKFx1MDAyNndyX21hcyk7XG4gXHRcdGdvdG8gc3RvcmU7XG5AQCAtNDk1MSw2ICs1MDcwLDcgQEAgaW50IG1hc19wcmVhbGxvY2F0ZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnksIGdmcF90IGdmcClcbiB7XG4gXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xuIFxuK1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdG1hc193cl9wcmVhbGxvY19zZXR1cChcdTAwMjZ3cl9tYXMpO1xuIFx0bWFzLVx1MDAzZXN0b3JlX3R5cGUgPSBtYXNfd3Jfc3RvcmVfdHlwZShcdTAwMjZ3cl9tYXMpO1xuIFx0bWFzX3ByZWFsbG9jX2NhbGMoXHUwMDI2d3JfbWFzLCBlbnRyeSk7XG5AQCAtNTA3NCw2ICs1MTk0LDcgQEAgdm9pZCAqbWFzX25leHQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbitcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzX25leHRfc2V0dXAobWFzLCBtYXgsIFx1MDAyNmVudHJ5KSlcbiBcdFx0cmV0dXJuIGVudHJ5O1xuIFxuQEAgLTUwOTcsNiArNTIxOCw3IEBAIHZvaWQgKm1hc19uZXh0X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heClcbiB7XG4gXHR2b2lkICplbnRyeSA9IE5VTEw7XG4gXG4rXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19uZXh0X3NldHVwKG1hcywgbWF4LCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01MjA1LDYgKzUzMjcsNyBAQCB2b2lkICptYXNfcHJldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pXG4ge1xuIFx0dm9pZCAqZW50cnkgPSBOVUxMO1xuIFxuK1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfcHJldl9zZXR1cChtYXMsIG1pbiwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTIyOCw2ICs1MzUxLDcgQEAgdm9pZCAqbWFzX3ByZXZfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbitcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzX3ByZXZfc2V0dXAobWFzLCBtaW4sIFx1MDAyNmVudHJ5KSlcbiBcdFx0cmV0dXJuIGVudHJ5O1xuIFxuQEAgLTUyNzQsNiArNTM5OCw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG10X3ByZXYpO1xuICAqL1xuIHZvaWQgbWFzX3BhdXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIHtcbitcdG1hc19sb2NrX2NoZWNrKG1hcyk7XG4gXHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfcGF1c2U7XG4gXHRtYXMtXHUwMDNlbm9kZSA9IE5VTEw7XG4gfVxuQEAgLTUzODIsNiArNTUwNyw3IEBAIHZvaWQgKm1hc19maW5kKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heClcbiB7XG4gXHR2b2lkICplbnRyeSA9IE5VTEw7XG4gXG4rXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19maW5kX3NldHVwKG1hcywgbWF4LCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01NDA5LDYgKzU1MzUsNyBAQCB2b2lkICptYXNfZmluZF9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpXG4ge1xuIFx0dm9pZCAqZW50cnkgPSBOVUxMO1xuIFxuK1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfZmluZF9zZXR1cChtYXMsIG1heCwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTQyOCw3ICs1NTU1LDYgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWFzX2ZpbmRfcmFuZ2UpO1xuIHN0YXRpYyBib29sIG1hc19maW5kX3Jldl9zZXR1cChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4sXG4gXHRcdHZvaWQgKiplbnRyeSlcbiB7XG4tXG4gXHRzd2l0Y2ggKG1hcy1cdTAwM2VzdGF0dXMpIHtcbiBcdGNhc2UgbWFfYWN0aXZlOlxuIFx0XHRnb3RvIGFjdGl2ZTtcbkBAIC01NTIxLDYgKzU2NDcsNyBAQCB2b2lkICptYXNfZmluZF9yZXYoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbitcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzX2ZpbmRfcmV2X3NldHVwKG1hcywgbWluLCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01NTQ3LDYgKzU2NzQsNyBAQCB2b2lkICptYXNfZmluZF9yYW5nZV9yZXYoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbitcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzX2ZpbmRfcmV2X3NldHVwKG1hcywgbWluLCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01NTY0LDYgKzU2OTIsMTAgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWFzX2ZpbmRfcmFuZ2VfcmV2KTtcbiAgKiBTZWFyY2hlcyBmb3IgQG1hcy1cdTAwM2VpbmRleCwgc2V0cyBAbWFzLVx1MDAzZWluZGV4IGFuZCBAbWFzLVx1MDAzZWxhc3QgdG8gdGhlIHJhbmdlIGFuZFxuICAqIGVyYXNlcyB0aGF0IHJhbmdlLlxuICAqXG4rICogTm90ZSB0aGF0IGVyYXNlIHJlcXVpcmVzIGFsbG9jYXRpb25zIGFuZCB3aWxsIHVzZSBHRlBfS0VSTkVMIHRvIGRvIHNvIGlmXG4rICogbmVjZXNzYXJ5LiAgSWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBpbnRlcm5hbCBsb2NrIHdpbGwgYmUgZHJvcHBlZCB0b1xuKyAqIHJldHJ5LlxuKyAqXG4gICogUmV0dXJuOiB0aGUgZW50cnkgdGhhdCB3YXMgZXJhc2VkIG9yICVOVUxMLCBAbWFzLVx1MDAzZWluZGV4IGFuZCBAbWFzLVx1MDAzZWxhc3QgYXJlIHVwZGF0ZWQuXG4gICovXG4gdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuQEAgLTU1NzIsNiArNTcwNCwxNCBAQCB2b2lkICptYXNfZXJhc2Uoc3RydWN0IG1hX3N0YXRlICptYXMpXG4gXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gbWFzLVx1MDAzZWluZGV4O1xuIFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIE5VTEwpO1xuIFxuK1x0LypcbitcdCAqIEluIGxvdyBtZW1vcnkgc2l0dWF0aW9ucywgdGhlIGFsbG9jYXRpb24gaXMgcmV0cmllZCB3aXRoIHRoZSBnZnAgZmxhZ1xuK1x0ICogR0ZQX0tFUk5FTC4gIFRoZSBpbnRlcm5hbCBzcGlubG9jayBpcyBkcm9wcGVkIGluIG1hc19ub21lbSgpLCBob3dldmVyXG4rXHQgKiB0aGUgZXh0ZXJuYWwgbG9jayBpcyBub3QgZHJvcHBlZC5cbitcdCAqL1xuK1x0aWYgKG10X2V4dGVybmFsX2xvY2sobWFzLVx1MDAzZXRyZWUpKVxuK1x0XHRtaWdodF9hbGxvYyhHRlBfS0VSTkVMKTtcbitcbiBcdGlmICghbWFzX2lzX2FjdGl2ZShtYXMpIHx8ICFtYXNfaXNfc3RhcnQobWFzKSlcbiBcdFx0bWFzLVx1MDAzZXN0YXR1cyA9IG1hX3N0YXJ0O1xuIFxuQEAgLTU2MDEsMTAgKzU3NDEsMTEgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWFzX2VyYXNlKTtcbiBcbiAvKipcbiAgKiBtYXNfbm9tZW0oKSAtIENoZWNrIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBhbGxvY2F0aW5nIGFuZCBkbyB0aGUgYWxsb2NhdGlvblxuLSAqIGlmIG5lY2Vzc2FyeSBJZiB0aGVyZSBhcmUgYWxsb2NhdGlvbnMsIHRoZW4gZnJlZSB0aGVtLlxuKyAqIGlmIG5lY2Vzc2FyeS5cbisgKlxuICAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZVxuICAqIEBnZnA6IFRoZSBHRlBfRkxBR1MgdG8gdXNlIGZvciBhbGxvY2F0aW9uc1xuLSAqIFJldHVybjogdHJ1ZSBvbiBhbGxvY2F0aW9uLCBmYWxzZSBvdGhlcndpc2UuXG4rICogUmV0dXJuOiBGYWxzZSBvbiBubyBtZW1vcnkuICBUcnVlIG90aGVyd2lzZSAocGFydGlhbCBzdWNjZXNzIGFzIHdlbGwpXG4gICovXG4gYm9vbCBtYXNfbm9tZW0oc3RydWN0IG1hX3N0YXRlICptYXMsIGdmcF90IGdmcClcbiBcdF9fbXVzdF9ob2xkKG1hcy1cdTAwM2V0cmVlLVx1MDAzZW1hX2xvY2spXG5AQCAtNTYxMiw2ICs1NzUzLDEwIEBAIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApXG4gXHRpZiAobGlrZWx5KG1hcy1cdTAwM2Vub2RlICE9IE1BX0VSUk9SKC1FTk9NRU0pKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuK1x0LyogQWxsb2NhdGlvbnMgY2FuIGZhaWwsIGRvbid0IGRvIHRoaXMuICovXG4rXHRXQVJOX09OX09OQ0UoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgbXRfZXh0ZXJuYWxfbG9jayhtYXMtXHUwMDNldHJlZSkpO1xuK1xuIFx0aWYgKGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkgXHUwMDI2XHUwMDI2ICFtdF9leHRlcm5hbF9sb2NrKG1hcy1cdTAwM2V0cmVlKSkge1xuIFx0XHRtdHJlZV91bmxvY2sobWFzLVx1MDAzZXRyZWUpO1xuIFx0XHRtYXNfYWxsb2Nfbm9kZXMobWFzLCBnZnApO1xuQEAgLTU2MjAsMTAgKzU3NjUsMTcgQEAgYm9vbCBtYXNfbm9tZW0oc3RydWN0IG1hX3N0YXRlICptYXMsIGdmcF90IGdmcClcbiBcdFx0bWFzX2FsbG9jX25vZGVzKG1hcywgZ2ZwKTtcbiBcdH1cbiBcbi1cdGlmICghbWFzLVx1MDAzZXNoZWFmIFx1MDAyNlx1MDAyNiAhbWFzLVx1MDAzZWFsbG9jKVxuK1x0LypcbitcdCAqIFJldHVybiBmYWxzZSBvbiB6ZXJvIGZvcndhcmQgcHJvZ3Jlc3MuICBQYXJ0aWFsIGFsbG9jYXRpb25zIGFyZSBrZXB0XG4rXHQgKiBzbyB0aGUgcmV0cnkgcGF0aCB3aWxsIGF0dGVtcHQgdG8gZ2V0IHRoZSByZXN0LiAgVGhlIGZhaWx1cmUgc2hvdWxkXG4rXHQgKiBub3QgaGFwcGVuIGFzIHdlIHRyeSBvdXIgYmVzdCB0byByZWNsYWltLiAgVGhlIHVzZXIgd291bGQgbmVlZCBhblxuK1x0ICogZXh0ZXJuYWwgbG9jayB3aXRoIGEgbm9uLWJsb2NraW5nIGdmcCBpbiBhIGxvdyBtZW1vcnkgc2l0dWF0aW9uIC1cbitcdCAqIHdoaWNoIHdvdWxkIGhhdmUgdHJpZ2dlcmVkIHRoZSBmaXJzdCB3YXJuaW5nIGluIHRoaXMgZnVuY3Rpb24uXG4rXHQgKi9cbitcdGlmIChXQVJOX09OX09OQ0UoIW1hcy1cdTAwM2VzaGVhZiBcdTAwMjZcdTAwMjYgIW1hcy1cdTAwM2VhbGxvYykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdG1hcy1cdTAwM2VzdGF0dXMgPSBtYV9zdGFydDtcbitcdG1hc19yZXNldChtYXMpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTU5MTMsNiArNjA2NSwxMCBAQCBFWFBPUlRfU1lNQk9MKG10cmVlX2FsbG9jX3JyYW5nZSk7XG4gICogRXJhc2luZyBpcyB0aGUgc2FtZSBhcyBhIHdhbGsgdG8gYW4gZW50cnkgdGhlbiBhIHN0b3JlIG9mIGEgTlVMTCB0byB0aGF0XG4gICogRU5USVJFIHJhbmdlLiAgSW4gZmFjdCwgaXQgaXMgaW1wbGVtZW50ZWQgYXMgc3VjaCB1c2luZyB0aGUgYWR2YW5jZWQgQVBJLlxuICAqXG4rICogTm90ZSB0aGF0IGVyYXNlIHJlcXVpcmVzIGFsbG9jYXRpb25zIGFuZCB3aWxsIHVzZSBHRlBfS0VSTkVMIHRvIGRvIHNvIGlmXG4rICogbmVjZXNzYXJ5LiAgSWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBpbnRlcm5hbCBsb2NrIHdpbGwgYmUgZHJvcHBlZCB0b1xuKyAqIHJldHJ5LlxuKyAqXG4gICogUmV0dXJuOiBUaGUgZW50cnkgc3RvcmVkIGF0IHRoZSBAaW5kZXggb3IgJU5VTExcbiAgKi9cbiB2b2lkICptdHJlZV9lcmFzZShzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQsIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY1xuaW5kZXggMDYwNzkxM2EzMDIyZDUuLmQ5NjdlNzZhM2MwNjUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNcbisrKyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jXG5AQCAtMzUyMzQsNyArMzUyMzQsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfcHJlYWxsb2Moc3RydWN0IG1hcGxlX3RyZWUgKm10KVxuIFx0bXRfc2V0X25vbl9rZXJuZWwoMSk7XG4gXHQvKiBTcGFubmluZyBzdG9yZSAqL1xuIFx0bWFzX3NldF9yYW5nZShcdTAwMjZtYXMsIDEsIDEwMCk7XG4tXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX0tFUk5FTCBcdTAwMjYgR0ZQX05PV0FJVCkgPT0gMCk7XG4rXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX05PV0FJVCkgPT0gMCk7XG4gXHRhbGxvY2F0ZWQgPSBtYXNfYWxsb2NhdGVkKFx1MDAyNm1hcyk7XG4gXHRoZWlnaHQgPSBtYXNfbXRfaGVpZ2h0KFx1MDAyNm1hcyk7XG4gXHRNVF9CVUdfT04obXQsIGFsbG9jYXRlZCAhPSAwKTtcbkBAIC0zNTI1Nyw3ICszNTI1Nyw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19wcmVhbGxvYyhzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQpXG4gXHRNVF9CVUdfT04obXQsIG1hc19hbGxvY2F0ZWQoXHUwMDI2bWFzKSAhPSAwKTtcbiBcdG1hc19zZXRfcmFuZ2UoXHUwMDI2bWFzLCAwLCAyMDApO1xuIFx0bXRfc2V0X25vbl9rZXJuZWwoMSk7XG4tXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX0tFUk5FTCBcdTAwMjYgR0ZQX05PV0FJVCkgPT0gMCk7XG4rXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX05PV0FJVCkgPT0gMCk7XG4gXHRhbGxvY2F0ZWQgPSBtYXNfYWxsb2NhdGVkKFx1MDAyNm1hcyk7XG4gXHRoZWlnaHQgPSBtYXNfbXRfaGVpZ2h0KFx1MDAyNm1hcyk7XG4gXHRNVF9CVUdfT04obXQsIGFsbG9jYXRlZCAhPSAwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA0OjIzOjQ3LjAzMjMxMzk3N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzkyMTU3NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEV2YWx1YXRpb24gZm9yIEZ1enppbmc6IE1hcGxlIFRyZWUgYW5kIExvY2tkZXAgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyB3YXJyYW50cyBhIGRlZXAgZGl2ZSBmb3IgZnV6emluZy4gSXQncyB0b3VjaGluZyBzb21lIHByZXR0eSBjcml0aWNhbCBhcmVhczogdGhlIGBEb2N1bWVudGF0aW9uYCwgYGluY2x1ZGVgIGZpbGVzIGZvciBjb3JlIGxvY2tpbmcgYW5kIHRoZSBgbWFwbGVfdHJlZWAsIGFuZCB0aGVuLCBtb3N0IHNpZ25pZmljYW50bHksIHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb24gaXRzZWxmIOKAkyBzcGVjaWZpY2FsbHkgYGxvY2tkZXAuY2AgYW5kIGBsaWIvbWFwbGVfdHJlZS5jYCwgYWxvbmcgd2l0aCBhIHRlc3QgZmlsZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgcmVmYWN0b3IuIEEgbmV3IGBsb2NrX3NlcXVlbmNlKClgIGZ1bmN0aW9uIGluIGBsb2NrZGVwYCBpcyBiZWluZyBpbnRyb2R1Y2VkIGFuZCB0aGVuIGxldmVyYWdlZCB3aXRoaW4gdGhlIG1hcGxlIHRyZWUgY29kZSB0byBlbmZvcmNlIGxvY2sgb3JkZXJpbmcuIFRoaXMgc2NyZWFtcyBwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGNvbmN1cnJlbmN5IGJ1Z3MgaWYgbm90IGhhbmRsZWQgcGVyZmVjdGx5LiBBYnNvbHV0ZWx5LCB0aGlzIGlzIGZ1enotd29ydGh5IVxuXG5Ob3csIGxldCdzIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBtb2RpZmllZCwgcGFydGljdWxhcmx5IGluIGBsaWIvbWFwbGVfdHJlZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLiBJIHNlZSBpdCB0b3VjaGVzIGEgKmxvdCogb2YgZnVuY3Rpb25zLiBTZWVtcyB0aGUgcGF0Y2ggaGFzIHF1aXRlIGEgYnJvYWQgaW1wYWN0IG9uIHRoZSBsb2NraW5nIHNlbWFudGljcyBhcm91bmQgdGhlIGNvcmUgbWFwbGUgdHJlZSBvcGVyYXRpb25zLiBJIHNlZSBpdCBpbXBhY3RzIG1hbnkgZnVuY3Rpb25zOiBgbWFzX3NldF9wYXJlbnRgLCBgbWFzX3NldF9wYXJlbnRfc2xvdHNgLCBgbWFzX2xvY2tkZXBfbWFwYCwgYG1hc19sb2NrX2NoZWNrYCwgYG1hc19pbml0X2xvY2tfY2hlY2tgLCBgbWFzX21heV9pbml0X2xvY2tfY2hlY2tgLCBgbWFzX3N0YXJ0YCwgYG1hc191cGRhdGVfZ2FwX2tub3duYCwgYG1hc191cGRhdGVfZ2FwYCwgYG1hc19hZG9wdF9jaGlsZHJlbmAsIGBub2RlX2NvcHlgLCBgbWFzX3dtYl9yZXBsYWNlYCwgYG1hc19leHRlbmRfc3Bhbm5pbmdfbnVsbGAsIGBtYXNfd3Jfbm9kZV9zdG9yZWAsIGBtYXNfd3Jfc2xvdF9zdG9yZWAsIGBtYXNfd3Jfc3RvcmVfdHlwZWAsIGBtYXNfYWxsb2NfY3ljbGljYCwgYG1hc193YWxrYCwgYG1hc19zdG9yZWAsIGBtYXNfc3RvcmVfZ2ZwYCwgYG1hc19zdG9yZV9wcmVhbGxvY2AsIGBtYXNfcHJlYWxsb2NhdGVgLCBgbWFzX25leHRgLCBgbWFzX25leHRfcmFuZ2VgLCBgbWFzX3ByZXZgLCBgbWFzX3ByZXZfcmFuZ2VgLCBgbWFzX3BhdXNlYCwgYG1hc19maW5kYCwgYG1hc19maW5kX3JhbmdlYCwgYG1hc19maW5kX3Jldl9zZXR1cGAsIGBtYXNfZmluZF9yZXZgLCBgbWFzX2ZpbmRfcmFuZ2VfcmV2YCwgYG1hc19lcmFzZWAsIGBtYXNfbm9tZW1gLCBgbXRyZWVfZXJhc2VgLlxuXG5BbmQgdGhlbiwgbG9va2luZyBhdCBga2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jYCwgSSBzZWUgY29yZSBsb2NraW5nIGZ1bmN0aW9ucyBhcmUgYWZmZWN0ZWQgdG9vLCB0aGF0IGNhbiBiZSBhIHNpZ25hbCBvZiBhIGNvcmUgaXNzdWU6IGBfX2xvY2tfYWNxdWlyZWAsIGByZWFjcXVpcmVfaGVsZF9sb2Nrc2AsIGBfX2xvY2tfc2VxdWVuY2VgLCBgbG9ja19hY3F1aXJlYCwgYGxvY2tfc3luY2AsIGBsb2NrX3NlcXVlbmNlYC5cblxuVGhlcmVmb3JlLCBJIG5lZWQgdG8gcHJpb3JpdGl6ZSBteSBmdXp6aW5nIGVmZm9ydHMuIFRoZSBmb2N1cyBzaG91bGQgYmUgb24gdGhvc2UgbWFwbGUgdHJlZSBmdW5jdGlvbnMgYW5kIHRob3NlIGxvY2tkZXAgc2VxdWVuY2UgZnVuY3Rpb25zIHdoaWNoIGFyZSBtb3N0IGxpa2VseSB0byBpbnRyb2R1Y2UgYSBidWcuIExvY2tkZXAgaXRzZWxmIGlzIGEgZGVidWdnaW5nIHRvb2wsIHNvIHRoZSByaXNrIGlzIHNvbWV3aGF0IGxvd2VyIGluICppdCogYnV0IHN0aWxsIHBvc3NpYmxlIHRvIGNyZWF0ZSBidWdzLiBCdXQgdGhlIG1hcGxlIHRyZWUgaXMgYSBjb3JlIGRhdGEgc3RydWN0dXJlLCBzbyBJJ2xsIG5lZWQgdG8gcGF5IGV4dHJhIGF0dGVudGlvbiB0byB0aGF0ISBMZXQgbWUgbGlzdCBzb21lIGtleSBtYXBsZSB0cmVlIGZ1bmN0aW9ucyB0byBoaWdobGlnaHQgdGhlc2UgY3JpdGljYWwgYXJlYXM6IGBtYXNfYWxsb2NfY3ljbGljYCwgYG1hc19lcmFzZWAsIGBtdHJlZV9lcmFzZWAsIGBtYXNfbm9tZW1gLCBgbWFzX3dyX25vZGVfc3RvcmVgLCBgbWFzX3dyX3N0b3JlX3R5cGVgLCBgbWFzX3VwZGF0ZV9nYXBfa25vd25gLCBgbWFzX3NldF9wYXJlbnRfc2xvdHNgLlxuXG5Ob3csIGJlZm9yZSBJIGxhdW5jaCBpbnRvIGZ1enppbmcsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gcmlnaHQuIEknbGwgbmVlZCBgQ09ORklHX0xPQ0tERVBgIGVuYWJsZWQgZm9yIHRoZXNlIGxvY2sgc2VxdWVuY2UgY2hlY2tzIHRvIGFjdHVhbGx5IGZ1bmN0aW9uLiBgQ09ORklHX0RFQlVHX01BUExFX1RSRUVgICptaWdodCogYmUgaGVscGZ1bCBkdXJpbmcgYW5hbHlzaXMsIGJ1dCBzdGFuZGFyZCBtYXBsZSB0cmVlIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZC4gSXQgaXMgYWx3YXlzIGdvb2QgdG8gY2hlY2sgYGxpYi9LY29uZmlnLmRlYnVnYCB0byBkb3VibGUgY2hlY2sgYW55IGhlbHBmdWwgY29uZmlndXJhdGlvbnMgdGhlcmUuIE5vdywgbGV0J3MgZ2V0IGZ1enppbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTE4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDQ6MjM6NTcuODI0NDczNjkyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNDA1NjA4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFQlVHX01BUExFX1RSRUVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9MTgyNT1jb25maWcgREVCVUdfQ0xPU1VSRVNcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTE4MzMtXFxubGliL0tjb25maWcuZGVidWc6MTgzNDpjb25maWcgREVCVUdfTUFQTEVfVFJFRVxcbmxpYi9LY29uZmlnLmRlYnVnLTE4MzUtXFx0Ym9vbCBcXFwiRGVidWcgbWFwbGUgdHJlZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA0OjI0OjAwLjk2NTA0MzUyMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTg1OTI5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipDaGVja2luZyBMb2NrZGVwIGFuZCBNYXBsZSBUcmVlIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSBzZWUgYERFQlVHX01BUExFX1RSRUVgIGxpc3RlZCBhcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgSSBhbHNvIG5vdGUgYFBST1ZFX0xPQ0tJTkdgIG9yIGBMT0NLREVQYCBpbiB0aGUgY29udGV4dCBvZiBsb2NrZGVwIGNoYW5nZXMuIFRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRob3NlIGxvY2tkZXAgbW9kaWZpY2F0aW9ucyBub3cuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcHJpbWFyeSBzZXR0aW5ncy4gSXQgbG9va3MgbGlrZSBgbG9ja19zZXF1ZW5jZWAgaXMgZXhwb3J0ZWQsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGxvY2tpbmcgd29ya3MuIEFoLCBoZXJlIGl0IGlzOiBgQ09ORklHX0xPQ0tERVBgIGlzIHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0J3MgdGhlIG1haW4gc3dpdGNoIGZvciBlbmFibGluZyB0aGUgbG9jayBkZXBlbmRlbmN5IGNoZWNrZXIuIFRoYXQncyB0aGUgc2V0dGluZyB0aGF0IHRlbGxzIHRoZSBrZXJuZWwgdG8gcGF5IGF0dGVudGlvbiB0byBwb3RlbnRpYWwgbG9jayBwcm9ibGVtcy5cblxuTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYSBiaXQuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSB1c2FnZSBvZiBgbWFzX2FsbG9jX2N5Y2xpY2AuIExldCBtZSBzZWUgd2hlcmUgdGhhdCBjb21lcyBpbnRvIHBsYXkuIEl0J3MgcmVsYXRlZCBzb21laG93IHRvIHRoaXMgbG9ja2RlcCBzdHVmZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4OTksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNDoyNDowNC4wMjM2NDAzMDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyMDM3MDMyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXNfYWxsb2NfY3ljbGljXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oPTU2OD1pbnQgbWFzX3ByZWFsbG9jYXRlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSwgZ2ZwX3QgZ2ZwKTtcXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaDo1Njk6aW50IG1hc19hbGxvY19jeWNsaWMoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0cCxcXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaC01NzAtXFx0XFx0dm9pZCAqZW50cnksIHVuc2lnbmVkIGxvbmcgcmFuZ2VfbG8sIHVuc2lnbmVkIGxvbmcgcmFuZ2VfaGksXFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jPTM4NDM9c3RhdGljIGlubGluZSB2b2lkICptYXNfaW5zZXJ0KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSlcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmMtMzg5MS0vKipcXG5saWIvbWFwbGVfdHJlZS5jOjM4OTI6ICogbWFzX2FsbG9jX2N5Y2xpYygpIC0gSW50ZXJuYWwgY2FsbCB0byBmaW5kIHNvbWV3aGVyZSB0byBzdG9yZSBhbiBlbnRyeVxcbmxpYi9tYXBsZV90cmVlLmMtMzg5My0gKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGUuXFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jLTM5MDQtICovXFxubGliL21hcGxlX3RyZWUuYzozOTA1OmludCBtYXNfYWxsb2NfY3ljbGljKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nICpzdGFydHAsXFxubGliL21hcGxlX3RyZWUuYy0zOTA2LVxcdFxcdHZvaWQgKmVudHJ5LCB1bnNpZ25lZCBsb25nIHJhbmdlX2xvLCB1bnNpZ25lZCBsb25nIHJhbmdlX2hpLFxcbi0tXFxubGliL21hcGxlX3RyZWUuYy0zOTQyLX1cXG5saWIvbWFwbGVfdHJlZS5jOjM5NDM6RVhQT1JUX1NZTUJPTChtYXNfYWxsb2NfY3ljbGljKTtcXG5saWIvbWFwbGVfdHJlZS5jLTM5NDQtXFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jPTYwMDE9aW50IG10cmVlX2FsbG9jX2N5Y2xpYyhzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0cCxcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmMtNjAxMy1cXHRtdHJlZV9sb2NrKG10KTtcXG5saWIvbWFwbGVfdHJlZS5jOjYwMTQ6XFx0cmV0ID0gbWFzX2FsbG9jX2N5Y2xpYyhcXHUwMDI2bWFzLCBzdGFydHAsIGVudHJ5LCByYW5nZV9sbywgcmFuZ2VfaGksXFxubGliL21hcGxlX3RyZWUuYy02MDE1LVxcdFxcdFxcdCAgICAgICBuZXh0LCBnZnApO1xcbi0tXFxubGliL3Rlc3RfbWFwbGVfdHJlZS5jPTM2NDY9c3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGFsbG9jX2N5Y2xpY190ZXN0aW5nKHN0cnVjdCBtYXBsZV90cmVlICptdClcXG4tLVxcbmxpYi90ZXN0X21hcGxlX3RyZWUuYy0zNjU1LVxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgMTAwOyBpKyspIHtcXG5saWIvdGVzdF9tYXBsZV90cmVlLmM6MzY1NjpcXHRcXHRtYXNfYWxsb2NfY3ljbGljKFxcdTAwMjZtYXMsIFxcdTAwMjZsb2NhdGlvbiwgbXQsIDIsIFVMT05HX01BWCwgXFx1MDAyNm5leHQsIEdGUF9LRVJORUwpO1xcbmxpYi90ZXN0X21hcGxlX3RyZWUuYy0zNjU3LVxcdFxcdE1BU19CVUdfT04oXFx1MDAyNm1hcywgaSAhPSBsb2NhdGlvbiAtIDIpO1xcbi0tXFxubGliL3Rlc3RfbWFwbGVfdHJlZS5jLTM2NzktXFx0ICogRXhoYXVzdGluZyB0aGUgYWxsb2NhdGlvbiBhcmVhIGFuZCBmb3JjaW5nIHRoZSBzZWFyY2ggdG8gd3JhcCBuZWVkcyBhXFxubGliL3Rlc3RfbWFwbGVfdHJlZS5jOjM2ODA6XFx0ICogbWFzX3Jlc2V0KCkgaW4gbWFzX2FsbG9jX2N5Y2xpYygpLlxcbmxpYi90ZXN0X21hcGxlX3RyZWUuYy0zNjgxLVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNDoyNDowNi42NDQwMTgwOTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTkzMDUxNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdCwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBgbWFzX2VyYXNlYCBVc2FnZSoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGUgcHJvbXB0IGlzIGluY3JlZGlibHkgc3BlY2lmaWMgLSBpdCBtZW50aW9ucyBgbWFzX2VyYXNlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgKndoeSogd2UncmUgZm9jdXNpbmcgb24gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJcyB0aGVyZSBhIHNwZWNpZmljIHByb2JsZW0gdGhhdCB0aGlzIHN1Z2dlc3RzPyBJdCBjb3VsZCBiZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIHBlcmhhcHMgZGF0YSBzYW5pdGF0aW9uLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggcG9zc2libGUgc2NlbmFyaW9zIGJhc2VkIG9uIG15IGV4cGVyaWVuY2UuXG5cbk15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBmaWd1cmUgb3V0IGlmIGl0J3MgdGhlIHJpZ2h0IGZ1bmN0aW9uIHRvIHVzZSwgdG8gY29uZmlybSB0aGF0IGl0J3MgdGhlIGJlc3Qgb3B0aW9uIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTQ0LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDQ6MjQ6MDkuMjM3MDc0MjUzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTQzODIyMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFzX2VyYXNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3Q9MTcxPVRoZSByYW5nZSBpcyBwYXNzZWQgaW4gYXMgbWVtYmVycyBvZiB0aGUgbWFwbGUgc3RhdGU6IGluZGV4IGFuZCBsYXN0LlxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3QtMTcyLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3Q6MTczOllvdSBjYW4gdXNlIG1hc19lcmFzZSgpIHRvIGVyYXNlIGFuIGVudGlyZSByYW5nZSBieSBzZXR0aW5nIGluZGV4IGFuZFxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3QtMTc0LWxhc3Qgb2YgdGhlIG1hcGxlIHN0YXRlIHRvIHRoZSBkZXNpcmVkIHJhbmdlIHRvIGVyYXNlLiAgVGhpcyB3aWxsIGVyYXNlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0PTE3Nj1hbmQgbGFzdCBhcyB0aGUgcmFuZ2UgdGhhdCB3YXMgZXJhc2VkIGFuZCByZXR1cm4gdGhlIGVudHJ5IHRoYXQgZXhpc3RlZFxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3Q6MTc3OmF0IHRoYXQgbG9jYXRpb24uICBOb3RlIHRoYXQgbWFzX2VyYXNlKCkgbWF5IGFsbG9jYXRlIHdpdGggdGhlIEdGUF9LRVJORUwgZmxhZy5cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0LTE3OC1JZiB0aGlzIGlzIG5vdCBva2F5LCBjb25zaWRlciB1c2luZyBtYXNfc3RvcmVfZ2ZwKCkgYW5kIHBhc3MgaXQgYSBgYE5VTExgYCxcXG4tLVxcbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtbWFwbGUuYz0xMDc9c3RhdGljIGludCByZWdjYWNoZV9tYXBsZV9kcm9wKHN0cnVjdCByZWdtYXAgKm1hcCwgdW5zaWduZWQgaW50IG1pbixcXG4tLVxcbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtbWFwbGUuYy0xNTktXFx0XFx0bWFzX2xvY2soXFx1MDAyNm1hcyk7XFxuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS1tYXBsZS5jOjE2MDpcXHRcXHRtYXNfZXJhc2UoXFx1MDAyNm1hcyk7XFxuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS1tYXBsZS5jLTE2MS1cXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01MzExPXN0YXRpYyB2b2lkIHVibGtfYnVmX2VyYXNlX3JhbmdlcyhzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLCBpbnQgYnVmX2luZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUzMTgtXFx0XFx0aWYgKHJhbmdlLVxcdTAwM2VidWZfaW5kZXggPT0gYnVmX2luZGV4KSB7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjUzMTk6XFx0XFx0XFx0bWFzX2VyYXNlKFxcdTAwMjZtYXMpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MzIwLVxcdFxcdFxcdGtmcmVlKHJhbmdlKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01NDgwPXN0YXRpYyBib29sIF9fdWJsa19zaG1lbV9yZW1vdmVfcmFuZ2VzKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTUwNC1cXHRcXHRcXHRnb3RvIHVubG9jaztcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTUwNTpcXHRcXHRtYXNfZXJhc2UoXFx1MDAyNm1hcyk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU1MDYtXFx0XFx0a2ZyZWUocmFuZ2UpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmM9MzIzPW5vdXZlYXVfdXZtYV9yZWdpb25fcmVtb3ZlKHN0cnVjdCBub3V2ZWF1X3V2bWFfcmVnaW9uICpyZWcpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYy0zMjctXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmM6MzI4OlxcdG1hc19lcmFzZShcXHUwMDI2bWFzKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYy0zMjktfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmM9MTk2Mj1ub3V2ZWF1X3V2bW1fZmluaShzdHJ1Y3Qgbm91dmVhdV91dm1tICp1dm1tKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmMtMTk5MC1cXHRtYXNfZm9yX2VhY2goXFx1MDAyNm1hcywgcmVnLCBVTE9OR19NQVgpIHtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYzoxOTkxOlxcdFxcdG1hc19lcmFzZShcXHUwMDI2bWFzKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYy0xOTkyLVxcdFxcdG5vdXZlYXVfdXZtYV9yZWdpb25fc3BhcnNlX3VucmVmKHJlZyk7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2dlbmVyaWNfcHQva3VuaXRfaW9tbXVfcHQuaD0yODc9c3RhdGljIHZvaWQgdW5tYXBfY29sbGlzaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QsIHN0cnVjdCBtYXBsZV90cmVlICptdCxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvZ2VuZXJpY19wdC9rdW5pdF9pb21tdV9wdC5oLTI5OS1cXG5kcml2ZXJzL2lvbW11L2dlbmVyaWNfcHQva3VuaXRfaW9tbXVfcHQuaDozMDA6XFx0XFx0bWFzX2VyYXNlKFxcdTAwMjZtYXMpO1xcbmRyaXZlcnMvaW9tbXUvZ2VuZXJpY19wdC9rdW5pdF9pb21tdV9wdC5oLTMwMS1cXHRcXHRtYXNfcGF1c2UoXFx1MDAyNm1hcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaD01NjA9dm9pZCAqbWFzX3N0b3JlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSk7XFxuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmg6NTYxOnZvaWQgKm1hc19lcmFzZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcyk7XFxuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmgtNTYyLWludCBtYXNfc3RvcmVfZ2ZwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSwgZ2ZwX3QgZ2ZwKTtcXG4tLVxcbmtlcm5lbC9pcnEvaXJxZGVzYy5jPTE5OD1zdGF0aWMgdm9pZCBkZWxldGVfaXJxX2Rlc2ModW5zaWduZWQgaW50IGlycSlcXG4tLVxcbmtlcm5lbC9pcnEvaXJxZGVzYy5jLTIwMC1cXHRNQV9TVEFURShtYXMsIFxcdTAwMjZzcGFyc2VfaXJxcywgaXJxLCBpcnEpO1xcbmtlcm5lbC9pcnEvaXJxZGVzYy5jOjIwMTpcXHRtYXNfZXJhc2UoXFx1MDAyNm1hcyk7XFxua2VybmVsL2lycS9pcnFkZXNjLmMtMjAyLX1cXG4tLVxcbmxpYi9tYXBsZV90cmVlLmM9NTY4ND1FWFBPUlRfU1lNQk9MX0dQTChtYXNfZmluZF9yYW5nZV9yZXYpO1xcbi0tXFxubGliL21hcGxlX3RyZWUuYy01Njg2LS8qKlxcbmxpYi9tYXBsZV90cmVlLmM6NTY4NzogKiBtYXNfZXJhc2UoKSAtIEZpbmQgdGhlIHJhbmdlIGluIHdoaWNoIGluZGV4IHJlc2lkZXMgYW5kIGVyYXNlIHRoZSBlbnRpcmVcXG5saWIvbWFwbGVfdHJlZS5jLTU2ODgtICogcmFuZ2UuXFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jLTU3MDAtICovXFxubGliL21hcGxlX3RyZWUuYzo1NzAxOnZvaWQgKm1hc19lcmFzZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcXG5saWIvbWFwbGVfdHJlZS5jLTU3MDIte1xcbi0tXFxubGliL21hcGxlX3RyZWUuYy01NzM5LX1cXG5saWIvbWFwbGVfdHJlZS5jOjU3NDA6RVhQT1JUX1NZTUJPTF9HUEwobWFzX2VyYXNlKTtcXG5saWIvbWFwbGVfdHJlZS5jLTU3NDEtXFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jPTYwNzQ9dm9pZCAqbXRyZWVfZXJhc2Uoc3RydWN0IG1hcGxlX3RyZWUgKm10LCB1bnNpZ25lZCBsb25nIGluZGV4KVxcbi0tXFxubGliL21hcGxlX3RyZWUuYy02MDgxLVxcdG10cmVlX2xvY2sobXQpO1xcbmxpYi9tYXBsZV90cmVlLmM6NjA4MjpcXHRlbnRyeSA9IG1hc19lcmFzZShcXHUwMDI2bWFzKTtcXG5saWIvbWFwbGVfdHJlZS5jLTYwODMtXFx0bXRyZWVfdW5sb2NrKG10KTtcXG4tLVxcbmxpYi90ZXN0X21hcGxlX3RyZWUuYz0zODc9c3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGNoZWNrX2ZpbmQoc3RydWN0IG1hcGxlX3RyZWUgKm10KVxcbi0tXFxubGliL3Rlc3RfbWFwbGVfdHJlZS5jLTU3OC1cXHRtYXMubGFzdCA9IFVMT05HX01BWDtcXG5saWIvdGVzdF9tYXBsZV90cmVlLmM6NTc5OlxcdG1hc19lcmFzZShcXHUwMDI2bWFzKTtcXG5saWIvdGVzdF9tYXBsZV90cmVlLmMtNTgwLVxcbi0tXFxubW0vYWxsb2NfdGFnLmM9MzczPXN0YXRpYyB2b2lkIGNsZWFuX3VudXNlZF9tb2R1bGVfYXJlYXNfbG9ja2VkKHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy0zODgtXFx0XFx0aWYgKGNsZWFuX3VudXNlZF9jb3VudGVycyhzdGFydF90YWcsIGVuZF90YWcpKVxcbm1tL2FsbG9jX3RhZy5jOjM4OTpcXHRcXHRcXHRtYXNfZXJhc2UoXFx1MDAyNm1hcyk7XFxubW0vYWxsb2NfdGFnLmMtMzkwLVxcdH1cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTQ4ND1zdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTUzMy1cXHRcXHRcXHRtYXMuaW5kZXggPSBwYWRfc3RhcnQ7XFxubW0vYWxsb2NfdGFnLmM6NTM0OlxcdFxcdFxcdG1hc19lcmFzZShcXHUwMDI2bWFzKTtcXG5tbS9hbGxvY190YWcuYy01MzUtXFx0XFx0XFx0cmV0ID0gRVJSX1BUUih4YV9lcnIobWFzLm5vZGUpKTtcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jPTM1OTAyPXN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19lcmFzZV9yZWJhbGFuY2Uoc3RydWN0IG1hcGxlX3RyZWUgKm10KVxcbi0tXFxudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMtMzU5NDctXFx0d2hpbGUgKG1hc19kYXRhX2VuZChcXHUwMDI2bWFzKSBcXHUwMDNlIDYpIHtcXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYzozNTk0ODpcXHRcXHRtYXNfZXJhc2UoXFx1MDAyNm1hcyk7XFxudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMtMzU5NDktXFx0XFx0bWFzX25leHQoXFx1MDAyNm1hcywgVUxPTkdfTUFYKTtcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jLTM1OTU5LVxcdHdoaWxlIChtYXNfZGF0YV9lbmQoXFx1MDAyNm1hcykgXFx1MDAzZSA5KSB7XFxudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmM6MzU5NjA6XFx0XFx0bWFzX2VyYXNlKFxcdTAwMjZtYXMpO1xcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jLTM1OTYxLVxcdFxcdG1hc19uZXh0KFxcdTAwMjZtYXMsIFVMT05HX01BWCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYy0zNTk2OS1cXHRcXHRtYXNfc2V0KFxcdTAwMjZtYXMsIHZhbCk7XFxudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmM6MzU5NzA6XFx0XFx0bWFzX2VyYXNlKFxcdTAwMjZtYXMpO1xcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jLTM1OTcxLVxcdFxcdG1hc19wcmV2KFxcdTAwMjZtYXMsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmM9MzYyMDA9c3RhdGljIHZvaWQgY2hlY2tfY29sbGFwc2luZ19yZWJhbGFuY2Uoc3RydWN0IG1hcGxlX3RyZWUgKm10KVxcbi0tXFxudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMtMzYyMTItXFx0ZG8ge1xcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jOjM2MjEzOlxcdFxcdG1hc19lcmFzZShcXHUwMDI2bWFzKTtcXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYy0zNjIxNC1cXHR9IHdoaWxlIChtYXNfcHJldihcXHUwMDI2bWFzLCAwKSAhPSBOVUxMKTtcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jPTM2MjQwPXN0YXRpYyB2b2lkIGNoZWNrX25vbWVtX3dyaXRlcl9yYWNlKHN0cnVjdCBtYXBsZV90cmVlICptdClcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jLTM2MjU1LVxcdC8qIGVyYXNlIDAtNSAqL1xcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jOjM2MjU2OlxcdG1hc19lcmFzZShcXHUwMDI2bWFzKTtcXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYy0zNjI1Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDQ6MjQ6MTEuNjkxNDYxMDQyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQyNjczMzk0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTWFwbGUgVHJlZSBMb2NrZGVwIGFuZCBTdG9yZSBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2gsIGFuZCBoZXJlJ3MgbXkgdGFrZSBvbiB0aGUgY2hhbmdlcy4gVGhlIGluaXRpYWwgYWRkaXRpb24gb2YgYG1hc19sb2NrX2NoZWNrYCwgYG1hc19pbml0X2xvY2tfY2hlY2tgLCBhbmQgYG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrYCwgYWxsIGxldmVyYWdpbmcgYGxvY2tfc2VxdWVuY2VgLCBhcmUgY2xlYXJseSBhYm91dCBpbnRlZ3JhdGluZyBsb2NrZGVwIGludG8gdGhlIE1hcGxlIFRyZWUuIFRoaXMgaXMgYSBzb2xpZCBtb3ZlIGZvciBpbXByb3ZpbmcgZGVidWdnaW5nIGFuZCBlbnN1cmluZyBwcm9wZXIgbG9ja2luZyBiZWhhdmlvciwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgdGhpcy4gIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGBDT05GSUdfTE9DS0RFUGAgYW5kIHBvdGVudGlhbGx5IGBDT05GSUdfUFJPVkVfTE9DS0lOR2AgKHdoaWNoIGVuYWJsZXMgYExPQ0tERVBgKSBhbmQgYENPTkZJR19ERUJVR19NQVBMRV9UUkVFYCAod2hpY2ggZGVwZW5kcyBvbiBgREVCVUdfS0VSTkVMYCkgd2lsbCBiZSBlc3NlbnRpYWwgZm9yIHRlc3RpbmcgdGhpcyBwcm9wZXJseS5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcywgaG93ZXZlciwgc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiBvcHRpbWl6aW5nIHRoZSBgbWFzX3dyX25vZGVfc3RvcmVgIGFuZCBgbWFzX3dyX3N0b3JlX3R5cGVgIGZ1bmN0aW9ucy4gIEluIGBtYXNfd3Jfbm9kZV9zdG9yZWAsIGluc3RlYWQgb2YgYSBmdWxsIGBtZW1zZXRgIG9uIGByZXVzZWAgZm9yIHRoZSBuZXcgbm9kZSwgdGhlcmUncyBhIG1vcmUgdGFyZ2V0ZWQgY2xlYXJpbmcgb2YgdW51c2VkIHNsb3RzIGFuZCBwaXZvdHMgYXQgdGhlIGVuZCBvZiB0aGUgbm9kZS4gIFRoaXMgbG9va3MgbGlrZSBhIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGJ5IHJlZHVjaW5nIHVubmVjZXNzYXJ5IG1lbW9yeSB3cml0ZXMsIHdoaWNoIGlzIGFsd2F5cyB3ZWxjb21lLiAgSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBub2RlX3Nsb3RzYCBhbmQgYG5vZGVfcGl2b3RzYCB2YXJpYWJsZXMgaGVyZSwgdG8gYmUgc3VyZSB0aGlzIGlzIGNvcnJlY3QuXG5cbmBtYXNfd3Jfc3RvcmVfdHlwZWAgaXMgYWxzbyBtb2RpZmllZCwgdG8gbW9yZSBpbnRlbGxpZ2VudGx5IGNsYXNzaWZ5IHN0b3JlIHR5cGVzLiAgVGhlcmUncyBhZGRlZCBsb2dpYyB0byBkZXRlcm1pbmUgaWYgdGhlIHN0b3JlIGlzIGFuIGFwcGVuZCwgYSBzbG90IHN0b3JlLCBvciByZWJhbGFuY2UgYmFzZWQgb24gZmFjdG9ycyBsaWtlIG5ld19lbmQsIGBpbl9yY3VgLCBgYXBwZW5kaW5nYCwgYW5kIGBvbmVfc2xvdGAuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgZm9yIHBlcmZvcm1hbmNlLCBhbmQgdGhlIGNvZGUgbG9va3MgbGlrZSBpdCBtYWtlcyB0aGVzZSBuZXcgY2hlY2tzIHByb3Blcmx5LiBJIHdpbGwgbmVlZCB0byByZWFsbHkgZm9jdXMgb24gdGhpcyBjb2RlIHNlY3Rpb24gZm9yIHRlc3RpbmcuIEkgYWxzbyBzZWUgdGhleSBoYXZlIGFsc28gbW9kaWZpZWQgYG1hc19hbGxvY19jeWNsaWNgLCBhbmQgYW0gbm90IHN1cmUgaWYgaXQgaXMgYSBzaWRlIGVmZmVjdCBvZiB0aGUgb3RoZXIgY2hhbmdlcy5cblxuVGhlIG1vZGlmaWNhdGlvbnMgdG8gYG1hc19lcmFzZWAgYXJlIGludGVyZXN0aW5nLCB3aXRoIHRoZSBhZGRpdGlvbiBvZiB0aGUgYG1pZ2h0X2FsbG9jYCBjYWxsIHdpdGhpbiBhbiBleHRlcm5hbCBsb2NrIGNoZWNrLiBUaGlzIGlzIGRlc2lnbmVkIGZvciBsb3ctbWVtb3J5IHNpdHVhdGlvbnMsIGFuZCB0aGlzIGxvb2tzIGxpa2UgYSByZWFzb25hYmxlIGFwcHJvYWNoLiBJIG5lZWQgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcy5cblxuRmluYWxseSwgdGhlIGNoYW5nZXMgdG8gYG1hc19ub21lbWAgYXJlIGFsc28gaW1wb3J0YW50LiBUaGUgYFdBUk5fT05fT05DRWAgYW5kIHRoZSBsb2dpYyBhcm91bmQgZXh0ZXJuYWwgbG9ja3MgYW5kIGJsb2NraW5nIEdGUCBmbGFncyBpcyBjcnVjaWFsIGZvciBwcmV2ZW50aW5nIGRlYWRsb2NrcyBhbmQgaGFuZGxpbmcgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZ3JhY2VmdWxseS4gVGhlIG5ldyBgbWFzX3Jlc2V0KG1hcylgIGNhbGwgaXMgYWRkZWQgdG8gaGFuZGxlIHRoaXMuXG5cblNvLCBvdmVyYWxsLCB0aGVzZSBwYXRjaGVzIGFyZSBmb2N1c2VkIG9uIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBhbmQgcm9idXN0bmVzcy4gVGhlIG9wdGltaXphdGlvbiBvZiBtZW1vcnkgd3JpdGVzIGluIHRoZSBub2RlIHN0b3JlIGlzIGdvb2QsIGFuZCB0aGUgaW1wcm92ZWQgc3RvcmUgdHlwZSBkZXRlcm1pbmF0aW9uIGxvb2tzIGJlbmVmaWNpYWwuIExvY2tkZXAgaW50ZWdyYXRpb24gaXMgYSBzb2xpZCBhZGRpdGlvbiwgYW5kIHRoZSBsb3ctbWVtb3J5IGhhbmRsaW5nIHNlZW1zIHdlbGwgdGhvdWdodCBvdXQuIEknbGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gYG1hc193cl9ub2RlX3N0b3JlYCwgYG1hc193cl9zdG9yZV90eXBlYCwgYG1hc19hbGxvY19jeWNsaWNgLCBgbWFzX2VyYXNlYCwgYW5kIGBtYXNfbm9tZW1gLiBJIHdpbGwgYWxzbyBoYXZlIHRvIGFkZCBgbWFzX3NldF9wYXJlbnRfc2xvdHNgIGFuZCBgbWFzX3VwZGF0ZV9nYXBfa25vd25gIHRvIG15IGZ1enogbGlzdCB0byBtYWtlIHN1cmUgSSBjb3ZlciBhbGwgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NjcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA0OjI0OjI1Ljk1ODgwNDY2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczNTgwOTMyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXNfc2V0X3BhcmVudF9zbG90c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvbWFwbGVfdHJlZS5jPTQ2OT12b2lkIG1hc19zZXRfcGFyZW50KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKmVub2RlLFxcbi0tXFxubGliL21hcGxlX3RyZWUuYy00OTktLypcXG5saWIvbWFwbGVfdHJlZS5jOjUwMDogKiBtYXNfc2V0X3BhcmVudF9zbG90cygpIC0gQnVsayBvcGVyYXRpb24gdG8gc2V0IG1hbnkgc2xvdCBwYXJlbnQgcG9pbnRlcnNcXG5saWIvbWFwbGVfdHJlZS5jLTUwMS0gKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGVcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmM9NTA3PXN0YXRpYyBpbmxpbmVcXG5saWIvbWFwbGVfdHJlZS5jOjUwODp2b2lkIG1hc19zZXRfcGFyZW50X3Nsb3RzKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnBhcmVudCxcXG5saWIvbWFwbGVfdHJlZS5jLTUwOS1cXHR2b2lkIF9fcmN1ICoqc2xvdHMsIHVuc2lnbmVkIGNoYXIgc3RhcnRfc2xvdCwgdW5zaWduZWQgY2hhciBjb3VudClcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmM9MTY0Mz1zdGF0aWMgaW5saW5lIHZvaWQgbWFzX2Fkb3B0X2NoaWxkcmVuKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLFxcbi0tXFxubGliL21hcGxlX3RyZWUuYy0xNjUyLVxcdGVuZCA9IG1hX2RhdGFfZW5kKG5vZGUsIHR5cGUsIHBpdm90cywgbWFzLVxcdTAwM2VtYXgpO1xcbmxpYi9tYXBsZV90cmVlLmM6MTY1MzpcXHRtYXNfc2V0X3BhcmVudF9zbG90cyhtYXMsIHBhcmVudCwgc2xvdHMsIDAsIGVuZCArIDEpO1xcbmxpYi9tYXBsZV90cmVlLmMtMTY1NC19XFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jPTIwMjA9dW5zaWduZWQgbG9uZyBub2RlX2NvcHkoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9ub2RlICpzcmMsXFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jLTIwMzYtXFx0aWYgKCFtYV9pc19sZWFmKGRfbXQpIFxcdTAwMjZcXHUwMDI2IHNfbXQgPT0gbWFwbGVfY29weSlcXG5saWIvbWFwbGVfdHJlZS5jOjIwMzc6XFx0XFx0bWFzX3NldF9wYXJlbnRfc2xvdHMobWFzLCBtdF9ta19ub2RlKGRzdCwgZF9tdCksXFxubGliL21hcGxlX3RyZWUuYy0yMDM4LVxcdFxcdFxcdFxcdCAgICAgZF9zbG90cywgZF9zdGFydCwgc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA0OjI0OjI4LjY5NDYxODI3NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Njg1MDMxNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgTWFwbGUgVHJlZSBMb2NrIFNlcXVlbmNlIFZhbGlkYXRpb24gYW5kIE9wdGltaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjb25zaWRlciB0aGUgZm9sbG93aW5nIHN5bWJvbHMsIHBhcnRpY3VsYXJseSBnaXZlbiB0aGUgY29udGV4dCBvZiBsb2NrIHNlcXVlbmNlIHZhbGlkYXRpb24gYW5kIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIE1hcGxlIFRyZWU6IGBtYXNfd3Jfbm9kZV9zdG9yZWAsIGBtYXNfd3Jfc3RvcmVfdHlwZWAsIGBtYXNfYWxsb2NfY3ljbGljYCwgYG1hc19lcmFzZWAsIGBtYXNfbm9tZW1gLCBgbWFzX3NldF9wYXJlbnRfc2xvdHNgLCBgbWFzX3VwZGF0ZV9nYXBfa25vd25gLCBgbWFzX2xvY2tfY2hlY2tgLCBgbWFzX2luaXRfbG9ja19jaGVja2AsIGFuZCBgbWFzX21heV9pbml0X2xvY2tfY2hlY2tgLiBIb3dldmVyLCBzaW5jZSBzb21lIGFyZSBgc3RhdGljYCBvciBgc3RhdGljIGlubGluZWAsIHRoZXkgbWlnaHQgYmUgaW5saW5lZCwgc28gdGhleSdyZSBub3QgdXNlZnVsIGVudHJ5IHBvaW50cyBmb3IgYW5hbHlzaXMuXG5cbkkga25vdyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGxvY2sgc2VxdWVuY2UgdmFsaWRhdGlvbiB1c2luZyBgbG9ja2RlcGAsIG9wdGltaXppbmcgc3RvcmUgb3BlcmF0aW9ucywgYW5kIGZpeGluZyB3cmFwLWFyb3VuZCBpbiBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGluIHRoZSBNYXBsZSBUcmVlIGltcGxlbWVudGF0aW9uLlxuXG5TbywgSSBkZWNpZGVkIHRvIGZvY3VzIG9uIHRoZSBmb2xsb3dpbmcgbm9uLWlubGluZSBvciBleHBvcnRlZCBmdW5jdGlvbnM6IGBtYXNfYWxsb2NfY3ljbGljYCwgYG1hc19lcmFzZWAsIGBtdHJlZV9lcmFzZWAsIGBtYXNfbm9tZW1gLCBhbmQgYGxvY2tfc2VxdWVuY2VgLiBJIGFsc28gaW5pdGlhbGx5IGlkZW50aWZpZWQgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGxpa2UgYG1hc19zdG9yZWAsIGBtYXNfc3RvcmVfZ2ZwYCwgYG1hc19zdG9yZV9wcmVhbGxvY2AsIGFuZCBgbWFzX3ByZWFsbG9jYXRlYCwgYnV0IHRoZXNlIGFyZSBsaWtlbHkgaG90IHBhdGggZnVuY3Rpb25zLiBBdm9pZGluZyBob3QgcGF0aHMgaXMgaW1wb3J0YW50IGhlcmUuIFNvLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBJIGp1c3QgbGlzdGVkOiBgbWFzX2FsbG9jX2N5Y2xpY2AsIGBtYXNfZXJhc2VgLCBgbXRyZWVfZXJhc2VgLCBgbWFzX25vbWVtYCwgYW5kIGBsb2NrX3NlcXVlbmNlYC5cblxuSSdtIHZlcmlmeWluZyB0aGF0IGBtYXNfYWxsb2NfY3ljbGljYCBpcyB1c2VkIGluIGBtdHJlZV9hbGxvY19jeWNsaWNgLCBgbWFzX2VyYXNlYCBpcyB1c2VkIGluIGBtdHJlZV9lcmFzZWAgYW5kIGEgZmV3IGRyaXZlcnMsIGFuZCBgbWFzX25vbWVtYCBpcyB1c2VkIGluIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgY2FzZXMuIFRoZSBjb25maWd1cmF0aW9ucyBvZiBpbnRlcmVzdCBhcmUgYERFQlVHX01BUExFX1RSRUVgLCBgUFJPVkVfTE9DS0lOR2AsIGFuZCBgTE9DS0RFUGAuIFRoZXNlIGZ1bmN0aW9ucyBhbmQgY29uZmlncyByZXByZXNlbnQgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBkZXRhaWxlZCBpbnNwZWN0aW9uIGFuZCBwb3NzaWJsZSBmdXp6aW5nIGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTU3LCJPdXRwdXRUb2tlbnMiOjE3MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNDoyNDozOC4zNzk2NTI2MTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM1MjcyNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX01BUExFX1RSRUVcIixcbiAgICBcIlBST1ZFX0xPQ0tJTkdcIixcbiAgICBcIkxPQ0tERVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYXNfYWxsb2NfY3ljbGljXCIsXG4gICAgXCJtYXNfZXJhc2VcIixcbiAgICBcIm10cmVlX2VyYXNlXCIsXG4gICAgXCJtYXNfbm9tZW1cIixcbiAgICBcImxvY2tfc2VxdWVuY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvY2sgc2VxdWVuY2UgdmFsaWRhdGlvbiBmb3IgbWFwbGUgdHJlZSBvcGVyYXRpb25zIHVzaW5nIGxvY2tkZXAsIGFuZCBvcHRpbWl6ZXMgbWFwbGUgdHJlZSBub2RlIHN0b3JlIG9wZXJhdGlvbnMgYW5kIHBhcmVudCBwb2ludGVyIHVwZGF0ZXMuIEl0IGFsc28gZml4ZXMgd3JhcC1hcm91bmQgaGFuZGxpbmcgaW4gYG1hc19hbGxvY19jeWNsaWNgIGFuZCBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBpbiBgbWFzX2VyYXNlYCBhbmQgYG1hc19ub21lbWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX01BUExFX1RSRUVcIixcbiAgICBcIlBST1ZFX0xPQ0tJTkdcIixcbiAgICBcIkxPQ0tERVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYXNfYWxsb2NfY3ljbGljXCIsXG4gICAgXCJtYXNfZXJhc2VcIixcbiAgICBcIm10cmVlX2VyYXNlXCIsXG4gICAgXCJtYXNfbm9tZW1cIixcbiAgICBcImxvY2tfc2VxdWVuY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvY2sgc2VxdWVuY2UgdmFsaWRhdGlvbiBmb3IgbWFwbGUgdHJlZSBvcGVyYXRpb25zIHVzaW5nIGxvY2tkZXAsIGFuZCBvcHRpbWl6ZXMgbWFwbGUgdHJlZSBub2RlIHN0b3JlIG9wZXJhdGlvbnMgYW5kIHBhcmVudCBwb2ludGVyIHVwZGF0ZXMuIEl0IGFsc28gZml4ZXMgd3JhcC1hcm91bmQgaGFuZGxpbmcgaW4gYG1hc19hbGxvY19jeWNsaWNgIGFuZCBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBpbiBgbWFzX2VyYXNlYCBhbmQgYG1hc19ub21lbWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4gpxs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 04:11:08 +0000 UTC FinishedAt: 2026-07-02 04:24:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_MAPLE_TREE", "PROVE_LOCKING", "LOCKDEP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_MAPLE_TREE", "PROVE_LOCKING", "LOCKDEP" ], "series_id": "f1f4ca05-4aa4-4657-9c56-27366f2402f2" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mas_alloc_cyclic", "mas_erase", "mtree_erase", "mas_nomem", "lock_sequence" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA0OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX01BUExFX1RSRUUmIzM0OywKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtMT0NLREVQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFzX2FsbG9jX2N5Y2xpYyYjMzQ7LAogICAgJiMzNDttYXNfZXJhc2UmIzM0OywKICAgICYjMzQ7bXRyZWVfZXJhc2UmIzM0OywKICAgICYjMzQ7bWFzX25vbWVtJiMzNDssCiAgICAmIzM0O2xvY2tfc2VxdWVuY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBsb2NrIHNlcXVlbmNlIHZhbGlkYXRpb24gZm9yIG1hcGxlIHRyZWUgb3BlcmF0aW9ucyB1c2luZyBsb2NrZGVwLCBhbmQgb3B0aW1pemVzIG1hcGxlIHRyZWUgbm9kZSBzdG9yZSBvcGVyYXRpb25zIGFuZCBwYXJlbnQgcG9pbnRlciB1cGRhdGVzLiBJdCBhbHNvIGZpeGVzIHdyYXAtYXJvdW5kIGhhbmRsaW5nIGluIGBtYXNfYWxsb2NfY3ljbGljYCBhbmQgbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IgaW4gYG1hc19lcmFzZWAgYW5kIGBtYXNfbm9tZW1gLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGRhdGEgc3RydWN0dXJlcyBhbmQgbG9ja2luZyB2YWxpZGF0aW9uLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNDoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY1YWFlNjgxYzczZGFlN2ZlYWFiMDEzYzE2MDk1MjY5YzAxZmFiYWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyIDA0OjIzOjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0XG5pbmRleCBjY2RkMTYxNWNmOTc0Zi4uMWVhZTI0YTljMThiNGEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0XG5AQCAtMTcsNyAmIzQzOzE3LDggQEAgc3VwcG9ydHMgaXRlcmF0aW5nIG92ZXIgYSByYW5nZSBvZiBlbnRyaWVzIGFuZCBnb2luZyB0byB0aGUgcHJldmlvdXMgb3IgbmV4dFxuIGVudHJ5IGluIGEgY2FjaGUtZWZmaWNpZW50IG1hbm5lci4gIFRoZSB0cmVlIGNhbiBhbHNvIGJlIHB1dCBpbnRvIGFuIFJDVS1zYWZlXG4gbW9kZSBvZiBvcGVyYXRpb24gd2hpY2ggYWxsb3dzIHJlYWRpbmcgYW5kIHdyaXRpbmcgY29uY3VycmVudGx5LiAgV3JpdGVycyBtdXN0XG4gc3luY2hyb25pemUgb24gYSBsb2NrLCB3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQgc3BpbmxvY2ssIG9yIHRoZSB1c2VyIGNhbiBzZXRcbi10aGUgbG9jayB0byBhbiBleHRlcm5hbCBsb2NrIG9mIGEgZGlmZmVyZW50IHR5cGUuXG4mIzQzO3RoZSBsb2NrIHRvIGFuIGV4dGVybmFsIGxvY2sgb2YgYSBkaWZmZXJlbnQgdHlwZS4gIE5vdGUgdGhhdCBleHRlcm5hbCBsb2NrcyBtYXlcbiYjNDM7aW50ZXJmZXJlIHdpdGggYWxsb2NhdGlvbnMgaW4gYSBsb3cgbWVtb3J5IHNpdHVhdGlvbi5cbiBcbiBUaGUgTWFwbGUgVHJlZSBtYWludGFpbnMgYSBzbWFsbCBtZW1vcnkgZm9vdHByaW50IGFuZCB3YXMgZGVzaWduZWQgdG8gdXNlXG4gbW9kZXJuIHByb2Nlc3NvciBjYWNoZSBlZmZpY2llbnRseS4gIFRoZSBtYWpvcml0eSBvZiB0aGUgdXNlcnMgd2lsbCBiZSBhYmxlIHRvXG5AQCAtNDIsNiAmIzQzOzQzLDE1IEBAIHN1Y2Nlc3NmdWwgc3RvcmUgb3BlcmF0aW9uIHdpdGhpbiBhIGdpdmVuXG4gY29kZSBzZWdtZW50IHdoZW4gYWxsb2NhdGluZyBjYW5ub3QgYmUgZG9uZS4gIEFsbG9jYXRpb25zIG9mIG5vZGVzIGFyZVxuIHJlbGF0aXZlbHkgc21hbGwgYXQgYXJvdW5kIDI1NiBieXRlcy5cbiBcbiYjNDM7U2luY2UgdGhlIG1hcGxlIHRyZWUgdXNlcyBpbnRlcm5hbCBub2RlcyB0aGF0IGFyZSBhbGxvY2F0ZWQgYW5kIGhhcyBydWxlcyBvblxuJiM0MztkYXRhIGRlbnNpdHksIGVyYXNpbmcgYW4gZW50cnkgbWF5IGNhdXNlIGFsbG9jYXRpb25zIHRvIG9jY3VyLiAgVGhhdCBpcyxcbiYjNDM7ZXJhc2luZyBhbiBlbnRyeSBtYXkgY29uc3VtZSBtZW1vcnkuICBVc2VycyBtdXN0IHRha2UgY2FyZSB0byBlbnN1cmUgdGhhdCB0aGV5XG4mIzQzO2RvIG5vdCB2aW9sYXRlIHRoZSBsYXJnZXIgc3lzdGVtIGNvbnN0cmFpbnRzIG9uIHdoZW4gYW5kIGhvdyBtZW1vcnkgaXNcbiYjNDM7YWxsb2NhdGVkLiAgTW9zdCBzaXR1YXRpb25zIGFyZSBmaW5lIHRvIGFsbG9jYXRlLCBidXQgdGhlIHByZS1hbGxvY2F0aW9uXG4mIzQzO3N1cHBvcnQgaXMgcHJvdmlkZWQgYXMgYSBtZWNoYW5pc20gdG8gYXZvaWQgdHJpY2tpZXIgc2l0dWF0aW9ucy4gIFRoZXJlIGlzIGFsc29cbiYjNDM7dGhlIHBvc3NpYmlsaXR5IG9mIHVzaW5nIHNwZWNpYWwgZW50cmllcyBhbmQgY2xlYW4gdXAgdGhlIHRyZWUgbGF0ZXIsIGluXG4mIzQzO2V4dHJlbWUgY2lyY3Vtc3RhbmNlcy5cbiYjNDM7XG4gLi4gX21hcGxlLXRyZWUtbm9ybWFsLWFwaTpcbiBcbiBOb3JtYWwgQVBJXG5AQCAtNjMsNyAmIzQzOzczLDggQEAgc3VjY2VzcyBvciBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS4gIG10cmVlX3N0b3JlX3JhbmdlKCkgd29ya3MgaW4gdGhlIHNhbWUgd2F5XG4gYnV0IHRha2VzIGEgcmFuZ2UuICBtdHJlZV9sb2FkKCkgaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgZW50cnkgc3RvcmVkIGF0IGFcbiBnaXZlbiBpbmRleC4gIFlvdSBjYW4gdXNlIG10cmVlX2VyYXNlKCkgdG8gZXJhc2UgYW4gZW50aXJlIHJhbmdlIGJ5IG9ubHlcbiBrbm93aW5nIG9uZSB2YWx1ZSB3aXRoaW4gdGhhdCByYW5nZSwgb3IgbXRyZWVfc3RvcmUoKSBjYWxsIHdpdGggYW4gZW50cnkgb2Zcbi1OVUxMIG1heSBiZSB1c2VkIHRvIHBhcnRpYWxseSBlcmFzZSBhIHJhbmdlIG9yIG1hbnkgcmFuZ2VzIGF0IG9uY2UuXG4mIzQzO05VTEwgbWF5IGJlIHVzZWQgdG8gcGFydGlhbGx5IGVyYXNlIGEgcmFuZ2Ugb3IgbWFueSByYW5nZXMgYXQgb25jZS4gIE5vdGUgdGhhdFxuJiM0MzttdHJlZV9lcmFzZSgpIG1heSB1c2UgR0ZQX0tFUk5FTCBvbiBhbGxvY2F0aW9ucy5cbiBcbiBJZiB5b3Ugd2FudCB0byBvbmx5IHN0b3JlIGEgbmV3IGVudHJ5IHRvIGEgcmFuZ2UgKG9yIGluZGV4KSBpZiB0aGF0IHJhbmdlIGlzXG4gY3VycmVudGx5IGBgTlVMTGBgLCB5b3UgY2FuIHVzZSBtdHJlZV9pbnNlcnRfcmFuZ2UoKSBvciBtdHJlZV9pbnNlcnQoKSB3aGljaFxuQEAgLTE2Myw3ICYjNDM7MTc0LDkgQEAgWW91IGNhbiB1c2UgbWFzX2VyYXNlKCkgdG8gZXJhc2UgYW4gZW50aXJlIHJhbmdlIGJ5IHNldHRpbmcgaW5kZXggYW5kXG4gbGFzdCBvZiB0aGUgbWFwbGUgc3RhdGUgdG8gdGhlIGRlc2lyZWQgcmFuZ2UgdG8gZXJhc2UuICBUaGlzIHdpbGwgZXJhc2VcbiB0aGUgZmlyc3QgcmFuZ2UgdGhhdCBpcyBmb3VuZCBpbiB0aGF0IHJhbmdlLCBzZXQgdGhlIG1hcGxlIHN0YXRlIGluZGV4XG4gYW5kIGxhc3QgYXMgdGhlIHJhbmdlIHRoYXQgd2FzIGVyYXNlZCBhbmQgcmV0dXJuIHRoZSBlbnRyeSB0aGF0IGV4aXN0ZWRcbi1hdCB0aGF0IGxvY2F0aW9uLlxuJiM0MzthdCB0aGF0IGxvY2F0aW9uLiAgTm90ZSB0aGF0IG1hc19lcmFzZSgpIG1heSBhbGxvY2F0ZSB3aXRoIHRoZSBHRlBfS0VSTkVMIGZsYWcuXG4mIzQzO0lmIHRoaXMgaXMgbm90IG9rYXksIGNvbnNpZGVyIHVzaW5nIG1hc19zdG9yZV9nZnAoKSBhbmQgcGFzcyBpdCBhIGBgTlVMTGBgLFxuJiM0MzthZnRlciBzZXR0aW5nIHVwIHRoZSBjb3JyZWN0IHJhbmdlIGJ5IHdhbGtpbmcgdG8gdGhlIGVudHJ5LlxuIFxuIFlvdSBjYW4gd2FsayBlYWNoIGVudHJ5IHdpdGhpbiBhIHJhbmdlIGJ5IHVzaW5nIG1hc19mb3JfZWFjaCgpLiAgSWYgeW91IHdhbnRcbiB0byB3YWxrIGVhY2ggZWxlbWVudCBvZiB0aGUgdHJlZSB0aGVuIGBgMGBgIGFuZCBgYFVMT05HX01BWGBgIG1heSBiZSB1c2VkIGFzXG5AQCAtMjExLDcgJiM0MzsyMjQsNyBAQCBBZHZhbmNlZCBMb2NraW5nXG4gXG4gVGhlIG1hcGxlIHRyZWUgdXNlcyBhIHNwaW5sb2NrIGJ5IGRlZmF1bHQsIGJ1dCBleHRlcm5hbCBsb2NrcyBjYW4gYmUgdXNlZCBmb3JcbiB0cmVlIHVwZGF0ZXMgYXMgd2VsbC4gIFRvIHVzZSBhbiBleHRlcm5hbCBsb2NrLCB0aGUgdHJlZSBtdXN0IGJlIGluaXRpYWxpemVkXG4td2l0aCB0aGUgYGBNVF9GTEFHU19MT0NLX0VYVEVSTiBmbGFnYGAsIHRoaXMgaXMgdXN1YWxseSBkb25lIHdpdGggdGhlXG4mIzQzO3dpdGggdGhlIGBgTVRfRkxBR1NfTE9DS19FWFRFUk5gYCBmbGFnLCB0aGlzIGlzIHVzdWFsbHkgZG9uZSB3aXRoIHRoZVxuIE1UUkVFX0lOSVRfRVhUKCkgI2RlZmluZSwgd2hpY2ggdGFrZXMgYW4gZXh0ZXJuYWwgbG9jayBhcyBhbiBhcmd1bWVudC5cbiBcbiBGdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oXG5pbmRleCA2MjE1NjYzNDU0MDZkZC4uYTY0NTFlY2JiZTlhMDUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcbkBAIC0yNzMsNiAmIzQzOzI3Myw5IEBAIGV4dGVybiBzdHJ1Y3QgcGluX2Nvb2tpZSBsb2NrX3Bpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jayk7XG4gZXh0ZXJuIHZvaWQgbG9ja19yZXBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUpO1xuIGV4dGVybiB2b2lkIGxvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llKTtcbiBcbiYjNDM7ZXh0ZXJuIHUzMiBsb2NrX3NlcXVlbmNlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jayk7XG4mIzQzOyNkZWZpbmUgbG9ja2RlcF9zZXF1ZW5jZShsb2NrKVx0bG9ja19zZXF1ZW5jZShcdTAwMjYobG9jayktXHUwMDNlZGVwX21hcClcbiYjNDM7XG4gI2RlZmluZSBsb2NrZGVwX2RlcHRoKHRzaylcdChkZWJ1Z19sb2NrcyA/ICh0c2spLVx1MDAzZWxvY2tkZXBfZGVwdGggOiAwKVxuIFxuICNkZWZpbmUgbG9ja2RlcF9hc3NlcnQoY29uZClcdFx0XFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oXG5pbmRleCBlYWUxMTVhMjY0ODg1Ni4uNTVjNGIxNTJmZWRmN2MgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmhcbkBAIC0yNTMsNyAmIzQzOzI1Myw4IEBAIHN0cnVjdCBoZWxkX2xvY2sge1xuIFx0dW5zaWduZWQgaW50IGhhcmRpcnFzX29mZjoxO1xuIFx0dW5zaWduZWQgaW50IHN5bmM6MTtcbiBcdHVuc2lnbmVkIGludCByZWZlcmVuY2VzOjExO1x0XHRcdFx0XHQvKiAzMiBiaXRzICovXG4tXHR1bnNpZ25lZCBpbnQgcGluX2NvdW50O1xuJiM0MztcdHVuc2lnbmVkIGludCBwaW5fY291bnQ6MjQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IHNlcV9jb3VudDo4O1xuIH07XG4gXG4gI2Vsc2UgLyogIUNPTkZJR19MT0NLREVQICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmggYi9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaFxuaW5kZXggNGE1NjMxOTA2YWZmYjUuLjVlMGJkMjg1N2Q5NDFlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oXG5AQCAtMjksMTMgJiM0MzsyOSwxMSBAQFxuICNkZWZpbmUgTUFQTEVfTk9ERV9TTE9UU1x0MzFcdC8qIDI1NiBieXRlcyBpbmNsdWRpbmcgLVx1MDAzZXBhcmVudCAqL1xuICNkZWZpbmUgTUFQTEVfUkFOR0U2NF9TTE9UU1x0MTZcdC8qIDI1NiBieXRlcyAqL1xuICNkZWZpbmUgTUFQTEVfQVJBTkdFNjRfU0xPVFNcdDEwXHQvKiAyNDAgYnl0ZXMgKi9cbi0jZGVmaW5lIE1BUExFX0FMTE9DX1NMT1RTXHQoTUFQTEVfTk9ERV9TTE9UUyAtIDEpXG4gI2Vsc2VcbiAvKiAzMmJpdCBzaXplcyAqL1xuICNkZWZpbmUgTUFQTEVfTk9ERV9TTE9UU1x0NjNcdC8qIDI1NiBieXRlcyBpbmNsdWRpbmcgLVx1MDAzZXBhcmVudCAqL1xuICNkZWZpbmUgTUFQTEVfUkFOR0U2NF9TTE9UU1x0MzJcdC8qIDI1NiBieXRlcyAqL1xuICNkZWZpbmUgTUFQTEVfQVJBTkdFNjRfU0xPVFNcdDIxXHQvKiAyNDAgYnl0ZXMgKi9cbi0jZGVmaW5lIE1BUExFX0FMTE9DX1NMT1RTXHQoTUFQTEVfTk9ERV9TTE9UUyAtIDIpXG4gI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHXzY0QklUKSB8fCBkZWZpbmVkKEJVSUxEX1ZEU08zMl82NCkgKi9cbiBcbiAjZGVmaW5lIE1BUExFX05PREVfTUFTS1x0XHQyNTVVTFxuQEAgLTQ4NSw2ICYjNDM7NDgzLDEyIEBAIHN0cnVjdCBtYV9zdGF0ZSB7XG4gXHR1bnNpZ25lZCBjaGFyIG1hc19mbGFncztcbiBcdHVuc2lnbmVkIGNoYXIgZW5kO1x0XHQvKiBUaGUgZW5kIG9mIHRoZSBub2RlICovXG4gXHRlbnVtIHN0b3JlX3R5cGUgc3RvcmVfdHlwZTtcdC8qIFRoZSB0eXBlIG9mIHN0b3JlIG5lZWRlZCBmb3IgdGhpcyBvcGVyYXRpb24gKi9cbiYjNDM7I2lmZGVmIENPTkZJR19MT0NLREVQXG4mIzQzO1x0dTMyIGxkX3NlcTtcbiYjNDM7I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxuJiM0MztcdHVuc2lnbmVkIGxvbmcgcmN1X2dwO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xuIH07XG4gXG4gc3RydWN0IG1hX3dyX3N0YXRlIHtcbkBAIC01NzIsNyAmIzQzOzU3Niw3IEBAIHZvaWQgbWFwbGVfdHJlZV9pbml0KHZvaWQpO1xuIHZvaWQgbWFzX2Rlc3Ryb3koc3RydWN0IG1hX3N0YXRlICptYXMpO1xuIFxuIHZvaWQgKm1hc19wcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbik7XG4tdm9pZCAqbWFzX3ByZXZfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KTtcbiYjNDM7dm9pZCAqbWFzX3ByZXZfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKTtcbiB2b2lkICptYXNfbmV4dChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xuIHZvaWQgKm1hc19uZXh0X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heCk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5pbmRleCAzNzNiY2MwNTk4ZDEwYi4uMTRkNWNlOGRkNjEzNjUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuQEAgLTEyODgsNiAmIzQzOzEyODgsNyBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3Qge1xuIFx0dTY0XHRcdFx0XHRjdXJyX2NoYWluX2tleTtcbiBcdGludFx0XHRcdFx0bG9ja2RlcF9kZXB0aDtcbiBcdHVuc2lnbmVkIGludFx0XHRcdGxvY2tkZXBfcmVjdXJzaW9uO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRcdGxvY2tkZXBfc2VxO1xuIFx0c3RydWN0IGhlbGRfbG9ja1x0XHRoZWxkX2xvY2tzW01BWF9MT0NLX0RFUFRIXTtcbiAjZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbmluZGV4IDJkNGM1YmFiNWFmODg3Li5iMmIwYTUwNjk2MGIxNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG5AQCAtNTA3Nyw3ICYjNDM7NTA3Nyw3IEBAIHN0YXRpYyBpbnQgX19sb2NrX2lzX2hlbGQoY29uc3Qgc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBpbnQgcmVhZCk7XG4gc3RhdGljIGludCBfX2xvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcyxcbiBcdFx0XHQgIGludCB0cnlsb2NrLCBpbnQgcmVhZCwgaW50IGNoZWNrLCBpbnQgaGFyZGlycXNfb2ZmLFxuIFx0XHRcdCAgc3RydWN0IGxvY2tkZXBfbWFwICpuZXN0X2xvY2ssIHVuc2lnbmVkIGxvbmcgaXAsXG4tXHRcdFx0ICBpbnQgcmVmZXJlbmNlcywgaW50IHBpbl9jb3VudCwgaW50IHN5bmMpXG4mIzQzO1x0XHRcdCAgaW50IHJlZmVyZW5jZXMsIGludCBwaW5fY291bnQsIGludCBzeW5jLCBpbnQgc2VxKVxuIHtcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7XG4gXHRzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBOVUxMO1xuQEAgLTUxODMsNiAmIzQzOzUxODMsNyBAQCBzdGF0aWMgaW50IF9fbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLFxuIFx0aGxvY2stXHUwMDNlaG9sZHRpbWVfc3RhbXAgPSBsb2Nrc3RhdF9jbG9jaygpO1xuICNlbmRpZlxuIFx0aGxvY2stXHUwMDNlcGluX2NvdW50ID0gcGluX2NvdW50O1xuJiM0MztcdGhsb2NrLVx1MDAzZXNlcV9jb3VudCA9IHNlcTtcbiBcbiBcdGlmIChjaGVja193YWl0X2NvbnRleHQoY3VyciwgaGxvY2spKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC01Mzg4LDcgJiM0Mzs1Mzg5LDcgQEAgc3RhdGljIGludCByZWFjcXVpcmVfaGVsZF9sb2NrcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHVuc2lnbmVkIGludCBkZXB0aCxcbiBcdFx0XHRcdCAgICBobG9jay1cdTAwM2VyZWFkLCBobG9jay1cdTAwM2VjaGVjayxcbiBcdFx0XHRcdCAgICBobG9jay1cdTAwM2VoYXJkaXJxc19vZmYsXG4gXHRcdFx0XHQgICAgaGxvY2stXHUwMDNlbmVzdF9sb2NrLCBobG9jay1cdTAwM2VhY3F1aXJlX2lwLFxuLVx0XHRcdFx0ICAgIGhsb2NrLVx1MDAzZXJlZmVyZW5jZXMsIGhsb2NrLVx1MDAzZXBpbl9jb3VudCwgMCkpIHtcbiYjNDM7XHRcdFx0XHQgICAgaGxvY2stXHUwMDNlcmVmZXJlbmNlcywgaGxvY2stXHUwMDNlcGluX2NvdW50LCAwLCBobG9jay1cdTAwM2VzZXFfY291bnQpKSB7XG4gXHRcdGNhc2UgMDpcbiBcdFx0XHRyZXR1cm4gMTtcbiBcdFx0Y2FzZSAxOlxuQEAgLTU2ODQsNiAmIzQzOzU2ODUsMjQgQEAgc3RhdGljIHZvaWQgX19sb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSBjb29raWVcbiBcdFdBUk4oMSwgXCYjMzQ7dW5waW5uaW5nIGFuIHVuaGVsZCBsb2NrXFxuXCYjMzQ7KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB1MzIgX19sb2NrX3NlcXVlbmNlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghZGVidWdfbG9ja3MpKVxuJiM0MztcdFx0cmV0dXJuIH4wO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjdXJyLVx1MDAzZWxvY2tkZXBfZGVwdGg7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaGVsZF9sb2NrICpobG9jayA9IGN1cnItXHUwMDNlaGVsZF9sb2NrcyAmIzQzOyBpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChtYXRjaF9oZWxkX2xvY2soaGxvY2ssIGxvY2spKVxuJiM0MztcdFx0XHRyZXR1cm4gaGxvY2stXHUwMDNlc2VxX2NvdW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIH4wO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQ2hlY2sgd2hldGhlciB3ZSBmb2xsb3cgdGhlIGlycS1mbGFncyBzdGF0ZSBwcmVjaXNlbHk6XG4gICovXG5AQCAtNTg2Niw3ICYjNDM7NTg4NSw4IEBAIHZvaWQgbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLFxuIFxuIFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XG4gXHRfX2xvY2tfYWNxdWlyZShsb2NrLCBzdWJjbGFzcywgdHJ5bG9jaywgcmVhZCwgY2hlY2ssXG4tXHRcdCAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMCk7XG4mIzQzO1x0XHQgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDAsIDAsIDAsXG4mIzQzO1x0XHQgICAgICAgJiM0MzsmIzQzO2N1cnJlbnQtXHUwMDNlbG9ja2RlcF9zZXEpO1xuIFx0bG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7XG4gXHRyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIH1cbkBAIC01OTE0LDcgJiM0Mzs1OTM0LDggQEAgdm9pZCBsb2NrX3N5bmMoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBzdWJjbGFzcywgaW50IHJlYWQsXG4gXG4gXHRsb2NrZGVwX3JlY3Vyc2lvbl9pbmMoKTtcbiBcdF9fbG9ja19hY3F1aXJlKGxvY2ssIHN1YmNsYXNzLCAwLCByZWFkLCBjaGVjayxcbi1cdFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAxKTtcbiYjNDM7XHRcdCAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMSxcbiYjNDM7XHRcdCAgICAgICAmIzQzOyYjNDM7Y3VycmVudC1cdTAwM2Vsb2NrZGVwX3NlcSk7XG4gXHRjaGVja19jaGFpbl9rZXkoY3VycmVudCk7XG4gXHRsb2NrZGVwX3JlY3Vyc2lvbl9maW5pc2goKTtcbiBcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG5AQCAtNjAwMCw2ICYjNDM7NjAyMSwyNiBAQCB2b2lkIGxvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llIGNvb2tpZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobG9ja191bnBpbl9sb2NrKTtcbiBcbiYjNDM7dTMyIGxvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHR1MzIgc2VxID0gfjA7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghbG9ja2RlcF9lbmFibGVkKCkpKVxuJiM0MztcdFx0cmV0dXJuIHNlcTtcbiYjNDM7XG4mIzQzO1x0cmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiYjNDM7XHRjaGVja19mbGFncyhmbGFncyk7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfcmVjdXJzaW9uX2luYygpO1xuJiM0MztcdHNlcSA9IF9fbG9ja19zZXF1ZW5jZShsb2NrKTtcbiYjNDM7XHRsb2NrZGVwX3JlY3Vyc2lvbl9maW5pc2goKTtcbiYjNDM7XHRyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2VxO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxvY2tfc2VxdWVuY2UpO1xuJiM0MztcbiAjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVFxuIHN0YXRpYyB2b2lkIHByaW50X2xvY2tfY29udGVudGlvbl9idWcoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLFxuZGlmZiAtLWdpdCBhL2xpYi9tYXBsZV90cmVlLmMgYi9saWIvbWFwbGVfdHJlZS5jXG5pbmRleCBlNTI4NzY0MzViNzdmMC4uNmQ3MWZkYzQxNDcwNjQgMTAwNjQ0XG4tLS0gYS9saWIvbWFwbGVfdHJlZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvbWFwbGVfdHJlZS5jXG5AQCAtNDY5LDcgJiM0Mzs0NjksNyBAQCBzdGF0aWMgaW5saW5lXG4gdm9pZCBtYXNfc2V0X3BhcmVudChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICplbm9kZSxcbiBcdFx0ICAgIGNvbnN0IHN0cnVjdCBtYXBsZV9lbm9kZSAqcGFyZW50LCB1bnNpZ25lZCBjaGFyIHNsb3QpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyB2YWwgPSAodW5zaWduZWQgbG9uZylwYXJlbnQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB2YWw7XG4gXHR1bnNpZ25lZCBsb25nIHNoaWZ0O1xuIFx0dW5zaWduZWQgbG9uZyB0eXBlO1xuIFx0ZW51bSBtYXBsZV90eXBlIHBfdHlwZSA9IG10ZV9ub2RlX3R5cGUocGFyZW50KTtcbkBAIC00OTAsMTEgJiM0Mzs0OTAsNDcgQEAgdm9pZCBtYXNfc2V0X3BhcmVudChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICplbm9kZSxcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4mIzQzO1x0dmFsID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50O1xuIFx0dmFsIFx1MDAyNj0gfk1BUExFX05PREVfTUFTSzsgLyogQ2xlYXIgYWxsIG5vZGUgbWV0YWRhdGEgaW4gcGFyZW50ICovXG4gXHR2YWwgfD0gKHNsb3QgXHUwMDNjXHUwMDNjIHNoaWZ0KSB8IHR5cGU7XG4gXHRtdGVfdG9fbm9kZShlbm9kZSktXHUwMDNlcGFyZW50ID0gbWFfcGFyZW50X3B0cih2YWwpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogbWFzX3NldF9wYXJlbnRfc2xvdHMoKSAtIEJ1bGsgb3BlcmF0aW9uIHRvIHNldCBtYW55IHNsb3QgcGFyZW50IHBvaW50ZXJzXG4mIzQzOyAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZVxuJiM0MzsgKiBAcGFyZW50OiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlIHRoYXQgaXMgdGhlIHBhcmVudCBvZiBAZW5vZGUuXG4mIzQzOyAqIEBzbG90OiBUaGUgc2xvdCB0aGF0IG9mIHRoZSBAZW5vZGUuXG4mIzQzOyAqIEBzdGFydF9zbG90OiBUaGUgb2Zmc2V0IGludG8gQHNsb3RcbiYjNDM7ICogQGNvdW50OiBUaGUgbnVtYmVyIG9mIHNsb3RzIHRvIHNldCAoZWc6IGV4Y2x1c2l2ZSlcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmVcbiYjNDM7dm9pZCBtYXNfc2V0X3BhcmVudF9zbG90cyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICpwYXJlbnQsXG4mIzQzO1x0dm9pZCBfX3JjdSAqKnNsb3RzLCB1bnNpZ25lZCBjaGFyIHN0YXJ0X3Nsb3QsIHVuc2lnbmVkIGNoYXIgY291bnQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZhbDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHNoaWZ0O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdHlwZTtcbiYjNDM7XHRlbnVtIG1hcGxlX3R5cGUgcF90eXBlID0gbXRlX25vZGVfdHlwZShwYXJlbnQpO1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgaTtcbiYjNDM7XG4mIzQzO1x0TUFTX0JVR19PTihtYXMsIHBfdHlwZSAhPSBtYXBsZV9yYW5nZV82NCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0cF90eXBlICE9IG1hcGxlX2FyYW5nZV82NCk7XG4mIzQzO1xuJiM0MztcdHNoaWZ0ID0gTUFQTEVfUEFSRU5UX1NMT1RfU0hJRlQ7XG4mIzQzO1x0dHlwZSA9IE1BUExFX1BBUkVOVF9SQU5HRTY0O1xuJiM0MztcbiYjNDM7XHR2YWwgPSAodW5zaWduZWQgbG9uZylwYXJlbnQ7XG4mIzQzO1x0dmFsIFx1MDAyNj0gfk1BUExFX05PREVfTUFTSztcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHB2YWwgPSB2YWwgfCAoKHN0YXJ0X3Nsb3QgJiM0MzsgaSkgXHUwMDNjXHUwMDNjIHNoaWZ0KSB8IHR5cGU7XG4mIzQzO1x0XHRzdHJ1Y3QgbWFwbGVfZW5vZGUgKmNoaWxkID0gKHN0cnVjdCBtYXBsZV9lbm9kZSAqKXNsb3RzW2ldO1xuJiM0MztcbiYjNDM7XHRcdG10ZV90b19ub2RlKGNoaWxkKS1cdTAwM2VwYXJlbnQgPSBtYV9wYXJlbnRfcHRyKHB2YWwpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIG10ZV9wYXJlbnRfc2xvdCgpIC0gZ2V0IHRoZSBwYXJlbnQgc2xvdCBvZiBAZW5vZGUuXG4gICogQGVub2RlOiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlLlxuQEAgLTExNTMsNiAmIzQzOzExODksNzAgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19mcmVlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnVzZWQpXG4gXHRtYV9mcmVlX3JjdShtdGVfdG9fbm9kZSh1c2VkKSk7XG4gfVxuIFxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19MT0NLREVQXG4mIzQzO3N0cnVjdCBsb2NrZGVwX21hcCAqbWFzX2xvY2tkZXBfbWFwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1hcGxlX3RyZWUgKm10ID0gbWFzLVx1MDAzZXRyZWU7XG4mIzQzO1xuJiM0MztcdGlmIChtdF9leHRlcm5hbF9sb2NrKG10KSlcbiYjNDM7XHRcdHJldHVybiBtdC1cdTAwM2VtYV9leHRlcm5hbF9sb2NrO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2KG10LVx1MDAzZW1hX2xvY2spLmRlcF9tYXA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWFzX2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpXG4mIzQzO3tcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUFxuJiM0MztcdGlmICghbWFzX2lzX2FjdGl2ZShtYXMpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxuJiM0MztcdGlmICghbXRfbG9ja19pc19oZWxkKG1hcy1cdTAwM2V0cmVlKSkge1xuJiM0MztcdFx0aWYgKG10X2luX3JjdShtYXMtXHUwMDNldHJlZSkpXG4mIzQzO1x0XHRcdFdBUk5fT05fT05DRShwb2xsX3N0YXRlX3N5bmNocm9uaXplX3JjdShtYXMtXHUwMDNlcmN1X2dwKSk7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXG4mIzQzO1xuJiM0MztcdGlmIChtdF9sb2NrX2lzX2hlbGQobWFzLVx1MDAzZXRyZWUpKVxuJiM0MztcdFx0V0FSTl9PTl9PTkNFKG1hcy1cdTAwM2VsZF9zZXEgIT0gbG9ja19zZXF1ZW5jZShtYXNfbG9ja2RlcF9tYXAobWFzKSkpO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi9cbiYjNDM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1hc19pbml0X2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpXG4mIzQzO3tcbiYjNDM7I2lmZGVmIENPTkZJR19MT0NLREVQXG4mIzQzOyNpZmRlZiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RcbiYjNDM7XHRpZiAoIW10X2xvY2tfaXNfaGVsZChtYXMtXHUwMDNldHJlZSkpIHtcbiYjNDM7XHRcdGlmIChtdF9pbl9yY3UobWFzLVx1MDAzZXRyZWUpKVxuJiM0MztcdFx0XHRtYXMtXHUwMDNlcmN1X2dwID0gZ2V0X3N0YXRlX3N5bmNocm9uaXplX3JjdSgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xuJiM0MztcbiYjNDM7XHRpZiAobXRfbG9ja19pc19oZWxkKG1hcy1cdTAwM2V0cmVlKSlcbiYjNDM7XHRcdG1hcy1cdTAwM2VsZF9zZXEgPSBsb2NrX3NlcXVlbmNlKG1hc19sb2NrZGVwX21hcChtYXMpKTtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19MT0NLREVQICovXG4mIzQzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtYXNfbWF5X2luaXRfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiYjNDM7e1xuJiM0MzsjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiYjNDM7I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxuJiM0MztcdGlmIChtYXNfaXNfc3RhcnQobWFzKSB8fCBtYXNfaXNfcGF1c2VkKG1hcykpIHtcbiYjNDM7XHRcdG1hc19pbml0X2xvY2tfY2hlY2sobWFzKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QgKi9cbiYjNDM7XHRtYXNfbG9ja19jaGVjayhtYXMpO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi9cbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIG1hc19zdGFydCgpIC0gU2V0cyB1cCBtYXBsZSBzdGF0ZSBmb3Igb3BlcmF0aW9ucy5cbiAgKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGUuXG5AQCAtMTE3MSw2ICYjNDM7MTI3MSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1hcGxlX2Vub2RlICptYXNfc3RhcnQoc3RydWN0IG1hX3N0YXRlICptYXMpXG4gXHRpZiAobGlrZWx5KG1hc19pc19zdGFydChtYXMpKSkge1xuIFx0XHRzdHJ1Y3QgbWFwbGVfZW5vZGUgKnJvb3Q7XG4gXG4mIzQzO1x0XHRtYXNfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRcdG1hcy1cdTAwM2VtaW4gPSAwO1xuIFx0XHRtYXMtXHUwMDNlbWF4ID0gVUxPTkdfTUFYO1xuIFxuQEAgLTE1MDEsMTQgJiM0MzsxNjAyLDI2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfcGFyZW50X2dhcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgY2hhciBvZmZzZXQsXG4gXHRnb3RvIGFzY2VuZDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtYXNfdXBkYXRlX2dhcF9rbm93bihzdHJ1Y3QgbWFfc3RhdGUgKm1hcyxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgZ2FwKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgY2hhciBwc2xvdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHBfZ2FwO1xuJiM0MztcbiYjNDM7XHRwc2xvdCA9IG10ZV9wYXJlbnRfc2xvdChtYXMtXHUwMDNlbm9kZSk7XG4mIzQzO1x0cF9nYXAgPSBtYV9nYXBzKG10ZV9wYXJlbnQobWFzLVx1MDAzZW5vZGUpLFxuJiM0MztcdFx0XHRtYXNfcGFyZW50X3R5cGUobWFzLCBtYXMtXHUwMDNlbm9kZSkpW3BzbG90XTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBfZ2FwICE9IGdhcClcbiYjNDM7XHRcdG1hc19wYXJlbnRfZ2FwKG1hcywgcHNsb3QsIGdhcCk7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBtYXNfdXBkYXRlX2dhcCgpIC0gVXBkYXRlIGEgbm9kZXMgZ2FwcyBhbmQgcHJvcGFnYXRlIHVwIGlmIG5lY2Vzc2FyeS5cbiAgKiBAbWFzOiB0aGUgbWFwbGUgc3RhdGUuXG4gICovXG4gc3RhdGljIGlubGluZSB2b2lkIG1hc191cGRhdGVfZ2FwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIHtcbi1cdHVuc2lnbmVkIGNoYXIgcHNsb3Q7XG4tXHR1bnNpZ25lZCBsb25nIHBfZ2FwO1xuIFx0dW5zaWduZWQgbG9uZyBtYXhfZ2FwO1xuIFxuIFx0aWYgKCFtdF9pc19hbGxvYyhtYXMtXHUwMDNldHJlZSkpXG5AQCAtMTUxOCwxMyAmIzQzOzE2MzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3VwZGF0ZV9nYXAoc3RydWN0IG1hX3N0YXRlICptYXMpXG4gXHRcdHJldHVybjtcbiBcbiBcdG1heF9nYXAgPSBtYXNfbWF4X2dhcChtYXMpO1xuLVxuLVx0cHNsb3QgPSBtdGVfcGFyZW50X3Nsb3QobWFzLVx1MDAzZW5vZGUpO1xuLVx0cF9nYXAgPSBtYV9nYXBzKG10ZV9wYXJlbnQobWFzLVx1MDAzZW5vZGUpLFxuLVx0XHRcdG1hc19wYXJlbnRfdHlwZShtYXMsIG1hcy1cdTAwM2Vub2RlKSlbcHNsb3RdO1xuLVxuLVx0aWYgKHBfZ2FwICE9IG1heF9nYXApXG4tXHRcdG1hc19wYXJlbnRfZ2FwKG1hcywgcHNsb3QsIG1heF9nYXApO1xuJiM0MztcdG1hc191cGRhdGVfZ2FwX2tub3duKG1hcywgbWF4X2dhcCk7XG4gfVxuIFxuIC8qXG5AQCAtMTU0MCwxNCAmIzQzOzE2NDcsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19hZG9wdF9jaGlsZHJlbihzdHJ1Y3QgbWFfc3RhdGUgKm1hcyxcbiBcdHN0cnVjdCBtYXBsZV9ub2RlICpub2RlID0gbXRlX3RvX25vZGUocGFyZW50KTtcbiBcdHZvaWQgX19yY3UgKipzbG90cyA9IG1hX3Nsb3RzKG5vZGUsIHR5cGUpO1xuIFx0dW5zaWduZWQgbG9uZyAqcGl2b3RzID0gbWFfcGl2b3RzKG5vZGUsIHR5cGUpO1xuLVx0c3RydWN0IG1hcGxlX2Vub2RlICpjaGlsZDtcbi1cdHVuc2lnbmVkIGNoYXIgb2Zmc2V0O1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgZW5kO1xuIFxuLVx0b2Zmc2V0ID0gbWFfZGF0YV9lbmQobm9kZSwgdHlwZSwgcGl2b3RzLCBtYXMtXHUwMDNlbWF4KTtcbi1cdGRvIHtcbi1cdFx0Y2hpbGQgPSBtYXNfc2xvdF9sb2NrZWQobWFzLCBzbG90cywgb2Zmc2V0KTtcbi1cdFx0bWFzX3NldF9wYXJlbnQobWFzLCBjaGlsZCwgcGFyZW50LCBvZmZzZXQpO1xuLVx0fSB3aGlsZSAob2Zmc2V0LS0pO1xuJiM0MztcdGVuZCA9IG1hX2RhdGFfZW5kKG5vZGUsIHR5cGUsIHBpdm90cywgbWFzLVx1MDAzZW1heCk7XG4mIzQzO1x0bWFzX3NldF9wYXJlbnRfc2xvdHMobWFzLCBwYXJlbnQsIHNsb3RzLCAwLCBlbmQgJiM0MzsgMSk7XG4gfVxuIFxuIC8qXG5AQCAtMTkyOSwxNSAmIzQzOzIwMzIsMTAgQEAgdW5zaWduZWQgbG9uZyBub2RlX2NvcHkoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9ub2RlICpzcmMsXG4gXHRzX3Nsb3RzID0gbWFfc2xvdHMoc3JjLCBzX210KSAmIzQzOyBzdGFydDtcbiBcdHNfcGl2b3RzID0gbWFfcGl2b3RzKHNyYywgc19tdCkgJiM0Mzsgc3RhcnQ7XG4gXHRtZW1jcHkoZF9zbG90cywgc19zbG90cywgc2l6ZSAqIHNpemVvZih2b2lkIF9fcmN1ICopKTtcbi1cdGlmICghbWFfaXNfbGVhZihkX210KSBcdTAwMjZcdTAwMjYgc19tdCA9PSBtYXBsZV9jb3B5KSB7XG4tXHRcdHN0cnVjdCBtYXBsZV9lbm9kZSAqZWRzdCA9IG10X21rX25vZGUoZHN0LCBkX210KTtcbiBcbi1cbi1cdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHNpemU7IGkmIzQzOyYjNDM7KVxuLVx0XHRcdG1hc19zZXRfcGFyZW50KG1hcyxcbi1cdFx0XHRcdCAgICAgICBtdF9zbG90X2xvY2tlZChtYXMtXHUwMDNldHJlZSwgZF9zbG90cywgaSksXG4tXHRcdFx0XHQgICAgICAgZWRzdCwgZF9zdGFydCAmIzQzOyBpKTtcbi1cdH1cbiYjNDM7XHRpZiAoIW1hX2lzX2xlYWYoZF9tdCkgXHUwMDI2XHUwMDI2IHNfbXQgPT0gbWFwbGVfY29weSlcbiYjNDM7XHRcdG1hc19zZXRfcGFyZW50X3Nsb3RzKG1hcywgbXRfbWtfbm9kZShkc3QsIGRfbXQpLFxuJiM0MztcdFx0XHRcdCAgICAgZF9zbG90cywgZF9zdGFydCwgc2l6ZSk7XG4gXG4gXHRkX2dhcHMgPSBtYV9nYXBzKGRzdCwgZF9tdCk7XG4gXHRpZiAoZF9nYXBzKSB7XG5AQCAtMjA4MSw4ICYjNDM7MjE3OSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd21iX3JlcGxhY2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9jb3B5ICpjcClcbiBcdG1hcy1cdTAwM2Vub2RlID0gbXRfc2xvdF9sb2NrZWQobWFzLVx1MDAzZXRyZWUsIGNwLVx1MDAzZXNsb3QsIDApO1xuIFx0LyogSW5zZXJ0IHRoZSBuZXcgZGF0YSBpbiB0aGUgdHJlZSAqL1xuIFx0bWFzX3RvcGlhcnlfcmVwbGFjZShtYXMsIG9sZF9lbm9kZSwgY3AtXHUwMDNlaGVpZ2h0KTtcbi1cdGlmICghbXRlX2lzX2xlYWYobWFzLVx1MDAzZW5vZGUpKVxuLVx0XHRtYXNfdXBkYXRlX2dhcChtYXMpO1xuJiM0MztcdGlmIChtdF9pc19hbGxvYyhtYXMtXHUwMDNldHJlZSkgXHUwMDI2XHUwMDI2ICFtdGVfaXNfcm9vdChtYXMtXHUwMDNlbm9kZSkpXG4mIzQzO1x0XHRtYXNfdXBkYXRlX2dhcF9rbm93bihtYXMsIGNwLVx1MDAzZWdhcFswXSk7XG4gXG4gXHRtdHJlZV9yYW5nZV93YWxrKG1hcyk7XG4gfVxuQEAgLTI5MjgsMTMgJiM0MzszMDI2LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19leHRlbmRfc3Bhbm5pbmdfbnVsbChzdHJ1Y3QgbWFfd3Jfc3RhdGUgKmxfd3JfbWFzLFxuIFx0XHRpZiAocl9tYXMtXHUwMDNlbGFzdCBcdTAwM2Mgcl93cl9tYXMtXHUwMDNlcl9tYXgpXG4gXHRcdFx0cl9tYXMtXHUwMDNlbGFzdCA9IHJfd3JfbWFzLVx1MDAzZXJfbWF4O1xuIFx0XHRyX21hcy1cdTAwM2VvZmZzZXQmIzQzOyYjNDM7O1xuLVx0fSBlbHNlIGlmICgocl9tYXMtXHUwMDNlbGFzdCA9PSByX3dyX21hcy1cdTAwM2VyX21heCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKHJfbWFzLVx1MDAzZWxhc3QgXHUwMDNjIHJfbWFzLVx1MDAzZW1heCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIW1hc19zbG90X2xvY2tlZChyX21hcywgcl93cl9tYXMtXHUwMDNlc2xvdHMsIHJfbWFzLVx1MDAzZW9mZnNldCAmIzQzOyAxKSkge1xuLVx0XHRyX21hcy1cdTAwM2VsYXN0ID0gbWFzX3NhZmVfcGl2b3Qocl9tYXMsIHJfd3JfbWFzLVx1MDAzZXBpdm90cyxcbi1cdFx0XHRcdFx0ICAgICByX3dyX21hcy1cdTAwM2V0eXBlLCByX21hcy1cdTAwM2VvZmZzZXQgJiM0MzsgMSk7XG4tXHRcdHJfbWFzLVx1MDAzZW9mZnNldCYjNDM7JiM0Mzs7XG4tXHRcdHJfd3JfbWFzLVx1MDAzZXJfbWF4ID0gcl9tYXMtXHUwMDNlbGFzdDtcbiBcdH1cbiB9XG4gXG5AQCAtMzEyNSw3ICYjNDM7MzIxNiw3IEBAIHN0YXRpYyB2b2lkIG1hc193cl9zcGFubmluZ19zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4ge1xuIFx0dW5zaWduZWQgY2hhciBkc3Rfb2Zmc2V0LCBvZmZzZXRfZW5kO1xuLVx0dW5zaWduZWQgY2hhciBjb3B5X3NpemUsIG5vZGVfcGl2b3RzO1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgY29weV9zaXplLCBub2RlX3Bpdm90cywgbm9kZV9zbG90cztcbiBcdHN0cnVjdCBtYXBsZV9ub2RlIHJldXNlLCAqbmV3bm9kZTtcbiBcdHVuc2lnbmVkIGxvbmcgKmRzdF9waXZvdHM7XG4gXHR2b2lkIF9fcmN1ICoqZHN0X3Nsb3RzO1xuQEAgLTMxMzgsNiAmIzQzOzMyMjksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4gXHRpbl9yY3UgPSBtdF9pbl9yY3UobWFzLVx1MDAzZXRyZWUpO1xuIFx0b2Zmc2V0X2VuZCA9IHdyX21hcy1cdTAwM2VvZmZzZXRfZW5kO1xuIFx0bm9kZV9waXZvdHMgPSBtdF9waXZvdHNbd3JfbWFzLVx1MDAzZXR5cGVdO1xuJiM0MztcdG5vZGVfc2xvdHMgPSBtdF9zbG90c1t3cl9tYXMtXHUwMDNldHlwZV07XG4gXHQvKiBBc3N1bWUgbGFzdCBhZGRzIGFuIGVudHJ5ICovXG4gXHRuZXdfZW5kID0gbWFzLVx1MDAzZWVuZCAmIzQzOyAxIC0gb2Zmc2V0X2VuZCAmIzQzOyBtYXMtXHUwMDNlb2Zmc2V0O1xuIFx0aWYgKG1hcy1cdTAwM2VsYXN0ID09IHdyX21hcy1cdTAwM2VlbmRfcGl2KSB7XG5AQCAtMzE0OSw3ICYjNDM7MzI0MSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiBcdGlmIChpbl9yY3UpIHtcbiBcdFx0bmV3bm9kZSA9IG1hc19wb3Bfbm9kZShtYXMpO1xuIFx0fSBlbHNlIHtcbi1cdFx0bWVtc2V0KFx1MDAyNnJldXNlLCAwLCBzaXplb2Yoc3RydWN0IG1hcGxlX25vZGUpKTtcbiBcdFx0bmV3bm9kZSA9IFx1MDAyNnJldXNlO1xuIFx0fVxuIFxuQEAgLTMxOTMsNyAmIzQzOzMyODQsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIFx0XHRkc3RfcGl2b3RzW25ld19lbmRdID0gbWFzLVx1MDAzZW1heDtcbiBcbiBkb25lOlxuLVx0bWFzX2xlYWZfc2V0X21ldGEobmV3bm9kZSwgbWFwbGVfbGVhZl82NCwgbmV3X2VuZCk7XG4mIzQzO1x0aWYgKCFpbl9yY3UgXHUwMDI2XHUwMDI2IG5ld19lbmQgJiM0MzsgMiBcdTAwM2Mgbm9kZV9zbG90cykge1xuJiM0MztcdFx0dW5zaWduZWQgY2hhciBjbGVhcl9mcm9tID0gbmV3X2VuZCAmIzQzOyAxO1xuJiM0MztcbiYjNDM7XHRcdG1lbXNldChkc3Rfc2xvdHMgJiM0MzsgY2xlYXJfZnJvbSwgMCxcbiYjNDM7XHRcdCAgICAgICBzaXplb2Yodm9pZCBfX3JjdSAqKSAqIChub2RlX3Nsb3RzIC0gY2xlYXJfZnJvbSkpO1xuJiM0MztcdFx0aWYgKGNsZWFyX2Zyb20gXHUwMDNjIG5vZGVfcGl2b3RzKVxuJiM0MztcdFx0XHRtZW1zZXQoZHN0X3Bpdm90cyAmIzQzOyBjbGVhcl9mcm9tLCAwLFxuJiM0MztcdFx0XHQgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogKG5vZGVfcGl2b3RzIC0gY2xlYXJfZnJvbSkpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWFzX2xlYWZfc2V0X21ldGEobmV3bm9kZSwgd3JfbWFzLVx1MDAzZXR5cGUsIG5ld19lbmQpO1xuIFx0aWYgKGluX3JjdSkge1xuIFx0XHRzdHJ1Y3QgbWFwbGVfZW5vZGUgKm9sZF9lbm9kZSA9IG1hcy1cdTAwM2Vub2RlO1xuIFxuQEAgLTMyMTgsNyAmIzQzOzMzMTksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX3Nsb3Rfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4gXHR2b2lkIF9fcmN1ICoqc2xvdHMgPSB3cl9tYXMtXHUwMDNlc2xvdHM7XG4gXHRib29sIGdhcCA9IGZhbHNlO1xuIFxuLVx0Z2FwIHw9ICFtdF9zbG90X2xvY2tlZChtYXMtXHUwMDNldHJlZSwgc2xvdHMsIG9mZnNldCk7XG4mIzQzO1x0Z2FwIHw9ICF3cl9tYXMtXHUwMDNlY29udGVudDtcbiBcdGdhcCB8PSAhbXRfc2xvdF9sb2NrZWQobWFzLVx1MDAzZXRyZWUsIHNsb3RzLCBvZmZzZXQgJiM0MzsgMSk7XG4gXG4gXHRpZiAod3JfbWFzLVx1MDAzZW9mZnNldF9lbmQgLSBvZmZzZXQgPT0gMSkge1xuQEAgLTM2NjEsNiAmIzQzOzM3NjIsOSBAQCBzdGF0aWMgaW5saW5lIGVudW0gc3RvcmVfdHlwZSBtYXNfd3Jfc3RvcmVfdHlwZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiB7XG4gXHRzdHJ1Y3QgbWFfc3RhdGUgKm1hcyA9IHdyX21hcy1cdTAwM2VtYXM7XG4gXHR1bnNpZ25lZCBjaGFyIG5ld19lbmQ7XG4mIzQzO1x0Ym9vbCBhcHBlbmRpbmc7XG4mIzQzO1x0Ym9vbCBvbmVfc2xvdDtcbiYjNDM7XHRib29sIGluX3JjdTtcbiBcbiBcdGlmICh1bmxpa2VseShtYXNfaXNfbm9uZShtYXMpIHx8IG1hc19pc19wdHIobWFzKSkpXG4gXHRcdHJldHVybiB3cl9zdG9yZV9yb290O1xuQEAgLTM2ODAsMjEgJiM0MzszNzg0LDMwIEBAIHN0YXRpYyBpbmxpbmUgZW51bSBzdG9yZV90eXBlIG1hc193cl9zdG9yZV90eXBlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIFx0XHRyZXR1cm4gd3JfbmV3X3Jvb3Q7XG4gXG4gXHRuZXdfZW5kID0gbWFzX3dyX25ld19lbmQod3JfbWFzKTtcbiYjNDM7XHRpbl9yY3UgPSBtdF9pbl9yY3UobWFzLVx1MDAzZXRyZWUpO1xuJiM0MztcdGFwcGVuZGluZyA9IG1hcy1cdTAwM2VvZmZzZXQgPT0gbWFzLVx1MDAzZWVuZDtcbiYjNDM7XHRvbmVfc2xvdCA9IHdyX21hcy1cdTAwM2VvZmZzZXRfZW5kIC0gbWFzLVx1MDAzZW9mZnNldCA9PSAxO1xuJiM0MztcbiBcdC8qIFBvdGVudGlhbCBzcGFubmluZyByZWJhbGFuY2UgY29sbGFwc2luZyBhIG5vZGUgKi9cbiBcdGlmIChuZXdfZW5kIFx1MDAzYyBtdF9taW5fc2xvdHNbd3JfbWFzLVx1MDAzZXR5cGVdKSB7XG4gXHRcdGlmICghbXRlX2lzX3Jvb3QobWFzLVx1MDAzZW5vZGUpKVxuIFx0XHRcdHJldHVybiAgd3JfcmViYWxhbmNlO1xuJiM0MztcdFx0aWYgKCFpbl9yY3UpIHtcbiYjNDM7XHRcdFx0aWYgKGFwcGVuZGluZylcbiYjNDM7XHRcdFx0XHRyZXR1cm4gd3JfYXBwZW5kO1xuJiM0MztcdFx0XHRlbHNlIGlmIChtYXMtXHUwMDNlZW5kID09IG5ld19lbmQgXHUwMDI2XHUwMDI2IG9uZV9zbG90KVxuJiM0MztcdFx0XHRcdHJldHVybiB3cl9zbG90X3N0b3JlO1xuJiM0MztcdFx0fVxuIFx0XHRyZXR1cm4gd3Jfbm9kZV9zdG9yZTtcbiBcdH1cbiBcbiBcdGlmIChuZXdfZW5kIFx1MDAzZT0gbXRfc2xvdHNbd3JfbWFzLVx1MDAzZXR5cGVdKVxuIFx0XHRyZXR1cm4gd3Jfc3BsaXRfc3RvcmU7XG4gXG4tXHRpZiAoIW10X2luX3JjdShtYXMtXHUwMDNldHJlZSkgXHUwMDI2XHUwMDI2IChtYXMtXHUwMDNlb2Zmc2V0ID09IG1hcy1cdTAwM2VlbmQpKVxuJiM0MztcdGlmICghaW5fcmN1IFx1MDAyNlx1MDAyNiBhcHBlbmRpbmcpXG4gXHRcdHJldHVybiB3cl9hcHBlbmQ7XG4gXG4tXHRpZiAoKG5ld19lbmQgPT0gbWFzLVx1MDAzZWVuZCkgXHUwMDI2XHUwMDI2ICghbXRfaW5fcmN1KG1hcy1cdTAwM2V0cmVlKSB8fFxuLVx0XHQod3JfbWFzLVx1MDAzZW9mZnNldF9lbmQgLSBtYXMtXHUwMDNlb2Zmc2V0ID09IDEpKSlcbiYjNDM7XHRpZiAobmV3X2VuZCA9PSBtYXMtXHUwMDNlZW5kIFx1MDAyNlx1MDAyNiAoIWluX3JjdSB8fCBvbmVfc2xvdCkpXG4gXHRcdHJldHVybiB3cl9zbG90X3N0b3JlO1xuIFxuIFx0cmV0dXJuIHdyX25vZGVfc3RvcmU7XG5AQCAtMzc5MywyNyAmIzQzOzM5MDYsMjkgQEAgaW50IG1hc19hbGxvY19jeWNsaWMoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0cCxcbiBcdFx0dm9pZCAqZW50cnksIHVuc2lnbmVkIGxvbmcgcmFuZ2VfbG8sIHVuc2lnbmVkIGxvbmcgcmFuZ2VfaGksXG4gXHRcdHVuc2lnbmVkIGxvbmcgKm5leHQsIGdmcF90IGdmcClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG1pbiA9IHJhbmdlX2xvO1xuLVx0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1pbjtcbiBcbi1cdHJhbmdlX2xvID0gbWF4KG1pbiwgKm5leHQpO1xuLVx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCByYW5nZV9sbywgcmFuZ2VfaGksIDEpO1xuLVx0aWYgKChtYXMtXHUwMDNldHJlZS1cdTAwM2VtYV9mbGFncyBcdTAwMjYgTVRfRkxBR1NfQUxMT0NfV1JBUFBFRCkgXHUwMDI2XHUwMDI2IHJldCA9PSAwKSB7XG4tXHRcdG1hcy1cdTAwM2V0cmVlLVx1MDAzZW1hX2ZsYWdzIFx1MDAyNj0gfk1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQ7XG4tXHRcdHJldCA9IDE7XG4tXHR9XG4tXHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByYW5nZV9sbyBcdTAwM2UgbWluKSB7XG4tXHRcdG1hc19yZXNldChtYXMpO1xuLVx0XHRyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIG1pbiwgcmFuZ2VfaGksIDEpO1xuLVx0XHRpZiAocmV0ID09IDApXG4mIzQzO1x0bWluID0gcmFuZ2VfbG87XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0cmFuZ2VfbG8gPSBtYXgobWluLCAqbmV4dCk7XG4mIzQzO1x0XHRyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIHJhbmdlX2xvLCByYW5nZV9oaSwgMSk7XG4mIzQzO1x0XHRpZiAoKG1hcy1cdTAwM2V0cmVlLVx1MDAzZW1hX2ZsYWdzIFx1MDAyNiBNVF9GTEFHU19BTExPQ19XUkFQUEVEKSBcdTAwMjZcdTAwMjYgcmV0ID09IDApIHtcbiYjNDM7XHRcdFx0bWFzLVx1MDAzZXRyZWUtXHUwMDNlbWFfZmxhZ3MgXHUwMDI2PSB+TVRfRkxBR1NfQUxMT0NfV1JBUFBFRDtcbiBcdFx0XHRyZXQgPSAxO1xuLVx0fVxuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHJhbmdlX2xvIFx1MDAzZSBtaW4pIHtcbiYjNDM7XHRcdFx0bWFzX3Jlc2V0KG1hcyk7XG4mIzQzO1x0XHRcdHJldCA9IG1hc19lbXB0eV9hcmVhKG1hcywgbWluLCByYW5nZV9oaSwgMSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgPT0gMClcbiYjNDM7XHRcdFx0XHRyZXQgPSAxO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGRvIHtcbiBcdFx0bWFzX2luc2VydChtYXMsIGVudHJ5KTtcbiBcdH0gd2hpbGUgKG1hc19ub21lbShtYXMsIGdmcCkpO1xuJiM0MztcbiBcdGlmIChtYXNfaXNfZXJyKG1hcykpXG4gXHRcdHJldHVybiB4YV9lcnIobWFzLVx1MDAzZW5vZGUpO1xuIFxuQEAgLTQzNjAsNiAmIzQzOzQ0NzUsNyBAQCB2b2lkICptYXNfd2FsayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiB7XG4gXHR2b2lkICplbnRyeTtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKCFtYXNfaXNfYWN0aXZlKG1hcykgXHUwMDI2XHUwMDI2ICFtYXNfaXNfc3RhcnQobWFzKSlcbiBcdFx0bWFzLVx1MDAzZXN0YXR1cyA9IG1hX3N0YXJ0O1xuIHJldHJ5OlxuQEAgLTQ4MzEsNiAmIzQzOzQ5NDcsNyBAQCB2b2lkICptYXNfc3RvcmUoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5KVxuIHtcbiBcdE1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBlbnRyeSk7XG4gXG4mIzQzO1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdHRyYWNlX21hX3dyaXRlKFRQX0ZDVCwgbWFzLCAwLCBlbnRyeSk7XG4gI2lmZGVmIENPTkZJR19ERUJVR19NQVBMRV9UUkVFXG4gXHRpZiAoTUFTX1dBUk5fT04obWFzLCBtYXMtXHUwMDNlaW5kZXggXHUwMDNlIG1hcy1cdTAwM2VsYXN0KSlcbkBAIC00ODg5LDYgJiM0Mzs1MDA2LDcgQEAgaW50IG1hc19zdG9yZV9nZnAoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5LCBnZnBfdCBnZnApXG4gXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xuIFx0aW50IHJldCA9IDA7XG4gXG4mIzQzO1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiByZXRyeTpcbiBcdG1hc193cl9wcmVhbGxvY2F0ZShcdTAwMjZ3cl9tYXMsIGVudHJ5KTtcbiBcdGlmICh1bmxpa2VseShtYXNfbm9tZW0obWFzLCBnZnApKSkge1xuQEAgLTQ5MTksNiAmIzQzOzUwMzcsNyBAQCB2b2lkIG1hc19zdG9yZV9wcmVhbGxvYyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnkpXG4ge1xuIFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIGVudHJ5KTtcbiBcbiYjNDM7XHRtYXNfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hcy1cdTAwM2VzdG9yZV90eXBlID09IHdyX3N0b3JlX3Jvb3QpIHtcbiBcdFx0bWFzX3dyX3ByZWFsbG9jX3NldHVwKFx1MDAyNndyX21hcyk7XG4gXHRcdGdvdG8gc3RvcmU7XG5AQCAtNDk1MSw2ICYjNDM7NTA3MCw3IEBAIGludCBtYXNfcHJlYWxsb2NhdGUoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5LCBnZnBfdCBnZnApXG4ge1xuIFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIGVudHJ5KTtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0bWFzX3dyX3ByZWFsbG9jX3NldHVwKFx1MDAyNndyX21hcyk7XG4gXHRtYXMtXHUwMDNlc3RvcmVfdHlwZSA9IG1hc193cl9zdG9yZV90eXBlKFx1MDAyNndyX21hcyk7XG4gXHRtYXNfcHJlYWxsb2NfY2FsYyhcdTAwMjZ3cl9tYXMsIGVudHJ5KTtcbkBAIC01MDc0LDYgJiM0Mzs1MTk0LDcgQEAgdm9pZCAqbWFzX25leHQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19uZXh0X3NldHVwKG1hcywgbWF4LCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01MDk3LDYgJiM0Mzs1MjE4LDcgQEAgdm9pZCAqbWFzX25leHRfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19uZXh0X3NldHVwKG1hcywgbWF4LCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01MjA1LDYgJiM0Mzs1MzI3LDcgQEAgdm9pZCAqbWFzX3ByZXYoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19wcmV2X3NldHVwKG1hcywgbWluLCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01MjI4LDYgJiM0Mzs1MzUxLDcgQEAgdm9pZCAqbWFzX3ByZXZfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19wcmV2X3NldHVwKG1hcywgbWluLCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01Mjc0LDYgJiM0Mzs1Mzk4LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwobXRfcHJldik7XG4gICovXG4gdm9pZCBtYXNfcGF1c2Uoc3RydWN0IG1hX3N0YXRlICptYXMpXG4ge1xuJiM0MztcdG1hc19sb2NrX2NoZWNrKG1hcyk7XG4gXHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfcGF1c2U7XG4gXHRtYXMtXHUwMDNlbm9kZSA9IE5VTEw7XG4gfVxuQEAgLTUzODIsNiAmIzQzOzU1MDcsNyBAQCB2b2lkICptYXNfZmluZChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpXG4ge1xuIFx0dm9pZCAqZW50cnkgPSBOVUxMO1xuIFxuJiM0MztcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzX2ZpbmRfc2V0dXAobWFzLCBtYXgsIFx1MDAyNmVudHJ5KSlcbiBcdFx0cmV0dXJuIGVudHJ5O1xuIFxuQEAgLTU0MDksNiAmIzQzOzU1MzUsNyBAQCB2b2lkICptYXNfZmluZF9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpXG4ge1xuIFx0dm9pZCAqZW50cnkgPSBOVUxMO1xuIFxuJiM0MztcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzX2ZpbmRfc2V0dXAobWFzLCBtYXgsIFx1MDAyNmVudHJ5KSlcbiBcdFx0cmV0dXJuIGVudHJ5O1xuIFxuQEAgLTU0MjgsNyAmIzQzOzU1NTUsNiBAQCBFWFBPUlRfU1lNQk9MX0dQTChtYXNfZmluZF9yYW5nZSk7XG4gc3RhdGljIGJvb2wgbWFzX2ZpbmRfcmV2X3NldHVwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbixcbiBcdFx0dm9pZCAqKmVudHJ5KVxuIHtcbi1cbiBcdHN3aXRjaCAobWFzLVx1MDAzZXN0YXR1cykge1xuIFx0Y2FzZSBtYV9hY3RpdmU6XG4gXHRcdGdvdG8gYWN0aXZlO1xuQEAgLTU1MjEsNiAmIzQzOzU2NDcsNyBAQCB2b2lkICptYXNfZmluZF9yZXYoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19maW5kX3Jldl9zZXR1cChtYXMsIG1pbiwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTU0Nyw2ICYjNDM7NTY3NCw3IEBAIHZvaWQgKm1hc19maW5kX3JhbmdlX3JldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pXG4ge1xuIFx0dm9pZCAqZW50cnkgPSBOVUxMO1xuIFxuJiM0MztcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzX2ZpbmRfcmV2X3NldHVwKG1hcywgbWluLCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01NTY0LDYgJiM0Mzs1NjkyLDEwIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1hc19maW5kX3JhbmdlX3Jldik7XG4gICogU2VhcmNoZXMgZm9yIEBtYXMtXHUwMDNlaW5kZXgsIHNldHMgQG1hcy1cdTAwM2VpbmRleCBhbmQgQG1hcy1cdTAwM2VsYXN0IHRvIHRoZSByYW5nZSBhbmRcbiAgKiBlcmFzZXMgdGhhdCByYW5nZS5cbiAgKlxuJiM0MzsgKiBOb3RlIHRoYXQgZXJhc2UgcmVxdWlyZXMgYWxsb2NhdGlvbnMgYW5kIHdpbGwgdXNlIEdGUF9LRVJORUwgdG8gZG8gc28gaWZcbiYjNDM7ICogbmVjZXNzYXJ5LiAgSWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBpbnRlcm5hbCBsb2NrIHdpbGwgYmUgZHJvcHBlZCB0b1xuJiM0MzsgKiByZXRyeS5cbiYjNDM7ICpcbiAgKiBSZXR1cm46IHRoZSBlbnRyeSB0aGF0IHdhcyBlcmFzZWQgb3IgJU5VTEwsIEBtYXMtXHUwMDNlaW5kZXggYW5kIEBtYXMtXHUwMDNlbGFzdCBhcmUgdXBkYXRlZC5cbiAgKi9cbiB2b2lkICptYXNfZXJhc2Uoc3RydWN0IG1hX3N0YXRlICptYXMpXG5AQCAtNTU3Miw2ICYjNDM7NTcwNCwxNCBAQCB2b2lkICptYXNfZXJhc2Uoc3RydWN0IG1hX3N0YXRlICptYXMpXG4gXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gbWFzLVx1MDAzZWluZGV4O1xuIFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIE5VTEwpO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogSW4gbG93IG1lbW9yeSBzaXR1YXRpb25zLCB0aGUgYWxsb2NhdGlvbiBpcyByZXRyaWVkIHdpdGggdGhlIGdmcCBmbGFnXG4mIzQzO1x0ICogR0ZQX0tFUk5FTC4gIFRoZSBpbnRlcm5hbCBzcGlubG9jayBpcyBkcm9wcGVkIGluIG1hc19ub21lbSgpLCBob3dldmVyXG4mIzQzO1x0ICogdGhlIGV4dGVybmFsIGxvY2sgaXMgbm90IGRyb3BwZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG10X2V4dGVybmFsX2xvY2sobWFzLVx1MDAzZXRyZWUpKVxuJiM0MztcdFx0bWlnaHRfYWxsb2MoR0ZQX0tFUk5FTCk7XG4mIzQzO1xuIFx0aWYgKCFtYXNfaXNfYWN0aXZlKG1hcykgfHwgIW1hc19pc19zdGFydChtYXMpKVxuIFx0XHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XG4gXG5AQCAtNTYwMSwxMCAmIzQzOzU3NDEsMTEgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWFzX2VyYXNlKTtcbiBcbiAvKipcbiAgKiBtYXNfbm9tZW0oKSAtIENoZWNrIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBhbGxvY2F0aW5nIGFuZCBkbyB0aGUgYWxsb2NhdGlvblxuLSAqIGlmIG5lY2Vzc2FyeSBJZiB0aGVyZSBhcmUgYWxsb2NhdGlvbnMsIHRoZW4gZnJlZSB0aGVtLlxuJiM0MzsgKiBpZiBuZWNlc3NhcnkuXG4mIzQzOyAqXG4gICogQG1hczogVGhlIG1hcGxlIHN0YXRlXG4gICogQGdmcDogVGhlIEdGUF9GTEFHUyB0byB1c2UgZm9yIGFsbG9jYXRpb25zXG4tICogUmV0dXJuOiB0cnVlIG9uIGFsbG9jYXRpb24sIGZhbHNlIG90aGVyd2lzZS5cbiYjNDM7ICogUmV0dXJuOiBGYWxzZSBvbiBubyBtZW1vcnkuICBUcnVlIG90aGVyd2lzZSAocGFydGlhbCBzdWNjZXNzIGFzIHdlbGwpXG4gICovXG4gYm9vbCBtYXNfbm9tZW0oc3RydWN0IG1hX3N0YXRlICptYXMsIGdmcF90IGdmcClcbiBcdF9fbXVzdF9ob2xkKG1hcy1cdTAwM2V0cmVlLVx1MDAzZW1hX2xvY2spXG5AQCAtNTYxMiw2ICYjNDM7NTc1MywxMCBAQCBib29sIG1hc19ub21lbShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgZ2ZwX3QgZ2ZwKVxuIFx0aWYgKGxpa2VseShtYXMtXHUwMDNlbm9kZSAhPSBNQV9FUlJPUigtRU5PTUVNKSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHQvKiBBbGxvY2F0aW9ucyBjYW4gZmFpbCwgZG9uJiMzOTt0IGRvIHRoaXMuICovXG4mIzQzO1x0V0FSTl9PTl9PTkNFKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICBtdF9leHRlcm5hbF9sb2NrKG1hcy1cdTAwM2V0cmVlKSk7XG4mIzQzO1xuIFx0aWYgKGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkgXHUwMDI2XHUwMDI2ICFtdF9leHRlcm5hbF9sb2NrKG1hcy1cdTAwM2V0cmVlKSkge1xuIFx0XHRtdHJlZV91bmxvY2sobWFzLVx1MDAzZXRyZWUpO1xuIFx0XHRtYXNfYWxsb2Nfbm9kZXMobWFzLCBnZnApO1xuQEAgLTU2MjAsMTAgJiM0Mzs1NzY1LDE3IEBAIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApXG4gXHRcdG1hc19hbGxvY19ub2RlcyhtYXMsIGdmcCk7XG4gXHR9XG4gXG4tXHRpZiAoIW1hcy1cdTAwM2VzaGVhZiBcdTAwMjZcdTAwMjYgIW1hcy1cdTAwM2VhbGxvYylcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJldHVybiBmYWxzZSBvbiB6ZXJvIGZvcndhcmQgcHJvZ3Jlc3MuICBQYXJ0aWFsIGFsbG9jYXRpb25zIGFyZSBrZXB0XG4mIzQzO1x0ICogc28gdGhlIHJldHJ5IHBhdGggd2lsbCBhdHRlbXB0IHRvIGdldCB0aGUgcmVzdC4gIFRoZSBmYWlsdXJlIHNob3VsZFxuJiM0MztcdCAqIG5vdCBoYXBwZW4gYXMgd2UgdHJ5IG91ciBiZXN0IHRvIHJlY2xhaW0uICBUaGUgdXNlciB3b3VsZCBuZWVkIGFuXG4mIzQzO1x0ICogZXh0ZXJuYWwgbG9jayB3aXRoIGEgbm9uLWJsb2NraW5nIGdmcCBpbiBhIGxvdyBtZW1vcnkgc2l0dWF0aW9uIC1cbiYjNDM7XHQgKiB3aGljaCB3b3VsZCBoYXZlIHRyaWdnZXJlZCB0aGUgZmlyc3Qgd2FybmluZyBpbiB0aGlzIGZ1bmN0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIW1hcy1cdTAwM2VzaGVhZiBcdTAwMjZcdTAwMjYgIW1hcy1cdTAwM2VhbGxvYykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdG1hcy1cdTAwM2VzdGF0dXMgPSBtYV9zdGFydDtcbiYjNDM7XHRtYXNfcmVzZXQobWFzKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbkBAIC01OTEzLDYgJiM0Mzs2MDY1LDEwIEBAIEVYUE9SVF9TWU1CT0wobXRyZWVfYWxsb2NfcnJhbmdlKTtcbiAgKiBFcmFzaW5nIGlzIHRoZSBzYW1lIGFzIGEgd2FsayB0byBhbiBlbnRyeSB0aGVuIGEgc3RvcmUgb2YgYSBOVUxMIHRvIHRoYXRcbiAgKiBFTlRJUkUgcmFuZ2UuICBJbiBmYWN0LCBpdCBpcyBpbXBsZW1lbnRlZCBhcyBzdWNoIHVzaW5nIHRoZSBhZHZhbmNlZCBBUEkuXG4gICpcbiYjNDM7ICogTm90ZSB0aGF0IGVyYXNlIHJlcXVpcmVzIGFsbG9jYXRpb25zIGFuZCB3aWxsIHVzZSBHRlBfS0VSTkVMIHRvIGRvIHNvIGlmXG4mIzQzOyAqIG5lY2Vzc2FyeS4gIElmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgaW50ZXJuYWwgbG9jayB3aWxsIGJlIGRyb3BwZWQgdG9cbiYjNDM7ICogcmV0cnkuXG4mIzQzOyAqXG4gICogUmV0dXJuOiBUaGUgZW50cnkgc3RvcmVkIGF0IHRoZSBAaW5kZXggb3IgJU5VTExcbiAgKi9cbiB2b2lkICptdHJlZV9lcmFzZShzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQsIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY1xuaW5kZXggMDYwNzkxM2EzMDIyZDUuLmQ5NjdlNzZhM2MwNjUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jXG5AQCAtMzUyMzQsNyAmIzQzOzM1MjM0LDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGNoZWNrX3ByZWFsbG9jKHN0cnVjdCBtYXBsZV90cmVlICptdClcbiBcdG10X3NldF9ub25fa2VybmVsKDEpO1xuIFx0LyogU3Bhbm5pbmcgc3RvcmUgKi9cbiBcdG1hc19zZXRfcmFuZ2UoXHUwMDI2bWFzLCAxLCAxMDApO1xuLVx0TVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoXHUwMDI2bWFzLCBwdHIsIEdGUF9LRVJORUwgXHUwMDI2IEdGUF9OT1dBSVQpID09IDApO1xuJiM0MztcdE1UX0JVR19PTihtdCwgbWFzX3ByZWFsbG9jYXRlKFx1MDAyNm1hcywgcHRyLCBHRlBfTk9XQUlUKSA9PSAwKTtcbiBcdGFsbG9jYXRlZCA9IG1hc19hbGxvY2F0ZWQoXHUwMDI2bWFzKTtcbiBcdGhlaWdodCA9IG1hc19tdF9oZWlnaHQoXHUwMDI2bWFzKTtcbiBcdE1UX0JVR19PTihtdCwgYWxsb2NhdGVkICE9IDApO1xuQEAgLTM1MjU3LDcgJiM0MzszNTI1Nyw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19wcmVhbGxvYyhzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQpXG4gXHRNVF9CVUdfT04obXQsIG1hc19hbGxvY2F0ZWQoXHUwMDI2bWFzKSAhPSAwKTtcbiBcdG1hc19zZXRfcmFuZ2UoXHUwMDI2bWFzLCAwLCAyMDApO1xuIFx0bXRfc2V0X25vbl9rZXJuZWwoMSk7XG4tXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX0tFUk5FTCBcdTAwMjYgR0ZQX05PV0FJVCkgPT0gMCk7XG4mIzQzO1x0TVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoXHUwMDI2bWFzLCBwdHIsIEdGUF9OT1dBSVQpID09IDApO1xuIFx0YWxsb2NhdGVkID0gbWFzX2FsbG9jYXRlZChcdTAwMjZtYXMpO1xuIFx0aGVpZ2h0ID0gbWFzX210X2hlaWdodChcdTAwMjZtYXMpO1xuIFx0TVRfQlVHX09OKG10LCBhbGxvY2F0ZWQgIT0gMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVCVUdfTUFQTEVfVFJFRSYjMzQ7LAogICAgJiMzNDtQUk9WRV9MT0NLSU5HJiMzNDssCiAgICAmIzM0O0xPQ0tERVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYXNfYWxsb2NfY3ljbGljJiMzNDssCiAgICAmIzM0O21hc19lcmFzZSYjMzQ7LAogICAgJiMzNDttdHJlZV9lcmFzZSYjMzQ7LAogICAgJiMzNDttYXNfbm9tZW0mIzM0OywKICAgICYjMzQ7bG9ja19zZXF1ZW5jZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvY2sgc2VxdWVuY2UgdmFsaWRhdGlvbiBmb3IgbWFwbGUgdHJlZSBvcGVyYXRpb25zIHVzaW5nIGxvY2tkZXAsIGFuZCBvcHRpbWl6ZXMgbWFwbGUgdHJlZSBub2RlIHN0b3JlIG9wZXJhdGlvbnMgYW5kIHBhcmVudCBwb2ludGVyIHVwZGF0ZXMuIEl0IGFsc28gZml4ZXMgd3JhcC1hcm91bmQgaGFuZGxpbmcgaW4gYG1hc19hbGxvY19jeWNsaWNgIGFuZCBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBpbiBgbWFzX2VyYXNlYCBhbmQgYG1hc19ub21lbWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNWFhZTY4MWM3M2RhZTdmZWFhYjAxM2MxNjA5NTI2OWMwMWZhYmFhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgMiAwNDoyMzo0NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0CmluZGV4IGNjZGQxNjE1Y2Y5NzRmLi4xZWFlMjRhOWMxOGI0YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0CkBAIC0xNyw3ICYjNDM7MTcsOCBAQCBzdXBwb3J0cyBpdGVyYXRpbmcgb3ZlciBhIHJhbmdlIG9mIGVudHJpZXMgYW5kIGdvaW5nIHRvIHRoZSBwcmV2aW91cyBvciBuZXh0CiBlbnRyeSBpbiBhIGNhY2hlLWVmZmljaWVudCBtYW5uZXIuICBUaGUgdHJlZSBjYW4gYWxzbyBiZSBwdXQgaW50byBhbiBSQ1Utc2FmZQogbW9kZSBvZiBvcGVyYXRpb24gd2hpY2ggYWxsb3dzIHJlYWRpbmcgYW5kIHdyaXRpbmcgY29uY3VycmVudGx5LiAgV3JpdGVycyBtdXN0CiBzeW5jaHJvbml6ZSBvbiBhIGxvY2ssIHdoaWNoIGNhbiBiZSB0aGUgZGVmYXVsdCBzcGlubG9jaywgb3IgdGhlIHVzZXIgY2FuIHNldAotdGhlIGxvY2sgdG8gYW4gZXh0ZXJuYWwgbG9jayBvZiBhIGRpZmZlcmVudCB0eXBlLgomIzQzO3RoZSBsb2NrIHRvIGFuIGV4dGVybmFsIGxvY2sgb2YgYSBkaWZmZXJlbnQgdHlwZS4gIE5vdGUgdGhhdCBleHRlcm5hbCBsb2NrcyBtYXkKJiM0MztpbnRlcmZlcmUgd2l0aCBhbGxvY2F0aW9ucyBpbiBhIGxvdyBtZW1vcnkgc2l0dWF0aW9uLgogCiBUaGUgTWFwbGUgVHJlZSBtYWludGFpbnMgYSBzbWFsbCBtZW1vcnkgZm9vdHByaW50IGFuZCB3YXMgZGVzaWduZWQgdG8gdXNlCiBtb2Rlcm4gcHJvY2Vzc29yIGNhY2hlIGVmZmljaWVudGx5LiAgVGhlIG1ham9yaXR5IG9mIHRoZSB1c2VycyB3aWxsIGJlIGFibGUgdG8KQEAgLTQyLDYgJiM0Mzs0MywxNSBAQCBzdWNjZXNzZnVsIHN0b3JlIG9wZXJhdGlvbiB3aXRoaW4gYSBnaXZlbgogY29kZSBzZWdtZW50IHdoZW4gYWxsb2NhdGluZyBjYW5ub3QgYmUgZG9uZS4gIEFsbG9jYXRpb25zIG9mIG5vZGVzIGFyZQogcmVsYXRpdmVseSBzbWFsbCBhdCBhcm91bmQgMjU2IGJ5dGVzLgogCiYjNDM7U2luY2UgdGhlIG1hcGxlIHRyZWUgdXNlcyBpbnRlcm5hbCBub2RlcyB0aGF0IGFyZSBhbGxvY2F0ZWQgYW5kIGhhcyBydWxlcyBvbgomIzQzO2RhdGEgZGVuc2l0eSwgZXJhc2luZyBhbiBlbnRyeSBtYXkgY2F1c2UgYWxsb2NhdGlvbnMgdG8gb2NjdXIuICBUaGF0IGlzLAomIzQzO2VyYXNpbmcgYW4gZW50cnkgbWF5IGNvbnN1bWUgbWVtb3J5LiAgVXNlcnMgbXVzdCB0YWtlIGNhcmUgdG8gZW5zdXJlIHRoYXQgdGhleQomIzQzO2RvIG5vdCB2aW9sYXRlIHRoZSBsYXJnZXIgc3lzdGVtIGNvbnN0cmFpbnRzIG9uIHdoZW4gYW5kIGhvdyBtZW1vcnkgaXMKJiM0MzthbGxvY2F0ZWQuICBNb3N0IHNpdHVhdGlvbnMgYXJlIGZpbmUgdG8gYWxsb2NhdGUsIGJ1dCB0aGUgcHJlLWFsbG9jYXRpb24KJiM0MztzdXBwb3J0IGlzIHByb3ZpZGVkIGFzIGEgbWVjaGFuaXNtIHRvIGF2b2lkIHRyaWNraWVyIHNpdHVhdGlvbnMuICBUaGVyZSBpcyBhbHNvCiYjNDM7dGhlIHBvc3NpYmlsaXR5IG9mIHVzaW5nIHNwZWNpYWwgZW50cmllcyBhbmQgY2xlYW4gdXAgdGhlIHRyZWUgbGF0ZXIsIGluCiYjNDM7ZXh0cmVtZSBjaXJjdW1zdGFuY2VzLgomIzQzOwogLi4gX21hcGxlLXRyZWUtbm9ybWFsLWFwaToKIAogTm9ybWFsIEFQSQpAQCAtNjMsNyAmIzQzOzczLDggQEAgc3VjY2VzcyBvciBhbiBlcnJvciBjb2RlIG90aGVyd2lzZS4gIG10cmVlX3N0b3JlX3JhbmdlKCkgd29ya3MgaW4gdGhlIHNhbWUgd2F5CiBidXQgdGFrZXMgYSByYW5nZS4gIG10cmVlX2xvYWQoKSBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBlbnRyeSBzdG9yZWQgYXQgYQogZ2l2ZW4gaW5kZXguICBZb3UgY2FuIHVzZSBtdHJlZV9lcmFzZSgpIHRvIGVyYXNlIGFuIGVudGlyZSByYW5nZSBieSBvbmx5CiBrbm93aW5nIG9uZSB2YWx1ZSB3aXRoaW4gdGhhdCByYW5nZSwgb3IgbXRyZWVfc3RvcmUoKSBjYWxsIHdpdGggYW4gZW50cnkgb2YKLU5VTEwgbWF5IGJlIHVzZWQgdG8gcGFydGlhbGx5IGVyYXNlIGEgcmFuZ2Ugb3IgbWFueSByYW5nZXMgYXQgb25jZS4KJiM0MztOVUxMIG1heSBiZSB1c2VkIHRvIHBhcnRpYWxseSBlcmFzZSBhIHJhbmdlIG9yIG1hbnkgcmFuZ2VzIGF0IG9uY2UuICBOb3RlIHRoYXQKJiM0MzttdHJlZV9lcmFzZSgpIG1heSB1c2UgR0ZQX0tFUk5FTCBvbiBhbGxvY2F0aW9ucy4KIAogSWYgeW91IHdhbnQgdG8gb25seSBzdG9yZSBhIG5ldyBlbnRyeSB0byBhIHJhbmdlIChvciBpbmRleCkgaWYgdGhhdCByYW5nZSBpcwogY3VycmVudGx5IGBgTlVMTGBgLCB5b3UgY2FuIHVzZSBtdHJlZV9pbnNlcnRfcmFuZ2UoKSBvciBtdHJlZV9pbnNlcnQoKSB3aGljaApAQCAtMTYzLDcgJiM0MzsxNzQsOSBAQCBZb3UgY2FuIHVzZSBtYXNfZXJhc2UoKSB0byBlcmFzZSBhbiBlbnRpcmUgcmFuZ2UgYnkgc2V0dGluZyBpbmRleCBhbmQKIGxhc3Qgb2YgdGhlIG1hcGxlIHN0YXRlIHRvIHRoZSBkZXNpcmVkIHJhbmdlIHRvIGVyYXNlLiAgVGhpcyB3aWxsIGVyYXNlCiB0aGUgZmlyc3QgcmFuZ2UgdGhhdCBpcyBmb3VuZCBpbiB0aGF0IHJhbmdlLCBzZXQgdGhlIG1hcGxlIHN0YXRlIGluZGV4CiBhbmQgbGFzdCBhcyB0aGUgcmFuZ2UgdGhhdCB3YXMgZXJhc2VkIGFuZCByZXR1cm4gdGhlIGVudHJ5IHRoYXQgZXhpc3RlZAotYXQgdGhhdCBsb2NhdGlvbi4KJiM0MzthdCB0aGF0IGxvY2F0aW9uLiAgTm90ZSB0aGF0IG1hc19lcmFzZSgpIG1heSBhbGxvY2F0ZSB3aXRoIHRoZSBHRlBfS0VSTkVMIGZsYWcuCiYjNDM7SWYgdGhpcyBpcyBub3Qgb2theSwgY29uc2lkZXIgdXNpbmcgbWFzX3N0b3JlX2dmcCgpIGFuZCBwYXNzIGl0IGEgYGBOVUxMYGAsCiYjNDM7YWZ0ZXIgc2V0dGluZyB1cCB0aGUgY29ycmVjdCByYW5nZSBieSB3YWxraW5nIHRvIHRoZSBlbnRyeS4KIAogWW91IGNhbiB3YWxrIGVhY2ggZW50cnkgd2l0aGluIGEgcmFuZ2UgYnkgdXNpbmcgbWFzX2Zvcl9lYWNoKCkuICBJZiB5b3Ugd2FudAogdG8gd2FsayBlYWNoIGVsZW1lbnQgb2YgdGhlIHRyZWUgdGhlbiBgYDBgYCBhbmQgYGBVTE9OR19NQVhgYCBtYXkgYmUgdXNlZCBhcwpAQCAtMjExLDcgJiM0MzsyMjQsNyBAQCBBZHZhbmNlZCBMb2NraW5nCiAKIFRoZSBtYXBsZSB0cmVlIHVzZXMgYSBzcGlubG9jayBieSBkZWZhdWx0LCBidXQgZXh0ZXJuYWwgbG9ja3MgY2FuIGJlIHVzZWQgZm9yCiB0cmVlIHVwZGF0ZXMgYXMgd2VsbC4gIFRvIHVzZSBhbiBleHRlcm5hbCBsb2NrLCB0aGUgdHJlZSBtdXN0IGJlIGluaXRpYWxpemVkCi13aXRoIHRoZSBgYE1UX0ZMQUdTX0xPQ0tfRVhURVJOIGZsYWdgYCwgdGhpcyBpcyB1c3VhbGx5IGRvbmUgd2l0aCB0aGUKJiM0Mzt3aXRoIHRoZSBgYE1UX0ZMQUdTX0xPQ0tfRVhURVJOYGAgZmxhZywgdGhpcyBpcyB1c3VhbGx5IGRvbmUgd2l0aCB0aGUKIE1UUkVFX0lOSVRfRVhUKCkgI2RlZmluZSwgd2hpY2ggdGFrZXMgYW4gZXh0ZXJuYWwgbG9jayBhcyBhbiBhcmd1bWVudC4KIAogRnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCmluZGV4IDYyMTU2NjM0NTQwNmRkLi5hNjQ1MWVjYmJlOWEwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKQEAgLTI3Myw2ICYjNDM7MjczLDkgQEAgZXh0ZXJuIHN0cnVjdCBwaW5fY29va2llIGxvY2tfcGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKTsKIGV4dGVybiB2b2lkIGxvY2tfcmVwaW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llKTsKIGV4dGVybiB2b2lkIGxvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llKTsKIAomIzQzO2V4dGVybiB1MzIgbG9ja19zZXF1ZW5jZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spOwomIzQzOyNkZWZpbmUgbG9ja2RlcF9zZXF1ZW5jZShsb2NrKQlsb2NrX3NlcXVlbmNlKCZhbXA7KGxvY2spLSZndDtkZXBfbWFwKQomIzQzOwogI2RlZmluZSBsb2NrZGVwX2RlcHRoKHRzaykJKGRlYnVnX2xvY2tzID8gKHRzayktJmd0O2xvY2tkZXBfZGVwdGggOiAwKQogCiAjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0KGNvbmQpCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oCmluZGV4IGVhZTExNWEyNjQ4ODU2Li41NWM0YjE1MmZlZGY3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmgKQEAgLTI1Myw3ICYjNDM7MjUzLDggQEAgc3RydWN0IGhlbGRfbG9jayB7CiAJdW5zaWduZWQgaW50IGhhcmRpcnFzX29mZjoxOwogCXVuc2lnbmVkIGludCBzeW5jOjE7CiAJdW5zaWduZWQgaW50IHJlZmVyZW5jZXM6MTE7CQkJCQkvKiAzMiBiaXRzICovCi0JdW5zaWduZWQgaW50IHBpbl9jb3VudDsKJiM0MzsJdW5zaWduZWQgaW50IHBpbl9jb3VudDoyNDsKJiM0MzsJdW5zaWduZWQgaW50IHNlcV9jb3VudDo4OwogfTsKIAogI2Vsc2UgLyogIUNPTkZJR19MT0NLREVQICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaCBiL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oCmluZGV4IDRhNTYzMTkwNmFmZmI1Li41ZTBiZDI4NTdkOTQxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmgKQEAgLTI5LDEzICYjNDM7MjksMTEgQEAKICNkZWZpbmUgTUFQTEVfTk9ERV9TTE9UUwkzMQkvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC0mZ3Q7cGFyZW50ICovCiAjZGVmaW5lIE1BUExFX1JBTkdFNjRfU0xPVFMJMTYJLyogMjU2IGJ5dGVzICovCiAjZGVmaW5lIE1BUExFX0FSQU5HRTY0X1NMT1RTCTEwCS8qIDI0MCBieXRlcyAqLwotI2RlZmluZSBNQVBMRV9BTExPQ19TTE9UUwkoTUFQTEVfTk9ERV9TTE9UUyAtIDEpCiAjZWxzZQogLyogMzJiaXQgc2l6ZXMgKi8KICNkZWZpbmUgTUFQTEVfTk9ERV9TTE9UUwk2MwkvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC0mZ3Q7cGFyZW50ICovCiAjZGVmaW5lIE1BUExFX1JBTkdFNjRfU0xPVFMJMzIJLyogMjU2IGJ5dGVzICovCiAjZGVmaW5lIE1BUExFX0FSQU5HRTY0X1NMT1RTCTIxCS8qIDI0MCBieXRlcyAqLwotI2RlZmluZSBNQVBMRV9BTExPQ19TTE9UUwkoTUFQTEVfTk9ERV9TTE9UUyAtIDIpCiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfNjRCSVQpIHx8IGRlZmluZWQoQlVJTERfVkRTTzMyXzY0KSAqLwogCiAjZGVmaW5lIE1BUExFX05PREVfTUFTSwkJMjU1VUwKQEAgLTQ4NSw2ICYjNDM7NDgzLDEyIEBAIHN0cnVjdCBtYV9zdGF0ZSB7CiAJdW5zaWduZWQgY2hhciBtYXNfZmxhZ3M7CiAJdW5zaWduZWQgY2hhciBlbmQ7CQkvKiBUaGUgZW5kIG9mIHRoZSBub2RlICovCiAJZW51bSBzdG9yZV90eXBlIHN0b3JlX3R5cGU7CS8qIFRoZSB0eXBlIG9mIHN0b3JlIG5lZWRlZCBmb3IgdGhpcyBvcGVyYXRpb24gKi8KJiM0MzsjaWZkZWYgQ09ORklHX0xPQ0tERVAKJiM0MzsJdTMyIGxkX3NlcTsKJiM0MzsjaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9ECiYjNDM7CXVuc2lnbmVkIGxvbmcgcmN1X2dwOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QgKi8KJiM0MzsjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi8KIH07CiAKIHN0cnVjdCBtYV93cl9zdGF0ZSB7CkBAIC01NzIsNyAmIzQzOzU3Niw3IEBAIHZvaWQgbWFwbGVfdHJlZV9pbml0KHZvaWQpOwogdm9pZCBtYXNfZGVzdHJveShzdHJ1Y3QgbWFfc3RhdGUgKm1hcyk7CiAKIHZvaWQgKm1hc19wcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbik7Ci12b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpOwomIzQzO3ZvaWQgKm1hc19wcmV2X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbik7CiB2b2lkICptYXNfbmV4dChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpOwogdm9pZCAqbWFzX25leHRfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDM3M2JjYzA1OThkMTBiLi4xNGQ1Y2U4ZGQ2MTM2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtMTI4OCw2ICYjNDM7MTI4OCw3IEBAIHN0cnVjdCB0YXNrX3N0cnVjdCB7CiAJdTY0CQkJCWN1cnJfY2hhaW5fa2V5OwogCWludAkJCQlsb2NrZGVwX2RlcHRoOwogCXVuc2lnbmVkIGludAkJCWxvY2tkZXBfcmVjdXJzaW9uOwomIzQzOwl1bnNpZ25lZCBpbnQJCQlsb2NrZGVwX3NlcTsKIAlzdHJ1Y3QgaGVsZF9sb2NrCQloZWxkX2xvY2tzW01BWF9MT0NLX0RFUFRIXTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMKaW5kZXggMmQ0YzViYWI1YWY4ODcuLmIyYjBhNTA2OTYwYjE2IDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jCkBAIC01MDc3LDcgJiM0Mzs1MDc3LDcgQEAgc3RhdGljIGludCBfX2xvY2tfaXNfaGVsZChjb25zdCBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIGludCByZWFkKTsKIHN0YXRpYyBpbnQgX19sb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsCiAJCQkgIGludCB0cnlsb2NrLCBpbnQgcmVhZCwgaW50IGNoZWNrLCBpbnQgaGFyZGlycXNfb2ZmLAogCQkJICBzdHJ1Y3QgbG9ja2RlcF9tYXAgKm5lc3RfbG9jaywgdW5zaWduZWQgbG9uZyBpcCwKLQkJCSAgaW50IHJlZmVyZW5jZXMsIGludCBwaW5fY291bnQsIGludCBzeW5jKQomIzQzOwkJCSAgaW50IHJlZmVyZW5jZXMsIGludCBwaW5fY291bnQsIGludCBzeW5jLCBpbnQgc2VxKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7CiAJc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gTlVMTDsKQEAgLTUxODMsNiAmIzQzOzUxODMsNyBAQCBzdGF0aWMgaW50IF9fbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLAogCWhsb2NrLSZndDtob2xkdGltZV9zdGFtcCA9IGxvY2tzdGF0X2Nsb2NrKCk7CiAjZW5kaWYKIAlobG9jay0mZ3Q7cGluX2NvdW50ID0gcGluX2NvdW50OwomIzQzOwlobG9jay0mZ3Q7c2VxX2NvdW50ID0gc2VxOwogCiAJaWYgKGNoZWNrX3dhaXRfY29udGV4dChjdXJyLCBobG9jaykpCiAJCXJldHVybiAwOwpAQCAtNTM4OCw3ICYjNDM7NTM4OSw3IEBAIHN0YXRpYyBpbnQgcmVhY3F1aXJlX2hlbGRfbG9ja3Moc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCB1bnNpZ25lZCBpbnQgZGVwdGgsCiAJCQkJICAgIGhsb2NrLSZndDtyZWFkLCBobG9jay0mZ3Q7Y2hlY2ssCiAJCQkJICAgIGhsb2NrLSZndDtoYXJkaXJxc19vZmYsCiAJCQkJICAgIGhsb2NrLSZndDtuZXN0X2xvY2ssIGhsb2NrLSZndDthY3F1aXJlX2lwLAotCQkJCSAgICBobG9jay0mZ3Q7cmVmZXJlbmNlcywgaGxvY2stJmd0O3Bpbl9jb3VudCwgMCkpIHsKJiM0MzsJCQkJICAgIGhsb2NrLSZndDtyZWZlcmVuY2VzLCBobG9jay0mZ3Q7cGluX2NvdW50LCAwLCBobG9jay0mZ3Q7c2VxX2NvdW50KSkgewogCQljYXNlIDA6CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSAxOgpAQCAtNTY4NCw2ICYjNDM7NTY4NSwyNCBAQCBzdGF0aWMgdm9pZCBfX2xvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llIGNvb2tpZQogCVdBUk4oMSwgJiMzNDt1bnBpbm5pbmcgYW4gdW5oZWxkIGxvY2tcbiYjMzQ7KTsKIH0KIAomIzQzO3N0YXRpYyB1MzIgX19sb2NrX3NlcXVlbmNlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIWRlYnVnX2xvY2tzKSkKJiM0MzsJCXJldHVybiB+MDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGN1cnItJmd0O2xvY2tkZXBfZGVwdGg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgaGVsZF9sb2NrICpobG9jayA9IGN1cnItJmd0O2hlbGRfbG9ja3MgJiM0MzsgaTsKJiM0MzsKJiM0MzsJCWlmIChtYXRjaF9oZWxkX2xvY2soaGxvY2ssIGxvY2spKQomIzQzOwkJCXJldHVybiBobG9jay0mZ3Q7c2VxX2NvdW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB+MDsKJiM0Mzt9CiYjNDM7CiAvKgogICogQ2hlY2sgd2hldGhlciB3ZSBmb2xsb3cgdGhlIGlycS1mbGFncyBzdGF0ZSBwcmVjaXNlbHk6CiAgKi8KQEAgLTU4NjYsNyAmIzQzOzU4ODUsOCBAQCB2b2lkIGxvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcywKIAogCWxvY2tkZXBfcmVjdXJzaW9uX2luYygpOwogCV9fbG9ja19hY3F1aXJlKGxvY2ssIHN1YmNsYXNzLCB0cnlsb2NrLCByZWFkLCBjaGVjaywKLQkJICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAwKTsKJiM0MzsJCSAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMCwKJiM0MzsJCSAgICAgICAmIzQzOyYjNDM7Y3VycmVudC0mZ3Q7bG9ja2RlcF9zZXEpOwogCWxvY2tkZXBfcmVjdXJzaW9uX2ZpbmlzaCgpOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CkBAIC01OTE0LDcgJiM0Mzs1OTM0LDggQEAgdm9pZCBsb2NrX3N5bmMoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBzdWJjbGFzcywgaW50IHJlYWQsCiAKIAlsb2NrZGVwX3JlY3Vyc2lvbl9pbmMoKTsKIAlfX2xvY2tfYWNxdWlyZShsb2NrLCBzdWJjbGFzcywgMCwgcmVhZCwgY2hlY2ssCi0JCSAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMSk7CiYjNDM7CQkgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDAsIDAsIDEsCiYjNDM7CQkgICAgICAgJiM0MzsmIzQzO2N1cnJlbnQtJmd0O2xvY2tkZXBfc2VxKTsKIAljaGVja19jaGFpbl9rZXkoY3VycmVudCk7CiAJbG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7CiAJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTYwMDAsNiAmIzQzOzYwMjEsMjYgQEAgdm9pZCBsb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSBjb29raWUpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChsb2NrX3VucGluX2xvY2spOwogCiYjNDM7dTMyIGxvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJdTMyIHNlcSA9IH4wOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIWxvY2tkZXBfZW5hYmxlZCgpKSkKJiM0MzsJCXJldHVybiBzZXE7CiYjNDM7CiYjNDM7CXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CiYjNDM7CWNoZWNrX2ZsYWdzKGZsYWdzKTsKJiM0MzsKJiM0MzsJbG9ja2RlcF9yZWN1cnNpb25faW5jKCk7CiYjNDM7CXNlcSA9IF9fbG9ja19zZXF1ZW5jZShsb2NrKTsKJiM0MzsJbG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7CiYjNDM7CXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiYjNDM7CiYjNDM7CXJldHVybiBzZXE7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGxvY2tfc2VxdWVuY2UpOwomIzQzOwogI2lmZGVmIENPTkZJR19MT0NLX1NUQVQKIHN0YXRpYyB2b2lkIHByaW50X2xvY2tfY29udGVudGlvbl9idWcoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLAogCQkJCSAgICAgIHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywKZGlmZiAtLWdpdCBhL2xpYi9tYXBsZV90cmVlLmMgYi9saWIvbWFwbGVfdHJlZS5jCmluZGV4IGU1Mjg3NjQzNWI3N2YwLi42ZDcxZmRjNDE0NzA2NCAxMDA2NDQKLS0tIGEvbGliL21hcGxlX3RyZWUuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvbWFwbGVfdHJlZS5jCkBAIC00NjksNyAmIzQzOzQ2OSw3IEBAIHN0YXRpYyBpbmxpbmUKIHZvaWQgbWFzX3NldF9wYXJlbnQoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUsCiAJCSAgICBjb25zdCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnBhcmVudCwgdW5zaWduZWQgY2hhciBzbG90KQogewotCXVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50OwomIzQzOwl1bnNpZ25lZCBsb25nIHZhbDsKIAl1bnNpZ25lZCBsb25nIHNoaWZ0OwogCXVuc2lnbmVkIGxvbmcgdHlwZTsKIAllbnVtIG1hcGxlX3R5cGUgcF90eXBlID0gbXRlX25vZGVfdHlwZShwYXJlbnQpOwpAQCAtNDkwLDExICYjNDM7NDkwLDQ3IEBAIHZvaWQgbWFzX3NldF9wYXJlbnQoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUsCiAJCWJyZWFrOwogCX0KIAomIzQzOwl2YWwgPSAodW5zaWduZWQgbG9uZylwYXJlbnQ7CiAJdmFsICZhbXA7PSB+TUFQTEVfTk9ERV9NQVNLOyAvKiBDbGVhciBhbGwgbm9kZSBtZXRhZGF0YSBpbiBwYXJlbnQgKi8KIAl2YWwgfD0gKHNsb3QgJmx0OyZsdDsgc2hpZnQpIHwgdHlwZTsKIAltdGVfdG9fbm9kZShlbm9kZSktJmd0O3BhcmVudCA9IG1hX3BhcmVudF9wdHIodmFsKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogbWFzX3NldF9wYXJlbnRfc2xvdHMoKSAtIEJ1bGsgb3BlcmF0aW9uIHRvIHNldCBtYW55IHNsb3QgcGFyZW50IHBvaW50ZXJzCiYjNDM7ICogQG1hczogVGhlIG1hcGxlIHN0YXRlCiYjNDM7ICogQHBhcmVudDogVGhlIGVuY29kZWQgbWFwbGUgbm9kZSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgQGVub2RlLgomIzQzOyAqIEBzbG90OiBUaGUgc2xvdCB0aGF0IG9mIHRoZSBAZW5vZGUuCiYjNDM7ICogQHN0YXJ0X3Nsb3Q6IFRoZSBvZmZzZXQgaW50byBAc2xvdAomIzQzOyAqIEBjb3VudDogVGhlIG51bWJlciBvZiBzbG90cyB0byBzZXQgKGVnOiBleGNsdXNpdmUpCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZQomIzQzO3ZvaWQgbWFzX3NldF9wYXJlbnRfc2xvdHMoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqcGFyZW50LAomIzQzOwl2b2lkIF9fcmN1ICoqc2xvdHMsIHVuc2lnbmVkIGNoYXIgc3RhcnRfc2xvdCwgdW5zaWduZWQgY2hhciBjb3VudCkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdmFsOwomIzQzOwl1bnNpZ25lZCBsb25nIHNoaWZ0OwomIzQzOwl1bnNpZ25lZCBsb25nIHR5cGU7CiYjNDM7CWVudW0gbWFwbGVfdHlwZSBwX3R5cGUgPSBtdGVfbm9kZV90eXBlKHBhcmVudCk7CiYjNDM7CXVuc2lnbmVkIGNoYXIgaTsKJiM0MzsKJiM0MzsJTUFTX0JVR19PTihtYXMsIHBfdHlwZSAhPSBtYXBsZV9yYW5nZV82NCAmYW1wOyZhbXA7CiYjNDM7CQkJcF90eXBlICE9IG1hcGxlX2FyYW5nZV82NCk7CiYjNDM7CiYjNDM7CXNoaWZ0ID0gTUFQTEVfUEFSRU5UX1NMT1RfU0hJRlQ7CiYjNDM7CXR5cGUgPSBNQVBMRV9QQVJFTlRfUkFOR0U2NDsKJiM0MzsKJiM0MzsJdmFsID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50OwomIzQzOwl2YWwgJmFtcDs9IH5NQVBMRV9OT0RFX01BU0s7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcHZhbCA9IHZhbCB8ICgoc3RhcnRfc2xvdCAmIzQzOyBpKSAmbHQ7Jmx0OyBzaGlmdCkgfCB0eXBlOwomIzQzOwkJc3RydWN0IG1hcGxlX2Vub2RlICpjaGlsZCA9IChzdHJ1Y3QgbWFwbGVfZW5vZGUgKilzbG90c1tpXTsKJiM0MzsKJiM0MzsJCW10ZV90b19ub2RlKGNoaWxkKS0mZ3Q7cGFyZW50ID0gbWFfcGFyZW50X3B0cihwdmFsKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIC8qCiAgKiBtdGVfcGFyZW50X3Nsb3QoKSAtIGdldCB0aGUgcGFyZW50IHNsb3Qgb2YgQGVub2RlLgogICogQGVub2RlOiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlLgpAQCAtMTE1Myw2ICYjNDM7MTE4OSw3MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX2ZyZWUoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqdXNlZCkKIAltYV9mcmVlX3JjdShtdGVfdG9fbm9kZSh1c2VkKSk7CiB9CiAKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0xPQ0tERVAKJiM0MztzdHJ1Y3QgbG9ja2RlcF9tYXAgKm1hc19sb2NrZGVwX21hcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYXBsZV90cmVlICptdCA9IG1hcy0mZ3Q7dHJlZTsKJiM0MzsKJiM0MzsJaWYgKG10X2V4dGVybmFsX2xvY2sobXQpKQomIzQzOwkJcmV0dXJuIG10LSZndDttYV9leHRlcm5hbF9sb2NrOwomIzQzOwomIzQzOwlyZXR1cm4gJmFtcDsobXQtJmd0O21hX2xvY2spLmRlcF9tYXA7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1hc19sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQomIzQzO3sKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0xPQ0tERVAKJiM0MzsJaWYgKCFtYXNfaXNfYWN0aXZlKG1hcykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRAomIzQzOwlpZiAoIW10X2xvY2tfaXNfaGVsZChtYXMtJmd0O3RyZWUpKSB7CiYjNDM7CQlpZiAobXRfaW5fcmN1KG1hcy0mZ3Q7dHJlZSkpCiYjNDM7CQkJV0FSTl9PTl9PTkNFKHBvbGxfc3RhdGVfc3luY2hyb25pemVfcmN1KG1hcy0mZ3Q7cmN1X2dwKSk7CiYjNDM7CX0KJiM0MzsjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovCiYjNDM7CiYjNDM7CWlmIChtdF9sb2NrX2lzX2hlbGQobWFzLSZndDt0cmVlKSkKJiM0MzsJCVdBUk5fT05fT05DRShtYXMtJmd0O2xkX3NlcSAhPSBsb2NrX3NlcXVlbmNlKG1hc19sb2NrZGVwX21hcChtYXMpKSk7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19MT0NLREVQICovCiYjNDM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG1hc19pbml0X2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUAomIzQzOyNpZmRlZiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QKJiM0MzsJaWYgKCFtdF9sb2NrX2lzX2hlbGQobWFzLSZndDt0cmVlKSkgewomIzQzOwkJaWYgKG10X2luX3JjdShtYXMtJmd0O3RyZWUpKQomIzQzOwkJCW1hcy0mZ3Q7cmN1X2dwID0gZ2V0X3N0YXRlX3N5bmNocm9uaXplX3JjdSgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqLwomIzQzOwomIzQzOwlpZiAobXRfbG9ja19pc19oZWxkKG1hcy0mZ3Q7dHJlZSkpCiYjNDM7CQltYXMtJmd0O2xkX3NlcSA9IGxvY2tfc2VxdWVuY2UobWFzX2xvY2tkZXBfbWFwKG1hcykpOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqLwomIzQzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBtYXNfbWF5X2luaXRfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcykKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19MT0NLREVQCiYjNDM7I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRAomIzQzOwlpZiAobWFzX2lzX3N0YXJ0KG1hcykgfHwgbWFzX2lzX3BhdXNlZChtYXMpKSB7CiYjNDM7CQltYXNfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovCiYjNDM7CW1hc19sb2NrX2NoZWNrKG1hcyk7CiYjNDM7I2VuZGlmIC8qIENPTkZJR19MT0NLREVQICovCiYjNDM7fQomIzQzOwogLyoKICAqIG1hc19zdGFydCgpIC0gU2V0cyB1cCBtYXBsZSBzdGF0ZSBmb3Igb3BlcmF0aW9ucy4KICAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZS4KQEAgLTExNzEsNiAmIzQzOzEyNzEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXBsZV9lbm9kZSAqbWFzX3N0YXJ0KHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQogCWlmIChsaWtlbHkobWFzX2lzX3N0YXJ0KG1hcykpKSB7CiAJCXN0cnVjdCBtYXBsZV9lbm9kZSAqcm9vdDsKIAomIzQzOwkJbWFzX2luaXRfbG9ja19jaGVjayhtYXMpOwogCQltYXMtJmd0O21pbiA9IDA7CiAJCW1hcy0mZ3Q7bWF4ID0gVUxPTkdfTUFYOwogCkBAIC0xNTAxLDE0ICYjNDM7MTYwMiwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3BhcmVudF9nYXAoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGNoYXIgb2Zmc2V0LAogCWdvdG8gYXNjZW5kOwogfQogCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1hc191cGRhdGVfZ2FwX2tub3duKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLAomIzQzOwkJdW5zaWduZWQgbG9uZyBnYXApCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBjaGFyIHBzbG90OwomIzQzOwl1bnNpZ25lZCBsb25nIHBfZ2FwOwomIzQzOwomIzQzOwlwc2xvdCA9IG10ZV9wYXJlbnRfc2xvdChtYXMtJmd0O25vZGUpOwomIzQzOwlwX2dhcCA9IG1hX2dhcHMobXRlX3BhcmVudChtYXMtJmd0O25vZGUpLAomIzQzOwkJCW1hc19wYXJlbnRfdHlwZShtYXMsIG1hcy0mZ3Q7bm9kZSkpW3BzbG90XTsKJiM0MzsKJiM0MzsJaWYgKHBfZ2FwICE9IGdhcCkKJiM0MzsJCW1hc19wYXJlbnRfZ2FwKG1hcywgcHNsb3QsIGdhcCk7CiYjNDM7fQomIzQzOwogLyoKICAqIG1hc191cGRhdGVfZ2FwKCkgLSBVcGRhdGUgYSBub2RlcyBnYXBzIGFuZCBwcm9wYWdhdGUgdXAgaWYgbmVjZXNzYXJ5LgogICogQG1hczogdGhlIG1hcGxlIHN0YXRlLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3VwZGF0ZV9nYXAoc3RydWN0IG1hX3N0YXRlICptYXMpCiB7Ci0JdW5zaWduZWQgY2hhciBwc2xvdDsKLQl1bnNpZ25lZCBsb25nIHBfZ2FwOwogCXVuc2lnbmVkIGxvbmcgbWF4X2dhcDsKIAogCWlmICghbXRfaXNfYWxsb2MobWFzLSZndDt0cmVlKSkKQEAgLTE1MTgsMTMgJiM0MzsxNjMxLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc191cGRhdGVfZ2FwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQogCQlyZXR1cm47CiAKIAltYXhfZ2FwID0gbWFzX21heF9nYXAobWFzKTsKLQotCXBzbG90ID0gbXRlX3BhcmVudF9zbG90KG1hcy0mZ3Q7bm9kZSk7Ci0JcF9nYXAgPSBtYV9nYXBzKG10ZV9wYXJlbnQobWFzLSZndDtub2RlKSwKLQkJCW1hc19wYXJlbnRfdHlwZShtYXMsIG1hcy0mZ3Q7bm9kZSkpW3BzbG90XTsKLQotCWlmIChwX2dhcCAhPSBtYXhfZ2FwKQotCQltYXNfcGFyZW50X2dhcChtYXMsIHBzbG90LCBtYXhfZ2FwKTsKJiM0MzsJbWFzX3VwZGF0ZV9nYXBfa25vd24obWFzLCBtYXhfZ2FwKTsKIH0KIAogLyoKQEAgLTE1NDAsMTQgJiM0MzsxNjQ3LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfYWRvcHRfY2hpbGRyZW4oc3RydWN0IG1hX3N0YXRlICptYXMsCiAJc3RydWN0IG1hcGxlX25vZGUgKm5vZGUgPSBtdGVfdG9fbm9kZShwYXJlbnQpOwogCXZvaWQgX19yY3UgKipzbG90cyA9IG1hX3Nsb3RzKG5vZGUsIHR5cGUpOwogCXVuc2lnbmVkIGxvbmcgKnBpdm90cyA9IG1hX3Bpdm90cyhub2RlLCB0eXBlKTsKLQlzdHJ1Y3QgbWFwbGVfZW5vZGUgKmNoaWxkOwotCXVuc2lnbmVkIGNoYXIgb2Zmc2V0OwomIzQzOwl1bnNpZ25lZCBjaGFyIGVuZDsKIAotCW9mZnNldCA9IG1hX2RhdGFfZW5kKG5vZGUsIHR5cGUsIHBpdm90cywgbWFzLSZndDttYXgpOwotCWRvIHsKLQkJY2hpbGQgPSBtYXNfc2xvdF9sb2NrZWQobWFzLCBzbG90cywgb2Zmc2V0KTsKLQkJbWFzX3NldF9wYXJlbnQobWFzLCBjaGlsZCwgcGFyZW50LCBvZmZzZXQpOwotCX0gd2hpbGUgKG9mZnNldC0tKTsKJiM0MzsJZW5kID0gbWFfZGF0YV9lbmQobm9kZSwgdHlwZSwgcGl2b3RzLCBtYXMtJmd0O21heCk7CiYjNDM7CW1hc19zZXRfcGFyZW50X3Nsb3RzKG1hcywgcGFyZW50LCBzbG90cywgMCwgZW5kICYjNDM7IDEpOwogfQogCiAvKgpAQCAtMTkyOSwxNSAmIzQzOzIwMzIsMTAgQEAgdW5zaWduZWQgbG9uZyBub2RlX2NvcHkoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9ub2RlICpzcmMsCiAJc19zbG90cyA9IG1hX3Nsb3RzKHNyYywgc19tdCkgJiM0Mzsgc3RhcnQ7CiAJc19waXZvdHMgPSBtYV9waXZvdHMoc3JjLCBzX210KSAmIzQzOyBzdGFydDsKIAltZW1jcHkoZF9zbG90cywgc19zbG90cywgc2l6ZSAqIHNpemVvZih2b2lkIF9fcmN1ICopKTsKLQlpZiAoIW1hX2lzX2xlYWYoZF9tdCkgJmFtcDsmYW1wOyBzX210ID09IG1hcGxlX2NvcHkpIHsKLQkJc3RydWN0IG1hcGxlX2Vub2RlICplZHN0ID0gbXRfbWtfbm9kZShkc3QsIGRfbXQpOwogCi0KLQkJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBzaXplOyBpJiM0MzsmIzQzOykKLQkJCW1hc19zZXRfcGFyZW50KG1hcywKLQkJCQkgICAgICAgbXRfc2xvdF9sb2NrZWQobWFzLSZndDt0cmVlLCBkX3Nsb3RzLCBpKSwKLQkJCQkgICAgICAgZWRzdCwgZF9zdGFydCAmIzQzOyBpKTsKLQl9CiYjNDM7CWlmICghbWFfaXNfbGVhZihkX210KSAmYW1wOyZhbXA7IHNfbXQgPT0gbWFwbGVfY29weSkKJiM0MzsJCW1hc19zZXRfcGFyZW50X3Nsb3RzKG1hcywgbXRfbWtfbm9kZShkc3QsIGRfbXQpLAomIzQzOwkJCQkgICAgIGRfc2xvdHMsIGRfc3RhcnQsIHNpemUpOwogCiAJZF9nYXBzID0gbWFfZ2Fwcyhkc3QsIGRfbXQpOwogCWlmIChkX2dhcHMpIHsKQEAgLTIwODEsOCAmIzQzOzIxNzksOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dtYl9yZXBsYWNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfY29weSAqY3ApCiAJbWFzLSZndDtub2RlID0gbXRfc2xvdF9sb2NrZWQobWFzLSZndDt0cmVlLCBjcC0mZ3Q7c2xvdCwgMCk7CiAJLyogSW5zZXJ0IHRoZSBuZXcgZGF0YSBpbiB0aGUgdHJlZSAqLwogCW1hc190b3BpYXJ5X3JlcGxhY2UobWFzLCBvbGRfZW5vZGUsIGNwLSZndDtoZWlnaHQpOwotCWlmICghbXRlX2lzX2xlYWYobWFzLSZndDtub2RlKSkKLQkJbWFzX3VwZGF0ZV9nYXAobWFzKTsKJiM0MzsJaWYgKG10X2lzX2FsbG9jKG1hcy0mZ3Q7dHJlZSkgJmFtcDsmYW1wOyAhbXRlX2lzX3Jvb3QobWFzLSZndDtub2RlKSkKJiM0MzsJCW1hc191cGRhdGVfZ2FwX2tub3duKG1hcywgY3AtJmd0O2dhcFswXSk7CiAKIAltdHJlZV9yYW5nZV93YWxrKG1hcyk7CiB9CkBAIC0yOTI4LDEzICYjNDM7MzAyNiw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfZXh0ZW5kX3NwYW5uaW5nX251bGwoc3RydWN0IG1hX3dyX3N0YXRlICpsX3dyX21hcywKIAkJaWYgKHJfbWFzLSZndDtsYXN0ICZsdDsgcl93cl9tYXMtJmd0O3JfbWF4KQogCQkJcl9tYXMtJmd0O2xhc3QgPSByX3dyX21hcy0mZ3Q7cl9tYXg7CiAJCXJfbWFzLSZndDtvZmZzZXQmIzQzOyYjNDM7OwotCX0gZWxzZSBpZiAoKHJfbWFzLSZndDtsYXN0ID09IHJfd3JfbWFzLSZndDtyX21heCkgJmFtcDsmYW1wOwotCSAgICAocl9tYXMtJmd0O2xhc3QgJmx0OyByX21hcy0mZ3Q7bWF4KSAmYW1wOyZhbXA7Ci0JICAgICFtYXNfc2xvdF9sb2NrZWQocl9tYXMsIHJfd3JfbWFzLSZndDtzbG90cywgcl9tYXMtJmd0O29mZnNldCAmIzQzOyAxKSkgewotCQlyX21hcy0mZ3Q7bGFzdCA9IG1hc19zYWZlX3Bpdm90KHJfbWFzLCByX3dyX21hcy0mZ3Q7cGl2b3RzLAotCQkJCQkgICAgIHJfd3JfbWFzLSZndDt0eXBlLCByX21hcy0mZ3Q7b2Zmc2V0ICYjNDM7IDEpOwotCQlyX21hcy0mZ3Q7b2Zmc2V0JiM0MzsmIzQzOzsKLQkJcl93cl9tYXMtJmd0O3JfbWF4ID0gcl9tYXMtJmd0O2xhc3Q7CiAJfQogfQogCkBAIC0zMTI1LDcgJiM0MzszMjE2LDcgQEAgc3RhdGljIHZvaWQgbWFzX3dyX3NwYW5uaW5nX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKQogc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKQogewogCXVuc2lnbmVkIGNoYXIgZHN0X29mZnNldCwgb2Zmc2V0X2VuZDsKLQl1bnNpZ25lZCBjaGFyIGNvcHlfc2l6ZSwgbm9kZV9waXZvdHM7CiYjNDM7CXVuc2lnbmVkIGNoYXIgY29weV9zaXplLCBub2RlX3Bpdm90cywgbm9kZV9zbG90czsKIAlzdHJ1Y3QgbWFwbGVfbm9kZSByZXVzZSwgKm5ld25vZGU7CiAJdW5zaWduZWQgbG9uZyAqZHN0X3Bpdm90czsKIAl2b2lkIF9fcmN1ICoqZHN0X3Nsb3RzOwpAQCAtMzEzOCw2ICYjNDM7MzIyOSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcykKIAlpbl9yY3UgPSBtdF9pbl9yY3UobWFzLSZndDt0cmVlKTsKIAlvZmZzZXRfZW5kID0gd3JfbWFzLSZndDtvZmZzZXRfZW5kOwogCW5vZGVfcGl2b3RzID0gbXRfcGl2b3RzW3dyX21hcy0mZ3Q7dHlwZV07CiYjNDM7CW5vZGVfc2xvdHMgPSBtdF9zbG90c1t3cl9tYXMtJmd0O3R5cGVdOwogCS8qIEFzc3VtZSBsYXN0IGFkZHMgYW4gZW50cnkgKi8KIAluZXdfZW5kID0gbWFzLSZndDtlbmQgJiM0MzsgMSAtIG9mZnNldF9lbmQgJiM0MzsgbWFzLSZndDtvZmZzZXQ7CiAJaWYgKG1hcy0mZ3Q7bGFzdCA9PSB3cl9tYXMtJmd0O2VuZF9waXYpIHsKQEAgLTMxNDksNyAmIzQzOzMyNDEsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpCiAJaWYgKGluX3JjdSkgewogCQluZXdub2RlID0gbWFzX3BvcF9ub2RlKG1hcyk7CiAJfSBlbHNlIHsKLQkJbWVtc2V0KCZhbXA7cmV1c2UsIDAsIHNpemVvZihzdHJ1Y3QgbWFwbGVfbm9kZSkpOwogCQluZXdub2RlID0gJmFtcDtyZXVzZTsKIAl9CiAKQEAgLTMxOTMsNyAmIzQzOzMyODQsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKQogCQlkc3RfcGl2b3RzW25ld19lbmRdID0gbWFzLSZndDttYXg7CiAKIGRvbmU6Ci0JbWFzX2xlYWZfc2V0X21ldGEobmV3bm9kZSwgbWFwbGVfbGVhZl82NCwgbmV3X2VuZCk7CiYjNDM7CWlmICghaW5fcmN1ICZhbXA7JmFtcDsgbmV3X2VuZCAmIzQzOyAyICZsdDsgbm9kZV9zbG90cykgewomIzQzOwkJdW5zaWduZWQgY2hhciBjbGVhcl9mcm9tID0gbmV3X2VuZCAmIzQzOyAxOwomIzQzOwomIzQzOwkJbWVtc2V0KGRzdF9zbG90cyAmIzQzOyBjbGVhcl9mcm9tLCAwLAomIzQzOwkJICAgICAgIHNpemVvZih2b2lkIF9fcmN1ICopICogKG5vZGVfc2xvdHMgLSBjbGVhcl9mcm9tKSk7CiYjNDM7CQlpZiAoY2xlYXJfZnJvbSAmbHQ7IG5vZGVfcGl2b3RzKQomIzQzOwkJCW1lbXNldChkc3RfcGl2b3RzICYjNDM7IGNsZWFyX2Zyb20sIDAsCiYjNDM7CQkJICAgICAgIHNpemVvZih1bnNpZ25lZCBsb25nKSAqIChub2RlX3Bpdm90cyAtIGNsZWFyX2Zyb20pKTsKJiM0MzsJfQomIzQzOwomIzQzOwltYXNfbGVhZl9zZXRfbWV0YShuZXdub2RlLCB3cl9tYXMtJmd0O3R5cGUsIG5ld19lbmQpOwogCWlmIChpbl9yY3UpIHsKIAkJc3RydWN0IG1hcGxlX2Vub2RlICpvbGRfZW5vZGUgPSBtYXMtJmd0O25vZGU7CiAKQEAgLTMyMTgsNyAmIzQzOzMzMTksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX3Nsb3Rfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpCiAJdm9pZCBfX3JjdSAqKnNsb3RzID0gd3JfbWFzLSZndDtzbG90czsKIAlib29sIGdhcCA9IGZhbHNlOwogCi0JZ2FwIHw9ICFtdF9zbG90X2xvY2tlZChtYXMtJmd0O3RyZWUsIHNsb3RzLCBvZmZzZXQpOwomIzQzOwlnYXAgfD0gIXdyX21hcy0mZ3Q7Y29udGVudDsKIAlnYXAgfD0gIW10X3Nsb3RfbG9ja2VkKG1hcy0mZ3Q7dHJlZSwgc2xvdHMsIG9mZnNldCAmIzQzOyAxKTsKIAogCWlmICh3cl9tYXMtJmd0O29mZnNldF9lbmQgLSBvZmZzZXQgPT0gMSkgewpAQCAtMzY2MSw2ICYjNDM7Mzc2Miw5IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBzdG9yZV90eXBlIG1hc193cl9zdG9yZV90eXBlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKQogewogCXN0cnVjdCBtYV9zdGF0ZSAqbWFzID0gd3JfbWFzLSZndDttYXM7CiAJdW5zaWduZWQgY2hhciBuZXdfZW5kOwomIzQzOwlib29sIGFwcGVuZGluZzsKJiM0MzsJYm9vbCBvbmVfc2xvdDsKJiM0MzsJYm9vbCBpbl9yY3U7CiAKIAlpZiAodW5saWtlbHkobWFzX2lzX25vbmUobWFzKSB8fCBtYXNfaXNfcHRyKG1hcykpKQogCQlyZXR1cm4gd3Jfc3RvcmVfcm9vdDsKQEAgLTM2ODAsMjEgJiM0MzszNzg0LDMwIEBAIHN0YXRpYyBpbmxpbmUgZW51bSBzdG9yZV90eXBlIG1hc193cl9zdG9yZV90eXBlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKQogCQlyZXR1cm4gd3JfbmV3X3Jvb3Q7CiAKIAluZXdfZW5kID0gbWFzX3dyX25ld19lbmQod3JfbWFzKTsKJiM0MzsJaW5fcmN1ID0gbXRfaW5fcmN1KG1hcy0mZ3Q7dHJlZSk7CiYjNDM7CWFwcGVuZGluZyA9IG1hcy0mZ3Q7b2Zmc2V0ID09IG1hcy0mZ3Q7ZW5kOwomIzQzOwlvbmVfc2xvdCA9IHdyX21hcy0mZ3Q7b2Zmc2V0X2VuZCAtIG1hcy0mZ3Q7b2Zmc2V0ID09IDE7CiYjNDM7CiAJLyogUG90ZW50aWFsIHNwYW5uaW5nIHJlYmFsYW5jZSBjb2xsYXBzaW5nIGEgbm9kZSAqLwogCWlmIChuZXdfZW5kICZsdDsgbXRfbWluX3Nsb3RzW3dyX21hcy0mZ3Q7dHlwZV0pIHsKIAkJaWYgKCFtdGVfaXNfcm9vdChtYXMtJmd0O25vZGUpKQogCQkJcmV0dXJuICB3cl9yZWJhbGFuY2U7CiYjNDM7CQlpZiAoIWluX3JjdSkgewomIzQzOwkJCWlmIChhcHBlbmRpbmcpCiYjNDM7CQkJCXJldHVybiB3cl9hcHBlbmQ7CiYjNDM7CQkJZWxzZSBpZiAobWFzLSZndDtlbmQgPT0gbmV3X2VuZCAmYW1wOyZhbXA7IG9uZV9zbG90KQomIzQzOwkJCQlyZXR1cm4gd3Jfc2xvdF9zdG9yZTsKJiM0MzsJCX0KIAkJcmV0dXJuIHdyX25vZGVfc3RvcmU7CiAJfQogCiAJaWYgKG5ld19lbmQgJmd0Oz0gbXRfc2xvdHNbd3JfbWFzLSZndDt0eXBlXSkKIAkJcmV0dXJuIHdyX3NwbGl0X3N0b3JlOwogCi0JaWYgKCFtdF9pbl9yY3UobWFzLSZndDt0cmVlKSAmYW1wOyZhbXA7IChtYXMtJmd0O29mZnNldCA9PSBtYXMtJmd0O2VuZCkpCiYjNDM7CWlmICghaW5fcmN1ICZhbXA7JmFtcDsgYXBwZW5kaW5nKQogCQlyZXR1cm4gd3JfYXBwZW5kOwogCi0JaWYgKChuZXdfZW5kID09IG1hcy0mZ3Q7ZW5kKSAmYW1wOyZhbXA7ICghbXRfaW5fcmN1KG1hcy0mZ3Q7dHJlZSkgfHwKLQkJKHdyX21hcy0mZ3Q7b2Zmc2V0X2VuZCAtIG1hcy0mZ3Q7b2Zmc2V0ID09IDEpKSkKJiM0MzsJaWYgKG5ld19lbmQgPT0gbWFzLSZndDtlbmQgJmFtcDsmYW1wOyAoIWluX3JjdSB8fCBvbmVfc2xvdCkpCiAJCXJldHVybiB3cl9zbG90X3N0b3JlOwogCiAJcmV0dXJuIHdyX25vZGVfc3RvcmU7CkBAIC0zNzkzLDI3ICYjNDM7MzkwNiwyOSBAQCBpbnQgbWFzX2FsbG9jX2N5Y2xpYyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyAqc3RhcnRwLAogCQl2b2lkICplbnRyeSwgdW5zaWduZWQgbG9uZyByYW5nZV9sbywgdW5zaWduZWQgbG9uZyByYW5nZV9oaSwKIAkJdW5zaWduZWQgbG9uZyAqbmV4dCwgZ2ZwX3QgZ2ZwKQogewotCXVuc2lnbmVkIGxvbmcgbWluID0gcmFuZ2VfbG87Ci0JaW50IHJldCA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWluOwogCi0JcmFuZ2VfbG8gPSBtYXgobWluLCAqbmV4dCk7Ci0JcmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCByYW5nZV9sbywgcmFuZ2VfaGksIDEpOwotCWlmICgobWFzLSZndDt0cmVlLSZndDttYV9mbGFncyAmYW1wOyBNVF9GTEFHU19BTExPQ19XUkFQUEVEKSAmYW1wOyZhbXA7IHJldCA9PSAwKSB7Ci0JCW1hcy0mZ3Q7dHJlZS0mZ3Q7bWFfZmxhZ3MgJmFtcDs9IH5NVF9GTEFHU19BTExPQ19XUkFQUEVEOwotCQlyZXQgPSAxOwotCX0KLQlpZiAocmV0ICZsdDsgMCAmYW1wOyZhbXA7IHJhbmdlX2xvICZndDsgbWluKSB7Ci0JCW1hc19yZXNldChtYXMpOwotCQlyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIG1pbiwgcmFuZ2VfaGksIDEpOwotCQlpZiAocmV0ID09IDApCiYjNDM7CW1pbiA9IHJhbmdlX2xvOwomIzQzOwlkbyB7CiYjNDM7CQlyYW5nZV9sbyA9IG1heChtaW4sICpuZXh0KTsKJiM0MzsJCXJldCA9IG1hc19lbXB0eV9hcmVhKG1hcywgcmFuZ2VfbG8sIHJhbmdlX2hpLCAxKTsKJiM0MzsJCWlmICgobWFzLSZndDt0cmVlLSZndDttYV9mbGFncyAmYW1wOyBNVF9GTEFHU19BTExPQ19XUkFQUEVEKSAmYW1wOyZhbXA7IHJldCA9PSAwKSB7CiYjNDM7CQkJbWFzLSZndDt0cmVlLSZndDttYV9mbGFncyAmYW1wOz0gfk1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQ7CiAJCQlyZXQgPSAxOwotCX0KLQlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KJiM0MzsJCWlmIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgcmFuZ2VfbG8gJmd0OyBtaW4pIHsKJiM0MzsJCQltYXNfcmVzZXQobWFzKTsKJiM0MzsJCQlyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIG1pbiwgcmFuZ2VfaGksIDEpOwomIzQzOwkJCWlmIChyZXQgPT0gMCkKJiM0MzsJCQkJcmV0ID0gMTsKJiM0MzsJCX0KJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiAKLQlkbyB7CiAJCW1hc19pbnNlcnQobWFzLCBlbnRyeSk7CiAJfSB3aGlsZSAobWFzX25vbWVtKG1hcywgZ2ZwKSk7CiYjNDM7CiAJaWYgKG1hc19pc19lcnIobWFzKSkKIAkJcmV0dXJuIHhhX2VycihtYXMtJmd0O25vZGUpOwogCkBAIC00MzYwLDYgJiM0Mzs0NDc1LDcgQEAgdm9pZCAqbWFzX3dhbGsoc3RydWN0IG1hX3N0YXRlICptYXMpCiB7CiAJdm9pZCAqZW50cnk7CiAKJiM0MzsJbWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTsKIAlpZiAoIW1hc19pc19hY3RpdmUobWFzKSAmYW1wOyZhbXA7ICFtYXNfaXNfc3RhcnQobWFzKSkKIAkJbWFzLSZndDtzdGF0dXMgPSBtYV9zdGFydDsKIHJldHJ5OgpAQCAtNDgzMSw2ICYjNDM7NDk0Nyw3IEBAIHZvaWQgKm1hc19zdG9yZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnkpCiB7CiAJTUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIGVudHJ5KTsKIAomIzQzOwltYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpOwogCXRyYWNlX21hX3dyaXRlKFRQX0ZDVCwgbWFzLCAwLCBlbnRyeSk7CiAjaWZkZWYgQ09ORklHX0RFQlVHX01BUExFX1RSRUUKIAlpZiAoTUFTX1dBUk5fT04obWFzLCBtYXMtJmd0O2luZGV4ICZndDsgbWFzLSZndDtsYXN0KSkKQEAgLTQ4ODksNiAmIzQzOzUwMDYsNyBAQCBpbnQgbWFzX3N0b3JlX2dmcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnksIGdmcF90IGdmcCkKIAlNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpOwogCWludCByZXQgPSAwOwogCiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiByZXRyeToKIAltYXNfd3JfcHJlYWxsb2NhdGUoJmFtcDt3cl9tYXMsIGVudHJ5KTsKIAlpZiAodW5saWtlbHkobWFzX25vbWVtKG1hcywgZ2ZwKSkpIHsKQEAgLTQ5MTksNiAmIzQzOzUwMzcsNyBAQCB2b2lkIG1hc19zdG9yZV9wcmVhbGxvYyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnkpCiB7CiAJTUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIGVudHJ5KTsKIAomIzQzOwltYXNfbG9ja19jaGVjayhtYXMpOwogCWlmIChtYXMtJmd0O3N0b3JlX3R5cGUgPT0gd3Jfc3RvcmVfcm9vdCkgewogCQltYXNfd3JfcHJlYWxsb2Nfc2V0dXAoJmFtcDt3cl9tYXMpOwogCQlnb3RvIHN0b3JlOwpAQCAtNDk1MSw2ICYjNDM7NTA3MCw3IEBAIGludCBtYXNfcHJlYWxsb2NhdGUoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5LCBnZnBfdCBnZnApCiB7CiAJTUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIGVudHJ5KTsKIAomIzQzOwltYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpOwogCW1hc193cl9wcmVhbGxvY19zZXR1cCgmYW1wO3dyX21hcyk7CiAJbWFzLSZndDtzdG9yZV90eXBlID0gbWFzX3dyX3N0b3JlX3R5cGUoJmFtcDt3cl9tYXMpOwogCW1hc19wcmVhbGxvY19jYWxjKCZhbXA7d3JfbWFzLCBlbnRyeSk7CkBAIC01MDc0LDYgJiM0Mzs1MTk0LDcgQEAgdm9pZCAqbWFzX25leHQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KQogewogCXZvaWQgKmVudHJ5ID0gTlVMTDsKIAomIzQzOwltYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpOwogCWlmIChtYXNfbmV4dF9zZXR1cChtYXMsIG1heCwgJmFtcDtlbnRyeSkpCiAJCXJldHVybiBlbnRyeTsKIApAQCAtNTA5Nyw2ICYjNDM7NTIxOCw3IEBAIHZvaWQgKm1hc19uZXh0X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heCkKIHsKIAl2b2lkICplbnRyeSA9IE5VTEw7CiAKJiM0MzsJbWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTsKIAlpZiAobWFzX25leHRfc2V0dXAobWFzLCBtYXgsICZhbXA7ZW50cnkpKQogCQlyZXR1cm4gZW50cnk7CiAKQEAgLTUyMDUsNiAmIzQzOzUzMjcsNyBAQCB2b2lkICptYXNfcHJldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pCiB7CiAJdm9pZCAqZW50cnkgPSBOVUxMOwogCiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiAJaWYgKG1hc19wcmV2X3NldHVwKG1hcywgbWluLCAmYW1wO2VudHJ5KSkKIAkJcmV0dXJuIGVudHJ5OwogCkBAIC01MjI4LDYgJiM0Mzs1MzUxLDcgQEAgdm9pZCAqbWFzX3ByZXZfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKQogewogCXZvaWQgKmVudHJ5ID0gTlVMTDsKIAomIzQzOwltYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpOwogCWlmIChtYXNfcHJldl9zZXR1cChtYXMsIG1pbiwgJmFtcDtlbnRyeSkpCiAJCXJldHVybiBlbnRyeTsKIApAQCAtNTI3NCw2ICYjNDM7NTM5OCw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG10X3ByZXYpOwogICovCiB2b2lkIG1hc19wYXVzZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcykKIHsKJiM0MzsJbWFzX2xvY2tfY2hlY2sobWFzKTsKIAltYXMtJmd0O3N0YXR1cyA9IG1hX3BhdXNlOwogCW1hcy0mZ3Q7bm9kZSA9IE5VTEw7CiB9CkBAIC01MzgyLDYgJiM0Mzs1NTA3LDcgQEAgdm9pZCAqbWFzX2ZpbmQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KQogewogCXZvaWQgKmVudHJ5ID0gTlVMTDsKIAomIzQzOwltYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpOwogCWlmIChtYXNfZmluZF9zZXR1cChtYXMsIG1heCwgJmFtcDtlbnRyeSkpCiAJCXJldHVybiBlbnRyeTsKIApAQCAtNTQwOSw2ICYjNDM7NTUzNSw3IEBAIHZvaWQgKm1hc19maW5kX3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heCkKIHsKIAl2b2lkICplbnRyeSA9IE5VTEw7CiAKJiM0MzsJbWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTsKIAlpZiAobWFzX2ZpbmRfc2V0dXAobWFzLCBtYXgsICZhbXA7ZW50cnkpKQogCQlyZXR1cm4gZW50cnk7CiAKQEAgLTU0MjgsNyAmIzQzOzU1NTUsNiBAQCBFWFBPUlRfU1lNQk9MX0dQTChtYXNfZmluZF9yYW5nZSk7CiBzdGF0aWMgYm9vbCBtYXNfZmluZF9yZXZfc2V0dXAoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluLAogCQl2b2lkICoqZW50cnkpCiB7Ci0KIAlzd2l0Y2ggKG1hcy0mZ3Q7c3RhdHVzKSB7CiAJY2FzZSBtYV9hY3RpdmU6CiAJCWdvdG8gYWN0aXZlOwpAQCAtNTUyMSw2ICYjNDM7NTY0Nyw3IEBAIHZvaWQgKm1hc19maW5kX3JldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pCiB7CiAJdm9pZCAqZW50cnkgPSBOVUxMOwogCiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiAJaWYgKG1hc19maW5kX3Jldl9zZXR1cChtYXMsIG1pbiwgJmFtcDtlbnRyeSkpCiAJCXJldHVybiBlbnRyeTsKIApAQCAtNTU0Nyw2ICYjNDM7NTY3NCw3IEBAIHZvaWQgKm1hc19maW5kX3JhbmdlX3JldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pCiB7CiAJdm9pZCAqZW50cnkgPSBOVUxMOwogCiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiAJaWYgKG1hc19maW5kX3Jldl9zZXR1cChtYXMsIG1pbiwgJmFtcDtlbnRyeSkpCiAJCXJldHVybiBlbnRyeTsKIApAQCAtNTU2NCw2ICYjNDM7NTY5MiwxMCBAQCBFWFBPUlRfU1lNQk9MX0dQTChtYXNfZmluZF9yYW5nZV9yZXYpOwogICogU2VhcmNoZXMgZm9yIEBtYXMtJmd0O2luZGV4LCBzZXRzIEBtYXMtJmd0O2luZGV4IGFuZCBAbWFzLSZndDtsYXN0IHRvIHRoZSByYW5nZSBhbmQKICAqIGVyYXNlcyB0aGF0IHJhbmdlLgogICoKJiM0MzsgKiBOb3RlIHRoYXQgZXJhc2UgcmVxdWlyZXMgYWxsb2NhdGlvbnMgYW5kIHdpbGwgdXNlIEdGUF9LRVJORUwgdG8gZG8gc28gaWYKJiM0MzsgKiBuZWNlc3NhcnkuICBJZiB0aGUgYWxsb2NhdGlvbiBmYWlscywgdGhlIGludGVybmFsIGxvY2sgd2lsbCBiZSBkcm9wcGVkIHRvCiYjNDM7ICogcmV0cnkuCiYjNDM7ICoKICAqIFJldHVybjogdGhlIGVudHJ5IHRoYXQgd2FzIGVyYXNlZCBvciAlTlVMTCwgQG1hcy0mZ3Q7aW5kZXggYW5kIEBtYXMtJmd0O2xhc3QgYXJlIHVwZGF0ZWQuCiAgKi8KIHZvaWQgKm1hc19lcmFzZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcykKQEAgLTU1NzIsNiAmIzQzOzU3MDQsMTQgQEAgdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQogCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBtYXMtJmd0O2luZGV4OwogCU1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBOVUxMKTsKIAomIzQzOwkvKgomIzQzOwkgKiBJbiBsb3cgbWVtb3J5IHNpdHVhdGlvbnMsIHRoZSBhbGxvY2F0aW9uIGlzIHJldHJpZWQgd2l0aCB0aGUgZ2ZwIGZsYWcKJiM0MzsJICogR0ZQX0tFUk5FTC4gIFRoZSBpbnRlcm5hbCBzcGlubG9jayBpcyBkcm9wcGVkIGluIG1hc19ub21lbSgpLCBob3dldmVyCiYjNDM7CSAqIHRoZSBleHRlcm5hbCBsb2NrIGlzIG5vdCBkcm9wcGVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKG10X2V4dGVybmFsX2xvY2sobWFzLSZndDt0cmVlKSkKJiM0MzsJCW1pZ2h0X2FsbG9jKEdGUF9LRVJORUwpOwomIzQzOwogCWlmICghbWFzX2lzX2FjdGl2ZShtYXMpIHx8ICFtYXNfaXNfc3RhcnQobWFzKSkKIAkJbWFzLSZndDtzdGF0dXMgPSBtYV9zdGFydDsKIApAQCAtNTYwMSwxMCAmIzQzOzU3NDEsMTEgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWFzX2VyYXNlKTsKIAogLyoqCiAgKiBtYXNfbm9tZW0oKSAtIENoZWNrIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBhbGxvY2F0aW5nIGFuZCBkbyB0aGUgYWxsb2NhdGlvbgotICogaWYgbmVjZXNzYXJ5IElmIHRoZXJlIGFyZSBhbGxvY2F0aW9ucywgdGhlbiBmcmVlIHRoZW0uCiYjNDM7ICogaWYgbmVjZXNzYXJ5LgomIzQzOyAqCiAgKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGUKICAqIEBnZnA6IFRoZSBHRlBfRkxBR1MgdG8gdXNlIGZvciBhbGxvY2F0aW9ucwotICogUmV0dXJuOiB0cnVlIG9uIGFsbG9jYXRpb24sIGZhbHNlIG90aGVyd2lzZS4KJiM0MzsgKiBSZXR1cm46IEZhbHNlIG9uIG5vIG1lbW9yeS4gIFRydWUgb3RoZXJ3aXNlIChwYXJ0aWFsIHN1Y2Nlc3MgYXMgd2VsbCkKICAqLwogYm9vbCBtYXNfbm9tZW0oc3RydWN0IG1hX3N0YXRlICptYXMsIGdmcF90IGdmcCkKIAlfX211c3RfaG9sZChtYXMtJmd0O3RyZWUtJmd0O21hX2xvY2spCkBAIC01NjEyLDYgJiM0Mzs1NzUzLDEwIEBAIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApCiAJaWYgKGxpa2VseShtYXMtJmd0O25vZGUgIT0gTUFfRVJST1IoLUVOT01FTSkpKQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJLyogQWxsb2NhdGlvbnMgY2FuIGZhaWwsIGRvbiYjMzk7dCBkbyB0aGlzLiAqLwomIzQzOwlXQVJOX09OX09OQ0UoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkgJmFtcDsmYW1wOwomIzQzOwkJICAgICBtdF9leHRlcm5hbF9sb2NrKG1hcy0mZ3Q7dHJlZSkpOwomIzQzOwogCWlmIChnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApICZhbXA7JmFtcDsgIW10X2V4dGVybmFsX2xvY2sobWFzLSZndDt0cmVlKSkgewogCQltdHJlZV91bmxvY2sobWFzLSZndDt0cmVlKTsKIAkJbWFzX2FsbG9jX25vZGVzKG1hcywgZ2ZwKTsKQEAgLTU2MjAsMTAgJiM0Mzs1NzY1LDE3IEBAIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApCiAJCW1hc19hbGxvY19ub2RlcyhtYXMsIGdmcCk7CiAJfQogCi0JaWYgKCFtYXMtJmd0O3NoZWFmICZhbXA7JmFtcDsgIW1hcy0mZ3Q7YWxsb2MpCiYjNDM7CS8qCiYjNDM7CSAqIFJldHVybiBmYWxzZSBvbiB6ZXJvIGZvcndhcmQgcHJvZ3Jlc3MuICBQYXJ0aWFsIGFsbG9jYXRpb25zIGFyZSBrZXB0CiYjNDM7CSAqIHNvIHRoZSByZXRyeSBwYXRoIHdpbGwgYXR0ZW1wdCB0byBnZXQgdGhlIHJlc3QuICBUaGUgZmFpbHVyZSBzaG91bGQKJiM0MzsJICogbm90IGhhcHBlbiBhcyB3ZSB0cnkgb3VyIGJlc3QgdG8gcmVjbGFpbS4gIFRoZSB1c2VyIHdvdWxkIG5lZWQgYW4KJiM0MzsJICogZXh0ZXJuYWwgbG9jayB3aXRoIGEgbm9uLWJsb2NraW5nIGdmcCBpbiBhIGxvdyBtZW1vcnkgc2l0dWF0aW9uIC0KJiM0MzsJICogd2hpY2ggd291bGQgaGF2ZSB0cmlnZ2VyZWQgdGhlIGZpcnN0IHdhcm5pbmcgaW4gdGhpcyBmdW5jdGlvbi4KJiM0MzsJICovCiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIW1hcy0mZ3Q7c2hlYWYgJmFtcDsmYW1wOyAhbWFzLSZndDthbGxvYykpCiAJCXJldHVybiBmYWxzZTsKIAotCW1hcy0mZ3Q7c3RhdHVzID0gbWFfc3RhcnQ7CiYjNDM7CW1hc19yZXNldChtYXMpOwogCXJldHVybiB0cnVlOwogfQogCkBAIC01OTEzLDYgJiM0Mzs2MDY1LDEwIEBAIEVYUE9SVF9TWU1CT0wobXRyZWVfYWxsb2NfcnJhbmdlKTsKICAqIEVyYXNpbmcgaXMgdGhlIHNhbWUgYXMgYSB3YWxrIHRvIGFuIGVudHJ5IHRoZW4gYSBzdG9yZSBvZiBhIE5VTEwgdG8gdGhhdAogICogRU5USVJFIHJhbmdlLiAgSW4gZmFjdCwgaXQgaXMgaW1wbGVtZW50ZWQgYXMgc3VjaCB1c2luZyB0aGUgYWR2YW5jZWQgQVBJLgogICoKJiM0MzsgKiBOb3RlIHRoYXQgZXJhc2UgcmVxdWlyZXMgYWxsb2NhdGlvbnMgYW5kIHdpbGwgdXNlIEdGUF9LRVJORUwgdG8gZG8gc28gaWYKJiM0MzsgKiBuZWNlc3NhcnkuICBJZiB0aGUgYWxsb2NhdGlvbiBmYWlscywgdGhlIGludGVybmFsIGxvY2sgd2lsbCBiZSBkcm9wcGVkIHRvCiYjNDM7ICogcmV0cnkuCiYjNDM7ICoKICAqIFJldHVybjogVGhlIGVudHJ5IHN0b3JlZCBhdCB0aGUgQGluZGV4IG9yICVOVUxMCiAgKi8KIHZvaWQgKm10cmVlX2VyYXNlKHN0cnVjdCBtYXBsZV90cmVlICptdCwgdW5zaWduZWQgbG9uZyBpbmRleCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jIGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMKaW5kZXggMDYwNzkxM2EzMDIyZDUuLmQ5NjdlNzZhM2MwNjUwIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYwpAQCAtMzUyMzQsNyAmIzQzOzM1MjM0LDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGNoZWNrX3ByZWFsbG9jKHN0cnVjdCBtYXBsZV90cmVlICptdCkKIAltdF9zZXRfbm9uX2tlcm5lbCgxKTsKIAkvKiBTcGFubmluZyBzdG9yZSAqLwogCW1hc19zZXRfcmFuZ2UoJmFtcDttYXMsIDEsIDEwMCk7Ci0JTVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoJmFtcDttYXMsIHB0ciwgR0ZQX0tFUk5FTCAmYW1wOyBHRlBfTk9XQUlUKSA9PSAwKTsKJiM0MzsJTVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoJmFtcDttYXMsIHB0ciwgR0ZQX05PV0FJVCkgPT0gMCk7CiAJYWxsb2NhdGVkID0gbWFzX2FsbG9jYXRlZCgmYW1wO21hcyk7CiAJaGVpZ2h0ID0gbWFzX210X2hlaWdodCgmYW1wO21hcyk7CiAJTVRfQlVHX09OKG10LCBhbGxvY2F0ZWQgIT0gMCk7CkBAIC0zNTI1Nyw3ICYjNDM7MzUyNTcsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfcHJlYWxsb2Moc3RydWN0IG1hcGxlX3RyZWUgKm10KQogCU1UX0JVR19PTihtdCwgbWFzX2FsbG9jYXRlZCgmYW1wO21hcykgIT0gMCk7CiAJbWFzX3NldF9yYW5nZSgmYW1wO21hcywgMCwgMjAwKTsKIAltdF9zZXRfbm9uX2tlcm5lbCgxKTsKLQlNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZSgmYW1wO21hcywgcHRyLCBHRlBfS0VSTkVMICZhbXA7IEdGUF9OT1dBSVQpID09IDApOwomIzQzOwlNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZSgmYW1wO21hcywgcHRyLCBHRlBfTk9XQUlUKSA9PSAwKTsKIAlhbGxvY2F0ZWQgPSBtYXNfYWxsb2NhdGVkKCZhbXA7bWFzKTsKIAloZWlnaHQgPSBtYXNfbXRfaGVpZ2h0KCZhbXA7bWFzKTsKIAlNVF9CVUdfT04obXQsIGFsbG9jYXRlZCAhPSAwKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDQ6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMTgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA4NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggRXZhbHVhdGlvbiBmb3IgRnV6emluZzogTWFwbGUgVHJlZSBhbmQgTG9ja2RlcCBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCwgYW5kIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgd2FycmFudHMgYSBkZWVwIGRpdmUgZm9yIGZ1enppbmcuIEl0JiMzOTtzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGNyaXRpY2FsIGFyZWFzOiB0aGUgYERvY3VtZW50YXRpb25gLCBgaW5jbHVkZWAgZmlsZXMgZm9yIGNvcmUgbG9ja2luZyBhbmQgdGhlIGBtYXBsZV90cmVlYCwgYW5kIHRoZW4sIG1vc3Qgc2lnbmlmaWNhbnRseSwgdGhlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbiBpdHNlbGYg4oCTIHNwZWNpZmljYWxseSBgbG9ja2RlcC5jYCBhbmQgYGxpYi9tYXBsZV90cmVlLmNgLCBhbG9uZyB3aXRoIGEgdGVzdCBmaWxlLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSByZWZhY3Rvci4gQSBuZXcgYGxvY2tfc2VxdWVuY2UoKWAgZnVuY3Rpb24gaW4gYGxvY2tkZXBgIGlzIGJlaW5nIGludHJvZHVjZWQgYW5kIHRoZW4gbGV2ZXJhZ2VkIHdpdGhpbiB0aGUgbWFwbGUgdHJlZSBjb2RlIHRvIGVuZm9yY2UgbG9jayBvcmRlcmluZy4gVGhpcyBzY3JlYW1zIHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgY29uY3VycmVuY3kgYnVncyBpZiBub3QgaGFuZGxlZCBwZXJmZWN0bHkuIEFic29sdXRlbHksIHRoaXMgaXMgZnV6ei13b3J0aHkhCgpOb3csIGxldCYjMzk7cyB6b29tIGluIG9uIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgbW9kaWZpZWQsIHBhcnRpY3VsYXJseSBpbiBgbGliL21hcGxlX3RyZWUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZS4gSSBzZWUgaXQgdG91Y2hlcyBhICpsb3QqIG9mIGZ1bmN0aW9ucy4gU2VlbXMgdGhlIHBhdGNoIGhhcyBxdWl0ZSBhIGJyb2FkIGltcGFjdCBvbiB0aGUgbG9ja2luZyBzZW1hbnRpY3MgYXJvdW5kIHRoZSBjb3JlIG1hcGxlIHRyZWUgb3BlcmF0aW9ucy4gSSBzZWUgaXQgaW1wYWN0cyBtYW55IGZ1bmN0aW9uczogYG1hc19zZXRfcGFyZW50YCwgYG1hc19zZXRfcGFyZW50X3Nsb3RzYCwgYG1hc19sb2NrZGVwX21hcGAsIGBtYXNfbG9ja19jaGVja2AsIGBtYXNfaW5pdF9sb2NrX2NoZWNrYCwgYG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrYCwgYG1hc19zdGFydGAsIGBtYXNfdXBkYXRlX2dhcF9rbm93bmAsIGBtYXNfdXBkYXRlX2dhcGAsIGBtYXNfYWRvcHRfY2hpbGRyZW5gLCBgbm9kZV9jb3B5YCwgYG1hc193bWJfcmVwbGFjZWAsIGBtYXNfZXh0ZW5kX3NwYW5uaW5nX251bGxgLCBgbWFzX3dyX25vZGVfc3RvcmVgLCBgbWFzX3dyX3Nsb3Rfc3RvcmVgLCBgbWFzX3dyX3N0b3JlX3R5cGVgLCBgbWFzX2FsbG9jX2N5Y2xpY2AsIGBtYXNfd2Fsa2AsIGBtYXNfc3RvcmVgLCBgbWFzX3N0b3JlX2dmcGAsIGBtYXNfc3RvcmVfcHJlYWxsb2NgLCBgbWFzX3ByZWFsbG9jYXRlYCwgYG1hc19uZXh0YCwgYG1hc19uZXh0X3JhbmdlYCwgYG1hc19wcmV2YCwgYG1hc19wcmV2X3JhbmdlYCwgYG1hc19wYXVzZWAsIGBtYXNfZmluZGAsIGBtYXNfZmluZF9yYW5nZWAsIGBtYXNfZmluZF9yZXZfc2V0dXBgLCBgbWFzX2ZpbmRfcmV2YCwgYG1hc19maW5kX3JhbmdlX3JldmAsIGBtYXNfZXJhc2VgLCBgbWFzX25vbWVtYCwgYG10cmVlX2VyYXNlYC4KCkFuZCB0aGVuLCBsb29raW5nIGF0IGBrZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNgLCBJIHNlZSBjb3JlIGxvY2tpbmcgZnVuY3Rpb25zIGFyZSBhZmZlY3RlZCB0b28sIHRoYXQgY2FuIGJlIGEgc2lnbmFsIG9mIGEgY29yZSBpc3N1ZTogYF9fbG9ja19hY3F1aXJlYCwgYHJlYWNxdWlyZV9oZWxkX2xvY2tzYCwgYF9fbG9ja19zZXF1ZW5jZWAsIGBsb2NrX2FjcXVpcmVgLCBgbG9ja19zeW5jYCwgYGxvY2tfc2VxdWVuY2VgLgoKVGhlcmVmb3JlLCBJIG5lZWQgdG8gcHJpb3JpdGl6ZSBteSBmdXp6aW5nIGVmZm9ydHMuIFRoZSBmb2N1cyBzaG91bGQgYmUgb24gdGhvc2UgbWFwbGUgdHJlZSBmdW5jdGlvbnMgYW5kIHRob3NlIGxvY2tkZXAgc2VxdWVuY2UgZnVuY3Rpb25zIHdoaWNoIGFyZSBtb3N0IGxpa2VseSB0byBpbnRyb2R1Y2UgYSBidWcuIExvY2tkZXAgaXRzZWxmIGlzIGEgZGVidWdnaW5nIHRvb2wsIHNvIHRoZSByaXNrIGlzIHNvbWV3aGF0IGxvd2VyIGluICppdCogYnV0IHN0aWxsIHBvc3NpYmxlIHRvIGNyZWF0ZSBidWdzLiBCdXQgdGhlIG1hcGxlIHRyZWUgaXMgYSBjb3JlIGRhdGEgc3RydWN0dXJlLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHBheSBleHRyYSBhdHRlbnRpb24gdG8gdGhhdCEgTGV0IG1lIGxpc3Qgc29tZSBrZXkgbWFwbGUgdHJlZSBmdW5jdGlvbnMgdG8gaGlnaGxpZ2h0IHRoZXNlIGNyaXRpY2FsIGFyZWFzOiBgbWFzX2FsbG9jX2N5Y2xpY2AsIGBtYXNfZXJhc2VgLCBgbXRyZWVfZXJhc2VgLCBgbWFzX25vbWVtYCwgYG1hc193cl9ub2RlX3N0b3JlYCwgYG1hc193cl9zdG9yZV90eXBlYCwgYG1hc191cGRhdGVfZ2FwX2tub3duYCwgYG1hc19zZXRfcGFyZW50X3Nsb3RzYC4KCk5vdywgYmVmb3JlIEkgbGF1bmNoIGludG8gZnV6emluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgY29uZmlndXJhdGlvbiByaWdodC4gSSYjMzk7bGwgbmVlZCBgQ09ORklHX0xPQ0tERVBgIGVuYWJsZWQgZm9yIHRoZXNlIGxvY2sgc2VxdWVuY2UgY2hlY2tzIHRvIGFjdHVhbGx5IGZ1bmN0aW9uLiBgQ09ORklHX0RFQlVHX01BUExFX1RSRUVgICptaWdodCogYmUgaGVscGZ1bCBkdXJpbmcgYW5hbHlzaXMsIGJ1dCBzdGFuZGFyZCBtYXBsZSB0cmVlIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZC4gSXQgaXMgYWx3YXlzIGdvb2QgdG8gY2hlY2sgYGxpYi9LY29uZmlnLmRlYnVnYCB0byBkb3VibGUgY2hlY2sgYW55IGhlbHBmdWwgY29uZmlndXJhdGlvbnMgdGhlcmUuIE5vdywgbGV0JiMzOTtzIGdldCBmdXp6aW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA0OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERUJVR19NQVBMRV9UUkVFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTE4MjU9Y29uZmlnIERFQlVHX0NMT1NVUkVTXG4tLVxubGliL0tjb25maWcuZGVidWctMTgzMy1cbmxpYi9LY29uZmlnLmRlYnVnOjE4MzQ6Y29uZmlnIERFQlVHX01BUExFX1RSRUVcbmxpYi9LY29uZmlnLmRlYnVnLTE4MzUtXHRib29sIFwmIzM0O0RlYnVnIG1hcGxlIHRyZWVzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4OTkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQ2hlY2tpbmcgTG9ja2RlcCBhbmQgTWFwbGUgVHJlZSBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJIHNlZSBgREVCVUdfTUFQTEVfVFJFRWAgbGlzdGVkIGFzIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCBJIGFsc28gbm90ZSBgUFJPVkVfTE9DS0lOR2Agb3IgYExPQ0tERVBgIGluIHRoZSBjb250ZXh0IG9mIGxvY2tkZXAgY2hhbmdlcy4gVGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRob3NlIGxvY2tkZXAgbW9kaWZpY2F0aW9ucyBub3cuCgpGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHByaW1hcnkgc2V0dGluZ3MuIEl0IGxvb2tzIGxpa2UgYGxvY2tfc2VxdWVuY2VgIGlzIGV4cG9ydGVkLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBsb2NraW5nIHdvcmtzLiBBaCwgaGVyZSBpdCBpczogYENPTkZJR19MT0NLREVQYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhhdCYjMzk7cyB0aGUgbWFpbiBzd2l0Y2ggZm9yIGVuYWJsaW5nIHRoZSBsb2NrIGRlcGVuZGVuY3kgY2hlY2tlci4gVGhhdCYjMzk7cyB0aGUgc2V0dGluZyB0aGF0IHRlbGxzIHRoZSBrZXJuZWwgdG8gcGF5IGF0dGVudGlvbiB0byBwb3RlbnRpYWwgbG9jayBwcm9ibGVtcy4KCk5vdywgbGV0IG1lIHNoaWZ0IGdlYXJzIGEgYml0LiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgdXNhZ2Ugb2YgYG1hc19hbGxvY19jeWNsaWNgLiBMZXQgbWUgc2VlIHdoZXJlIHRoYXQgY29tZXMgaW50byBwbGF5LiBJdCYjMzk7cyByZWxhdGVkIHNvbWVob3cgdG8gdGhpcyBsb2NrZGVwIHN0dWZmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hc19hbGxvY19jeWNsaWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmg9NTY4PWludCBtYXNfcHJlYWxsb2NhdGUoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5LCBnZnBfdCBnZnApO1xuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmg6NTY5OmludCBtYXNfYWxsb2NfY3ljbGljKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nICpzdGFydHAsXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaC01NzAtXHRcdHZvaWQgKmVudHJ5LCB1bnNpZ25lZCBsb25nIHJhbmdlX2xvLCB1bnNpZ25lZCBsb25nIHJhbmdlX2hpLFxuLS1cbmxpYi9tYXBsZV90cmVlLmM9Mzg0Mz1zdGF0aWMgaW5saW5lIHZvaWQgKm1hc19pbnNlcnQoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5KVxuLS1cbmxpYi9tYXBsZV90cmVlLmMtMzg5MS0vKipcbmxpYi9tYXBsZV90cmVlLmM6Mzg5MjogKiBtYXNfYWxsb2NfY3ljbGljKCkgLSBJbnRlcm5hbCBjYWxsIHRvIGZpbmQgc29tZXdoZXJlIHRvIHN0b3JlIGFuIGVudHJ5XG5saWIvbWFwbGVfdHJlZS5jLTM4OTMtICogQG1hczogVGhlIG1hcGxlIHN0YXRlLlxuLS1cbmxpYi9tYXBsZV90cmVlLmMtMzkwNC0gKi9cbmxpYi9tYXBsZV90cmVlLmM6MzkwNTppbnQgbWFzX2FsbG9jX2N5Y2xpYyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyAqc3RhcnRwLFxubGliL21hcGxlX3RyZWUuYy0zOTA2LVx0XHR2b2lkICplbnRyeSwgdW5zaWduZWQgbG9uZyByYW5nZV9sbywgdW5zaWduZWQgbG9uZyByYW5nZV9oaSxcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTM5NDItfVxubGliL21hcGxlX3RyZWUuYzozOTQzOkVYUE9SVF9TWU1CT0wobWFzX2FsbG9jX2N5Y2xpYyk7XG5saWIvbWFwbGVfdHJlZS5jLTM5NDQtXG4tLVxubGliL21hcGxlX3RyZWUuYz02MDAxPWludCBtdHJlZV9hbGxvY19jeWNsaWMoc3RydWN0IG1hcGxlX3RyZWUgKm10LCB1bnNpZ25lZCBsb25nICpzdGFydHAsXG4tLVxubGliL21hcGxlX3RyZWUuYy02MDEzLVx0bXRyZWVfbG9jayhtdCk7XG5saWIvbWFwbGVfdHJlZS5jOjYwMTQ6XHRyZXQgPSBtYXNfYWxsb2NfY3ljbGljKFx1MDAyNm1hcywgc3RhcnRwLCBlbnRyeSwgcmFuZ2VfbG8sIHJhbmdlX2hpLFxubGliL21hcGxlX3RyZWUuYy02MDE1LVx0XHRcdCAgICAgICBuZXh0LCBnZnApO1xuLS1cbmxpYi90ZXN0X21hcGxlX3RyZWUuYz0zNjQ2PXN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBhbGxvY19jeWNsaWNfdGVzdGluZyhzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQpXG4tLVxubGliL3Rlc3RfbWFwbGVfdHJlZS5jLTM2NTUtXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgMTAwOyBpJiM0MzsmIzQzOykge1xubGliL3Rlc3RfbWFwbGVfdHJlZS5jOjM2NTY6XHRcdG1hc19hbGxvY19jeWNsaWMoXHUwMDI2bWFzLCBcdTAwMjZsb2NhdGlvbiwgbXQsIDIsIFVMT05HX01BWCwgXHUwMDI2bmV4dCwgR0ZQX0tFUk5FTCk7XG5saWIvdGVzdF9tYXBsZV90cmVlLmMtMzY1Ny1cdFx0TUFTX0JVR19PTihcdTAwMjZtYXMsIGkgIT0gbG9jYXRpb24gLSAyKTtcbi0tXG5saWIvdGVzdF9tYXBsZV90cmVlLmMtMzY3OS1cdCAqIEV4aGF1c3RpbmcgdGhlIGFsbG9jYXRpb24gYXJlYSBhbmQgZm9yY2luZyB0aGUgc2VhcmNoIHRvIHdyYXAgbmVlZHMgYVxubGliL3Rlc3RfbWFwbGVfdHJlZS5jOjM2ODA6XHQgKiBtYXNfcmVzZXQoKSBpbiBtYXNfYWxsb2NfY3ljbGljKCkuXG5saWIvdGVzdF9tYXBsZV90cmVlLmMtMzY4MS1cdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTQ0CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgcHJvbXB0LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipDaGVja2luZyBgbWFzX2VyYXNlYCBVc2FnZSoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhlIHByb21wdCBpcyBpbmNyZWRpYmx5IHNwZWNpZmljIC0gaXQgbWVudGlvbnMgYG1hc19lcmFzZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0ICp3aHkqIHdlJiMzOTtyZSBmb2N1c2luZyBvbiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIElzIHRoZXJlIGEgc3BlY2lmaWMgcHJvYmxlbSB0aGF0IHRoaXMgc3VnZ2VzdHM/IEl0IGNvdWxkIGJlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcywgb3IgcGVyaGFwcyBkYXRhIHNhbml0YXRpb24uIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCBwb3NzaWJsZSBzY2VuYXJpb3MgYmFzZWQgb24gbXkgZXhwZXJpZW5jZS4KCk15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHRoZSByaWdodCBmdW5jdGlvbiB0byB1c2UsIHRvIGNvbmZpcm0gdGhhdCBpdCYjMzk7cyB0aGUgYmVzdCBvcHRpb24gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwNDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYXNfZXJhc2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdD0xNzE9VGhlIHJhbmdlIGlzIHBhc3NlZCBpbiBhcyBtZW1iZXJzIG9mIHRoZSBtYXBsZSBzdGF0ZTogaW5kZXggYW5kIGxhc3QuXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0LTE3Mi1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3Q6MTczOllvdSBjYW4gdXNlIG1hc19lcmFzZSgpIHRvIGVyYXNlIGFuIGVudGlyZSByYW5nZSBieSBzZXR0aW5nIGluZGV4IGFuZFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdC0xNzQtbGFzdCBvZiB0aGUgbWFwbGUgc3RhdGUgdG8gdGhlIGRlc2lyZWQgcmFuZ2UgdG8gZXJhc2UuICBUaGlzIHdpbGwgZXJhc2Vcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0PTE3Nj1hbmQgbGFzdCBhcyB0aGUgcmFuZ2UgdGhhdCB3YXMgZXJhc2VkIGFuZCByZXR1cm4gdGhlIGVudHJ5IHRoYXQgZXhpc3RlZFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdDoxNzc6YXQgdGhhdCBsb2NhdGlvbi4gIE5vdGUgdGhhdCBtYXNfZXJhc2UoKSBtYXkgYWxsb2NhdGUgd2l0aCB0aGUgR0ZQX0tFUk5FTCBmbGFnLlxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdC0xNzgtSWYgdGhpcyBpcyBub3Qgb2theSwgY29uc2lkZXIgdXNpbmcgbWFzX3N0b3JlX2dmcCgpIGFuZCBwYXNzIGl0IGEgYGBOVUxMYGAsXG4tLVxuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS1tYXBsZS5jPTEwNz1zdGF0aWMgaW50IHJlZ2NhY2hlX21hcGxlX2Ryb3Aoc3RydWN0IHJlZ21hcCAqbWFwLCB1bnNpZ25lZCBpbnQgbWluLFxuLS1cbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtbWFwbGUuYy0xNTktXHRcdG1hc19sb2NrKFx1MDAyNm1hcyk7XG5kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ2NhY2hlLW1hcGxlLmM6MTYwOlx0XHRtYXNfZXJhc2UoXHUwMDI2bWFzKTtcbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtbWFwbGUuYy0xNjEtXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jPTUzMTE9c3RhdGljIHZvaWQgdWJsa19idWZfZXJhc2VfcmFuZ2VzKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsIGludCBidWZfaW5kZXgpXG4tLVxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUzMTgtXHRcdGlmIChyYW5nZS1cdTAwM2VidWZfaW5kZXggPT0gYnVmX2luZGV4KSB7XG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTMxOTpcdFx0XHRtYXNfZXJhc2UoXHUwMDI2bWFzKTtcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MzIwLVx0XHRcdGtmcmVlKHJhbmdlKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM9NTQ4MD1zdGF0aWMgYm9vbCBfX3VibGtfc2htZW1fcmVtb3ZlX3JhbmdlcyhzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLFxuLS1cbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01NTA0LVx0XHRcdGdvdG8gdW5sb2NrO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjU1MDU6XHRcdG1hc19lcmFzZShcdTAwMjZtYXMpO1xuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU1MDYtXHRcdGtmcmVlKHJhbmdlKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYz0zMjM9bm91dmVhdV91dm1hX3JlZ2lvbl9yZW1vdmUoc3RydWN0IG5vdXZlYXVfdXZtYV9yZWdpb24gKnJlZylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYy0zMjctXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYzozMjg6XHRtYXNfZXJhc2UoXHUwMDI2bWFzKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdXZtbS5jLTMyOS19XG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmM9MTk2Mj1ub3V2ZWF1X3V2bW1fZmluaShzdHJ1Y3Qgbm91dmVhdV91dm1tICp1dm1tKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdXZtbS5jLTE5OTAtXHRtYXNfZm9yX2VhY2goXHUwMDI2bWFzLCByZWcsIFVMT05HX01BWCkge1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmM6MTk5MTpcdFx0bWFzX2VyYXNlKFx1MDAyNm1hcyk7XG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYy0xOTkyLVx0XHRub3V2ZWF1X3V2bWFfcmVnaW9uX3NwYXJzZV91bnJlZihyZWcpO1xuLS1cbmRyaXZlcnMvaW9tbXUvZ2VuZXJpY19wdC9rdW5pdF9pb21tdV9wdC5oPTI4Nz1zdGF0aWMgdm9pZCB1bm1hcF9jb2xsaXNpb25zKHN0cnVjdCBrdW5pdCAqdGVzdCwgc3RydWN0IG1hcGxlX3RyZWUgKm10LFxuLS1cbmRyaXZlcnMvaW9tbXUvZ2VuZXJpY19wdC9rdW5pdF9pb21tdV9wdC5oLTI5OS1cbmRyaXZlcnMvaW9tbXUvZ2VuZXJpY19wdC9rdW5pdF9pb21tdV9wdC5oOjMwMDpcdFx0bWFzX2VyYXNlKFx1MDAyNm1hcyk7XG5kcml2ZXJzL2lvbW11L2dlbmVyaWNfcHQva3VuaXRfaW9tbXVfcHQuaC0zMDEtXHRcdG1hc19wYXVzZShcdTAwMjZtYXMpO1xuLS1cbmluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oPTU2MD12b2lkICptYXNfc3RvcmUoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5KTtcbmluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oOjU2MTp2b2lkICptYXNfZXJhc2Uoc3RydWN0IG1hX3N0YXRlICptYXMpO1xuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmgtNTYyLWludCBtYXNfc3RvcmVfZ2ZwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSwgZ2ZwX3QgZ2ZwKTtcbi0tXG5rZXJuZWwvaXJxL2lycWRlc2MuYz0xOTg9c3RhdGljIHZvaWQgZGVsZXRlX2lycV9kZXNjKHVuc2lnbmVkIGludCBpcnEpXG4tLVxua2VybmVsL2lycS9pcnFkZXNjLmMtMjAwLVx0TUFfU1RBVEUobWFzLCBcdTAwMjZzcGFyc2VfaXJxcywgaXJxLCBpcnEpO1xua2VybmVsL2lycS9pcnFkZXNjLmM6MjAxOlx0bWFzX2VyYXNlKFx1MDAyNm1hcyk7XG5rZXJuZWwvaXJxL2lycWRlc2MuYy0yMDItfVxuLS1cbmxpYi9tYXBsZV90cmVlLmM9NTY4ND1FWFBPUlRfU1lNQk9MX0dQTChtYXNfZmluZF9yYW5nZV9yZXYpO1xuLS1cbmxpYi9tYXBsZV90cmVlLmMtNTY4Ni0vKipcbmxpYi9tYXBsZV90cmVlLmM6NTY4NzogKiBtYXNfZXJhc2UoKSAtIEZpbmQgdGhlIHJhbmdlIGluIHdoaWNoIGluZGV4IHJlc2lkZXMgYW5kIGVyYXNlIHRoZSBlbnRpcmVcbmxpYi9tYXBsZV90cmVlLmMtNTY4OC0gKiByYW5nZS5cbi0tXG5saWIvbWFwbGVfdHJlZS5jLTU3MDAtICovXG5saWIvbWFwbGVfdHJlZS5jOjU3MDE6dm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxubGliL21hcGxlX3RyZWUuYy01NzAyLXtcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTU3MzktfVxubGliL21hcGxlX3RyZWUuYzo1NzQwOkVYUE9SVF9TWU1CT0xfR1BMKG1hc19lcmFzZSk7XG5saWIvbWFwbGVfdHJlZS5jLTU3NDEtXG4tLVxubGliL21hcGxlX3RyZWUuYz02MDc0PXZvaWQgKm10cmVlX2VyYXNlKHN0cnVjdCBtYXBsZV90cmVlICptdCwgdW5zaWduZWQgbG9uZyBpbmRleClcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTYwODEtXHRtdHJlZV9sb2NrKG10KTtcbmxpYi9tYXBsZV90cmVlLmM6NjA4MjpcdGVudHJ5ID0gbWFzX2VyYXNlKFx1MDAyNm1hcyk7XG5saWIvbWFwbGVfdHJlZS5jLTYwODMtXHRtdHJlZV91bmxvY2sobXQpO1xuLS1cbmxpYi90ZXN0X21hcGxlX3RyZWUuYz0zODc9c3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGNoZWNrX2ZpbmQoc3RydWN0IG1hcGxlX3RyZWUgKm10KVxuLS1cbmxpYi90ZXN0X21hcGxlX3RyZWUuYy01NzgtXHRtYXMubGFzdCA9IFVMT05HX01BWDtcbmxpYi90ZXN0X21hcGxlX3RyZWUuYzo1Nzk6XHRtYXNfZXJhc2UoXHUwMDI2bWFzKTtcbmxpYi90ZXN0X21hcGxlX3RyZWUuYy01ODAtXG4tLVxubW0vYWxsb2NfdGFnLmM9MzczPXN0YXRpYyB2b2lkIGNsZWFuX3VudXNlZF9tb2R1bGVfYXJlYXNfbG9ja2VkKHZvaWQpXG4tLVxubW0vYWxsb2NfdGFnLmMtMzg4LVx0XHRpZiAoY2xlYW5fdW51c2VkX2NvdW50ZXJzKHN0YXJ0X3RhZywgZW5kX3RhZykpXG5tbS9hbGxvY190YWcuYzozODk6XHRcdFx0bWFzX2VyYXNlKFx1MDAyNm1hcyk7XG5tbS9hbGxvY190YWcuYy0zOTAtXHR9XG4tLVxubW0vYWxsb2NfdGFnLmM9NDg0PXN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxuLS1cbm1tL2FsbG9jX3RhZy5jLTUzMy1cdFx0XHRtYXMuaW5kZXggPSBwYWRfc3RhcnQ7XG5tbS9hbGxvY190YWcuYzo1MzQ6XHRcdFx0bWFzX2VyYXNlKFx1MDAyNm1hcyk7XG5tbS9hbGxvY190YWcuYy01MzUtXHRcdFx0cmV0ID0gRVJSX1BUUih4YV9lcnIobWFzLm5vZGUpKTtcbi0tXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYz0zNTkwMj1zdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfZXJhc2VfcmViYWxhbmNlKHN0cnVjdCBtYXBsZV90cmVlICptdClcbi0tXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYy0zNTk0Ny1cdHdoaWxlIChtYXNfZGF0YV9lbmQoXHUwMDI2bWFzKSBcdTAwM2UgNikge1xudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmM6MzU5NDg6XHRcdG1hc19lcmFzZShcdTAwMjZtYXMpO1xudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMtMzU5NDktXHRcdG1hc19uZXh0KFx1MDAyNm1hcywgVUxPTkdfTUFYKTtcbi0tXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYy0zNTk1OS1cdHdoaWxlIChtYXNfZGF0YV9lbmQoXHUwMDI2bWFzKSBcdTAwM2UgOSkge1xudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmM6MzU5NjA6XHRcdG1hc19lcmFzZShcdTAwMjZtYXMpO1xudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMtMzU5NjEtXHRcdG1hc19uZXh0KFx1MDAyNm1hcywgVUxPTkdfTUFYKTtcbi0tXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYy0zNTk2OS1cdFx0bWFzX3NldChcdTAwMjZtYXMsIHZhbCk7XG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYzozNTk3MDpcdFx0bWFzX2VyYXNlKFx1MDAyNm1hcyk7XG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYy0zNTk3MS1cdFx0bWFzX3ByZXYoXHUwMDI2bWFzLCAwKTtcbi0tXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYz0zNjIwMD1zdGF0aWMgdm9pZCBjaGVja19jb2xsYXBzaW5nX3JlYmFsYW5jZShzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQpXG4tLVxudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMtMzYyMTItXHRkbyB7XG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYzozNjIxMzpcdFx0bWFzX2VyYXNlKFx1MDAyNm1hcyk7XG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYy0zNjIxNC1cdH0gd2hpbGUgKG1hc19wcmV2KFx1MDAyNm1hcywgMCkgIT0gTlVMTCk7XG4tLVxudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmM9MzYyNDA9c3RhdGljIHZvaWQgY2hlY2tfbm9tZW1fd3JpdGVyX3JhY2Uoc3RydWN0IG1hcGxlX3RyZWUgKm10KVxuLS1cbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jLTM2MjU1LVx0LyogZXJhc2UgMC01ICovXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYzozNjI1NjpcdG1hc19lcmFzZShcdTAwMjZtYXMpO1xudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMtMzYyNTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDQ6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NjcKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxODExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1hcGxlIFRyZWUgTG9ja2RlcCBhbmQgU3RvcmUgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2gsIGFuZCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGNoYW5nZXMuIFRoZSBpbml0aWFsIGFkZGl0aW9uIG9mIGBtYXNfbG9ja19jaGVja2AsIGBtYXNfaW5pdF9sb2NrX2NoZWNrYCwgYW5kIGBtYXNfbWF5X2luaXRfbG9ja19jaGVja2AsIGFsbCBsZXZlcmFnaW5nIGBsb2NrX3NlcXVlbmNlYCwgYXJlIGNsZWFybHkgYWJvdXQgaW50ZWdyYXRpbmcgbG9ja2RlcCBpbnRvIHRoZSBNYXBsZSBUcmVlLiBUaGlzIGlzIGEgc29saWQgbW92ZSBmb3IgaW1wcm92aW5nIGRlYnVnZ2luZyBhbmQgZW5zdXJpbmcgcHJvcGVyIGxvY2tpbmcgYmVoYXZpb3IsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBsaWtlIHRoaXMuICBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYENPTkZJR19MT0NLREVQYCBhbmQgcG90ZW50aWFsbHkgYENPTkZJR19QUk9WRV9MT0NLSU5HYCAod2hpY2ggZW5hYmxlcyBgTE9DS0RFUGApIGFuZCBgQ09ORklHX0RFQlVHX01BUExFX1RSRUVgICh3aGljaCBkZXBlbmRzIG9uIGBERUJVR19LRVJORUxgKSB3aWxsIGJlIGVzc2VudGlhbCBmb3IgdGVzdGluZyB0aGlzIHByb3Blcmx5LgoKVGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcywgaG93ZXZlciwgc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiBvcHRpbWl6aW5nIHRoZSBgbWFzX3dyX25vZGVfc3RvcmVgIGFuZCBgbWFzX3dyX3N0b3JlX3R5cGVgIGZ1bmN0aW9ucy4gIEluIGBtYXNfd3Jfbm9kZV9zdG9yZWAsIGluc3RlYWQgb2YgYSBmdWxsIGBtZW1zZXRgIG9uIGByZXVzZWAgZm9yIHRoZSBuZXcgbm9kZSwgdGhlcmUmIzM5O3MgYSBtb3JlIHRhcmdldGVkIGNsZWFyaW5nIG9mIHVudXNlZCBzbG90cyBhbmQgcGl2b3RzIGF0IHRoZSBlbmQgb2YgdGhlIG5vZGUuICBUaGlzIGxvb2tzIGxpa2UgYSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBieSByZWR1Y2luZyB1bm5lY2Vzc2FyeSBtZW1vcnkgd3JpdGVzLCB3aGljaCBpcyBhbHdheXMgd2VsY29tZS4gIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgbm9kZV9zbG90c2AgYW5kIGBub2RlX3Bpdm90c2AgdmFyaWFibGVzIGhlcmUsIHRvIGJlIHN1cmUgdGhpcyBpcyBjb3JyZWN0LgoKYG1hc193cl9zdG9yZV90eXBlYCBpcyBhbHNvIG1vZGlmaWVkLCB0byBtb3JlIGludGVsbGlnZW50bHkgY2xhc3NpZnkgc3RvcmUgdHlwZXMuICBUaGVyZSYjMzk7cyBhZGRlZCBsb2dpYyB0byBkZXRlcm1pbmUgaWYgdGhlIHN0b3JlIGlzIGFuIGFwcGVuZCwgYSBzbG90IHN0b3JlLCBvciByZWJhbGFuY2UgYmFzZWQgb24gZmFjdG9ycyBsaWtlIG5ld19lbmQsIGBpbl9yY3VgLCBgYXBwZW5kaW5nYCwgYW5kIGBvbmVfc2xvdGAuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgZm9yIHBlcmZvcm1hbmNlLCBhbmQgdGhlIGNvZGUgbG9va3MgbGlrZSBpdCBtYWtlcyB0aGVzZSBuZXcgY2hlY2tzIHByb3Blcmx5LiBJIHdpbGwgbmVlZCB0byByZWFsbHkgZm9jdXMgb24gdGhpcyBjb2RlIHNlY3Rpb24gZm9yIHRlc3RpbmcuIEkgYWxzbyBzZWUgdGhleSBoYXZlIGFsc28gbW9kaWZpZWQgYG1hc19hbGxvY19jeWNsaWNgLCBhbmQgYW0gbm90IHN1cmUgaWYgaXQgaXMgYSBzaWRlIGVmZmVjdCBvZiB0aGUgb3RoZXIgY2hhbmdlcy4KClRoZSBtb2RpZmljYXRpb25zIHRvIGBtYXNfZXJhc2VgIGFyZSBpbnRlcmVzdGluZywgd2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlIGBtaWdodF9hbGxvY2AgY2FsbCB3aXRoaW4gYW4gZXh0ZXJuYWwgbG9jayBjaGVjay4gVGhpcyBpcyBkZXNpZ25lZCBmb3IgbG93LW1lbW9yeSBzaXR1YXRpb25zLCBhbmQgdGhpcyBsb29rcyBsaWtlIGEgcmVhc29uYWJsZSBhcHByb2FjaC4gSSBuZWVkIHRvIG1ha2UgYSBub3RlIG9mIHRoaXMuCgpGaW5hbGx5LCB0aGUgY2hhbmdlcyB0byBgbWFzX25vbWVtYCBhcmUgYWxzbyBpbXBvcnRhbnQuIFRoZSBgV0FSTl9PTl9PTkNFYCBhbmQgdGhlIGxvZ2ljIGFyb3VuZCBleHRlcm5hbCBsb2NrcyBhbmQgYmxvY2tpbmcgR0ZQIGZsYWdzIGlzIGNydWNpYWwgZm9yIHByZXZlbnRpbmcgZGVhZGxvY2tzIGFuZCBoYW5kbGluZyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBncmFjZWZ1bGx5LiBUaGUgbmV3IGBtYXNfcmVzZXQobWFzKWAgY2FsbCBpcyBhZGRlZCB0byBoYW5kbGUgdGhpcy4KClNvLCBvdmVyYWxsLCB0aGVzZSBwYXRjaGVzIGFyZSBmb2N1c2VkIG9uIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBhbmQgcm9idXN0bmVzcy4gVGhlIG9wdGltaXphdGlvbiBvZiBtZW1vcnkgd3JpdGVzIGluIHRoZSBub2RlIHN0b3JlIGlzIGdvb2QsIGFuZCB0aGUgaW1wcm92ZWQgc3RvcmUgdHlwZSBkZXRlcm1pbmF0aW9uIGxvb2tzIGJlbmVmaWNpYWwuIExvY2tkZXAgaW50ZWdyYXRpb24gaXMgYSBzb2xpZCBhZGRpdGlvbiwgYW5kIHRoZSBsb3ctbWVtb3J5IGhhbmRsaW5nIHNlZW1zIHdlbGwgdGhvdWdodCBvdXQuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGBtYXNfd3Jfbm9kZV9zdG9yZWAsIGBtYXNfd3Jfc3RvcmVfdHlwZWAsIGBtYXNfYWxsb2NfY3ljbGljYCwgYG1hc19lcmFzZWAsIGFuZCBgbWFzX25vbWVtYC4gSSB3aWxsIGFsc28gaGF2ZSB0byBhZGQgYG1hc19zZXRfcGFyZW50X3Nsb3RzYCBhbmQgYG1hc191cGRhdGVfZ2FwX2tub3duYCB0byBteSBmdXp6IGxpc3QgdG8gbWFrZSBzdXJlIEkgY292ZXIgYWxsIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA0OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hc19zZXRfcGFyZW50X3Nsb3RzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9tYXBsZV90cmVlLmM9NDY5PXZvaWQgbWFzX3NldF9wYXJlbnQoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUsXG4tLVxubGliL21hcGxlX3RyZWUuYy00OTktLypcbmxpYi9tYXBsZV90cmVlLmM6NTAwOiAqIG1hc19zZXRfcGFyZW50X3Nsb3RzKCkgLSBCdWxrIG9wZXJhdGlvbiB0byBzZXQgbWFueSBzbG90IHBhcmVudCBwb2ludGVyc1xubGliL21hcGxlX3RyZWUuYy01MDEtICogQG1hczogVGhlIG1hcGxlIHN0YXRlXG4tLVxubGliL21hcGxlX3RyZWUuYz01MDc9c3RhdGljIGlubGluZVxubGliL21hcGxlX3RyZWUuYzo1MDg6dm9pZCBtYXNfc2V0X3BhcmVudF9zbG90cyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICpwYXJlbnQsXG5saWIvbWFwbGVfdHJlZS5jLTUwOS1cdHZvaWQgX19yY3UgKipzbG90cywgdW5zaWduZWQgY2hhciBzdGFydF9zbG90LCB1bnNpZ25lZCBjaGFyIGNvdW50KVxuLS1cbmxpYi9tYXBsZV90cmVlLmM9MTY0Mz1zdGF0aWMgaW5saW5lIHZvaWQgbWFzX2Fkb3B0X2NoaWxkcmVuKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLFxuLS1cbmxpYi9tYXBsZV90cmVlLmMtMTY1Mi1cdGVuZCA9IG1hX2RhdGFfZW5kKG5vZGUsIHR5cGUsIHBpdm90cywgbWFzLVx1MDAzZW1heCk7XG5saWIvbWFwbGVfdHJlZS5jOjE2NTM6XHRtYXNfc2V0X3BhcmVudF9zbG90cyhtYXMsIHBhcmVudCwgc2xvdHMsIDAsIGVuZCAmIzQzOyAxKTtcbmxpYi9tYXBsZV90cmVlLmMtMTY1NC19XG4tLVxubGliL21hcGxlX3RyZWUuYz0yMDIwPXVuc2lnbmVkIGxvbmcgbm9kZV9jb3B5KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfbm9kZSAqc3JjLFxuLS1cbmxpYi9tYXBsZV90cmVlLmMtMjAzNi1cdGlmICghbWFfaXNfbGVhZihkX210KSBcdTAwMjZcdTAwMjYgc19tdCA9PSBtYXBsZV9jb3B5KVxubGliL21hcGxlX3RyZWUuYzoyMDM3Olx0XHRtYXNfc2V0X3BhcmVudF9zbG90cyhtYXMsIG10X21rX25vZGUoZHN0LCBkX210KSxcbmxpYi9tYXBsZV90cmVlLmMtMjAzOC1cdFx0XHRcdCAgICAgZF9zbG90cywgZF9zdGFydCwgc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDA0OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTU3CgkJCQkJCQlvdXRwdXQ6IDE3MAoJCQkJCQkJdGhvdWdodHM6IDkzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgRm9jdXMgZm9yIE1hcGxlIFRyZWUgTG9jayBTZXF1ZW5jZSBWYWxpZGF0aW9uIGFuZCBPcHRpbWl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjb25zaWRlciB0aGUgZm9sbG93aW5nIHN5bWJvbHMsIHBhcnRpY3VsYXJseSBnaXZlbiB0aGUgY29udGV4dCBvZiBsb2NrIHNlcXVlbmNlIHZhbGlkYXRpb24gYW5kIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIE1hcGxlIFRyZWU6IGBtYXNfd3Jfbm9kZV9zdG9yZWAsIGBtYXNfd3Jfc3RvcmVfdHlwZWAsIGBtYXNfYWxsb2NfY3ljbGljYCwgYG1hc19lcmFzZWAsIGBtYXNfbm9tZW1gLCBgbWFzX3NldF9wYXJlbnRfc2xvdHNgLCBgbWFzX3VwZGF0ZV9nYXBfa25vd25gLCBgbWFzX2xvY2tfY2hlY2tgLCBgbWFzX2luaXRfbG9ja19jaGVja2AsIGFuZCBgbWFzX21heV9pbml0X2xvY2tfY2hlY2tgLiBIb3dldmVyLCBzaW5jZSBzb21lIGFyZSBgc3RhdGljYCBvciBgc3RhdGljIGlubGluZWAsIHRoZXkgbWlnaHQgYmUgaW5saW5lZCwgc28gdGhleSYjMzk7cmUgbm90IHVzZWZ1bCBlbnRyeSBwb2ludHMgZm9yIGFuYWx5c2lzLgoKSSBrbm93IHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgbG9jayBzZXF1ZW5jZSB2YWxpZGF0aW9uIHVzaW5nIGBsb2NrZGVwYCwgb3B0aW1pemluZyBzdG9yZSBvcGVyYXRpb25zLCBhbmQgZml4aW5nIHdyYXAtYXJvdW5kIGluIG1lbW9yeSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgaW4gdGhlIE1hcGxlIFRyZWUgaW1wbGVtZW50YXRpb24uCgpTbywgSSBkZWNpZGVkIHRvIGZvY3VzIG9uIHRoZSBmb2xsb3dpbmcgbm9uLWlubGluZSBvciBleHBvcnRlZCBmdW5jdGlvbnM6IGBtYXNfYWxsb2NfY3ljbGljYCwgYG1hc19lcmFzZWAsIGBtdHJlZV9lcmFzZWAsIGBtYXNfbm9tZW1gLCBhbmQgYGxvY2tfc2VxdWVuY2VgLiBJIGFsc28gaW5pdGlhbGx5IGlkZW50aWZpZWQgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGxpa2UgYG1hc19zdG9yZWAsIGBtYXNfc3RvcmVfZ2ZwYCwgYG1hc19zdG9yZV9wcmVhbGxvY2AsIGFuZCBgbWFzX3ByZWFsbG9jYXRlYCwgYnV0IHRoZXNlIGFyZSBsaWtlbHkgaG90IHBhdGggZnVuY3Rpb25zLiBBdm9pZGluZyBob3QgcGF0aHMgaXMgaW1wb3J0YW50IGhlcmUuIFNvLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBJIGp1c3QgbGlzdGVkOiBgbWFzX2FsbG9jX2N5Y2xpY2AsIGBtYXNfZXJhc2VgLCBgbXRyZWVfZXJhc2VgLCBgbWFzX25vbWVtYCwgYW5kIGBsb2NrX3NlcXVlbmNlYC4KCkkmIzM5O20gdmVyaWZ5aW5nIHRoYXQgYG1hc19hbGxvY19jeWNsaWNgIGlzIHVzZWQgaW4gYG10cmVlX2FsbG9jX2N5Y2xpY2AsIGBtYXNfZXJhc2VgIGlzIHVzZWQgaW4gYG10cmVlX2VyYXNlYCBhbmQgYSBmZXcgZHJpdmVycywgYW5kIGBtYXNfbm9tZW1gIGlzIHVzZWQgaW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBjYXNlcy4gVGhlIGNvbmZpZ3VyYXRpb25zIG9mIGludGVyZXN0IGFyZSBgREVCVUdfTUFQTEVfVFJFRWAsIGBQUk9WRV9MT0NLSU5HYCwgYW5kIGBMT0NLREVQYC4gVGhlc2UgZnVuY3Rpb25zIGFuZCBjb25maWdzIHJlcHJlc2VudCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGRldGFpbGVkIGluc3BlY3Rpb24gYW5kIHBvc3NpYmxlIGZ1enppbmcgZWZmb3J0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDQ6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX01BUExFX1RSRUUmIzM0OywKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtMT0NLREVQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFzX2FsbG9jX2N5Y2xpYyYjMzQ7LAogICAgJiMzNDttYXNfZXJhc2UmIzM0OywKICAgICYjMzQ7bXRyZWVfZXJhc2UmIzM0OywKICAgICYjMzQ7bWFzX25vbWVtJiMzNDssCiAgICAmIzM0O2xvY2tfc2VxdWVuY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBsb2NrIHNlcXVlbmNlIHZhbGlkYXRpb24gZm9yIG1hcGxlIHRyZWUgb3BlcmF0aW9ucyB1c2luZyBsb2NrZGVwLCBhbmQgb3B0aW1pemVzIG1hcGxlIHRyZWUgbm9kZSBzdG9yZSBvcGVyYXRpb25zIGFuZCBwYXJlbnQgcG9pbnRlciB1cGRhdGVzLiBJdCBhbHNvIGZpeGVzIHdyYXAtYXJvdW5kIGhhbmRsaW5nIGluIGBtYXNfYWxsb2NfY3ljbGljYCBhbmQgbW9kaWZpZXMgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IgaW4gYG1hc19lcmFzZWAgYW5kIGBtYXNfbm9tZW1gLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGRhdGEgc3RydWN0dXJlcyBhbmQgbG9ja2luZyB2YWxpZGF0aW9uLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBjb3JyZWN0bmVzcyBhbmQgcHJldmVudCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVCVUdfTUFQTEVfVFJFRSYjMzQ7LAogICAgJiMzNDtQUk9WRV9MT0NLSU5HJiMzNDssCiAgICAmIzM0O0xPQ0tERVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYXNfYWxsb2NfY3ljbGljJiMzNDssCiAgICAmIzM0O21hc19lcmFzZSYjMzQ7LAogICAgJiMzNDttdHJlZV9lcmFzZSYjMzQ7LAogICAgJiMzNDttYXNfbm9tZW0mIzM0OywKICAgICYjMzQ7bG9ja19zZXF1ZW5jZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvY2sgc2VxdWVuY2UgdmFsaWRhdGlvbiBmb3IgbWFwbGUgdHJlZSBvcGVyYXRpb25zIHVzaW5nIGxvY2tkZXAsIGFuZCBvcHRpbWl6ZXMgbWFwbGUgdHJlZSBub2RlIHN0b3JlIG9wZXJhdGlvbnMgYW5kIHBhcmVudCBwb2ludGVyIHVwZGF0ZXMuIEl0IGFsc28gZml4ZXMgd3JhcC1hcm91bmQgaGFuZGxpbmcgaW4gYG1hc19hbGxvY19jeWNsaWNgIGFuZCBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBpbiBgbWFzX2VyYXNlYCBhbmQgYG1hc19ub21lbWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDJUMDQ6MjM6NDYuNTQwMTE1NjY2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5NjMwNzYxMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVCVUdfTUFQTEVfVFJFRVwiLFxuICAgIFwiUFJPVkVfTE9DS0lOR1wiLFxuICAgIFwiTE9DS0RFUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hc19hbGxvY19jeWNsaWNcIixcbiAgICBcIm1hc19lcmFzZVwiLFxuICAgIFwibXRyZWVfZXJhc2VcIixcbiAgICBcIm1hc19ub21lbVwiLFxuICAgIFwibG9ja19zZXF1ZW5jZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbG9jayBzZXF1ZW5jZSB2YWxpZGF0aW9uIGZvciBtYXBsZSB0cmVlIG9wZXJhdGlvbnMgdXNpbmcgbG9ja2RlcCwgYW5kIG9wdGltaXplcyBtYXBsZSB0cmVlIG5vZGUgc3RvcmUgb3BlcmF0aW9ucyBhbmQgcGFyZW50IHBvaW50ZXIgdXBkYXRlcy4gSXQgYWxzbyBmaXhlcyB3cmFwLWFyb3VuZCBoYW5kbGluZyBpbiBgbWFzX2FsbG9jX2N5Y2xpY2AgYW5kIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yIGluIGBtYXNfZXJhc2VgIGFuZCBgbWFzX25vbWVtYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvY2tpbmcgdmFsaWRhdGlvbiwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA0OjIzOjQ2LjU0MDEyMDkzNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkxNDM2NzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjVhYWU2ODFjNzNkYWU3ZmVhYWIwMTNjMTYwOTUyNjljMDFmYWJhYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyIDA0OjIzOjQ0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0XFxuaW5kZXggY2NkZDE2MTVjZjk3NGYuLjFlYWUyNGE5YzE4YjRhIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0XFxuQEAgLTE3LDcgKzE3LDggQEAgc3VwcG9ydHMgaXRlcmF0aW5nIG92ZXIgYSByYW5nZSBvZiBlbnRyaWVzIGFuZCBnb2luZyB0byB0aGUgcHJldmlvdXMgb3IgbmV4dFxcbiBlbnRyeSBpbiBhIGNhY2hlLWVmZmljaWVudCBtYW5uZXIuICBUaGUgdHJlZSBjYW4gYWxzbyBiZSBwdXQgaW50byBhbiBSQ1Utc2FmZVxcbiBtb2RlIG9mIG9wZXJhdGlvbiB3aGljaCBhbGxvd3MgcmVhZGluZyBhbmQgd3JpdGluZyBjb25jdXJyZW50bHkuICBXcml0ZXJzIG11c3RcXG4gc3luY2hyb25pemUgb24gYSBsb2NrLCB3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQgc3BpbmxvY2ssIG9yIHRoZSB1c2VyIGNhbiBzZXRcXG4tdGhlIGxvY2sgdG8gYW4gZXh0ZXJuYWwgbG9jayBvZiBhIGRpZmZlcmVudCB0eXBlLlxcbit0aGUgbG9jayB0byBhbiBleHRlcm5hbCBsb2NrIG9mIGEgZGlmZmVyZW50IHR5cGUuICBOb3RlIHRoYXQgZXh0ZXJuYWwgbG9ja3MgbWF5XFxuK2ludGVyZmVyZSB3aXRoIGFsbG9jYXRpb25zIGluIGEgbG93IG1lbW9yeSBzaXR1YXRpb24uXFxuIFxcbiBUaGUgTWFwbGUgVHJlZSBtYWludGFpbnMgYSBzbWFsbCBtZW1vcnkgZm9vdHByaW50IGFuZCB3YXMgZGVzaWduZWQgdG8gdXNlXFxuIG1vZGVybiBwcm9jZXNzb3IgY2FjaGUgZWZmaWNpZW50bHkuICBUaGUgbWFqb3JpdHkgb2YgdGhlIHVzZXJzIHdpbGwgYmUgYWJsZSB0b1xcbkBAIC00Miw2ICs0MywxNSBAQCBzdWNjZXNzZnVsIHN0b3JlIG9wZXJhdGlvbiB3aXRoaW4gYSBnaXZlblxcbiBjb2RlIHNlZ21lbnQgd2hlbiBhbGxvY2F0aW5nIGNhbm5vdCBiZSBkb25lLiAgQWxsb2NhdGlvbnMgb2Ygbm9kZXMgYXJlXFxuIHJlbGF0aXZlbHkgc21hbGwgYXQgYXJvdW5kIDI1NiBieXRlcy5cXG4gXFxuK1NpbmNlIHRoZSBtYXBsZSB0cmVlIHVzZXMgaW50ZXJuYWwgbm9kZXMgdGhhdCBhcmUgYWxsb2NhdGVkIGFuZCBoYXMgcnVsZXMgb25cXG4rZGF0YSBkZW5zaXR5LCBlcmFzaW5nIGFuIGVudHJ5IG1heSBjYXVzZSBhbGxvY2F0aW9ucyB0byBvY2N1ci4gIFRoYXQgaXMsXFxuK2VyYXNpbmcgYW4gZW50cnkgbWF5IGNvbnN1bWUgbWVtb3J5LiAgVXNlcnMgbXVzdCB0YWtlIGNhcmUgdG8gZW5zdXJlIHRoYXQgdGhleVxcbitkbyBub3QgdmlvbGF0ZSB0aGUgbGFyZ2VyIHN5c3RlbSBjb25zdHJhaW50cyBvbiB3aGVuIGFuZCBob3cgbWVtb3J5IGlzXFxuK2FsbG9jYXRlZC4gIE1vc3Qgc2l0dWF0aW9ucyBhcmUgZmluZSB0byBhbGxvY2F0ZSwgYnV0IHRoZSBwcmUtYWxsb2NhdGlvblxcbitzdXBwb3J0IGlzIHByb3ZpZGVkIGFzIGEgbWVjaGFuaXNtIHRvIGF2b2lkIHRyaWNraWVyIHNpdHVhdGlvbnMuICBUaGVyZSBpcyBhbHNvXFxuK3RoZSBwb3NzaWJpbGl0eSBvZiB1c2luZyBzcGVjaWFsIGVudHJpZXMgYW5kIGNsZWFuIHVwIHRoZSB0cmVlIGxhdGVyLCBpblxcbitleHRyZW1lIGNpcmN1bXN0YW5jZXMuXFxuK1xcbiAuLiBfbWFwbGUtdHJlZS1ub3JtYWwtYXBpOlxcbiBcXG4gTm9ybWFsIEFQSVxcbkBAIC02Myw3ICs3Myw4IEBAIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UuICBtdHJlZV9zdG9yZV9yYW5nZSgpIHdvcmtzIGluIHRoZSBzYW1lIHdheVxcbiBidXQgdGFrZXMgYSByYW5nZS4gIG10cmVlX2xvYWQoKSBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBlbnRyeSBzdG9yZWQgYXQgYVxcbiBnaXZlbiBpbmRleC4gIFlvdSBjYW4gdXNlIG10cmVlX2VyYXNlKCkgdG8gZXJhc2UgYW4gZW50aXJlIHJhbmdlIGJ5IG9ubHlcXG4ga25vd2luZyBvbmUgdmFsdWUgd2l0aGluIHRoYXQgcmFuZ2UsIG9yIG10cmVlX3N0b3JlKCkgY2FsbCB3aXRoIGFuIGVudHJ5IG9mXFxuLU5VTEwgbWF5IGJlIHVzZWQgdG8gcGFydGlhbGx5IGVyYXNlIGEgcmFuZ2Ugb3IgbWFueSByYW5nZXMgYXQgb25jZS5cXG4rTlVMTCBtYXkgYmUgdXNlZCB0byBwYXJ0aWFsbHkgZXJhc2UgYSByYW5nZSBvciBtYW55IHJhbmdlcyBhdCBvbmNlLiAgTm90ZSB0aGF0XFxuK210cmVlX2VyYXNlKCkgbWF5IHVzZSBHRlBfS0VSTkVMIG9uIGFsbG9jYXRpb25zLlxcbiBcXG4gSWYgeW91IHdhbnQgdG8gb25seSBzdG9yZSBhIG5ldyBlbnRyeSB0byBhIHJhbmdlIChvciBpbmRleCkgaWYgdGhhdCByYW5nZSBpc1xcbiBjdXJyZW50bHkgYGBOVUxMYGAsIHlvdSBjYW4gdXNlIG10cmVlX2luc2VydF9yYW5nZSgpIG9yIG10cmVlX2luc2VydCgpIHdoaWNoXFxuQEAgLTE2Myw3ICsxNzQsOSBAQCBZb3UgY2FuIHVzZSBtYXNfZXJhc2UoKSB0byBlcmFzZSBhbiBlbnRpcmUgcmFuZ2UgYnkgc2V0dGluZyBpbmRleCBhbmRcXG4gbGFzdCBvZiB0aGUgbWFwbGUgc3RhdGUgdG8gdGhlIGRlc2lyZWQgcmFuZ2UgdG8gZXJhc2UuICBUaGlzIHdpbGwgZXJhc2VcXG4gdGhlIGZpcnN0IHJhbmdlIHRoYXQgaXMgZm91bmQgaW4gdGhhdCByYW5nZSwgc2V0IHRoZSBtYXBsZSBzdGF0ZSBpbmRleFxcbiBhbmQgbGFzdCBhcyB0aGUgcmFuZ2UgdGhhdCB3YXMgZXJhc2VkIGFuZCByZXR1cm4gdGhlIGVudHJ5IHRoYXQgZXhpc3RlZFxcbi1hdCB0aGF0IGxvY2F0aW9uLlxcbithdCB0aGF0IGxvY2F0aW9uLiAgTm90ZSB0aGF0IG1hc19lcmFzZSgpIG1heSBhbGxvY2F0ZSB3aXRoIHRoZSBHRlBfS0VSTkVMIGZsYWcuXFxuK0lmIHRoaXMgaXMgbm90IG9rYXksIGNvbnNpZGVyIHVzaW5nIG1hc19zdG9yZV9nZnAoKSBhbmQgcGFzcyBpdCBhIGBgTlVMTGBgLFxcbithZnRlciBzZXR0aW5nIHVwIHRoZSBjb3JyZWN0IHJhbmdlIGJ5IHdhbGtpbmcgdG8gdGhlIGVudHJ5LlxcbiBcXG4gWW91IGNhbiB3YWxrIGVhY2ggZW50cnkgd2l0aGluIGEgcmFuZ2UgYnkgdXNpbmcgbWFzX2Zvcl9lYWNoKCkuICBJZiB5b3Ugd2FudFxcbiB0byB3YWxrIGVhY2ggZWxlbWVudCBvZiB0aGUgdHJlZSB0aGVuIGBgMGBgIGFuZCBgYFVMT05HX01BWGBgIG1heSBiZSB1c2VkIGFzXFxuQEAgLTIxMSw3ICsyMjQsNyBAQCBBZHZhbmNlZCBMb2NraW5nXFxuIFxcbiBUaGUgbWFwbGUgdHJlZSB1c2VzIGEgc3BpbmxvY2sgYnkgZGVmYXVsdCwgYnV0IGV4dGVybmFsIGxvY2tzIGNhbiBiZSB1c2VkIGZvclxcbiB0cmVlIHVwZGF0ZXMgYXMgd2VsbC4gIFRvIHVzZSBhbiBleHRlcm5hbCBsb2NrLCB0aGUgdHJlZSBtdXN0IGJlIGluaXRpYWxpemVkXFxuLXdpdGggdGhlIGBgTVRfRkxBR1NfTE9DS19FWFRFUk4gZmxhZ2BgLCB0aGlzIGlzIHVzdWFsbHkgZG9uZSB3aXRoIHRoZVxcbit3aXRoIHRoZSBgYE1UX0ZMQUdTX0xPQ0tfRVhURVJOYGAgZmxhZywgdGhpcyBpcyB1c3VhbGx5IGRvbmUgd2l0aCB0aGVcXG4gTVRSRUVfSU5JVF9FWFQoKSAjZGVmaW5lLCB3aGljaCB0YWtlcyBhbiBleHRlcm5hbCBsb2NrIGFzIGFuIGFyZ3VtZW50LlxcbiBcXG4gRnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcXG5pbmRleCA2MjE1NjYzNDU0MDZkZC4uYTY0NTFlY2JiZTlhMDUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFxcbkBAIC0yNzMsNiArMjczLDkgQEAgZXh0ZXJuIHN0cnVjdCBwaW5fY29va2llIGxvY2tfcGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKTtcXG4gZXh0ZXJuIHZvaWQgbG9ja19yZXBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUpO1xcbiBleHRlcm4gdm9pZCBsb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSk7XFxuIFxcbitleHRlcm4gdTMyIGxvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKTtcXG4rI2RlZmluZSBsb2NrZGVwX3NlcXVlbmNlKGxvY2spXFx0bG9ja19zZXF1ZW5jZShcXHUwMDI2KGxvY2spLVxcdTAwM2VkZXBfbWFwKVxcbitcXG4gI2RlZmluZSBsb2NrZGVwX2RlcHRoKHRzaylcXHQoZGVidWdfbG9ja3MgPyAodHNrKS1cXHUwMDNlbG9ja2RlcF9kZXB0aCA6IDApXFxuIFxcbiAjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0KGNvbmQpXFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oXFxuaW5kZXggZWFlMTE1YTI2NDg4NTYuLjU1YzRiMTUyZmVkZjdjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmhcXG5AQCAtMjUzLDcgKzI1Myw4IEBAIHN0cnVjdCBoZWxkX2xvY2sge1xcbiBcXHR1bnNpZ25lZCBpbnQgaGFyZGlycXNfb2ZmOjE7XFxuIFxcdHVuc2lnbmVkIGludCBzeW5jOjE7XFxuIFxcdHVuc2lnbmVkIGludCByZWZlcmVuY2VzOjExO1xcdFxcdFxcdFxcdFxcdC8qIDMyIGJpdHMgKi9cXG4tXFx0dW5zaWduZWQgaW50IHBpbl9jb3VudDtcXG4rXFx0dW5zaWduZWQgaW50IHBpbl9jb3VudDoyNDtcXG4rXFx0dW5zaWduZWQgaW50IHNlcV9jb3VudDo4O1xcbiB9O1xcbiBcXG4gI2Vsc2UgLyogIUNPTkZJR19MT0NLREVQICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oIGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcXG5pbmRleCA0YTU2MzE5MDZhZmZiNS4uNWUwYmQyODU3ZDk0MWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaFxcbkBAIC0yOSwxMyArMjksMTEgQEBcXG4gI2RlZmluZSBNQVBMRV9OT0RFX1NMT1RTXFx0MzFcXHQvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC1cXHUwMDNlcGFyZW50ICovXFxuICNkZWZpbmUgTUFQTEVfUkFOR0U2NF9TTE9UU1xcdDE2XFx0LyogMjU2IGJ5dGVzICovXFxuICNkZWZpbmUgTUFQTEVfQVJBTkdFNjRfU0xPVFNcXHQxMFxcdC8qIDI0MCBieXRlcyAqL1xcbi0jZGVmaW5lIE1BUExFX0FMTE9DX1NMT1RTXFx0KE1BUExFX05PREVfU0xPVFMgLSAxKVxcbiAjZWxzZVxcbiAvKiAzMmJpdCBzaXplcyAqL1xcbiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFNcXHQ2M1xcdC8qIDI1NiBieXRlcyBpbmNsdWRpbmcgLVxcdTAwM2VwYXJlbnQgKi9cXG4gI2RlZmluZSBNQVBMRV9SQU5HRTY0X1NMT1RTXFx0MzJcXHQvKiAyNTYgYnl0ZXMgKi9cXG4gI2RlZmluZSBNQVBMRV9BUkFOR0U2NF9TTE9UU1xcdDIxXFx0LyogMjQwIGJ5dGVzICovXFxuLSNkZWZpbmUgTUFQTEVfQUxMT0NfU0xPVFNcXHQoTUFQTEVfTk9ERV9TTE9UUyAtIDIpXFxuICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR182NEJJVCkgfHwgZGVmaW5lZChCVUlMRF9WRFNPMzJfNjQpICovXFxuIFxcbiAjZGVmaW5lIE1BUExFX05PREVfTUFTS1xcdFxcdDI1NVVMXFxuQEAgLTQ4NSw2ICs0ODMsMTIgQEAgc3RydWN0IG1hX3N0YXRlIHtcXG4gXFx0dW5zaWduZWQgY2hhciBtYXNfZmxhZ3M7XFxuIFxcdHVuc2lnbmVkIGNoYXIgZW5kO1xcdFxcdC8qIFRoZSBlbmQgb2YgdGhlIG5vZGUgKi9cXG4gXFx0ZW51bSBzdG9yZV90eXBlIHN0b3JlX3R5cGU7XFx0LyogVGhlIHR5cGUgb2Ygc3RvcmUgbmVlZGVkIGZvciB0aGlzIG9wZXJhdGlvbiAqL1xcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4rXFx0dTMyIGxkX3NlcTtcXG4rI2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxcbitcXHR1bnNpZ25lZCBsb25nIHJjdV9ncDtcXG4rI2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xcbisjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi9cXG4gfTtcXG4gXFxuIHN0cnVjdCBtYV93cl9zdGF0ZSB7XFxuQEAgLTU3Miw3ICs1NzYsNyBAQCB2b2lkIG1hcGxlX3RyZWVfaW5pdCh2b2lkKTtcXG4gdm9pZCBtYXNfZGVzdHJveShzdHJ1Y3QgbWFfc3RhdGUgKm1hcyk7XFxuIFxcbiB2b2lkICptYXNfcHJldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pO1xcbi12b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xcbit2b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pO1xcbiB2b2lkICptYXNfbmV4dChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xcbiB2b2lkICptYXNfbmV4dF9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXFxuaW5kZXggMzczYmNjMDU5OGQxMGIuLjE0ZDVjZThkZDYxMzY1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxcbkBAIC0xMjg4LDYgKzEyODgsNyBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3Qge1xcbiBcXHR1NjRcXHRcXHRcXHRcXHRjdXJyX2NoYWluX2tleTtcXG4gXFx0aW50XFx0XFx0XFx0XFx0bG9ja2RlcF9kZXB0aDtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0XFx0bG9ja2RlcF9yZWN1cnNpb247XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdFxcdGxvY2tkZXBfc2VxO1xcbiBcXHRzdHJ1Y3QgaGVsZF9sb2NrXFx0XFx0aGVsZF9sb2Nrc1tNQVhfTE9DS19ERVBUSF07XFxuICNlbmRpZlxcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXFxuaW5kZXggMmQ0YzViYWI1YWY4ODcuLmIyYjBhNTA2OTYwYjE2IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xcbisrKyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xcbkBAIC01MDc3LDcgKzUwNzcsNyBAQCBzdGF0aWMgaW50IF9fbG9ja19pc19oZWxkKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgaW50IHJlYWQpO1xcbiBzdGF0aWMgaW50IF9fbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLFxcbiBcXHRcXHRcXHQgIGludCB0cnlsb2NrLCBpbnQgcmVhZCwgaW50IGNoZWNrLCBpbnQgaGFyZGlycXNfb2ZmLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBsb2NrZGVwX21hcCAqbmVzdF9sb2NrLCB1bnNpZ25lZCBsb25nIGlwLFxcbi1cXHRcXHRcXHQgIGludCByZWZlcmVuY2VzLCBpbnQgcGluX2NvdW50LCBpbnQgc3luYylcXG4rXFx0XFx0XFx0ICBpbnQgcmVmZXJlbmNlcywgaW50IHBpbl9jb3VudCwgaW50IHN5bmMsIGludCBzZXEpXFxuIHtcXG4gXFx0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDtcXG4gXFx0c3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gTlVMTDtcXG5AQCAtNTE4Myw2ICs1MTgzLDcgQEAgc3RhdGljIGludCBfX2xvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcyxcXG4gXFx0aGxvY2stXFx1MDAzZWhvbGR0aW1lX3N0YW1wID0gbG9ja3N0YXRfY2xvY2soKTtcXG4gI2VuZGlmXFxuIFxcdGhsb2NrLVxcdTAwM2VwaW5fY291bnQgPSBwaW5fY291bnQ7XFxuK1xcdGhsb2NrLVxcdTAwM2VzZXFfY291bnQgPSBzZXE7XFxuIFxcbiBcXHRpZiAoY2hlY2tfd2FpdF9jb250ZXh0KGN1cnIsIGhsb2NrKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTUzODgsNyArNTM4OSw3IEBAIHN0YXRpYyBpbnQgcmVhY3F1aXJlX2hlbGRfbG9ja3Moc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCB1bnNpZ25lZCBpbnQgZGVwdGgsXFxuIFxcdFxcdFxcdFxcdCAgICBobG9jay1cXHUwMDNlcmVhZCwgaGxvY2stXFx1MDAzZWNoZWNrLFxcbiBcXHRcXHRcXHRcXHQgICAgaGxvY2stXFx1MDAzZWhhcmRpcnFzX29mZixcXG4gXFx0XFx0XFx0XFx0ICAgIGhsb2NrLVxcdTAwM2VuZXN0X2xvY2ssIGhsb2NrLVxcdTAwM2VhY3F1aXJlX2lwLFxcbi1cXHRcXHRcXHRcXHQgICAgaGxvY2stXFx1MDAzZXJlZmVyZW5jZXMsIGhsb2NrLVxcdTAwM2VwaW5fY291bnQsIDApKSB7XFxuK1xcdFxcdFxcdFxcdCAgICBobG9jay1cXHUwMDNlcmVmZXJlbmNlcywgaGxvY2stXFx1MDAzZXBpbl9jb3VudCwgMCwgaGxvY2stXFx1MDAzZXNlcV9jb3VudCkpIHtcXG4gXFx0XFx0Y2FzZSAwOlxcbiBcXHRcXHRcXHRyZXR1cm4gMTtcXG4gXFx0XFx0Y2FzZSAxOlxcbkBAIC01Njg0LDYgKzU2ODUsMjQgQEAgc3RhdGljIHZvaWQgX19sb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSBjb29raWVcXG4gXFx0V0FSTigxLCBcXFwidW5waW5uaW5nIGFuIHVuaGVsZCBsb2NrXFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIHUzMiBfX2xvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KCFkZWJ1Z19sb2NrcykpXFxuK1xcdFxcdHJldHVybiB+MDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjdXJyLVxcdTAwM2Vsb2NrZGVwX2RlcHRoOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGhlbGRfbG9jayAqaGxvY2sgPSBjdXJyLVxcdTAwM2VoZWxkX2xvY2tzICsgaTtcXG4rXFxuK1xcdFxcdGlmIChtYXRjaF9oZWxkX2xvY2soaGxvY2ssIGxvY2spKVxcbitcXHRcXHRcXHRyZXR1cm4gaGxvY2stXFx1MDAzZXNlcV9jb3VudDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIH4wO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBDaGVjayB3aGV0aGVyIHdlIGZvbGxvdyB0aGUgaXJxLWZsYWdzIHN0YXRlIHByZWNpc2VseTpcXG4gICovXFxuQEAgLTU4NjYsNyArNTg4NSw4IEBAIHZvaWQgbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLFxcbiBcXG4gXFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XFxuIFxcdF9fbG9ja19hY3F1aXJlKGxvY2ssIHN1YmNsYXNzLCB0cnlsb2NrLCByZWFkLCBjaGVjayxcXG4tXFx0XFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAwKTtcXG4rXFx0XFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAwLFxcbitcXHRcXHQgICAgICAgKytjdXJyZW50LVxcdTAwM2Vsb2NrZGVwX3NlcSk7XFxuIFxcdGxvY2tkZXBfcmVjdXJzaW9uX2ZpbmlzaCgpO1xcbiBcXHRyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbiB9XFxuQEAgLTU5MTQsNyArNTkzNCw4IEBAIHZvaWQgbG9ja19zeW5jKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgc3ViY2xhc3MsIGludCByZWFkLFxcbiBcXG4gXFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XFxuIFxcdF9fbG9ja19hY3F1aXJlKGxvY2ssIHN1YmNsYXNzLCAwLCByZWFkLCBjaGVjayxcXG4tXFx0XFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAxKTtcXG4rXFx0XFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAxLFxcbitcXHRcXHQgICAgICAgKytjdXJyZW50LVxcdTAwM2Vsb2NrZGVwX3NlcSk7XFxuIFxcdGNoZWNrX2NoYWluX2tleShjdXJyZW50KTtcXG4gXFx0bG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7XFxuIFxcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuQEAgLTYwMDAsNiArNjAyMSwyNiBAQCB2b2lkIGxvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llIGNvb2tpZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChsb2NrX3VucGluX2xvY2spO1xcbiBcXG4rdTMyIGxvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHUzMiBzZXEgPSB+MDtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghbG9ja2RlcF9lbmFibGVkKCkpKVxcbitcXHRcXHRyZXR1cm4gc2VxO1xcbitcXG4rXFx0cmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4rXFx0Y2hlY2tfZmxhZ3MoZmxhZ3MpO1xcbitcXG4rXFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XFxuK1xcdHNlcSA9IF9fbG9ja19zZXF1ZW5jZShsb2NrKTtcXG4rXFx0bG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7XFxuK1xcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuK1xcbitcXHRyZXR1cm4gc2VxO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGxvY2tfc2VxdWVuY2UpO1xcbitcXG4gI2lmZGVmIENPTkZJR19MT0NLX1NUQVRcXG4gc3RhdGljIHZvaWQgcHJpbnRfbG9ja19jb250ZW50aW9uX2J1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jayxcXG5kaWZmIC0tZ2l0IGEvbGliL21hcGxlX3RyZWUuYyBiL2xpYi9tYXBsZV90cmVlLmNcXG5pbmRleCBlNTI4NzY0MzViNzdmMC4uNmQ3MWZkYzQxNDcwNjQgMTAwNjQ0XFxuLS0tIGEvbGliL21hcGxlX3RyZWUuY1xcbisrKyBiL2xpYi9tYXBsZV90cmVlLmNcXG5AQCAtNDY5LDcgKzQ2OSw3IEBAIHN0YXRpYyBpbmxpbmVcXG4gdm9pZCBtYXNfc2V0X3BhcmVudChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICplbm9kZSxcXG4gXFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBtYXBsZV9lbm9kZSAqcGFyZW50LCB1bnNpZ25lZCBjaGFyIHNsb3QpXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyB2YWwgPSAodW5zaWduZWQgbG9uZylwYXJlbnQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdmFsO1xcbiBcXHR1bnNpZ25lZCBsb25nIHNoaWZ0O1xcbiBcXHR1bnNpZ25lZCBsb25nIHR5cGU7XFxuIFxcdGVudW0gbWFwbGVfdHlwZSBwX3R5cGUgPSBtdGVfbm9kZV90eXBlKHBhcmVudCk7XFxuQEAgLTQ5MCwxMSArNDkwLDQ3IEBAIHZvaWQgbWFzX3NldF9wYXJlbnQoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUsXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbitcXHR2YWwgPSAodW5zaWduZWQgbG9uZylwYXJlbnQ7XFxuIFxcdHZhbCBcXHUwMDI2PSB+TUFQTEVfTk9ERV9NQVNLOyAvKiBDbGVhciBhbGwgbm9kZSBtZXRhZGF0YSBpbiBwYXJlbnQgKi9cXG4gXFx0dmFsIHw9IChzbG90IFxcdTAwM2NcXHUwMDNjIHNoaWZ0KSB8IHR5cGU7XFxuIFxcdG10ZV90b19ub2RlKGVub2RlKS1cXHUwMDNlcGFyZW50ID0gbWFfcGFyZW50X3B0cih2YWwpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBtYXNfc2V0X3BhcmVudF9zbG90cygpIC0gQnVsayBvcGVyYXRpb24gdG8gc2V0IG1hbnkgc2xvdCBwYXJlbnQgcG9pbnRlcnNcXG4rICogQG1hczogVGhlIG1hcGxlIHN0YXRlXFxuKyAqIEBwYXJlbnQ6IFRoZSBlbmNvZGVkIG1hcGxlIG5vZGUgdGhhdCBpcyB0aGUgcGFyZW50IG9mIEBlbm9kZS5cXG4rICogQHNsb3Q6IFRoZSBzbG90IHRoYXQgb2YgdGhlIEBlbm9kZS5cXG4rICogQHN0YXJ0X3Nsb3Q6IFRoZSBvZmZzZXQgaW50byBAc2xvdFxcbisgKiBAY291bnQ6IFRoZSBudW1iZXIgb2Ygc2xvdHMgdG8gc2V0IChlZzogZXhjbHVzaXZlKVxcbisgKi9cXG4rc3RhdGljIGlubGluZVxcbit2b2lkIG1hc19zZXRfcGFyZW50X3Nsb3RzKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnBhcmVudCxcXG4rXFx0dm9pZCBfX3JjdSAqKnNsb3RzLCB1bnNpZ25lZCBjaGFyIHN0YXJ0X3Nsb3QsIHVuc2lnbmVkIGNoYXIgY291bnQpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB2YWw7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2hpZnQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdHlwZTtcXG4rXFx0ZW51bSBtYXBsZV90eXBlIHBfdHlwZSA9IG10ZV9ub2RlX3R5cGUocGFyZW50KTtcXG4rXFx0dW5zaWduZWQgY2hhciBpO1xcbitcXG4rXFx0TUFTX0JVR19PTihtYXMsIHBfdHlwZSAhPSBtYXBsZV9yYW5nZV82NCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRwX3R5cGUgIT0gbWFwbGVfYXJhbmdlXzY0KTtcXG4rXFxuK1xcdHNoaWZ0ID0gTUFQTEVfUEFSRU5UX1NMT1RfU0hJRlQ7XFxuK1xcdHR5cGUgPSBNQVBMRV9QQVJFTlRfUkFOR0U2NDtcXG4rXFxuK1xcdHZhbCA9ICh1bnNpZ25lZCBsb25nKXBhcmVudDtcXG4rXFx0dmFsIFxcdTAwMjY9IH5NQVBMRV9OT0RFX01BU0s7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQ7IGkrKykge1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIHB2YWwgPSB2YWwgfCAoKHN0YXJ0X3Nsb3QgKyBpKSBcXHUwMDNjXFx1MDAzYyBzaGlmdCkgfCB0eXBlO1xcbitcXHRcXHRzdHJ1Y3QgbWFwbGVfZW5vZGUgKmNoaWxkID0gKHN0cnVjdCBtYXBsZV9lbm9kZSAqKXNsb3RzW2ldO1xcbitcXG4rXFx0XFx0bXRlX3RvX25vZGUoY2hpbGQpLVxcdTAwM2VwYXJlbnQgPSBtYV9wYXJlbnRfcHRyKHB2YWwpO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qXFxuICAqIG10ZV9wYXJlbnRfc2xvdCgpIC0gZ2V0IHRoZSBwYXJlbnQgc2xvdCBvZiBAZW5vZGUuXFxuICAqIEBlbm9kZTogVGhlIGVuY29kZWQgbWFwbGUgbm9kZS5cXG5AQCAtMTE1Myw2ICsxMTg5LDcwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfZnJlZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICp1c2VkKVxcbiBcXHRtYV9mcmVlX3JjdShtdGVfdG9fbm9kZSh1c2VkKSk7XFxuIH1cXG4gXFxuK1xcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4rc3RydWN0IGxvY2tkZXBfbWFwICptYXNfbG9ja2RlcF9tYXAoc3RydWN0IG1hX3N0YXRlICptYXMpXFxuK3tcXG4rXFx0c3RydWN0IG1hcGxlX3RyZWUgKm10ID0gbWFzLVxcdTAwM2V0cmVlO1xcbitcXG4rXFx0aWYgKG10X2V4dGVybmFsX2xvY2sobXQpKVxcbitcXHRcXHRyZXR1cm4gbXQtXFx1MDAzZW1hX2V4dGVybmFsX2xvY2s7XFxuK1xcbitcXHRyZXR1cm4gXFx1MDAyNihtdC1cXHUwMDNlbWFfbG9jaykuZGVwX21hcDtcXG4rfVxcbitcXG4rI2VuZGlmXFxuK1xcbitzdGF0aWMgdm9pZCBtYXNfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcXG4re1xcbitcXG4rI2lmZGVmIENPTkZJR19MT0NLREVQXFxuK1xcdGlmICghbWFzX2lzX2FjdGl2ZShtYXMpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbisjaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXFxuK1xcdGlmICghbXRfbG9ja19pc19oZWxkKG1hcy1cXHUwMDNldHJlZSkpIHtcXG4rXFx0XFx0aWYgKG10X2luX3JjdShtYXMtXFx1MDAzZXRyZWUpKVxcbitcXHRcXHRcXHRXQVJOX09OX09OQ0UocG9sbF9zdGF0ZV9zeW5jaHJvbml6ZV9yY3UobWFzLVxcdTAwM2VyY3VfZ3ApKTtcXG4rXFx0fVxcbisjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXFxuK1xcbitcXHRpZiAobXRfbG9ja19pc19oZWxkKG1hcy1cXHUwMDNldHJlZSkpXFxuK1xcdFxcdFdBUk5fT05fT05DRShtYXMtXFx1MDAzZWxkX3NlcSAhPSBsb2NrX3NlcXVlbmNlKG1hc19sb2NrZGVwX21hcChtYXMpKSk7XFxuKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xcbitcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWFzX2luaXRfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcXG4re1xcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4rI2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxcbitcXHRpZiAoIW10X2xvY2tfaXNfaGVsZChtYXMtXFx1MDAzZXRyZWUpKSB7XFxuK1xcdFxcdGlmIChtdF9pbl9yY3UobWFzLVxcdTAwM2V0cmVlKSlcXG4rXFx0XFx0XFx0bWFzLVxcdTAwM2VyY3VfZ3AgPSBnZXRfc3RhdGVfc3luY2hyb25pemVfcmN1KCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbisjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXFxuK1xcbitcXHRpZiAobXRfbG9ja19pc19oZWxkKG1hcy1cXHUwMDNldHJlZSkpXFxuK1xcdFxcdG1hcy1cXHUwMDNlbGRfc2VxID0gbG9ja19zZXF1ZW5jZShtYXNfbG9ja2RlcF9tYXAobWFzKSk7XFxuKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xcbitcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbWFzX21heV9pbml0X2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19MT0NLREVQXFxuKyNpZmRlZiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RcXG4rXFx0aWYgKG1hc19pc19zdGFydChtYXMpIHx8IG1hc19pc19wYXVzZWQobWFzKSkge1xcbitcXHRcXHRtYXNfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbisjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXFxuK1xcdG1hc19sb2NrX2NoZWNrKG1hcyk7XFxuKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xcbit9XFxuK1xcbiAvKlxcbiAgKiBtYXNfc3RhcnQoKSAtIFNldHMgdXAgbWFwbGUgc3RhdGUgZm9yIG9wZXJhdGlvbnMuXFxuICAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZS5cXG5AQCAtMTE3MSw2ICsxMjcxLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWFwbGVfZW5vZGUgKm1hc19zdGFydChzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcXG4gXFx0aWYgKGxpa2VseShtYXNfaXNfc3RhcnQobWFzKSkpIHtcXG4gXFx0XFx0c3RydWN0IG1hcGxlX2Vub2RlICpyb290O1xcbiBcXG4rXFx0XFx0bWFzX2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiBcXHRcXHRtYXMtXFx1MDAzZW1pbiA9IDA7XFxuIFxcdFxcdG1hcy1cXHUwMDNlbWF4ID0gVUxPTkdfTUFYO1xcbiBcXG5AQCAtMTUwMSwxNCArMTYwMiwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3BhcmVudF9nYXAoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGNoYXIgb2Zmc2V0LFxcbiBcXHRnb3RvIGFzY2VuZDtcXG4gfVxcbiBcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1hc191cGRhdGVfZ2FwX2tub3duKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGdhcClcXG4re1xcbitcXHR1bnNpZ25lZCBjaGFyIHBzbG90O1xcbitcXHR1bnNpZ25lZCBsb25nIHBfZ2FwO1xcbitcXG4rXFx0cHNsb3QgPSBtdGVfcGFyZW50X3Nsb3QobWFzLVxcdTAwM2Vub2RlKTtcXG4rXFx0cF9nYXAgPSBtYV9nYXBzKG10ZV9wYXJlbnQobWFzLVxcdTAwM2Vub2RlKSxcXG4rXFx0XFx0XFx0bWFzX3BhcmVudF90eXBlKG1hcywgbWFzLVxcdTAwM2Vub2RlKSlbcHNsb3RdO1xcbitcXG4rXFx0aWYgKHBfZ2FwICE9IGdhcClcXG4rXFx0XFx0bWFzX3BhcmVudF9nYXAobWFzLCBwc2xvdCwgZ2FwKTtcXG4rfVxcbitcXG4gLypcXG4gICogbWFzX3VwZGF0ZV9nYXAoKSAtIFVwZGF0ZSBhIG5vZGVzIGdhcHMgYW5kIHByb3BhZ2F0ZSB1cCBpZiBuZWNlc3NhcnkuXFxuICAqIEBtYXM6IHRoZSBtYXBsZSBzdGF0ZS5cXG4gICovXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfdXBkYXRlX2dhcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcXG4ge1xcbi1cXHR1bnNpZ25lZCBjaGFyIHBzbG90O1xcbi1cXHR1bnNpZ25lZCBsb25nIHBfZ2FwO1xcbiBcXHR1bnNpZ25lZCBsb25nIG1heF9nYXA7XFxuIFxcbiBcXHRpZiAoIW10X2lzX2FsbG9jKG1hcy1cXHUwMDNldHJlZSkpXFxuQEAgLTE1MTgsMTMgKzE2MzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3VwZGF0ZV9nYXAoc3RydWN0IG1hX3N0YXRlICptYXMpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdG1heF9nYXAgPSBtYXNfbWF4X2dhcChtYXMpO1xcbi1cXG4tXFx0cHNsb3QgPSBtdGVfcGFyZW50X3Nsb3QobWFzLVxcdTAwM2Vub2RlKTtcXG4tXFx0cF9nYXAgPSBtYV9nYXBzKG10ZV9wYXJlbnQobWFzLVxcdTAwM2Vub2RlKSxcXG4tXFx0XFx0XFx0bWFzX3BhcmVudF90eXBlKG1hcywgbWFzLVxcdTAwM2Vub2RlKSlbcHNsb3RdO1xcbi1cXG4tXFx0aWYgKHBfZ2FwICE9IG1heF9nYXApXFxuLVxcdFxcdG1hc19wYXJlbnRfZ2FwKG1hcywgcHNsb3QsIG1heF9nYXApO1xcbitcXHRtYXNfdXBkYXRlX2dhcF9rbm93bihtYXMsIG1heF9nYXApO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xNTQwLDE0ICsxNjQ3LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfYWRvcHRfY2hpbGRyZW4oc3RydWN0IG1hX3N0YXRlICptYXMsXFxuIFxcdHN0cnVjdCBtYXBsZV9ub2RlICpub2RlID0gbXRlX3RvX25vZGUocGFyZW50KTtcXG4gXFx0dm9pZCBfX3JjdSAqKnNsb3RzID0gbWFfc2xvdHMobm9kZSwgdHlwZSk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKnBpdm90cyA9IG1hX3Bpdm90cyhub2RlLCB0eXBlKTtcXG4tXFx0c3RydWN0IG1hcGxlX2Vub2RlICpjaGlsZDtcXG4tXFx0dW5zaWduZWQgY2hhciBvZmZzZXQ7XFxuK1xcdHVuc2lnbmVkIGNoYXIgZW5kO1xcbiBcXG4tXFx0b2Zmc2V0ID0gbWFfZGF0YV9lbmQobm9kZSwgdHlwZSwgcGl2b3RzLCBtYXMtXFx1MDAzZW1heCk7XFxuLVxcdGRvIHtcXG4tXFx0XFx0Y2hpbGQgPSBtYXNfc2xvdF9sb2NrZWQobWFzLCBzbG90cywgb2Zmc2V0KTtcXG4tXFx0XFx0bWFzX3NldF9wYXJlbnQobWFzLCBjaGlsZCwgcGFyZW50LCBvZmZzZXQpO1xcbi1cXHR9IHdoaWxlIChvZmZzZXQtLSk7XFxuK1xcdGVuZCA9IG1hX2RhdGFfZW5kKG5vZGUsIHR5cGUsIHBpdm90cywgbWFzLVxcdTAwM2VtYXgpO1xcbitcXHRtYXNfc2V0X3BhcmVudF9zbG90cyhtYXMsIHBhcmVudCwgc2xvdHMsIDAsIGVuZCArIDEpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xOTI5LDE1ICsyMDMyLDEwIEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9jb3B5KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfbm9kZSAqc3JjLFxcbiBcXHRzX3Nsb3RzID0gbWFfc2xvdHMoc3JjLCBzX210KSArIHN0YXJ0O1xcbiBcXHRzX3Bpdm90cyA9IG1hX3Bpdm90cyhzcmMsIHNfbXQpICsgc3RhcnQ7XFxuIFxcdG1lbWNweShkX3Nsb3RzLCBzX3Nsb3RzLCBzaXplICogc2l6ZW9mKHZvaWQgX19yY3UgKikpO1xcbi1cXHRpZiAoIW1hX2lzX2xlYWYoZF9tdCkgXFx1MDAyNlxcdTAwMjYgc19tdCA9PSBtYXBsZV9jb3B5KSB7XFxuLVxcdFxcdHN0cnVjdCBtYXBsZV9lbm9kZSAqZWRzdCA9IG10X21rX25vZGUoZHN0LCBkX210KTtcXG4gXFxuLVxcbi1cXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIHNpemU7IGkrKylcXG4tXFx0XFx0XFx0bWFzX3NldF9wYXJlbnQobWFzLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgbXRfc2xvdF9sb2NrZWQobWFzLVxcdTAwM2V0cmVlLCBkX3Nsb3RzLCBpKSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGVkc3QsIGRfc3RhcnQgKyBpKTtcXG4tXFx0fVxcbitcXHRpZiAoIW1hX2lzX2xlYWYoZF9tdCkgXFx1MDAyNlxcdTAwMjYgc19tdCA9PSBtYXBsZV9jb3B5KVxcbitcXHRcXHRtYXNfc2V0X3BhcmVudF9zbG90cyhtYXMsIG10X21rX25vZGUoZHN0LCBkX210KSxcXG4rXFx0XFx0XFx0XFx0ICAgICBkX3Nsb3RzLCBkX3N0YXJ0LCBzaXplKTtcXG4gXFxuIFxcdGRfZ2FwcyA9IG1hX2dhcHMoZHN0LCBkX210KTtcXG4gXFx0aWYgKGRfZ2Fwcykge1xcbkBAIC0yMDgxLDggKzIxNzksOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dtYl9yZXBsYWNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfY29weSAqY3ApXFxuIFxcdG1hcy1cXHUwMDNlbm9kZSA9IG10X3Nsb3RfbG9ja2VkKG1hcy1cXHUwMDNldHJlZSwgY3AtXFx1MDAzZXNsb3QsIDApO1xcbiBcXHQvKiBJbnNlcnQgdGhlIG5ldyBkYXRhIGluIHRoZSB0cmVlICovXFxuIFxcdG1hc190b3BpYXJ5X3JlcGxhY2UobWFzLCBvbGRfZW5vZGUsIGNwLVxcdTAwM2VoZWlnaHQpO1xcbi1cXHRpZiAoIW10ZV9pc19sZWFmKG1hcy1cXHUwMDNlbm9kZSkpXFxuLVxcdFxcdG1hc191cGRhdGVfZ2FwKG1hcyk7XFxuK1xcdGlmIChtdF9pc19hbGxvYyhtYXMtXFx1MDAzZXRyZWUpIFxcdTAwMjZcXHUwMDI2ICFtdGVfaXNfcm9vdChtYXMtXFx1MDAzZW5vZGUpKVxcbitcXHRcXHRtYXNfdXBkYXRlX2dhcF9rbm93bihtYXMsIGNwLVxcdTAwM2VnYXBbMF0pO1xcbiBcXG4gXFx0bXRyZWVfcmFuZ2Vfd2FsayhtYXMpO1xcbiB9XFxuQEAgLTI5MjgsMTMgKzMwMjYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX2V4dGVuZF9zcGFubmluZ19udWxsKHN0cnVjdCBtYV93cl9zdGF0ZSAqbF93cl9tYXMsXFxuIFxcdFxcdGlmIChyX21hcy1cXHUwMDNlbGFzdCBcXHUwMDNjIHJfd3JfbWFzLVxcdTAwM2VyX21heClcXG4gXFx0XFx0XFx0cl9tYXMtXFx1MDAzZWxhc3QgPSByX3dyX21hcy1cXHUwMDNlcl9tYXg7XFxuIFxcdFxcdHJfbWFzLVxcdTAwM2VvZmZzZXQrKztcXG4tXFx0fSBlbHNlIGlmICgocl9tYXMtXFx1MDAzZWxhc3QgPT0gcl93cl9tYXMtXFx1MDAzZXJfbWF4KSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgKHJfbWFzLVxcdTAwM2VsYXN0IFxcdTAwM2Mgcl9tYXMtXFx1MDAzZW1heCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICFtYXNfc2xvdF9sb2NrZWQocl9tYXMsIHJfd3JfbWFzLVxcdTAwM2VzbG90cywgcl9tYXMtXFx1MDAzZW9mZnNldCArIDEpKSB7XFxuLVxcdFxcdHJfbWFzLVxcdTAwM2VsYXN0ID0gbWFzX3NhZmVfcGl2b3Qocl9tYXMsIHJfd3JfbWFzLVxcdTAwM2VwaXZvdHMsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgcl93cl9tYXMtXFx1MDAzZXR5cGUsIHJfbWFzLVxcdTAwM2VvZmZzZXQgKyAxKTtcXG4tXFx0XFx0cl9tYXMtXFx1MDAzZW9mZnNldCsrO1xcbi1cXHRcXHRyX3dyX21hcy1cXHUwMDNlcl9tYXggPSByX21hcy1cXHUwMDNlbGFzdDtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0zMTI1LDcgKzMyMTYsNyBAQCBzdGF0aWMgdm9pZCBtYXNfd3Jfc3Bhbm5pbmdfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcXG4ge1xcbiBcXHR1bnNpZ25lZCBjaGFyIGRzdF9vZmZzZXQsIG9mZnNldF9lbmQ7XFxuLVxcdHVuc2lnbmVkIGNoYXIgY29weV9zaXplLCBub2RlX3Bpdm90cztcXG4rXFx0dW5zaWduZWQgY2hhciBjb3B5X3NpemUsIG5vZGVfcGl2b3RzLCBub2RlX3Nsb3RzO1xcbiBcXHRzdHJ1Y3QgbWFwbGVfbm9kZSByZXVzZSwgKm5ld25vZGU7XFxuIFxcdHVuc2lnbmVkIGxvbmcgKmRzdF9waXZvdHM7XFxuIFxcdHZvaWQgX19yY3UgKipkc3Rfc2xvdHM7XFxuQEAgLTMxMzgsNiArMzIyOSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcXG4gXFx0aW5fcmN1ID0gbXRfaW5fcmN1KG1hcy1cXHUwMDNldHJlZSk7XFxuIFxcdG9mZnNldF9lbmQgPSB3cl9tYXMtXFx1MDAzZW9mZnNldF9lbmQ7XFxuIFxcdG5vZGVfcGl2b3RzID0gbXRfcGl2b3RzW3dyX21hcy1cXHUwMDNldHlwZV07XFxuK1xcdG5vZGVfc2xvdHMgPSBtdF9zbG90c1t3cl9tYXMtXFx1MDAzZXR5cGVdO1xcbiBcXHQvKiBBc3N1bWUgbGFzdCBhZGRzIGFuIGVudHJ5ICovXFxuIFxcdG5ld19lbmQgPSBtYXMtXFx1MDAzZWVuZCArIDEgLSBvZmZzZXRfZW5kICsgbWFzLVxcdTAwM2VvZmZzZXQ7XFxuIFxcdGlmIChtYXMtXFx1MDAzZWxhc3QgPT0gd3JfbWFzLVxcdTAwM2VlbmRfcGl2KSB7XFxuQEAgLTMxNDksNyArMzI0MSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcXG4gXFx0aWYgKGluX3JjdSkge1xcbiBcXHRcXHRuZXdub2RlID0gbWFzX3BvcF9ub2RlKG1hcyk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdG1lbXNldChcXHUwMDI2cmV1c2UsIDAsIHNpemVvZihzdHJ1Y3QgbWFwbGVfbm9kZSkpO1xcbiBcXHRcXHRuZXdub2RlID0gXFx1MDAyNnJldXNlO1xcbiBcXHR9XFxuIFxcbkBAIC0zMTkzLDcgKzMyODQsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxcbiBcXHRcXHRkc3RfcGl2b3RzW25ld19lbmRdID0gbWFzLVxcdTAwM2VtYXg7XFxuIFxcbiBkb25lOlxcbi1cXHRtYXNfbGVhZl9zZXRfbWV0YShuZXdub2RlLCBtYXBsZV9sZWFmXzY0LCBuZXdfZW5kKTtcXG4rXFx0aWYgKCFpbl9yY3UgXFx1MDAyNlxcdTAwMjYgbmV3X2VuZCArIDIgXFx1MDAzYyBub2RlX3Nsb3RzKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGNoYXIgY2xlYXJfZnJvbSA9IG5ld19lbmQgKyAxO1xcbitcXG4rXFx0XFx0bWVtc2V0KGRzdF9zbG90cyArIGNsZWFyX2Zyb20sIDAsXFxuK1xcdFxcdCAgICAgICBzaXplb2Yodm9pZCBfX3JjdSAqKSAqIChub2RlX3Nsb3RzIC0gY2xlYXJfZnJvbSkpO1xcbitcXHRcXHRpZiAoY2xlYXJfZnJvbSBcXHUwMDNjIG5vZGVfcGl2b3RzKVxcbitcXHRcXHRcXHRtZW1zZXQoZHN0X3Bpdm90cyArIGNsZWFyX2Zyb20sIDAsXFxuK1xcdFxcdFxcdCAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZykgKiAobm9kZV9waXZvdHMgLSBjbGVhcl9mcm9tKSk7XFxuK1xcdH1cXG4rXFxuK1xcdG1hc19sZWFmX3NldF9tZXRhKG5ld25vZGUsIHdyX21hcy1cXHUwMDNldHlwZSwgbmV3X2VuZCk7XFxuIFxcdGlmIChpbl9yY3UpIHtcXG4gXFx0XFx0c3RydWN0IG1hcGxlX2Vub2RlICpvbGRfZW5vZGUgPSBtYXMtXFx1MDAzZW5vZGU7XFxuIFxcbkBAIC0zMjE4LDcgKzMzMTksNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX3Nsb3Rfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXFxuIFxcdHZvaWQgX19yY3UgKipzbG90cyA9IHdyX21hcy1cXHUwMDNlc2xvdHM7XFxuIFxcdGJvb2wgZ2FwID0gZmFsc2U7XFxuIFxcbi1cXHRnYXAgfD0gIW10X3Nsb3RfbG9ja2VkKG1hcy1cXHUwMDNldHJlZSwgc2xvdHMsIG9mZnNldCk7XFxuK1xcdGdhcCB8PSAhd3JfbWFzLVxcdTAwM2Vjb250ZW50O1xcbiBcXHRnYXAgfD0gIW10X3Nsb3RfbG9ja2VkKG1hcy1cXHUwMDNldHJlZSwgc2xvdHMsIG9mZnNldCArIDEpO1xcbiBcXG4gXFx0aWYgKHdyX21hcy1cXHUwMDNlb2Zmc2V0X2VuZCAtIG9mZnNldCA9PSAxKSB7XFxuQEAgLTM2NjEsNiArMzc2Miw5IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBzdG9yZV90eXBlIG1hc193cl9zdG9yZV90eXBlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxcbiB7XFxuIFxcdHN0cnVjdCBtYV9zdGF0ZSAqbWFzID0gd3JfbWFzLVxcdTAwM2VtYXM7XFxuIFxcdHVuc2lnbmVkIGNoYXIgbmV3X2VuZDtcXG4rXFx0Ym9vbCBhcHBlbmRpbmc7XFxuK1xcdGJvb2wgb25lX3Nsb3Q7XFxuK1xcdGJvb2wgaW5fcmN1O1xcbiBcXG4gXFx0aWYgKHVubGlrZWx5KG1hc19pc19ub25lKG1hcykgfHwgbWFzX2lzX3B0cihtYXMpKSlcXG4gXFx0XFx0cmV0dXJuIHdyX3N0b3JlX3Jvb3Q7XFxuQEAgLTM2ODAsMjEgKzM3ODQsMzAgQEAgc3RhdGljIGlubGluZSBlbnVtIHN0b3JlX3R5cGUgbWFzX3dyX3N0b3JlX3R5cGUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXFxuIFxcdFxcdHJldHVybiB3cl9uZXdfcm9vdDtcXG4gXFxuIFxcdG5ld19lbmQgPSBtYXNfd3JfbmV3X2VuZCh3cl9tYXMpO1xcbitcXHRpbl9yY3UgPSBtdF9pbl9yY3UobWFzLVxcdTAwM2V0cmVlKTtcXG4rXFx0YXBwZW5kaW5nID0gbWFzLVxcdTAwM2VvZmZzZXQgPT0gbWFzLVxcdTAwM2VlbmQ7XFxuK1xcdG9uZV9zbG90ID0gd3JfbWFzLVxcdTAwM2VvZmZzZXRfZW5kIC0gbWFzLVxcdTAwM2VvZmZzZXQgPT0gMTtcXG4rXFxuIFxcdC8qIFBvdGVudGlhbCBzcGFubmluZyByZWJhbGFuY2UgY29sbGFwc2luZyBhIG5vZGUgKi9cXG4gXFx0aWYgKG5ld19lbmQgXFx1MDAzYyBtdF9taW5fc2xvdHNbd3JfbWFzLVxcdTAwM2V0eXBlXSkge1xcbiBcXHRcXHRpZiAoIW10ZV9pc19yb290KG1hcy1cXHUwMDNlbm9kZSkpXFxuIFxcdFxcdFxcdHJldHVybiAgd3JfcmViYWxhbmNlO1xcbitcXHRcXHRpZiAoIWluX3JjdSkge1xcbitcXHRcXHRcXHRpZiAoYXBwZW5kaW5nKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gd3JfYXBwZW5kO1xcbitcXHRcXHRcXHRlbHNlIGlmIChtYXMtXFx1MDAzZWVuZCA9PSBuZXdfZW5kIFxcdTAwMjZcXHUwMDI2IG9uZV9zbG90KVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gd3Jfc2xvdF9zdG9yZTtcXG4rXFx0XFx0fVxcbiBcXHRcXHRyZXR1cm4gd3Jfbm9kZV9zdG9yZTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKG5ld19lbmQgXFx1MDAzZT0gbXRfc2xvdHNbd3JfbWFzLVxcdTAwM2V0eXBlXSlcXG4gXFx0XFx0cmV0dXJuIHdyX3NwbGl0X3N0b3JlO1xcbiBcXG4tXFx0aWYgKCFtdF9pbl9yY3UobWFzLVxcdTAwM2V0cmVlKSBcXHUwMDI2XFx1MDAyNiAobWFzLVxcdTAwM2VvZmZzZXQgPT0gbWFzLVxcdTAwM2VlbmQpKVxcbitcXHRpZiAoIWluX3JjdSBcXHUwMDI2XFx1MDAyNiBhcHBlbmRpbmcpXFxuIFxcdFxcdHJldHVybiB3cl9hcHBlbmQ7XFxuIFxcbi1cXHRpZiAoKG5ld19lbmQgPT0gbWFzLVxcdTAwM2VlbmQpIFxcdTAwMjZcXHUwMDI2ICghbXRfaW5fcmN1KG1hcy1cXHUwMDNldHJlZSkgfHxcXG4tXFx0XFx0KHdyX21hcy1cXHUwMDNlb2Zmc2V0X2VuZCAtIG1hcy1cXHUwMDNlb2Zmc2V0ID09IDEpKSlcXG4rXFx0aWYgKG5ld19lbmQgPT0gbWFzLVxcdTAwM2VlbmQgXFx1MDAyNlxcdTAwMjYgKCFpbl9yY3UgfHwgb25lX3Nsb3QpKVxcbiBcXHRcXHRyZXR1cm4gd3Jfc2xvdF9zdG9yZTtcXG4gXFxuIFxcdHJldHVybiB3cl9ub2RlX3N0b3JlO1xcbkBAIC0zNzkzLDI3ICszOTA2LDI5IEBAIGludCBtYXNfYWxsb2NfY3ljbGljKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nICpzdGFydHAsXFxuIFxcdFxcdHZvaWQgKmVudHJ5LCB1bnNpZ25lZCBsb25nIHJhbmdlX2xvLCB1bnNpZ25lZCBsb25nIHJhbmdlX2hpLFxcbiBcXHRcXHR1bnNpZ25lZCBsb25nICpuZXh0LCBnZnBfdCBnZnApXFxuIHtcXG4tXFx0dW5zaWduZWQgbG9uZyBtaW4gPSByYW5nZV9sbztcXG4tXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgbWluO1xcbiBcXG4tXFx0cmFuZ2VfbG8gPSBtYXgobWluLCAqbmV4dCk7XFxuLVxcdHJldCA9IG1hc19lbXB0eV9hcmVhKG1hcywgcmFuZ2VfbG8sIHJhbmdlX2hpLCAxKTtcXG4tXFx0aWYgKChtYXMtXFx1MDAzZXRyZWUtXFx1MDAzZW1hX2ZsYWdzIFxcdTAwMjYgTVRfRkxBR1NfQUxMT0NfV1JBUFBFRCkgXFx1MDAyNlxcdTAwMjYgcmV0ID09IDApIHtcXG4tXFx0XFx0bWFzLVxcdTAwM2V0cmVlLVxcdTAwM2VtYV9mbGFncyBcXHUwMDI2PSB+TVRfRkxBR1NfQUxMT0NfV1JBUFBFRDtcXG4tXFx0XFx0cmV0ID0gMTtcXG4tXFx0fVxcbi1cXHRpZiAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiByYW5nZV9sbyBcXHUwMDNlIG1pbikge1xcbi1cXHRcXHRtYXNfcmVzZXQobWFzKTtcXG4tXFx0XFx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCBtaW4sIHJhbmdlX2hpLCAxKTtcXG4tXFx0XFx0aWYgKHJldCA9PSAwKVxcbitcXHRtaW4gPSByYW5nZV9sbztcXG4rXFx0ZG8ge1xcbitcXHRcXHRyYW5nZV9sbyA9IG1heChtaW4sICpuZXh0KTtcXG4rXFx0XFx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCByYW5nZV9sbywgcmFuZ2VfaGksIDEpO1xcbitcXHRcXHRpZiAoKG1hcy1cXHUwMDNldHJlZS1cXHUwMDNlbWFfZmxhZ3MgXFx1MDAyNiBNVF9GTEFHU19BTExPQ19XUkFQUEVEKSBcXHUwMDI2XFx1MDAyNiByZXQgPT0gMCkge1xcbitcXHRcXHRcXHRtYXMtXFx1MDAzZXRyZWUtXFx1MDAzZW1hX2ZsYWdzIFxcdTAwMjY9IH5NVF9GTEFHU19BTExPQ19XUkFQUEVEO1xcbiBcXHRcXHRcXHRyZXQgPSAxO1xcbi1cXHR9XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IHJhbmdlX2xvIFxcdTAwM2UgbWluKSB7XFxuK1xcdFxcdFxcdG1hc19yZXNldChtYXMpO1xcbitcXHRcXHRcXHRyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIG1pbiwgcmFuZ2VfaGksIDEpO1xcbitcXHRcXHRcXHRpZiAocmV0ID09IDApXFxuK1xcdFxcdFxcdFxcdHJldCA9IDE7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRkbyB7XFxuIFxcdFxcdG1hc19pbnNlcnQobWFzLCBlbnRyeSk7XFxuIFxcdH0gd2hpbGUgKG1hc19ub21lbShtYXMsIGdmcCkpO1xcbitcXG4gXFx0aWYgKG1hc19pc19lcnIobWFzKSlcXG4gXFx0XFx0cmV0dXJuIHhhX2VycihtYXMtXFx1MDAzZW5vZGUpO1xcbiBcXG5AQCAtNDM2MCw2ICs0NDc1LDcgQEAgdm9pZCAqbWFzX3dhbGsoc3RydWN0IG1hX3N0YXRlICptYXMpXFxuIHtcXG4gXFx0dm9pZCAqZW50cnk7XFxuIFxcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiBcXHRpZiAoIW1hc19pc19hY3RpdmUobWFzKSBcXHUwMDI2XFx1MDAyNiAhbWFzX2lzX3N0YXJ0KG1hcykpXFxuIFxcdFxcdG1hcy1cXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XFxuIHJldHJ5OlxcbkBAIC00ODMxLDYgKzQ5NDcsNyBAQCB2b2lkICptYXNfc3RvcmUoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5KVxcbiB7XFxuIFxcdE1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBlbnRyeSk7XFxuIFxcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiBcXHR0cmFjZV9tYV93cml0ZShUUF9GQ1QsIG1hcywgMCwgZW50cnkpO1xcbiAjaWZkZWYgQ09ORklHX0RFQlVHX01BUExFX1RSRUVcXG4gXFx0aWYgKE1BU19XQVJOX09OKG1hcywgbWFzLVxcdTAwM2VpbmRleCBcXHUwMDNlIG1hcy1cXHUwMDNlbGFzdCkpXFxuQEAgLTQ4ODksNiArNTAwNiw3IEBAIGludCBtYXNfc3RvcmVfZ2ZwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSwgZ2ZwX3QgZ2ZwKVxcbiBcXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuK1xcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XFxuIHJldHJ5OlxcbiBcXHRtYXNfd3JfcHJlYWxsb2NhdGUoXFx1MDAyNndyX21hcywgZW50cnkpO1xcbiBcXHRpZiAodW5saWtlbHkobWFzX25vbWVtKG1hcywgZ2ZwKSkpIHtcXG5AQCAtNDkxOSw2ICs1MDM3LDcgQEAgdm9pZCBtYXNfc3RvcmVfcHJlYWxsb2Moc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5KVxcbiB7XFxuIFxcdE1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBlbnRyeSk7XFxuIFxcbitcXHRtYXNfbG9ja19jaGVjayhtYXMpO1xcbiBcXHRpZiAobWFzLVxcdTAwM2VzdG9yZV90eXBlID09IHdyX3N0b3JlX3Jvb3QpIHtcXG4gXFx0XFx0bWFzX3dyX3ByZWFsbG9jX3NldHVwKFxcdTAwMjZ3cl9tYXMpO1xcbiBcXHRcXHRnb3RvIHN0b3JlO1xcbkBAIC00OTUxLDYgKzUwNzAsNyBAQCBpbnQgbWFzX3ByZWFsbG9jYXRlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSwgZ2ZwX3QgZ2ZwKVxcbiB7XFxuIFxcdE1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBlbnRyeSk7XFxuIFxcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiBcXHRtYXNfd3JfcHJlYWxsb2Nfc2V0dXAoXFx1MDAyNndyX21hcyk7XFxuIFxcdG1hcy1cXHUwMDNlc3RvcmVfdHlwZSA9IG1hc193cl9zdG9yZV90eXBlKFxcdTAwMjZ3cl9tYXMpO1xcbiBcXHRtYXNfcHJlYWxsb2NfY2FsYyhcXHUwMDI2d3JfbWFzLCBlbnRyeSk7XFxuQEAgLTUwNzQsNiArNTE5NCw3IEBAIHZvaWQgKm1hc19uZXh0KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heClcXG4ge1xcbiBcXHR2b2lkICplbnRyeSA9IE5VTEw7XFxuIFxcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiBcXHRpZiAobWFzX25leHRfc2V0dXAobWFzLCBtYXgsIFxcdTAwMjZlbnRyeSkpXFxuIFxcdFxcdHJldHVybiBlbnRyeTtcXG4gXFxuQEAgLTUwOTcsNiArNTIxOCw3IEBAIHZvaWQgKm1hc19uZXh0X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heClcXG4ge1xcbiBcXHR2b2lkICplbnRyeSA9IE5VTEw7XFxuIFxcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiBcXHRpZiAobWFzX25leHRfc2V0dXAobWFzLCBtYXgsIFxcdTAwMjZlbnRyeSkpXFxuIFxcdFxcdHJldHVybiBlbnRyeTtcXG4gXFxuQEAgLTUyMDUsNiArNTMyNyw3IEBAIHZvaWQgKm1hc19wcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbilcXG4ge1xcbiBcXHR2b2lkICplbnRyeSA9IE5VTEw7XFxuIFxcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiBcXHRpZiAobWFzX3ByZXZfc2V0dXAobWFzLCBtaW4sIFxcdTAwMjZlbnRyeSkpXFxuIFxcdFxcdHJldHVybiBlbnRyeTtcXG4gXFxuQEAgLTUyMjgsNiArNTM1MSw3IEBAIHZvaWQgKm1hc19wcmV2X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbilcXG4ge1xcbiBcXHR2b2lkICplbnRyeSA9IE5VTEw7XFxuIFxcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiBcXHRpZiAobWFzX3ByZXZfc2V0dXAobWFzLCBtaW4sIFxcdTAwMjZlbnRyeSkpXFxuIFxcdFxcdHJldHVybiBlbnRyeTtcXG4gXFxuQEAgLTUyNzQsNiArNTM5OCw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG10X3ByZXYpO1xcbiAgKi9cXG4gdm9pZCBtYXNfcGF1c2Uoc3RydWN0IG1hX3N0YXRlICptYXMpXFxuIHtcXG4rXFx0bWFzX2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0bWFzLVxcdTAwM2VzdGF0dXMgPSBtYV9wYXVzZTtcXG4gXFx0bWFzLVxcdTAwM2Vub2RlID0gTlVMTDtcXG4gfVxcbkBAIC01MzgyLDYgKzU1MDcsNyBAQCB2b2lkICptYXNfZmluZChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpXFxuIHtcXG4gXFx0dm9pZCAqZW50cnkgPSBOVUxMO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0aWYgKG1hc19maW5kX3NldHVwKG1hcywgbWF4LCBcXHUwMDI2ZW50cnkpKVxcbiBcXHRcXHRyZXR1cm4gZW50cnk7XFxuIFxcbkBAIC01NDA5LDYgKzU1MzUsNyBAQCB2b2lkICptYXNfZmluZF9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpXFxuIHtcXG4gXFx0dm9pZCAqZW50cnkgPSBOVUxMO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0aWYgKG1hc19maW5kX3NldHVwKG1hcywgbWF4LCBcXHUwMDI2ZW50cnkpKVxcbiBcXHRcXHRyZXR1cm4gZW50cnk7XFxuIFxcbkBAIC01NDI4LDcgKzU1NTUsNiBAQCBFWFBPUlRfU1lNQk9MX0dQTChtYXNfZmluZF9yYW5nZSk7XFxuIHN0YXRpYyBib29sIG1hc19maW5kX3Jldl9zZXR1cChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4sXFxuIFxcdFxcdHZvaWQgKiplbnRyeSlcXG4ge1xcbi1cXG4gXFx0c3dpdGNoIChtYXMtXFx1MDAzZXN0YXR1cykge1xcbiBcXHRjYXNlIG1hX2FjdGl2ZTpcXG4gXFx0XFx0Z290byBhY3RpdmU7XFxuQEAgLTU1MjEsNiArNTY0Nyw3IEBAIHZvaWQgKm1hc19maW5kX3JldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pXFxuIHtcXG4gXFx0dm9pZCAqZW50cnkgPSBOVUxMO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0aWYgKG1hc19maW5kX3Jldl9zZXR1cChtYXMsIG1pbiwgXFx1MDAyNmVudHJ5KSlcXG4gXFx0XFx0cmV0dXJuIGVudHJ5O1xcbiBcXG5AQCAtNTU0Nyw2ICs1Njc0LDcgQEAgdm9pZCAqbWFzX2ZpbmRfcmFuZ2VfcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbilcXG4ge1xcbiBcXHR2b2lkICplbnRyeSA9IE5VTEw7XFxuIFxcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiBcXHRpZiAobWFzX2ZpbmRfcmV2X3NldHVwKG1hcywgbWluLCBcXHUwMDI2ZW50cnkpKVxcbiBcXHRcXHRyZXR1cm4gZW50cnk7XFxuIFxcbkBAIC01NTY0LDYgKzU2OTIsMTAgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWFzX2ZpbmRfcmFuZ2VfcmV2KTtcXG4gICogU2VhcmNoZXMgZm9yIEBtYXMtXFx1MDAzZWluZGV4LCBzZXRzIEBtYXMtXFx1MDAzZWluZGV4IGFuZCBAbWFzLVxcdTAwM2VsYXN0IHRvIHRoZSByYW5nZSBhbmRcXG4gICogZXJhc2VzIHRoYXQgcmFuZ2UuXFxuICAqXFxuKyAqIE5vdGUgdGhhdCBlcmFzZSByZXF1aXJlcyBhbGxvY2F0aW9ucyBhbmQgd2lsbCB1c2UgR0ZQX0tFUk5FTCB0byBkbyBzbyBpZlxcbisgKiBuZWNlc3NhcnkuICBJZiB0aGUgYWxsb2NhdGlvbiBmYWlscywgdGhlIGludGVybmFsIGxvY2sgd2lsbCBiZSBkcm9wcGVkIHRvXFxuKyAqIHJldHJ5LlxcbisgKlxcbiAgKiBSZXR1cm46IHRoZSBlbnRyeSB0aGF0IHdhcyBlcmFzZWQgb3IgJU5VTEwsIEBtYXMtXFx1MDAzZWluZGV4IGFuZCBAbWFzLVxcdTAwM2VsYXN0IGFyZSB1cGRhdGVkLlxcbiAgKi9cXG4gdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbkBAIC01NTcyLDYgKzU3MDQsMTQgQEAgdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbiBcXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gbWFzLVxcdTAwM2VpbmRleDtcXG4gXFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIE5VTEwpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogSW4gbG93IG1lbW9yeSBzaXR1YXRpb25zLCB0aGUgYWxsb2NhdGlvbiBpcyByZXRyaWVkIHdpdGggdGhlIGdmcCBmbGFnXFxuK1xcdCAqIEdGUF9LRVJORUwuICBUaGUgaW50ZXJuYWwgc3BpbmxvY2sgaXMgZHJvcHBlZCBpbiBtYXNfbm9tZW0oKSwgaG93ZXZlclxcbitcXHQgKiB0aGUgZXh0ZXJuYWwgbG9jayBpcyBub3QgZHJvcHBlZC5cXG4rXFx0ICovXFxuK1xcdGlmIChtdF9leHRlcm5hbF9sb2NrKG1hcy1cXHUwMDNldHJlZSkpXFxuK1xcdFxcdG1pZ2h0X2FsbG9jKEdGUF9LRVJORUwpO1xcbitcXG4gXFx0aWYgKCFtYXNfaXNfYWN0aXZlKG1hcykgfHwgIW1hc19pc19zdGFydChtYXMpKVxcbiBcXHRcXHRtYXMtXFx1MDAzZXN0YXR1cyA9IG1hX3N0YXJ0O1xcbiBcXG5AQCAtNTYwMSwxMCArNTc0MSwxMSBAQCBFWFBPUlRfU1lNQk9MX0dQTChtYXNfZXJhc2UpO1xcbiBcXG4gLyoqXFxuICAqIG1hc19ub21lbSgpIC0gQ2hlY2sgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGFsbG9jYXRpbmcgYW5kIGRvIHRoZSBhbGxvY2F0aW9uXFxuLSAqIGlmIG5lY2Vzc2FyeSBJZiB0aGVyZSBhcmUgYWxsb2NhdGlvbnMsIHRoZW4gZnJlZSB0aGVtLlxcbisgKiBpZiBuZWNlc3NhcnkuXFxuKyAqXFxuICAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZVxcbiAgKiBAZ2ZwOiBUaGUgR0ZQX0ZMQUdTIHRvIHVzZSBmb3IgYWxsb2NhdGlvbnNcXG4tICogUmV0dXJuOiB0cnVlIG9uIGFsbG9jYXRpb24sIGZhbHNlIG90aGVyd2lzZS5cXG4rICogUmV0dXJuOiBGYWxzZSBvbiBubyBtZW1vcnkuICBUcnVlIG90aGVyd2lzZSAocGFydGlhbCBzdWNjZXNzIGFzIHdlbGwpXFxuICAqL1xcbiBib29sIG1hc19ub21lbShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgZ2ZwX3QgZ2ZwKVxcbiBcXHRfX211c3RfaG9sZChtYXMtXFx1MDAzZXRyZWUtXFx1MDAzZW1hX2xvY2spXFxuQEAgLTU2MTIsNiArNTc1MywxMCBAQCBib29sIG1hc19ub21lbShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgZ2ZwX3QgZ2ZwKVxcbiBcXHRpZiAobGlrZWx5KG1hcy1cXHUwMDNlbm9kZSAhPSBNQV9FUlJPUigtRU5PTUVNKSkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuK1xcdC8qIEFsbG9jYXRpb25zIGNhbiBmYWlsLCBkb24ndCBkbyB0aGlzLiAqL1xcbitcXHRXQVJOX09OX09OQ0UoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICBtdF9leHRlcm5hbF9sb2NrKG1hcy1cXHUwMDNldHJlZSkpO1xcbitcXG4gXFx0aWYgKGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkgXFx1MDAyNlxcdTAwMjYgIW10X2V4dGVybmFsX2xvY2sobWFzLVxcdTAwM2V0cmVlKSkge1xcbiBcXHRcXHRtdHJlZV91bmxvY2sobWFzLVxcdTAwM2V0cmVlKTtcXG4gXFx0XFx0bWFzX2FsbG9jX25vZGVzKG1hcywgZ2ZwKTtcXG5AQCAtNTYyMCwxMCArNTc2NSwxNyBAQCBib29sIG1hc19ub21lbShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgZ2ZwX3QgZ2ZwKVxcbiBcXHRcXHRtYXNfYWxsb2Nfbm9kZXMobWFzLCBnZnApO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIW1hcy1cXHUwMDNlc2hlYWYgXFx1MDAyNlxcdTAwMjYgIW1hcy1cXHUwMDNlYWxsb2MpXFxuK1xcdC8qXFxuK1xcdCAqIFJldHVybiBmYWxzZSBvbiB6ZXJvIGZvcndhcmQgcHJvZ3Jlc3MuICBQYXJ0aWFsIGFsbG9jYXRpb25zIGFyZSBrZXB0XFxuK1xcdCAqIHNvIHRoZSByZXRyeSBwYXRoIHdpbGwgYXR0ZW1wdCB0byBnZXQgdGhlIHJlc3QuICBUaGUgZmFpbHVyZSBzaG91bGRcXG4rXFx0ICogbm90IGhhcHBlbiBhcyB3ZSB0cnkgb3VyIGJlc3QgdG8gcmVjbGFpbS4gIFRoZSB1c2VyIHdvdWxkIG5lZWQgYW5cXG4rXFx0ICogZXh0ZXJuYWwgbG9jayB3aXRoIGEgbm9uLWJsb2NraW5nIGdmcCBpbiBhIGxvdyBtZW1vcnkgc2l0dWF0aW9uIC1cXG4rXFx0ICogd2hpY2ggd291bGQgaGF2ZSB0cmlnZ2VyZWQgdGhlIGZpcnN0IHdhcm5pbmcgaW4gdGhpcyBmdW5jdGlvbi5cXG4rXFx0ICovXFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIW1hcy1cXHUwMDNlc2hlYWYgXFx1MDAyNlxcdTAwMjYgIW1hcy1cXHUwMDNlYWxsb2MpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRtYXMtXFx1MDAzZXN0YXR1cyA9IG1hX3N0YXJ0O1xcbitcXHRtYXNfcmVzZXQobWFzKTtcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuQEAgLTU5MTMsNiArNjA2NSwxMCBAQCBFWFBPUlRfU1lNQk9MKG10cmVlX2FsbG9jX3JyYW5nZSk7XFxuICAqIEVyYXNpbmcgaXMgdGhlIHNhbWUgYXMgYSB3YWxrIHRvIGFuIGVudHJ5IHRoZW4gYSBzdG9yZSBvZiBhIE5VTEwgdG8gdGhhdFxcbiAgKiBFTlRJUkUgcmFuZ2UuICBJbiBmYWN0LCBpdCBpcyBpbXBsZW1lbnRlZCBhcyBzdWNoIHVzaW5nIHRoZSBhZHZhbmNlZCBBUEkuXFxuICAqXFxuKyAqIE5vdGUgdGhhdCBlcmFzZSByZXF1aXJlcyBhbGxvY2F0aW9ucyBhbmQgd2lsbCB1c2UgR0ZQX0tFUk5FTCB0byBkbyBzbyBpZlxcbisgKiBuZWNlc3NhcnkuICBJZiB0aGUgYWxsb2NhdGlvbiBmYWlscywgdGhlIGludGVybmFsIGxvY2sgd2lsbCBiZSBkcm9wcGVkIHRvXFxuKyAqIHJldHJ5LlxcbisgKlxcbiAgKiBSZXR1cm46IFRoZSBlbnRyeSBzdG9yZWQgYXQgdGhlIEBpbmRleCBvciAlTlVMTFxcbiAgKi9cXG4gdm9pZCAqbXRyZWVfZXJhc2Uoc3RydWN0IG1hcGxlX3RyZWUgKm10LCB1bnNpZ25lZCBsb25nIGluZGV4KVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jXFxuaW5kZXggMDYwNzkxM2EzMDIyZDUuLmQ5NjdlNzZhM2MwNjUwIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNcXG5AQCAtMzUyMzQsNyArMzUyMzQsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfcHJlYWxsb2Moc3RydWN0IG1hcGxlX3RyZWUgKm10KVxcbiBcXHRtdF9zZXRfbm9uX2tlcm5lbCgxKTtcXG4gXFx0LyogU3Bhbm5pbmcgc3RvcmUgKi9cXG4gXFx0bWFzX3NldF9yYW5nZShcXHUwMDI2bWFzLCAxLCAxMDApO1xcbi1cXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcXHUwMDI2bWFzLCBwdHIsIEdGUF9LRVJORUwgXFx1MDAyNiBHRlBfTk9XQUlUKSA9PSAwKTtcXG4rXFx0TVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoXFx1MDAyNm1hcywgcHRyLCBHRlBfTk9XQUlUKSA9PSAwKTtcXG4gXFx0YWxsb2NhdGVkID0gbWFzX2FsbG9jYXRlZChcXHUwMDI2bWFzKTtcXG4gXFx0aGVpZ2h0ID0gbWFzX210X2hlaWdodChcXHUwMDI2bWFzKTtcXG4gXFx0TVRfQlVHX09OKG10LCBhbGxvY2F0ZWQgIT0gMCk7XFxuQEAgLTM1MjU3LDcgKzM1MjU3LDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGNoZWNrX3ByZWFsbG9jKHN0cnVjdCBtYXBsZV90cmVlICptdClcXG4gXFx0TVRfQlVHX09OKG10LCBtYXNfYWxsb2NhdGVkKFxcdTAwMjZtYXMpICE9IDApO1xcbiBcXHRtYXNfc2V0X3JhbmdlKFxcdTAwMjZtYXMsIDAsIDIwMCk7XFxuIFxcdG10X3NldF9ub25fa2VybmVsKDEpO1xcbi1cXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcXHUwMDI2bWFzLCBwdHIsIEdGUF9LRVJORUwgXFx1MDAyNiBHRlBfTk9XQUlUKSA9PSAwKTtcXG4rXFx0TVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoXFx1MDAyNm1hcywgcHRyLCBHRlBfTk9XQUlUKSA9PSAwKTtcXG4gXFx0YWxsb2NhdGVkID0gbWFzX2FsbG9jYXRlZChcXHUwMDI2bWFzKTtcXG4gXFx0aGVpZ2h0ID0gbWFzX210X2hlaWdodChcXHUwMDI2bWFzKTtcXG4gXFx0TVRfQlVHX09OKG10LCBhbGxvY2F0ZWQgIT0gMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA0OjIzOjQ3LjAzMjMxMjc0N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0NzA4NzAxMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVCVUdfTUFQTEVfVFJFRVwiLFxuICAgIFwiUFJPVkVfTE9DS0lOR1wiLFxuICAgIFwiTE9DS0RFUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hc19hbGxvY19jeWNsaWNcIixcbiAgICBcIm1hc19lcmFzZVwiLFxuICAgIFwibXRyZWVfZXJhc2VcIixcbiAgICBcIm1hc19ub21lbVwiLFxuICAgIFwibG9ja19zZXF1ZW5jZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbG9jayBzZXF1ZW5jZSB2YWxpZGF0aW9uIGZvciBtYXBsZSB0cmVlIG9wZXJhdGlvbnMgdXNpbmcgbG9ja2RlcCwgYW5kIG9wdGltaXplcyBtYXBsZSB0cmVlIG5vZGUgc3RvcmUgb3BlcmF0aW9ucyBhbmQgcGFyZW50IHBvaW50ZXIgdXBkYXRlcy4gSXQgYWxzbyBmaXhlcyB3cmFwLWFyb3VuZCBoYW5kbGluZyBpbiBgbWFzX2FsbG9jX2N5Y2xpY2AgYW5kIG1vZGlmaWVzIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yIGluIGBtYXNfZXJhc2VgIGFuZCBgbWFzX25vbWVtYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvY2tpbmcgdmFsaWRhdGlvbiwgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjVhYWU2ODFjNzNkYWU3ZmVhYWIwMTNjMTYwOTUyNjljMDFmYWJhYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMDQ6MjM6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdFxuaW5kZXggY2NkZDE2MTVjZjk3NGYuLjFlYWUyNGE5YzE4YjRhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdFxuQEAgLTE3LDcgKzE3LDggQEAgc3VwcG9ydHMgaXRlcmF0aW5nIG92ZXIgYSByYW5nZSBvZiBlbnRyaWVzIGFuZCBnb2luZyB0byB0aGUgcHJldmlvdXMgb3IgbmV4dFxuIGVudHJ5IGluIGEgY2FjaGUtZWZmaWNpZW50IG1hbm5lci4gIFRoZSB0cmVlIGNhbiBhbHNvIGJlIHB1dCBpbnRvIGFuIFJDVS1zYWZlXG4gbW9kZSBvZiBvcGVyYXRpb24gd2hpY2ggYWxsb3dzIHJlYWRpbmcgYW5kIHdyaXRpbmcgY29uY3VycmVudGx5LiAgV3JpdGVycyBtdXN0XG4gc3luY2hyb25pemUgb24gYSBsb2NrLCB3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQgc3BpbmxvY2ssIG9yIHRoZSB1c2VyIGNhbiBzZXRcbi10aGUgbG9jayB0byBhbiBleHRlcm5hbCBsb2NrIG9mIGEgZGlmZmVyZW50IHR5cGUuXG4rdGhlIGxvY2sgdG8gYW4gZXh0ZXJuYWwgbG9jayBvZiBhIGRpZmZlcmVudCB0eXBlLiAgTm90ZSB0aGF0IGV4dGVybmFsIGxvY2tzIG1heVxuK2ludGVyZmVyZSB3aXRoIGFsbG9jYXRpb25zIGluIGEgbG93IG1lbW9yeSBzaXR1YXRpb24uXG4gXG4gVGhlIE1hcGxlIFRyZWUgbWFpbnRhaW5zIGEgc21hbGwgbWVtb3J5IGZvb3RwcmludCBhbmQgd2FzIGRlc2lnbmVkIHRvIHVzZVxuIG1vZGVybiBwcm9jZXNzb3IgY2FjaGUgZWZmaWNpZW50bHkuICBUaGUgbWFqb3JpdHkgb2YgdGhlIHVzZXJzIHdpbGwgYmUgYWJsZSB0b1xuQEAgLTQyLDYgKzQzLDE1IEBAIHN1Y2Nlc3NmdWwgc3RvcmUgb3BlcmF0aW9uIHdpdGhpbiBhIGdpdmVuXG4gY29kZSBzZWdtZW50IHdoZW4gYWxsb2NhdGluZyBjYW5ub3QgYmUgZG9uZS4gIEFsbG9jYXRpb25zIG9mIG5vZGVzIGFyZVxuIHJlbGF0aXZlbHkgc21hbGwgYXQgYXJvdW5kIDI1NiBieXRlcy5cbiBcbitTaW5jZSB0aGUgbWFwbGUgdHJlZSB1c2VzIGludGVybmFsIG5vZGVzIHRoYXQgYXJlIGFsbG9jYXRlZCBhbmQgaGFzIHJ1bGVzIG9uXG4rZGF0YSBkZW5zaXR5LCBlcmFzaW5nIGFuIGVudHJ5IG1heSBjYXVzZSBhbGxvY2F0aW9ucyB0byBvY2N1ci4gIFRoYXQgaXMsXG4rZXJhc2luZyBhbiBlbnRyeSBtYXkgY29uc3VtZSBtZW1vcnkuICBVc2VycyBtdXN0IHRha2UgY2FyZSB0byBlbnN1cmUgdGhhdCB0aGV5XG4rZG8gbm90IHZpb2xhdGUgdGhlIGxhcmdlciBzeXN0ZW0gY29uc3RyYWludHMgb24gd2hlbiBhbmQgaG93IG1lbW9yeSBpc1xuK2FsbG9jYXRlZC4gIE1vc3Qgc2l0dWF0aW9ucyBhcmUgZmluZSB0byBhbGxvY2F0ZSwgYnV0IHRoZSBwcmUtYWxsb2NhdGlvblxuK3N1cHBvcnQgaXMgcHJvdmlkZWQgYXMgYSBtZWNoYW5pc20gdG8gYXZvaWQgdHJpY2tpZXIgc2l0dWF0aW9ucy4gIFRoZXJlIGlzIGFsc29cbit0aGUgcG9zc2liaWxpdHkgb2YgdXNpbmcgc3BlY2lhbCBlbnRyaWVzIGFuZCBjbGVhbiB1cCB0aGUgdHJlZSBsYXRlciwgaW5cbitleHRyZW1lIGNpcmN1bXN0YW5jZXMuXG4rXG4gLi4gX21hcGxlLXRyZWUtbm9ybWFsLWFwaTpcbiBcbiBOb3JtYWwgQVBJXG5AQCAtNjMsNyArNzMsOCBAQCBzdWNjZXNzIG9yIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlLiAgbXRyZWVfc3RvcmVfcmFuZ2UoKSB3b3JrcyBpbiB0aGUgc2FtZSB3YXlcbiBidXQgdGFrZXMgYSByYW5nZS4gIG10cmVlX2xvYWQoKSBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBlbnRyeSBzdG9yZWQgYXQgYVxuIGdpdmVuIGluZGV4LiAgWW91IGNhbiB1c2UgbXRyZWVfZXJhc2UoKSB0byBlcmFzZSBhbiBlbnRpcmUgcmFuZ2UgYnkgb25seVxuIGtub3dpbmcgb25lIHZhbHVlIHdpdGhpbiB0aGF0IHJhbmdlLCBvciBtdHJlZV9zdG9yZSgpIGNhbGwgd2l0aCBhbiBlbnRyeSBvZlxuLU5VTEwgbWF5IGJlIHVzZWQgdG8gcGFydGlhbGx5IGVyYXNlIGEgcmFuZ2Ugb3IgbWFueSByYW5nZXMgYXQgb25jZS5cbitOVUxMIG1heSBiZSB1c2VkIHRvIHBhcnRpYWxseSBlcmFzZSBhIHJhbmdlIG9yIG1hbnkgcmFuZ2VzIGF0IG9uY2UuICBOb3RlIHRoYXRcbittdHJlZV9lcmFzZSgpIG1heSB1c2UgR0ZQX0tFUk5FTCBvbiBhbGxvY2F0aW9ucy5cbiBcbiBJZiB5b3Ugd2FudCB0byBvbmx5IHN0b3JlIGEgbmV3IGVudHJ5IHRvIGEgcmFuZ2UgKG9yIGluZGV4KSBpZiB0aGF0IHJhbmdlIGlzXG4gY3VycmVudGx5IGBgTlVMTGBgLCB5b3UgY2FuIHVzZSBtdHJlZV9pbnNlcnRfcmFuZ2UoKSBvciBtdHJlZV9pbnNlcnQoKSB3aGljaFxuQEAgLTE2Myw3ICsxNzQsOSBAQCBZb3UgY2FuIHVzZSBtYXNfZXJhc2UoKSB0byBlcmFzZSBhbiBlbnRpcmUgcmFuZ2UgYnkgc2V0dGluZyBpbmRleCBhbmRcbiBsYXN0IG9mIHRoZSBtYXBsZSBzdGF0ZSB0byB0aGUgZGVzaXJlZCByYW5nZSB0byBlcmFzZS4gIFRoaXMgd2lsbCBlcmFzZVxuIHRoZSBmaXJzdCByYW5nZSB0aGF0IGlzIGZvdW5kIGluIHRoYXQgcmFuZ2UsIHNldCB0aGUgbWFwbGUgc3RhdGUgaW5kZXhcbiBhbmQgbGFzdCBhcyB0aGUgcmFuZ2UgdGhhdCB3YXMgZXJhc2VkIGFuZCByZXR1cm4gdGhlIGVudHJ5IHRoYXQgZXhpc3RlZFxuLWF0IHRoYXQgbG9jYXRpb24uXG4rYXQgdGhhdCBsb2NhdGlvbi4gIE5vdGUgdGhhdCBtYXNfZXJhc2UoKSBtYXkgYWxsb2NhdGUgd2l0aCB0aGUgR0ZQX0tFUk5FTCBmbGFnLlxuK0lmIHRoaXMgaXMgbm90IG9rYXksIGNvbnNpZGVyIHVzaW5nIG1hc19zdG9yZV9nZnAoKSBhbmQgcGFzcyBpdCBhIGBgTlVMTGBgLFxuK2FmdGVyIHNldHRpbmcgdXAgdGhlIGNvcnJlY3QgcmFuZ2UgYnkgd2Fsa2luZyB0byB0aGUgZW50cnkuXG4gXG4gWW91IGNhbiB3YWxrIGVhY2ggZW50cnkgd2l0aGluIGEgcmFuZ2UgYnkgdXNpbmcgbWFzX2Zvcl9lYWNoKCkuICBJZiB5b3Ugd2FudFxuIHRvIHdhbGsgZWFjaCBlbGVtZW50IG9mIHRoZSB0cmVlIHRoZW4gYGAwYGAgYW5kIGBgVUxPTkdfTUFYYGAgbWF5IGJlIHVzZWQgYXNcbkBAIC0yMTEsNyArMjI0LDcgQEAgQWR2YW5jZWQgTG9ja2luZ1xuIFxuIFRoZSBtYXBsZSB0cmVlIHVzZXMgYSBzcGlubG9jayBieSBkZWZhdWx0LCBidXQgZXh0ZXJuYWwgbG9ja3MgY2FuIGJlIHVzZWQgZm9yXG4gdHJlZSB1cGRhdGVzIGFzIHdlbGwuICBUbyB1c2UgYW4gZXh0ZXJuYWwgbG9jaywgdGhlIHRyZWUgbXVzdCBiZSBpbml0aWFsaXplZFxuLXdpdGggdGhlIGBgTVRfRkxBR1NfTE9DS19FWFRFUk4gZmxhZ2BgLCB0aGlzIGlzIHVzdWFsbHkgZG9uZSB3aXRoIHRoZVxuK3dpdGggdGhlIGBgTVRfRkxBR1NfTE9DS19FWFRFUk5gYCBmbGFnLCB0aGlzIGlzIHVzdWFsbHkgZG9uZSB3aXRoIHRoZVxuIE1UUkVFX0lOSVRfRVhUKCkgI2RlZmluZSwgd2hpY2ggdGFrZXMgYW4gZXh0ZXJuYWwgbG9jayBhcyBhbiBhcmd1bWVudC5cbiBcbiBGdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oXG5pbmRleCA2MjE1NjYzNDU0MDZkZC4uYTY0NTFlY2JiZTlhMDUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcbkBAIC0yNzMsNiArMjczLDkgQEAgZXh0ZXJuIHN0cnVjdCBwaW5fY29va2llIGxvY2tfcGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKTtcbiBleHRlcm4gdm9pZCBsb2NrX3JlcGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSk7XG4gZXh0ZXJuIHZvaWQgbG9ja191bnBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUpO1xuIFxuK2V4dGVybiB1MzIgbG9ja19zZXF1ZW5jZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spO1xuKyNkZWZpbmUgbG9ja2RlcF9zZXF1ZW5jZShsb2NrKVx0bG9ja19zZXF1ZW5jZShcdTAwMjYobG9jayktXHUwMDNlZGVwX21hcClcbitcbiAjZGVmaW5lIGxvY2tkZXBfZGVwdGgodHNrKVx0KGRlYnVnX2xvY2tzID8gKHRzayktXHUwMDNlbG9ja2RlcF9kZXB0aCA6IDApXG4gXG4gI2RlZmluZSBsb2NrZGVwX2Fzc2VydChjb25kKVx0XHRcXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmhcbmluZGV4IGVhZTExNWEyNjQ4ODU2Li41NWM0YjE1MmZlZGY3YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaFxuQEAgLTI1Myw3ICsyNTMsOCBAQCBzdHJ1Y3QgaGVsZF9sb2NrIHtcbiBcdHVuc2lnbmVkIGludCBoYXJkaXJxc19vZmY6MTtcbiBcdHVuc2lnbmVkIGludCBzeW5jOjE7XG4gXHR1bnNpZ25lZCBpbnQgcmVmZXJlbmNlczoxMTtcdFx0XHRcdFx0LyogMzIgYml0cyAqL1xuLVx0dW5zaWduZWQgaW50IHBpbl9jb3VudDtcbitcdHVuc2lnbmVkIGludCBwaW5fY291bnQ6MjQ7XG4rXHR1bnNpZ25lZCBpbnQgc2VxX2NvdW50Ojg7XG4gfTtcbiBcbiAjZWxzZSAvKiAhQ09ORklHX0xPQ0tERVAgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaCBiL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oXG5pbmRleCA0YTU2MzE5MDZhZmZiNS4uNWUwYmQyODU3ZDk0MWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcbkBAIC0yOSwxMyArMjksMTEgQEBcbiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFNcdDMxXHQvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC1cdTAwM2VwYXJlbnQgKi9cbiAjZGVmaW5lIE1BUExFX1JBTkdFNjRfU0xPVFNcdDE2XHQvKiAyNTYgYnl0ZXMgKi9cbiAjZGVmaW5lIE1BUExFX0FSQU5HRTY0X1NMT1RTXHQxMFx0LyogMjQwIGJ5dGVzICovXG4tI2RlZmluZSBNQVBMRV9BTExPQ19TTE9UU1x0KE1BUExFX05PREVfU0xPVFMgLSAxKVxuICNlbHNlXG4gLyogMzJiaXQgc2l6ZXMgKi9cbiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFNcdDYzXHQvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC1cdTAwM2VwYXJlbnQgKi9cbiAjZGVmaW5lIE1BUExFX1JBTkdFNjRfU0xPVFNcdDMyXHQvKiAyNTYgYnl0ZXMgKi9cbiAjZGVmaW5lIE1BUExFX0FSQU5HRTY0X1NMT1RTXHQyMVx0LyogMjQwIGJ5dGVzICovXG4tI2RlZmluZSBNQVBMRV9BTExPQ19TTE9UU1x0KE1BUExFX05PREVfU0xPVFMgLSAyKVxuICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR182NEJJVCkgfHwgZGVmaW5lZChCVUlMRF9WRFNPMzJfNjQpICovXG4gXG4gI2RlZmluZSBNQVBMRV9OT0RFX01BU0tcdFx0MjU1VUxcbkBAIC00ODUsNiArNDgzLDEyIEBAIHN0cnVjdCBtYV9zdGF0ZSB7XG4gXHR1bnNpZ25lZCBjaGFyIG1hc19mbGFncztcbiBcdHVuc2lnbmVkIGNoYXIgZW5kO1x0XHQvKiBUaGUgZW5kIG9mIHRoZSBub2RlICovXG4gXHRlbnVtIHN0b3JlX3R5cGUgc3RvcmVfdHlwZTtcdC8qIFRoZSB0eXBlIG9mIHN0b3JlIG5lZWRlZCBmb3IgdGhpcyBvcGVyYXRpb24gKi9cbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcbitcdHUzMiBsZF9zZXE7XG4rI2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxuK1x0dW5zaWduZWQgbG9uZyByY3VfZ3A7XG4rI2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xuKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xuIH07XG4gXG4gc3RydWN0IG1hX3dyX3N0YXRlIHtcbkBAIC01NzIsNyArNTc2LDcgQEAgdm9pZCBtYXBsZV90cmVlX2luaXQodm9pZCk7XG4gdm9pZCBtYXNfZGVzdHJveShzdHJ1Y3QgbWFfc3RhdGUgKm1hcyk7XG4gXG4gdm9pZCAqbWFzX3ByZXYoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKTtcbi12b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xuK3ZvaWQgKm1hc19wcmV2X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbik7XG4gdm9pZCAqbWFzX25leHQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KTtcbiB2b2lkICptYXNfbmV4dF9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuaW5kZXggMzczYmNjMDU5OGQxMGIuLjE0ZDVjZThkZDYxMzY1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbkBAIC0xMjg4LDYgKzEyODgsNyBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3Qge1xuIFx0dTY0XHRcdFx0XHRjdXJyX2NoYWluX2tleTtcbiBcdGludFx0XHRcdFx0bG9ja2RlcF9kZXB0aDtcbiBcdHVuc2lnbmVkIGludFx0XHRcdGxvY2tkZXBfcmVjdXJzaW9uO1xuK1x0dW5zaWduZWQgaW50XHRcdFx0bG9ja2RlcF9zZXE7XG4gXHRzdHJ1Y3QgaGVsZF9sb2NrXHRcdGhlbGRfbG9ja3NbTUFYX0xPQ0tfREVQVEhdO1xuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuaW5kZXggMmQ0YzViYWI1YWY4ODcuLmIyYjBhNTA2OTYwYjE2IDEwMDY0NFxuLS0tIGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG4rKysgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbkBAIC01MDc3LDcgKzUwNzcsNyBAQCBzdGF0aWMgaW50IF9fbG9ja19pc19oZWxkKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgaW50IHJlYWQpO1xuIHN0YXRpYyBpbnQgX19sb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsXG4gXHRcdFx0ICBpbnQgdHJ5bG9jaywgaW50IHJlYWQsIGludCBjaGVjaywgaW50IGhhcmRpcnFzX29mZixcbiBcdFx0XHQgIHN0cnVjdCBsb2NrZGVwX21hcCAqbmVzdF9sb2NrLCB1bnNpZ25lZCBsb25nIGlwLFxuLVx0XHRcdCAgaW50IHJlZmVyZW5jZXMsIGludCBwaW5fY291bnQsIGludCBzeW5jKVxuK1x0XHRcdCAgaW50IHJlZmVyZW5jZXMsIGludCBwaW5fY291bnQsIGludCBzeW5jLCBpbnQgc2VxKVxuIHtcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7XG4gXHRzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBOVUxMO1xuQEAgLTUxODMsNiArNTE4Myw3IEBAIHN0YXRpYyBpbnQgX19sb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsXG4gXHRobG9jay1cdTAwM2Vob2xkdGltZV9zdGFtcCA9IGxvY2tzdGF0X2Nsb2NrKCk7XG4gI2VuZGlmXG4gXHRobG9jay1cdTAwM2VwaW5fY291bnQgPSBwaW5fY291bnQ7XG4rXHRobG9jay1cdTAwM2VzZXFfY291bnQgPSBzZXE7XG4gXG4gXHRpZiAoY2hlY2tfd2FpdF9jb250ZXh0KGN1cnIsIGhsb2NrKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNTM4OCw3ICs1Mzg5LDcgQEAgc3RhdGljIGludCByZWFjcXVpcmVfaGVsZF9sb2NrcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHVuc2lnbmVkIGludCBkZXB0aCxcbiBcdFx0XHRcdCAgICBobG9jay1cdTAwM2VyZWFkLCBobG9jay1cdTAwM2VjaGVjayxcbiBcdFx0XHRcdCAgICBobG9jay1cdTAwM2VoYXJkaXJxc19vZmYsXG4gXHRcdFx0XHQgICAgaGxvY2stXHUwMDNlbmVzdF9sb2NrLCBobG9jay1cdTAwM2VhY3F1aXJlX2lwLFxuLVx0XHRcdFx0ICAgIGhsb2NrLVx1MDAzZXJlZmVyZW5jZXMsIGhsb2NrLVx1MDAzZXBpbl9jb3VudCwgMCkpIHtcbitcdFx0XHRcdCAgICBobG9jay1cdTAwM2VyZWZlcmVuY2VzLCBobG9jay1cdTAwM2VwaW5fY291bnQsIDAsIGhsb2NrLVx1MDAzZXNlcV9jb3VudCkpIHtcbiBcdFx0Y2FzZSAwOlxuIFx0XHRcdHJldHVybiAxO1xuIFx0XHRjYXNlIDE6XG5AQCAtNTY4NCw2ICs1Njg1LDI0IEBAIHN0YXRpYyB2b2lkIF9fbG9ja191bnBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUgY29va2llXG4gXHRXQVJOKDEsIFwidW5waW5uaW5nIGFuIHVuaGVsZCBsb2NrXFxuXCIpO1xuIH1cbiBcbitzdGF0aWMgdTMyIF9fbG9ja19zZXF1ZW5jZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spXG4re1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDtcbitcdGludCBpO1xuK1xuK1x0aWYgKHVubGlrZWx5KCFkZWJ1Z19sb2NrcykpXG4rXHRcdHJldHVybiB+MDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGN1cnItXHUwMDNlbG9ja2RlcF9kZXB0aDsgaSsrKSB7XG4rXHRcdHN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrID0gY3Vyci1cdTAwM2VoZWxkX2xvY2tzICsgaTtcbitcbitcdFx0aWYgKG1hdGNoX2hlbGRfbG9jayhobG9jaywgbG9jaykpXG4rXHRcdFx0cmV0dXJuIGhsb2NrLVx1MDAzZXNlcV9jb3VudDtcbitcdH1cbitcbitcdHJldHVybiB+MDtcbit9XG4rXG4gLypcbiAgKiBDaGVjayB3aGV0aGVyIHdlIGZvbGxvdyB0aGUgaXJxLWZsYWdzIHN0YXRlIHByZWNpc2VseTpcbiAgKi9cbkBAIC01ODY2LDcgKzU4ODUsOCBAQCB2b2lkIGxvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcyxcbiBcbiBcdGxvY2tkZXBfcmVjdXJzaW9uX2luYygpO1xuIFx0X19sb2NrX2FjcXVpcmUobG9jaywgc3ViY2xhc3MsIHRyeWxvY2ssIHJlYWQsIGNoZWNrLFxuLVx0XHQgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDAsIDAsIDApO1xuK1x0XHQgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDAsIDAsIDAsXG4rXHRcdCAgICAgICArK2N1cnJlbnQtXHUwMDNlbG9ja2RlcF9zZXEpO1xuIFx0bG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7XG4gXHRyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuIH1cbkBAIC01OTE0LDcgKzU5MzQsOCBAQCB2b2lkIGxvY2tfc3luYyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIHN1YmNsYXNzLCBpbnQgcmVhZCxcbiBcbiBcdGxvY2tkZXBfcmVjdXJzaW9uX2luYygpO1xuIFx0X19sb2NrX2FjcXVpcmUobG9jaywgc3ViY2xhc3MsIDAsIHJlYWQsIGNoZWNrLFxuLVx0XHQgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDAsIDAsIDEpO1xuK1x0XHQgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDAsIDAsIDEsXG4rXHRcdCAgICAgICArK2N1cnJlbnQtXHUwMDNlbG9ja2RlcF9zZXEpO1xuIFx0Y2hlY2tfY2hhaW5fa2V5KGN1cnJlbnQpO1xuIFx0bG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7XG4gXHRyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuQEAgLTYwMDAsNiArNjAyMSwyNiBAQCB2b2lkIGxvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llIGNvb2tpZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobG9ja191bnBpbl9sb2NrKTtcbiBcbit1MzIgbG9ja19zZXF1ZW5jZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spXG4re1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHUzMiBzZXEgPSB+MDtcbitcbitcdGlmICh1bmxpa2VseSghbG9ja2RlcF9lbmFibGVkKCkpKVxuK1x0XHRyZXR1cm4gc2VxO1xuK1xuK1x0cmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTtcbitcdGNoZWNrX2ZsYWdzKGZsYWdzKTtcbitcbitcdGxvY2tkZXBfcmVjdXJzaW9uX2luYygpO1xuK1x0c2VxID0gX19sb2NrX3NlcXVlbmNlKGxvY2spO1xuK1x0bG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7XG4rXHRyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xuK1xuK1x0cmV0dXJuIHNlcTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwobG9ja19zZXF1ZW5jZSk7XG4rXG4gI2lmZGVmIENPTkZJR19MT0NLX1NUQVRcbiBzdGF0aWMgdm9pZCBwcmludF9sb2NrX2NvbnRlbnRpb25fYnVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycixcbiBcdFx0XHRcdCAgICAgIHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jayxcbmRpZmYgLS1naXQgYS9saWIvbWFwbGVfdHJlZS5jIGIvbGliL21hcGxlX3RyZWUuY1xuaW5kZXggZTUyODc2NDM1Yjc3ZjAuLjZkNzFmZGM0MTQ3MDY0IDEwMDY0NFxuLS0tIGEvbGliL21hcGxlX3RyZWUuY1xuKysrIGIvbGliL21hcGxlX3RyZWUuY1xuQEAgLTQ2OSw3ICs0NjksNyBAQCBzdGF0aWMgaW5saW5lXG4gdm9pZCBtYXNfc2V0X3BhcmVudChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICplbm9kZSxcbiBcdFx0ICAgIGNvbnN0IHN0cnVjdCBtYXBsZV9lbm9kZSAqcGFyZW50LCB1bnNpZ25lZCBjaGFyIHNsb3QpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyB2YWwgPSAodW5zaWduZWQgbG9uZylwYXJlbnQ7XG4rXHR1bnNpZ25lZCBsb25nIHZhbDtcbiBcdHVuc2lnbmVkIGxvbmcgc2hpZnQ7XG4gXHR1bnNpZ25lZCBsb25nIHR5cGU7XG4gXHRlbnVtIG1hcGxlX3R5cGUgcF90eXBlID0gbXRlX25vZGVfdHlwZShwYXJlbnQpO1xuQEAgLTQ5MCwxMSArNDkwLDQ3IEBAIHZvaWQgbWFzX3NldF9wYXJlbnQoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUsXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuK1x0dmFsID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50O1xuIFx0dmFsIFx1MDAyNj0gfk1BUExFX05PREVfTUFTSzsgLyogQ2xlYXIgYWxsIG5vZGUgbWV0YWRhdGEgaW4gcGFyZW50ICovXG4gXHR2YWwgfD0gKHNsb3QgXHUwMDNjXHUwMDNjIHNoaWZ0KSB8IHR5cGU7XG4gXHRtdGVfdG9fbm9kZShlbm9kZSktXHUwMDNlcGFyZW50ID0gbWFfcGFyZW50X3B0cih2YWwpO1xuIH1cbiBcbisvKlxuKyAqIG1hc19zZXRfcGFyZW50X3Nsb3RzKCkgLSBCdWxrIG9wZXJhdGlvbiB0byBzZXQgbWFueSBzbG90IHBhcmVudCBwb2ludGVyc1xuKyAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZVxuKyAqIEBwYXJlbnQ6IFRoZSBlbmNvZGVkIG1hcGxlIG5vZGUgdGhhdCBpcyB0aGUgcGFyZW50IG9mIEBlbm9kZS5cbisgKiBAc2xvdDogVGhlIHNsb3QgdGhhdCBvZiB0aGUgQGVub2RlLlxuKyAqIEBzdGFydF9zbG90OiBUaGUgb2Zmc2V0IGludG8gQHNsb3RcbisgKiBAY291bnQ6IFRoZSBudW1iZXIgb2Ygc2xvdHMgdG8gc2V0IChlZzogZXhjbHVzaXZlKVxuKyAqL1xuK3N0YXRpYyBpbmxpbmVcbit2b2lkIG1hc19zZXRfcGFyZW50X3Nsb3RzKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnBhcmVudCxcbitcdHZvaWQgX19yY3UgKipzbG90cywgdW5zaWduZWQgY2hhciBzdGFydF9zbG90LCB1bnNpZ25lZCBjaGFyIGNvdW50KVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdmFsO1xuK1x0dW5zaWduZWQgbG9uZyBzaGlmdDtcbitcdHVuc2lnbmVkIGxvbmcgdHlwZTtcbitcdGVudW0gbWFwbGVfdHlwZSBwX3R5cGUgPSBtdGVfbm9kZV90eXBlKHBhcmVudCk7XG4rXHR1bnNpZ25lZCBjaGFyIGk7XG4rXG4rXHRNQVNfQlVHX09OKG1hcywgcF90eXBlICE9IG1hcGxlX3JhbmdlXzY0IFx1MDAyNlx1MDAyNlxuK1x0XHRcdHBfdHlwZSAhPSBtYXBsZV9hcmFuZ2VfNjQpO1xuK1xuK1x0c2hpZnQgPSBNQVBMRV9QQVJFTlRfU0xPVF9TSElGVDtcbitcdHR5cGUgPSBNQVBMRV9QQVJFTlRfUkFOR0U2NDtcbitcbitcdHZhbCA9ICh1bnNpZ25lZCBsb25nKXBhcmVudDtcbitcdHZhbCBcdTAwMjY9IH5NQVBMRV9OT0RFX01BU0s7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSsrKSB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgcHZhbCA9IHZhbCB8ICgoc3RhcnRfc2xvdCArIGkpIFx1MDAzY1x1MDAzYyBzaGlmdCkgfCB0eXBlO1xuK1x0XHRzdHJ1Y3QgbWFwbGVfZW5vZGUgKmNoaWxkID0gKHN0cnVjdCBtYXBsZV9lbm9kZSAqKXNsb3RzW2ldO1xuK1xuK1x0XHRtdGVfdG9fbm9kZShjaGlsZCktXHUwMDNlcGFyZW50ID0gbWFfcGFyZW50X3B0cihwdmFsKTtcbitcdH1cbit9XG4rXG4gLypcbiAgKiBtdGVfcGFyZW50X3Nsb3QoKSAtIGdldCB0aGUgcGFyZW50IHNsb3Qgb2YgQGVub2RlLlxuICAqIEBlbm9kZTogVGhlIGVuY29kZWQgbWFwbGUgbm9kZS5cbkBAIC0xMTUzLDYgKzExODksNzAgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19mcmVlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnVzZWQpXG4gXHRtYV9mcmVlX3JjdShtdGVfdG9fbm9kZSh1c2VkKSk7XG4gfVxuIFxuK1xuKyNpZmRlZiBDT05GSUdfTE9DS0RFUFxuK3N0cnVjdCBsb2NrZGVwX21hcCAqbWFzX2xvY2tkZXBfbWFwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuK3tcbitcdHN0cnVjdCBtYXBsZV90cmVlICptdCA9IG1hcy1cdTAwM2V0cmVlO1xuK1xuK1x0aWYgKG10X2V4dGVybmFsX2xvY2sobXQpKVxuK1x0XHRyZXR1cm4gbXQtXHUwMDNlbWFfZXh0ZXJuYWxfbG9jaztcbitcbitcdHJldHVybiBcdTAwMjYobXQtXHUwMDNlbWFfbG9jaykuZGVwX21hcDtcbit9XG4rXG4rI2VuZGlmXG4rXG4rc3RhdGljIHZvaWQgbWFzX2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpXG4re1xuK1xuKyNpZmRlZiBDT05GSUdfTE9DS0RFUFxuK1x0aWYgKCFtYXNfaXNfYWN0aXZlKG1hcykpXG4rXHRcdHJldHVybjtcbitcbisjaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXG4rXHRpZiAoIW10X2xvY2tfaXNfaGVsZChtYXMtXHUwMDNldHJlZSkpIHtcbitcdFx0aWYgKG10X2luX3JjdShtYXMtXHUwMDNldHJlZSkpXG4rXHRcdFx0V0FSTl9PTl9PTkNFKHBvbGxfc3RhdGVfc3luY2hyb25pemVfcmN1KG1hcy1cdTAwM2VyY3VfZ3ApKTtcbitcdH1cbisjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXG4rXG4rXHRpZiAobXRfbG9ja19pc19oZWxkKG1hcy1cdTAwM2V0cmVlKSlcbitcdFx0V0FSTl9PTl9PTkNFKG1hcy1cdTAwM2VsZF9zZXEgIT0gbG9ja19zZXF1ZW5jZShtYXNfbG9ja2RlcF9tYXAobWFzKSkpO1xuKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xuK1xuK31cbitcbitzdGF0aWMgdm9pZCBtYXNfaW5pdF9sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuK3tcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcbisjaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXG4rXHRpZiAoIW10X2xvY2tfaXNfaGVsZChtYXMtXHUwMDNldHJlZSkpIHtcbitcdFx0aWYgKG10X2luX3JjdShtYXMtXHUwMDNldHJlZSkpXG4rXHRcdFx0bWFzLVx1MDAzZXJjdV9ncCA9IGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9yY3UoKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuKyNlbmRpZiAvKiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QgKi9cbitcbitcdGlmIChtdF9sb2NrX2lzX2hlbGQobWFzLVx1MDAzZXRyZWUpKVxuK1x0XHRtYXMtXHUwMDNlbGRfc2VxID0gbG9ja19zZXF1ZW5jZShtYXNfbG9ja2RlcF9tYXAobWFzKSk7XG4rI2VuZGlmIC8qIENPTkZJR19MT0NLREVQICovXG4rXG4rfVxuK1xuK3N0YXRpYyB2b2lkIG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuK3tcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcbisjaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXG4rXHRpZiAobWFzX2lzX3N0YXJ0KG1hcykgfHwgbWFzX2lzX3BhdXNlZChtYXMpKSB7XG4rXHRcdG1hc19pbml0X2xvY2tfY2hlY2sobWFzKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuKyNlbmRpZiAvKiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QgKi9cbitcdG1hc19sb2NrX2NoZWNrKG1hcyk7XG4rI2VuZGlmIC8qIENPTkZJR19MT0NLREVQICovXG4rfVxuK1xuIC8qXG4gICogbWFzX3N0YXJ0KCkgLSBTZXRzIHVwIG1hcGxlIHN0YXRlIGZvciBvcGVyYXRpb25zLlxuICAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZS5cbkBAIC0xMTcxLDYgKzEyNzEsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXBsZV9lbm9kZSAqbWFzX3N0YXJ0KHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIFx0aWYgKGxpa2VseShtYXNfaXNfc3RhcnQobWFzKSkpIHtcbiBcdFx0c3RydWN0IG1hcGxlX2Vub2RlICpyb290O1xuIFxuK1x0XHRtYXNfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRcdG1hcy1cdTAwM2VtaW4gPSAwO1xuIFx0XHRtYXMtXHUwMDNlbWF4ID0gVUxPTkdfTUFYO1xuIFxuQEAgLTE1MDEsMTQgKzE2MDIsMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19wYXJlbnRfZ2FwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBjaGFyIG9mZnNldCxcbiBcdGdvdG8gYXNjZW5kO1xuIH1cbiBcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWFzX3VwZGF0ZV9nYXBfa25vd24oc3RydWN0IG1hX3N0YXRlICptYXMsXG4rXHRcdHVuc2lnbmVkIGxvbmcgZ2FwKVxuK3tcbitcdHVuc2lnbmVkIGNoYXIgcHNsb3Q7XG4rXHR1bnNpZ25lZCBsb25nIHBfZ2FwO1xuK1xuK1x0cHNsb3QgPSBtdGVfcGFyZW50X3Nsb3QobWFzLVx1MDAzZW5vZGUpO1xuK1x0cF9nYXAgPSBtYV9nYXBzKG10ZV9wYXJlbnQobWFzLVx1MDAzZW5vZGUpLFxuK1x0XHRcdG1hc19wYXJlbnRfdHlwZShtYXMsIG1hcy1cdTAwM2Vub2RlKSlbcHNsb3RdO1xuK1xuK1x0aWYgKHBfZ2FwICE9IGdhcClcbitcdFx0bWFzX3BhcmVudF9nYXAobWFzLCBwc2xvdCwgZ2FwKTtcbit9XG4rXG4gLypcbiAgKiBtYXNfdXBkYXRlX2dhcCgpIC0gVXBkYXRlIGEgbm9kZXMgZ2FwcyBhbmQgcHJvcGFnYXRlIHVwIGlmIG5lY2Vzc2FyeS5cbiAgKiBAbWFzOiB0aGUgbWFwbGUgc3RhdGUuXG4gICovXG4gc3RhdGljIGlubGluZSB2b2lkIG1hc191cGRhdGVfZ2FwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIHtcbi1cdHVuc2lnbmVkIGNoYXIgcHNsb3Q7XG4tXHR1bnNpZ25lZCBsb25nIHBfZ2FwO1xuIFx0dW5zaWduZWQgbG9uZyBtYXhfZ2FwO1xuIFxuIFx0aWYgKCFtdF9pc19hbGxvYyhtYXMtXHUwMDNldHJlZSkpXG5AQCAtMTUxOCwxMyArMTYzMSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfdXBkYXRlX2dhcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0bWF4X2dhcCA9IG1hc19tYXhfZ2FwKG1hcyk7XG4tXG4tXHRwc2xvdCA9IG10ZV9wYXJlbnRfc2xvdChtYXMtXHUwMDNlbm9kZSk7XG4tXHRwX2dhcCA9IG1hX2dhcHMobXRlX3BhcmVudChtYXMtXHUwMDNlbm9kZSksXG4tXHRcdFx0bWFzX3BhcmVudF90eXBlKG1hcywgbWFzLVx1MDAzZW5vZGUpKVtwc2xvdF07XG4tXG4tXHRpZiAocF9nYXAgIT0gbWF4X2dhcClcbi1cdFx0bWFzX3BhcmVudF9nYXAobWFzLCBwc2xvdCwgbWF4X2dhcCk7XG4rXHRtYXNfdXBkYXRlX2dhcF9rbm93bihtYXMsIG1heF9nYXApO1xuIH1cbiBcbiAvKlxuQEAgLTE1NDAsMTQgKzE2NDcsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19hZG9wdF9jaGlsZHJlbihzdHJ1Y3QgbWFfc3RhdGUgKm1hcyxcbiBcdHN0cnVjdCBtYXBsZV9ub2RlICpub2RlID0gbXRlX3RvX25vZGUocGFyZW50KTtcbiBcdHZvaWQgX19yY3UgKipzbG90cyA9IG1hX3Nsb3RzKG5vZGUsIHR5cGUpO1xuIFx0dW5zaWduZWQgbG9uZyAqcGl2b3RzID0gbWFfcGl2b3RzKG5vZGUsIHR5cGUpO1xuLVx0c3RydWN0IG1hcGxlX2Vub2RlICpjaGlsZDtcbi1cdHVuc2lnbmVkIGNoYXIgb2Zmc2V0O1xuK1x0dW5zaWduZWQgY2hhciBlbmQ7XG4gXG4tXHRvZmZzZXQgPSBtYV9kYXRhX2VuZChub2RlLCB0eXBlLCBwaXZvdHMsIG1hcy1cdTAwM2VtYXgpO1xuLVx0ZG8ge1xuLVx0XHRjaGlsZCA9IG1hc19zbG90X2xvY2tlZChtYXMsIHNsb3RzLCBvZmZzZXQpO1xuLVx0XHRtYXNfc2V0X3BhcmVudChtYXMsIGNoaWxkLCBwYXJlbnQsIG9mZnNldCk7XG4tXHR9IHdoaWxlIChvZmZzZXQtLSk7XG4rXHRlbmQgPSBtYV9kYXRhX2VuZChub2RlLCB0eXBlLCBwaXZvdHMsIG1hcy1cdTAwM2VtYXgpO1xuK1x0bWFzX3NldF9wYXJlbnRfc2xvdHMobWFzLCBwYXJlbnQsIHNsb3RzLCAwLCBlbmQgKyAxKTtcbiB9XG4gXG4gLypcbkBAIC0xOTI5LDE1ICsyMDMyLDEwIEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9jb3B5KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfbm9kZSAqc3JjLFxuIFx0c19zbG90cyA9IG1hX3Nsb3RzKHNyYywgc19tdCkgKyBzdGFydDtcbiBcdHNfcGl2b3RzID0gbWFfcGl2b3RzKHNyYywgc19tdCkgKyBzdGFydDtcbiBcdG1lbWNweShkX3Nsb3RzLCBzX3Nsb3RzLCBzaXplICogc2l6ZW9mKHZvaWQgX19yY3UgKikpO1xuLVx0aWYgKCFtYV9pc19sZWFmKGRfbXQpIFx1MDAyNlx1MDAyNiBzX210ID09IG1hcGxlX2NvcHkpIHtcbi1cdFx0c3RydWN0IG1hcGxlX2Vub2RlICplZHN0ID0gbXRfbWtfbm9kZShkc3QsIGRfbXQpO1xuIFxuLVxuLVx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mgc2l6ZTsgaSsrKVxuLVx0XHRcdG1hc19zZXRfcGFyZW50KG1hcyxcbi1cdFx0XHRcdCAgICAgICBtdF9zbG90X2xvY2tlZChtYXMtXHUwMDNldHJlZSwgZF9zbG90cywgaSksXG4tXHRcdFx0XHQgICAgICAgZWRzdCwgZF9zdGFydCArIGkpO1xuLVx0fVxuK1x0aWYgKCFtYV9pc19sZWFmKGRfbXQpIFx1MDAyNlx1MDAyNiBzX210ID09IG1hcGxlX2NvcHkpXG4rXHRcdG1hc19zZXRfcGFyZW50X3Nsb3RzKG1hcywgbXRfbWtfbm9kZShkc3QsIGRfbXQpLFxuK1x0XHRcdFx0ICAgICBkX3Nsb3RzLCBkX3N0YXJ0LCBzaXplKTtcbiBcbiBcdGRfZ2FwcyA9IG1hX2dhcHMoZHN0LCBkX210KTtcbiBcdGlmIChkX2dhcHMpIHtcbkBAIC0yMDgxLDggKzIxNzksOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dtYl9yZXBsYWNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfY29weSAqY3ApXG4gXHRtYXMtXHUwMDNlbm9kZSA9IG10X3Nsb3RfbG9ja2VkKG1hcy1cdTAwM2V0cmVlLCBjcC1cdTAwM2VzbG90LCAwKTtcbiBcdC8qIEluc2VydCB0aGUgbmV3IGRhdGEgaW4gdGhlIHRyZWUgKi9cbiBcdG1hc190b3BpYXJ5X3JlcGxhY2UobWFzLCBvbGRfZW5vZGUsIGNwLVx1MDAzZWhlaWdodCk7XG4tXHRpZiAoIW10ZV9pc19sZWFmKG1hcy1cdTAwM2Vub2RlKSlcbi1cdFx0bWFzX3VwZGF0ZV9nYXAobWFzKTtcbitcdGlmIChtdF9pc19hbGxvYyhtYXMtXHUwMDNldHJlZSkgXHUwMDI2XHUwMDI2ICFtdGVfaXNfcm9vdChtYXMtXHUwMDNlbm9kZSkpXG4rXHRcdG1hc191cGRhdGVfZ2FwX2tub3duKG1hcywgY3AtXHUwMDNlZ2FwWzBdKTtcbiBcbiBcdG10cmVlX3JhbmdlX3dhbGsobWFzKTtcbiB9XG5AQCAtMjkyOCwxMyArMzAyNiw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfZXh0ZW5kX3NwYW5uaW5nX251bGwoc3RydWN0IG1hX3dyX3N0YXRlICpsX3dyX21hcyxcbiBcdFx0aWYgKHJfbWFzLVx1MDAzZWxhc3QgXHUwMDNjIHJfd3JfbWFzLVx1MDAzZXJfbWF4KVxuIFx0XHRcdHJfbWFzLVx1MDAzZWxhc3QgPSByX3dyX21hcy1cdTAwM2VyX21heDtcbiBcdFx0cl9tYXMtXHUwMDNlb2Zmc2V0Kys7XG4tXHR9IGVsc2UgaWYgKChyX21hcy1cdTAwM2VsYXN0ID09IHJfd3JfbWFzLVx1MDAzZXJfbWF4KSBcdTAwMjZcdTAwMjZcbi1cdCAgICAocl9tYXMtXHUwMDNlbGFzdCBcdTAwM2Mgcl9tYXMtXHUwMDNlbWF4KSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhbWFzX3Nsb3RfbG9ja2VkKHJfbWFzLCByX3dyX21hcy1cdTAwM2VzbG90cywgcl9tYXMtXHUwMDNlb2Zmc2V0ICsgMSkpIHtcbi1cdFx0cl9tYXMtXHUwMDNlbGFzdCA9IG1hc19zYWZlX3Bpdm90KHJfbWFzLCByX3dyX21hcy1cdTAwM2VwaXZvdHMsXG4tXHRcdFx0XHRcdCAgICAgcl93cl9tYXMtXHUwMDNldHlwZSwgcl9tYXMtXHUwMDNlb2Zmc2V0ICsgMSk7XG4tXHRcdHJfbWFzLVx1MDAzZW9mZnNldCsrO1xuLVx0XHRyX3dyX21hcy1cdTAwM2VyX21heCA9IHJfbWFzLVx1MDAzZWxhc3Q7XG4gXHR9XG4gfVxuIFxuQEAgLTMxMjUsNyArMzIxNiw3IEBAIHN0YXRpYyB2b2lkIG1hc193cl9zcGFubmluZ19zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4ge1xuIFx0dW5zaWduZWQgY2hhciBkc3Rfb2Zmc2V0LCBvZmZzZXRfZW5kO1xuLVx0dW5zaWduZWQgY2hhciBjb3B5X3NpemUsIG5vZGVfcGl2b3RzO1xuK1x0dW5zaWduZWQgY2hhciBjb3B5X3NpemUsIG5vZGVfcGl2b3RzLCBub2RlX3Nsb3RzO1xuIFx0c3RydWN0IG1hcGxlX25vZGUgcmV1c2UsICpuZXdub2RlO1xuIFx0dW5zaWduZWQgbG9uZyAqZHN0X3Bpdm90cztcbiBcdHZvaWQgX19yY3UgKipkc3Rfc2xvdHM7XG5AQCAtMzEzOCw2ICszMjI5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIFx0aW5fcmN1ID0gbXRfaW5fcmN1KG1hcy1cdTAwM2V0cmVlKTtcbiBcdG9mZnNldF9lbmQgPSB3cl9tYXMtXHUwMDNlb2Zmc2V0X2VuZDtcbiBcdG5vZGVfcGl2b3RzID0gbXRfcGl2b3RzW3dyX21hcy1cdTAwM2V0eXBlXTtcbitcdG5vZGVfc2xvdHMgPSBtdF9zbG90c1t3cl9tYXMtXHUwMDNldHlwZV07XG4gXHQvKiBBc3N1bWUgbGFzdCBhZGRzIGFuIGVudHJ5ICovXG4gXHRuZXdfZW5kID0gbWFzLVx1MDAzZWVuZCArIDEgLSBvZmZzZXRfZW5kICsgbWFzLVx1MDAzZW9mZnNldDtcbiBcdGlmIChtYXMtXHUwMDNlbGFzdCA9PSB3cl9tYXMtXHUwMDNlZW5kX3Bpdikge1xuQEAgLTMxNDksNyArMzI0MSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiBcdGlmIChpbl9yY3UpIHtcbiBcdFx0bmV3bm9kZSA9IG1hc19wb3Bfbm9kZShtYXMpO1xuIFx0fSBlbHNlIHtcbi1cdFx0bWVtc2V0KFx1MDAyNnJldXNlLCAwLCBzaXplb2Yoc3RydWN0IG1hcGxlX25vZGUpKTtcbiBcdFx0bmV3bm9kZSA9IFx1MDAyNnJldXNlO1xuIFx0fVxuIFxuQEAgLTMxOTMsNyArMzI4NCwxNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4gXHRcdGRzdF9waXZvdHNbbmV3X2VuZF0gPSBtYXMtXHUwMDNlbWF4O1xuIFxuIGRvbmU6XG4tXHRtYXNfbGVhZl9zZXRfbWV0YShuZXdub2RlLCBtYXBsZV9sZWFmXzY0LCBuZXdfZW5kKTtcbitcdGlmICghaW5fcmN1IFx1MDAyNlx1MDAyNiBuZXdfZW5kICsgMiBcdTAwM2Mgbm9kZV9zbG90cykge1xuK1x0XHR1bnNpZ25lZCBjaGFyIGNsZWFyX2Zyb20gPSBuZXdfZW5kICsgMTtcbitcbitcdFx0bWVtc2V0KGRzdF9zbG90cyArIGNsZWFyX2Zyb20sIDAsXG4rXHRcdCAgICAgICBzaXplb2Yodm9pZCBfX3JjdSAqKSAqIChub2RlX3Nsb3RzIC0gY2xlYXJfZnJvbSkpO1xuK1x0XHRpZiAoY2xlYXJfZnJvbSBcdTAwM2Mgbm9kZV9waXZvdHMpXG4rXHRcdFx0bWVtc2V0KGRzdF9waXZvdHMgKyBjbGVhcl9mcm9tLCAwLFxuK1x0XHRcdCAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZykgKiAobm9kZV9waXZvdHMgLSBjbGVhcl9mcm9tKSk7XG4rXHR9XG4rXG4rXHRtYXNfbGVhZl9zZXRfbWV0YShuZXdub2RlLCB3cl9tYXMtXHUwMDNldHlwZSwgbmV3X2VuZCk7XG4gXHRpZiAoaW5fcmN1KSB7XG4gXHRcdHN0cnVjdCBtYXBsZV9lbm9kZSAqb2xkX2Vub2RlID0gbWFzLVx1MDAzZW5vZGU7XG4gXG5AQCAtMzIxOCw3ICszMzE5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9zbG90X3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIFx0dm9pZCBfX3JjdSAqKnNsb3RzID0gd3JfbWFzLVx1MDAzZXNsb3RzO1xuIFx0Ym9vbCBnYXAgPSBmYWxzZTtcbiBcbi1cdGdhcCB8PSAhbXRfc2xvdF9sb2NrZWQobWFzLVx1MDAzZXRyZWUsIHNsb3RzLCBvZmZzZXQpO1xuK1x0Z2FwIHw9ICF3cl9tYXMtXHUwMDNlY29udGVudDtcbiBcdGdhcCB8PSAhbXRfc2xvdF9sb2NrZWQobWFzLVx1MDAzZXRyZWUsIHNsb3RzLCBvZmZzZXQgKyAxKTtcbiBcbiBcdGlmICh3cl9tYXMtXHUwMDNlb2Zmc2V0X2VuZCAtIG9mZnNldCA9PSAxKSB7XG5AQCAtMzY2MSw2ICszNzYyLDkgQEAgc3RhdGljIGlubGluZSBlbnVtIHN0b3JlX3R5cGUgbWFzX3dyX3N0b3JlX3R5cGUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4ge1xuIFx0c3RydWN0IG1hX3N0YXRlICptYXMgPSB3cl9tYXMtXHUwMDNlbWFzO1xuIFx0dW5zaWduZWQgY2hhciBuZXdfZW5kO1xuK1x0Ym9vbCBhcHBlbmRpbmc7XG4rXHRib29sIG9uZV9zbG90O1xuK1x0Ym9vbCBpbl9yY3U7XG4gXG4gXHRpZiAodW5saWtlbHkobWFzX2lzX25vbmUobWFzKSB8fCBtYXNfaXNfcHRyKG1hcykpKVxuIFx0XHRyZXR1cm4gd3Jfc3RvcmVfcm9vdDtcbkBAIC0zNjgwLDIxICszNzg0LDMwIEBAIHN0YXRpYyBpbmxpbmUgZW51bSBzdG9yZV90eXBlIG1hc193cl9zdG9yZV90eXBlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIFx0XHRyZXR1cm4gd3JfbmV3X3Jvb3Q7XG4gXG4gXHRuZXdfZW5kID0gbWFzX3dyX25ld19lbmQod3JfbWFzKTtcbitcdGluX3JjdSA9IG10X2luX3JjdShtYXMtXHUwMDNldHJlZSk7XG4rXHRhcHBlbmRpbmcgPSBtYXMtXHUwMDNlb2Zmc2V0ID09IG1hcy1cdTAwM2VlbmQ7XG4rXHRvbmVfc2xvdCA9IHdyX21hcy1cdTAwM2VvZmZzZXRfZW5kIC0gbWFzLVx1MDAzZW9mZnNldCA9PSAxO1xuK1xuIFx0LyogUG90ZW50aWFsIHNwYW5uaW5nIHJlYmFsYW5jZSBjb2xsYXBzaW5nIGEgbm9kZSAqL1xuIFx0aWYgKG5ld19lbmQgXHUwMDNjIG10X21pbl9zbG90c1t3cl9tYXMtXHUwMDNldHlwZV0pIHtcbiBcdFx0aWYgKCFtdGVfaXNfcm9vdChtYXMtXHUwMDNlbm9kZSkpXG4gXHRcdFx0cmV0dXJuICB3cl9yZWJhbGFuY2U7XG4rXHRcdGlmICghaW5fcmN1KSB7XG4rXHRcdFx0aWYgKGFwcGVuZGluZylcbitcdFx0XHRcdHJldHVybiB3cl9hcHBlbmQ7XG4rXHRcdFx0ZWxzZSBpZiAobWFzLVx1MDAzZWVuZCA9PSBuZXdfZW5kIFx1MDAyNlx1MDAyNiBvbmVfc2xvdClcbitcdFx0XHRcdHJldHVybiB3cl9zbG90X3N0b3JlO1xuK1x0XHR9XG4gXHRcdHJldHVybiB3cl9ub2RlX3N0b3JlO1xuIFx0fVxuIFxuIFx0aWYgKG5ld19lbmQgXHUwMDNlPSBtdF9zbG90c1t3cl9tYXMtXHUwMDNldHlwZV0pXG4gXHRcdHJldHVybiB3cl9zcGxpdF9zdG9yZTtcbiBcbi1cdGlmICghbXRfaW5fcmN1KG1hcy1cdTAwM2V0cmVlKSBcdTAwMjZcdTAwMjYgKG1hcy1cdTAwM2VvZmZzZXQgPT0gbWFzLVx1MDAzZWVuZCkpXG4rXHRpZiAoIWluX3JjdSBcdTAwMjZcdTAwMjYgYXBwZW5kaW5nKVxuIFx0XHRyZXR1cm4gd3JfYXBwZW5kO1xuIFxuLVx0aWYgKChuZXdfZW5kID09IG1hcy1cdTAwM2VlbmQpIFx1MDAyNlx1MDAyNiAoIW10X2luX3JjdShtYXMtXHUwMDNldHJlZSkgfHxcbi1cdFx0KHdyX21hcy1cdTAwM2VvZmZzZXRfZW5kIC0gbWFzLVx1MDAzZW9mZnNldCA9PSAxKSkpXG4rXHRpZiAobmV3X2VuZCA9PSBtYXMtXHUwMDNlZW5kIFx1MDAyNlx1MDAyNiAoIWluX3JjdSB8fCBvbmVfc2xvdCkpXG4gXHRcdHJldHVybiB3cl9zbG90X3N0b3JlO1xuIFxuIFx0cmV0dXJuIHdyX25vZGVfc3RvcmU7XG5AQCAtMzc5MywyNyArMzkwNiwyOSBAQCBpbnQgbWFzX2FsbG9jX2N5Y2xpYyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyAqc3RhcnRwLFxuIFx0XHR2b2lkICplbnRyeSwgdW5zaWduZWQgbG9uZyByYW5nZV9sbywgdW5zaWduZWQgbG9uZyByYW5nZV9oaSxcbiBcdFx0dW5zaWduZWQgbG9uZyAqbmV4dCwgZ2ZwX3QgZ2ZwKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbWluID0gcmFuZ2VfbG87XG4tXHRpbnQgcmV0ID0gMDtcbitcdGludCByZXQ7XG4rXHR1bnNpZ25lZCBsb25nIG1pbjtcbiBcbi1cdHJhbmdlX2xvID0gbWF4KG1pbiwgKm5leHQpO1xuLVx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCByYW5nZV9sbywgcmFuZ2VfaGksIDEpO1xuLVx0aWYgKChtYXMtXHUwMDNldHJlZS1cdTAwM2VtYV9mbGFncyBcdTAwMjYgTVRfRkxBR1NfQUxMT0NfV1JBUFBFRCkgXHUwMDI2XHUwMDI2IHJldCA9PSAwKSB7XG4tXHRcdG1hcy1cdTAwM2V0cmVlLVx1MDAzZW1hX2ZsYWdzIFx1MDAyNj0gfk1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQ7XG4tXHRcdHJldCA9IDE7XG4tXHR9XG4tXHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByYW5nZV9sbyBcdTAwM2UgbWluKSB7XG4tXHRcdG1hc19yZXNldChtYXMpO1xuLVx0XHRyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIG1pbiwgcmFuZ2VfaGksIDEpO1xuLVx0XHRpZiAocmV0ID09IDApXG4rXHRtaW4gPSByYW5nZV9sbztcbitcdGRvIHtcbitcdFx0cmFuZ2VfbG8gPSBtYXgobWluLCAqbmV4dCk7XG4rXHRcdHJldCA9IG1hc19lbXB0eV9hcmVhKG1hcywgcmFuZ2VfbG8sIHJhbmdlX2hpLCAxKTtcbitcdFx0aWYgKChtYXMtXHUwMDNldHJlZS1cdTAwM2VtYV9mbGFncyBcdTAwMjYgTVRfRkxBR1NfQUxMT0NfV1JBUFBFRCkgXHUwMDI2XHUwMDI2IHJldCA9PSAwKSB7XG4rXHRcdFx0bWFzLVx1MDAzZXRyZWUtXHUwMDNlbWFfZmxhZ3MgXHUwMDI2PSB+TVRfRkxBR1NfQUxMT0NfV1JBUFBFRDtcbiBcdFx0XHRyZXQgPSAxO1xuLVx0fVxuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuK1x0XHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByYW5nZV9sbyBcdTAwM2UgbWluKSB7XG4rXHRcdFx0bWFzX3Jlc2V0KG1hcyk7XG4rXHRcdFx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCBtaW4sIHJhbmdlX2hpLCAxKTtcbitcdFx0XHRpZiAocmV0ID09IDApXG4rXHRcdFx0XHRyZXQgPSAxO1xuK1x0XHR9XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGRvIHtcbiBcdFx0bWFzX2luc2VydChtYXMsIGVudHJ5KTtcbiBcdH0gd2hpbGUgKG1hc19ub21lbShtYXMsIGdmcCkpO1xuK1xuIFx0aWYgKG1hc19pc19lcnIobWFzKSlcbiBcdFx0cmV0dXJuIHhhX2VycihtYXMtXHUwMDNlbm9kZSk7XG4gXG5AQCAtNDM2MCw2ICs0NDc1LDcgQEAgdm9pZCAqbWFzX3dhbGsoc3RydWN0IG1hX3N0YXRlICptYXMpXG4ge1xuIFx0dm9pZCAqZW50cnk7XG4gXG4rXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKCFtYXNfaXNfYWN0aXZlKG1hcykgXHUwMDI2XHUwMDI2ICFtYXNfaXNfc3RhcnQobWFzKSlcbiBcdFx0bWFzLVx1MDAzZXN0YXR1cyA9IG1hX3N0YXJ0O1xuIHJldHJ5OlxuQEAgLTQ4MzEsNiArNDk0Nyw3IEBAIHZvaWQgKm1hc19zdG9yZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnkpXG4ge1xuIFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIGVudHJ5KTtcbiBcbitcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHR0cmFjZV9tYV93cml0ZShUUF9GQ1QsIG1hcywgMCwgZW50cnkpO1xuICNpZmRlZiBDT05GSUdfREVCVUdfTUFQTEVfVFJFRVxuIFx0aWYgKE1BU19XQVJOX09OKG1hcywgbWFzLVx1MDAzZWluZGV4IFx1MDAzZSBtYXMtXHUwMDNlbGFzdCkpXG5AQCAtNDg4OSw2ICs1MDA2LDcgQEAgaW50IG1hc19zdG9yZV9nZnAoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5LCBnZnBfdCBnZnApXG4gXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xuIFx0aW50IHJldCA9IDA7XG4gXG4rXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIHJldHJ5OlxuIFx0bWFzX3dyX3ByZWFsbG9jYXRlKFx1MDAyNndyX21hcywgZW50cnkpO1xuIFx0aWYgKHVubGlrZWx5KG1hc19ub21lbShtYXMsIGdmcCkpKSB7XG5AQCAtNDkxOSw2ICs1MDM3LDcgQEAgdm9pZCBtYXNfc3RvcmVfcHJlYWxsb2Moc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5KVxuIHtcbiBcdE1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBlbnRyeSk7XG4gXG4rXHRtYXNfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hcy1cdTAwM2VzdG9yZV90eXBlID09IHdyX3N0b3JlX3Jvb3QpIHtcbiBcdFx0bWFzX3dyX3ByZWFsbG9jX3NldHVwKFx1MDAyNndyX21hcyk7XG4gXHRcdGdvdG8gc3RvcmU7XG5AQCAtNDk1MSw2ICs1MDcwLDcgQEAgaW50IG1hc19wcmVhbGxvY2F0ZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnksIGdmcF90IGdmcClcbiB7XG4gXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xuIFxuK1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdG1hc193cl9wcmVhbGxvY19zZXR1cChcdTAwMjZ3cl9tYXMpO1xuIFx0bWFzLVx1MDAzZXN0b3JlX3R5cGUgPSBtYXNfd3Jfc3RvcmVfdHlwZShcdTAwMjZ3cl9tYXMpO1xuIFx0bWFzX3ByZWFsbG9jX2NhbGMoXHUwMDI2d3JfbWFzLCBlbnRyeSk7XG5AQCAtNTA3NCw2ICs1MTk0LDcgQEAgdm9pZCAqbWFzX25leHQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbitcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzX25leHRfc2V0dXAobWFzLCBtYXgsIFx1MDAyNmVudHJ5KSlcbiBcdFx0cmV0dXJuIGVudHJ5O1xuIFxuQEAgLTUwOTcsNiArNTIxOCw3IEBAIHZvaWQgKm1hc19uZXh0X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heClcbiB7XG4gXHR2b2lkICplbnRyeSA9IE5VTEw7XG4gXG4rXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19uZXh0X3NldHVwKG1hcywgbWF4LCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01MjA1LDYgKzUzMjcsNyBAQCB2b2lkICptYXNfcHJldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pXG4ge1xuIFx0dm9pZCAqZW50cnkgPSBOVUxMO1xuIFxuK1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfcHJldl9zZXR1cChtYXMsIG1pbiwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTIyOCw2ICs1MzUxLDcgQEAgdm9pZCAqbWFzX3ByZXZfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbitcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzX3ByZXZfc2V0dXAobWFzLCBtaW4sIFx1MDAyNmVudHJ5KSlcbiBcdFx0cmV0dXJuIGVudHJ5O1xuIFxuQEAgLTUyNzQsNiArNTM5OCw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG10X3ByZXYpO1xuICAqL1xuIHZvaWQgbWFzX3BhdXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIHtcbitcdG1hc19sb2NrX2NoZWNrKG1hcyk7XG4gXHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfcGF1c2U7XG4gXHRtYXMtXHUwMDNlbm9kZSA9IE5VTEw7XG4gfVxuQEAgLTUzODIsNiArNTUwNyw3IEBAIHZvaWQgKm1hc19maW5kKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heClcbiB7XG4gXHR2b2lkICplbnRyeSA9IE5VTEw7XG4gXG4rXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19maW5kX3NldHVwKG1hcywgbWF4LCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01NDA5LDYgKzU1MzUsNyBAQCB2b2lkICptYXNfZmluZF9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpXG4ge1xuIFx0dm9pZCAqZW50cnkgPSBOVUxMO1xuIFxuK1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfZmluZF9zZXR1cChtYXMsIG1heCwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTQyOCw3ICs1NTU1LDYgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWFzX2ZpbmRfcmFuZ2UpO1xuIHN0YXRpYyBib29sIG1hc19maW5kX3Jldl9zZXR1cChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4sXG4gXHRcdHZvaWQgKiplbnRyeSlcbiB7XG4tXG4gXHRzd2l0Y2ggKG1hcy1cdTAwM2VzdGF0dXMpIHtcbiBcdGNhc2UgbWFfYWN0aXZlOlxuIFx0XHRnb3RvIGFjdGl2ZTtcbkBAIC01NTIxLDYgKzU2NDcsNyBAQCB2b2lkICptYXNfZmluZF9yZXYoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbitcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzX2ZpbmRfcmV2X3NldHVwKG1hcywgbWluLCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01NTQ3LDYgKzU2NzQsNyBAQCB2b2lkICptYXNfZmluZF9yYW5nZV9yZXYoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbitcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzX2ZpbmRfcmV2X3NldHVwKG1hcywgbWluLCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01NTY0LDYgKzU2OTIsMTAgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWFzX2ZpbmRfcmFuZ2VfcmV2KTtcbiAgKiBTZWFyY2hlcyBmb3IgQG1hcy1cdTAwM2VpbmRleCwgc2V0cyBAbWFzLVx1MDAzZWluZGV4IGFuZCBAbWFzLVx1MDAzZWxhc3QgdG8gdGhlIHJhbmdlIGFuZFxuICAqIGVyYXNlcyB0aGF0IHJhbmdlLlxuICAqXG4rICogTm90ZSB0aGF0IGVyYXNlIHJlcXVpcmVzIGFsbG9jYXRpb25zIGFuZCB3aWxsIHVzZSBHRlBfS0VSTkVMIHRvIGRvIHNvIGlmXG4rICogbmVjZXNzYXJ5LiAgSWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBpbnRlcm5hbCBsb2NrIHdpbGwgYmUgZHJvcHBlZCB0b1xuKyAqIHJldHJ5LlxuKyAqXG4gICogUmV0dXJuOiB0aGUgZW50cnkgdGhhdCB3YXMgZXJhc2VkIG9yICVOVUxMLCBAbWFzLVx1MDAzZWluZGV4IGFuZCBAbWFzLVx1MDAzZWxhc3QgYXJlIHVwZGF0ZWQuXG4gICovXG4gdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuQEAgLTU1NzIsNiArNTcwNCwxNCBAQCB2b2lkICptYXNfZXJhc2Uoc3RydWN0IG1hX3N0YXRlICptYXMpXG4gXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gbWFzLVx1MDAzZWluZGV4O1xuIFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIE5VTEwpO1xuIFxuK1x0LypcbitcdCAqIEluIGxvdyBtZW1vcnkgc2l0dWF0aW9ucywgdGhlIGFsbG9jYXRpb24gaXMgcmV0cmllZCB3aXRoIHRoZSBnZnAgZmxhZ1xuK1x0ICogR0ZQX0tFUk5FTC4gIFRoZSBpbnRlcm5hbCBzcGlubG9jayBpcyBkcm9wcGVkIGluIG1hc19ub21lbSgpLCBob3dldmVyXG4rXHQgKiB0aGUgZXh0ZXJuYWwgbG9jayBpcyBub3QgZHJvcHBlZC5cbitcdCAqL1xuK1x0aWYgKG10X2V4dGVybmFsX2xvY2sobWFzLVx1MDAzZXRyZWUpKVxuK1x0XHRtaWdodF9hbGxvYyhHRlBfS0VSTkVMKTtcbitcbiBcdGlmICghbWFzX2lzX2FjdGl2ZShtYXMpIHx8ICFtYXNfaXNfc3RhcnQobWFzKSlcbiBcdFx0bWFzLVx1MDAzZXN0YXR1cyA9IG1hX3N0YXJ0O1xuIFxuQEAgLTU2MDEsMTAgKzU3NDEsMTEgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWFzX2VyYXNlKTtcbiBcbiAvKipcbiAgKiBtYXNfbm9tZW0oKSAtIENoZWNrIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBhbGxvY2F0aW5nIGFuZCBkbyB0aGUgYWxsb2NhdGlvblxuLSAqIGlmIG5lY2Vzc2FyeSBJZiB0aGVyZSBhcmUgYWxsb2NhdGlvbnMsIHRoZW4gZnJlZSB0aGVtLlxuKyAqIGlmIG5lY2Vzc2FyeS5cbisgKlxuICAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZVxuICAqIEBnZnA6IFRoZSBHRlBfRkxBR1MgdG8gdXNlIGZvciBhbGxvY2F0aW9uc1xuLSAqIFJldHVybjogdHJ1ZSBvbiBhbGxvY2F0aW9uLCBmYWxzZSBvdGhlcndpc2UuXG4rICogUmV0dXJuOiBGYWxzZSBvbiBubyBtZW1vcnkuICBUcnVlIG90aGVyd2lzZSAocGFydGlhbCBzdWNjZXNzIGFzIHdlbGwpXG4gICovXG4gYm9vbCBtYXNfbm9tZW0oc3RydWN0IG1hX3N0YXRlICptYXMsIGdmcF90IGdmcClcbiBcdF9fbXVzdF9ob2xkKG1hcy1cdTAwM2V0cmVlLVx1MDAzZW1hX2xvY2spXG5AQCAtNTYxMiw2ICs1NzUzLDEwIEBAIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApXG4gXHRpZiAobGlrZWx5KG1hcy1cdTAwM2Vub2RlICE9IE1BX0VSUk9SKC1FTk9NRU0pKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuK1x0LyogQWxsb2NhdGlvbnMgY2FuIGZhaWwsIGRvbid0IGRvIHRoaXMuICovXG4rXHRXQVJOX09OX09OQ0UoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgbXRfZXh0ZXJuYWxfbG9jayhtYXMtXHUwMDNldHJlZSkpO1xuK1xuIFx0aWYgKGdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkgXHUwMDI2XHUwMDI2ICFtdF9leHRlcm5hbF9sb2NrKG1hcy1cdTAwM2V0cmVlKSkge1xuIFx0XHRtdHJlZV91bmxvY2sobWFzLVx1MDAzZXRyZWUpO1xuIFx0XHRtYXNfYWxsb2Nfbm9kZXMobWFzLCBnZnApO1xuQEAgLTU2MjAsMTAgKzU3NjUsMTcgQEAgYm9vbCBtYXNfbm9tZW0oc3RydWN0IG1hX3N0YXRlICptYXMsIGdmcF90IGdmcClcbiBcdFx0bWFzX2FsbG9jX25vZGVzKG1hcywgZ2ZwKTtcbiBcdH1cbiBcbi1cdGlmICghbWFzLVx1MDAzZXNoZWFmIFx1MDAyNlx1MDAyNiAhbWFzLVx1MDAzZWFsbG9jKVxuK1x0LypcbitcdCAqIFJldHVybiBmYWxzZSBvbiB6ZXJvIGZvcndhcmQgcHJvZ3Jlc3MuICBQYXJ0aWFsIGFsbG9jYXRpb25zIGFyZSBrZXB0XG4rXHQgKiBzbyB0aGUgcmV0cnkgcGF0aCB3aWxsIGF0dGVtcHQgdG8gZ2V0IHRoZSByZXN0LiAgVGhlIGZhaWx1cmUgc2hvdWxkXG4rXHQgKiBub3QgaGFwcGVuIGFzIHdlIHRyeSBvdXIgYmVzdCB0byByZWNsYWltLiAgVGhlIHVzZXIgd291bGQgbmVlZCBhblxuK1x0ICogZXh0ZXJuYWwgbG9jayB3aXRoIGEgbm9uLWJsb2NraW5nIGdmcCBpbiBhIGxvdyBtZW1vcnkgc2l0dWF0aW9uIC1cbitcdCAqIHdoaWNoIHdvdWxkIGhhdmUgdHJpZ2dlcmVkIHRoZSBmaXJzdCB3YXJuaW5nIGluIHRoaXMgZnVuY3Rpb24uXG4rXHQgKi9cbitcdGlmIChXQVJOX09OX09OQ0UoIW1hcy1cdTAwM2VzaGVhZiBcdTAwMjZcdTAwMjYgIW1hcy1cdTAwM2VhbGxvYykpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdG1hcy1cdTAwM2VzdGF0dXMgPSBtYV9zdGFydDtcbitcdG1hc19yZXNldChtYXMpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTU5MTMsNiArNjA2NSwxMCBAQCBFWFBPUlRfU1lNQk9MKG10cmVlX2FsbG9jX3JyYW5nZSk7XG4gICogRXJhc2luZyBpcyB0aGUgc2FtZSBhcyBhIHdhbGsgdG8gYW4gZW50cnkgdGhlbiBhIHN0b3JlIG9mIGEgTlVMTCB0byB0aGF0XG4gICogRU5USVJFIHJhbmdlLiAgSW4gZmFjdCwgaXQgaXMgaW1wbGVtZW50ZWQgYXMgc3VjaCB1c2luZyB0aGUgYWR2YW5jZWQgQVBJLlxuICAqXG4rICogTm90ZSB0aGF0IGVyYXNlIHJlcXVpcmVzIGFsbG9jYXRpb25zIGFuZCB3aWxsIHVzZSBHRlBfS0VSTkVMIHRvIGRvIHNvIGlmXG4rICogbmVjZXNzYXJ5LiAgSWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBpbnRlcm5hbCBsb2NrIHdpbGwgYmUgZHJvcHBlZCB0b1xuKyAqIHJldHJ5LlxuKyAqXG4gICogUmV0dXJuOiBUaGUgZW50cnkgc3RvcmVkIGF0IHRoZSBAaW5kZXggb3IgJU5VTExcbiAgKi9cbiB2b2lkICptdHJlZV9lcmFzZShzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQsIHVuc2lnbmVkIGxvbmcgaW5kZXgpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY1xuaW5kZXggMDYwNzkxM2EzMDIyZDUuLmQ5NjdlNzZhM2MwNjUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNcbisrKyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jXG5AQCAtMzUyMzQsNyArMzUyMzQsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfcHJlYWxsb2Moc3RydWN0IG1hcGxlX3RyZWUgKm10KVxuIFx0bXRfc2V0X25vbl9rZXJuZWwoMSk7XG4gXHQvKiBTcGFubmluZyBzdG9yZSAqL1xuIFx0bWFzX3NldF9yYW5nZShcdTAwMjZtYXMsIDEsIDEwMCk7XG4tXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX0tFUk5FTCBcdTAwMjYgR0ZQX05PV0FJVCkgPT0gMCk7XG4rXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX05PV0FJVCkgPT0gMCk7XG4gXHRhbGxvY2F0ZWQgPSBtYXNfYWxsb2NhdGVkKFx1MDAyNm1hcyk7XG4gXHRoZWlnaHQgPSBtYXNfbXRfaGVpZ2h0KFx1MDAyNm1hcyk7XG4gXHRNVF9CVUdfT04obXQsIGFsbG9jYXRlZCAhPSAwKTtcbkBAIC0zNTI1Nyw3ICszNTI1Nyw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19wcmVhbGxvYyhzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQpXG4gXHRNVF9CVUdfT04obXQsIG1hc19hbGxvY2F0ZWQoXHUwMDI2bWFzKSAhPSAwKTtcbiBcdG1hc19zZXRfcmFuZ2UoXHUwMDI2bWFzLCAwLCAyMDApO1xuIFx0bXRfc2V0X25vbl9rZXJuZWwoMSk7XG4tXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX0tFUk5FTCBcdTAwMjYgR0ZQX05PV0FJVCkgPT0gMCk7XG4rXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX05PV0FJVCkgPT0gMCk7XG4gXHRhbGxvY2F0ZWQgPSBtYXNfYWxsb2NhdGVkKFx1MDAyNm1hcyk7XG4gXHRoZWlnaHQgPSBtYXNfbXRfaGVpZ2h0KFx1MDAyNm1hcyk7XG4gXHRNVF9CVUdfT04obXQsIGFsbG9jYXRlZCAhPSAwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA0OjIzOjQ3LjAzMjMxMzk3N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNzkyMTU3NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEV2YWx1YXRpb24gZm9yIEZ1enppbmc6IE1hcGxlIFRyZWUgYW5kIExvY2tkZXAgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyB3YXJyYW50cyBhIGRlZXAgZGl2ZSBmb3IgZnV6emluZy4gSXQncyB0b3VjaGluZyBzb21lIHByZXR0eSBjcml0aWNhbCBhcmVhczogdGhlIGBEb2N1bWVudGF0aW9uYCwgYGluY2x1ZGVgIGZpbGVzIGZvciBjb3JlIGxvY2tpbmcgYW5kIHRoZSBgbWFwbGVfdHJlZWAsIGFuZCB0aGVuLCBtb3N0IHNpZ25pZmljYW50bHksIHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb24gaXRzZWxmIOKAkyBzcGVjaWZpY2FsbHkgYGxvY2tkZXAuY2AgYW5kIGBsaWIvbWFwbGVfdHJlZS5jYCwgYWxvbmcgd2l0aCBhIHRlc3QgZmlsZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgcmVmYWN0b3IuIEEgbmV3IGBsb2NrX3NlcXVlbmNlKClgIGZ1bmN0aW9uIGluIGBsb2NrZGVwYCBpcyBiZWluZyBpbnRyb2R1Y2VkIGFuZCB0aGVuIGxldmVyYWdlZCB3aXRoaW4gdGhlIG1hcGxlIHRyZWUgY29kZSB0byBlbmZvcmNlIGxvY2sgb3JkZXJpbmcuIFRoaXMgc2NyZWFtcyBwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGNvbmN1cnJlbmN5IGJ1Z3MgaWYgbm90IGhhbmRsZWQgcGVyZmVjdGx5LiBBYnNvbHV0ZWx5LCB0aGlzIGlzIGZ1enotd29ydGh5IVxuXG5Ob3csIGxldCdzIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBtb2RpZmllZCwgcGFydGljdWxhcmx5IGluIGBsaWIvbWFwbGVfdHJlZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLiBJIHNlZSBpdCB0b3VjaGVzIGEgKmxvdCogb2YgZnVuY3Rpb25zLiBTZWVtcyB0aGUgcGF0Y2ggaGFzIHF1aXRlIGEgYnJvYWQgaW1wYWN0IG9uIHRoZSBsb2NraW5nIHNlbWFudGljcyBhcm91bmQgdGhlIGNvcmUgbWFwbGUgdHJlZSBvcGVyYXRpb25zLiBJIHNlZSBpdCBpbXBhY3RzIG1hbnkgZnVuY3Rpb25zOiBgbWFzX3NldF9wYXJlbnRgLCBgbWFzX3NldF9wYXJlbnRfc2xvdHNgLCBgbWFzX2xvY2tkZXBfbWFwYCwgYG1hc19sb2NrX2NoZWNrYCwgYG1hc19pbml0X2xvY2tfY2hlY2tgLCBgbWFzX21heV9pbml0X2xvY2tfY2hlY2tgLCBgbWFzX3N0YXJ0YCwgYG1hc191cGRhdGVfZ2FwX2tub3duYCwgYG1hc191cGRhdGVfZ2FwYCwgYG1hc19hZG9wdF9jaGlsZHJlbmAsIGBub2RlX2NvcHlgLCBgbWFzX3dtYl9yZXBsYWNlYCwgYG1hc19leHRlbmRfc3Bhbm5pbmdfbnVsbGAsIGBtYXNfd3Jfbm9kZV9zdG9yZWAsIGBtYXNfd3Jfc2xvdF9zdG9yZWAsIGBtYXNfd3Jfc3RvcmVfdHlwZWAsIGBtYXNfYWxsb2NfY3ljbGljYCwgYG1hc193YWxrYCwgYG1hc19zdG9yZWAsIGBtYXNfc3RvcmVfZ2ZwYCwgYG1hc19zdG9yZV9wcmVhbGxvY2AsIGBtYXNfcHJlYWxsb2NhdGVgLCBgbWFzX25leHRgLCBgbWFzX25leHRfcmFuZ2VgLCBgbWFzX3ByZXZgLCBgbWFzX3ByZXZfcmFuZ2VgLCBgbWFzX3BhdXNlYCwgYG1hc19maW5kYCwgYG1hc19maW5kX3JhbmdlYCwgYG1hc19maW5kX3Jldl9zZXR1cGAsIGBtYXNfZmluZF9yZXZgLCBgbWFzX2ZpbmRfcmFuZ2VfcmV2YCwgYG1hc19lcmFzZWAsIGBtYXNfbm9tZW1gLCBgbXRyZWVfZXJhc2VgLlxuXG5BbmQgdGhlbiwgbG9va2luZyBhdCBga2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jYCwgSSBzZWUgY29yZSBsb2NraW5nIGZ1bmN0aW9ucyBhcmUgYWZmZWN0ZWQgdG9vLCB0aGF0IGNhbiBiZSBhIHNpZ25hbCBvZiBhIGNvcmUgaXNzdWU6IGBfX2xvY2tfYWNxdWlyZWAsIGByZWFjcXVpcmVfaGVsZF9sb2Nrc2AsIGBfX2xvY2tfc2VxdWVuY2VgLCBgbG9ja19hY3F1aXJlYCwgYGxvY2tfc3luY2AsIGBsb2NrX3NlcXVlbmNlYC5cblxuVGhlcmVmb3JlLCBJIG5lZWQgdG8gcHJpb3JpdGl6ZSBteSBmdXp6aW5nIGVmZm9ydHMuIFRoZSBmb2N1cyBzaG91bGQgYmUgb24gdGhvc2UgbWFwbGUgdHJlZSBmdW5jdGlvbnMgYW5kIHRob3NlIGxvY2tkZXAgc2VxdWVuY2UgZnVuY3Rpb25zIHdoaWNoIGFyZSBtb3N0IGxpa2VseSB0byBpbnRyb2R1Y2UgYSBidWcuIExvY2tkZXAgaXRzZWxmIGlzIGEgZGVidWdnaW5nIHRvb2wsIHNvIHRoZSByaXNrIGlzIHNvbWV3aGF0IGxvd2VyIGluICppdCogYnV0IHN0aWxsIHBvc3NpYmxlIHRvIGNyZWF0ZSBidWdzLiBCdXQgdGhlIG1hcGxlIHRyZWUgaXMgYSBjb3JlIGRhdGEgc3RydWN0dXJlLCBzbyBJJ2xsIG5lZWQgdG8gcGF5IGV4dHJhIGF0dGVudGlvbiB0byB0aGF0ISBMZXQgbWUgbGlzdCBzb21lIGtleSBtYXBsZSB0cmVlIGZ1bmN0aW9ucyB0byBoaWdobGlnaHQgdGhlc2UgY3JpdGljYWwgYXJlYXM6IGBtYXNfYWxsb2NfY3ljbGljYCwgYG1hc19lcmFzZWAsIGBtdHJlZV9lcmFzZWAsIGBtYXNfbm9tZW1gLCBgbWFzX3dyX25vZGVfc3RvcmVgLCBgbWFzX3dyX3N0b3JlX3R5cGVgLCBgbWFzX3VwZGF0ZV9nYXBfa25vd25gLCBgbWFzX3NldF9wYXJlbnRfc2xvdHNgLlxuXG5Ob3csIGJlZm9yZSBJIGxhdW5jaCBpbnRvIGZ1enppbmcsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gcmlnaHQuIEknbGwgbmVlZCBgQ09ORklHX0xPQ0tERVBgIGVuYWJsZWQgZm9yIHRoZXNlIGxvY2sgc2VxdWVuY2UgY2hlY2tzIHRvIGFjdHVhbGx5IGZ1bmN0aW9uLiBgQ09ORklHX0RFQlVHX01BUExFX1RSRUVgICptaWdodCogYmUgaGVscGZ1bCBkdXJpbmcgYW5hbHlzaXMsIGJ1dCBzdGFuZGFyZCBtYXBsZSB0cmVlIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZC4gSXQgaXMgYWx3YXlzIGdvb2QgdG8gY2hlY2sgYGxpYi9LY29uZmlnLmRlYnVnYCB0byBkb3VibGUgY2hlY2sgYW55IGhlbHBmdWwgY29uZmlndXJhdGlvbnMgdGhlcmUuIE5vdywgbGV0J3MgZ2V0IGZ1enppbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTE4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDQ6MjM6NTcuODI0NDczNjkyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNDA1NjA4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFQlVHX01BUExFX1RSRUVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9MTgyNT1jb25maWcgREVCVUdfQ0xPU1VSRVNcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnLTE4MzMtXFxubGliL0tjb25maWcuZGVidWc6MTgzNDpjb25maWcgREVCVUdfTUFQTEVfVFJFRVxcbmxpYi9LY29uZmlnLmRlYnVnLTE4MzUtXFx0Ym9vbCBcXFwiRGVidWcgbWFwbGUgdHJlZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA0OjI0OjAwLjk2NTA0MzUyMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNTg1OTI5NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipDaGVja2luZyBMb2NrZGVwIGFuZCBNYXBsZSBUcmVlIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gSSBzZWUgYERFQlVHX01BUExFX1RSRUVgIGxpc3RlZCBhcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgSSBhbHNvIG5vdGUgYFBST1ZFX0xPQ0tJTkdgIG9yIGBMT0NLREVQYCBpbiB0aGUgY29udGV4dCBvZiBsb2NrZGVwIGNoYW5nZXMuIFRoYXQncyB0aGUga2V5LiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRob3NlIGxvY2tkZXAgbW9kaWZpY2F0aW9ucyBub3cuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcHJpbWFyeSBzZXR0aW5ncy4gSXQgbG9va3MgbGlrZSBgbG9ja19zZXF1ZW5jZWAgaXMgZXhwb3J0ZWQsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGxvY2tpbmcgd29ya3MuIEFoLCBoZXJlIGl0IGlzOiBgQ09ORklHX0xPQ0tERVBgIGlzIHRoZSBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGF0J3MgdGhlIG1haW4gc3dpdGNoIGZvciBlbmFibGluZyB0aGUgbG9jayBkZXBlbmRlbmN5IGNoZWNrZXIuIFRoYXQncyB0aGUgc2V0dGluZyB0aGF0IHRlbGxzIHRoZSBrZXJuZWwgdG8gcGF5IGF0dGVudGlvbiB0byBwb3RlbnRpYWwgbG9jayBwcm9ibGVtcy5cblxuTm93LCBsZXQgbWUgc2hpZnQgZ2VhcnMgYSBiaXQuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSB1c2FnZSBvZiBgbWFzX2FsbG9jX2N5Y2xpY2AuIExldCBtZSBzZWUgd2hlcmUgdGhhdCBjb21lcyBpbnRvIHBsYXkuIEl0J3MgcmVsYXRlZCBzb21laG93IHRvIHRoaXMgbG9ja2RlcCBzdHVmZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4OTksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNDoyNDowNC4wMjM2NDAzMDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyMDM3MDMyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXNfYWxsb2NfY3ljbGljXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oPTU2OD1pbnQgbWFzX3ByZWFsbG9jYXRlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSwgZ2ZwX3QgZ2ZwKTtcXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaDo1Njk6aW50IG1hc19hbGxvY19jeWNsaWMoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0cCxcXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaC01NzAtXFx0XFx0dm9pZCAqZW50cnksIHVuc2lnbmVkIGxvbmcgcmFuZ2VfbG8sIHVuc2lnbmVkIGxvbmcgcmFuZ2VfaGksXFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jPTM4NDM9c3RhdGljIGlubGluZSB2b2lkICptYXNfaW5zZXJ0KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSlcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmMtMzg5MS0vKipcXG5saWIvbWFwbGVfdHJlZS5jOjM4OTI6ICogbWFzX2FsbG9jX2N5Y2xpYygpIC0gSW50ZXJuYWwgY2FsbCB0byBmaW5kIHNvbWV3aGVyZSB0byBzdG9yZSBhbiBlbnRyeVxcbmxpYi9tYXBsZV90cmVlLmMtMzg5My0gKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGUuXFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jLTM5MDQtICovXFxubGliL21hcGxlX3RyZWUuYzozOTA1OmludCBtYXNfYWxsb2NfY3ljbGljKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nICpzdGFydHAsXFxubGliL21hcGxlX3RyZWUuYy0zOTA2LVxcdFxcdHZvaWQgKmVudHJ5LCB1bnNpZ25lZCBsb25nIHJhbmdlX2xvLCB1bnNpZ25lZCBsb25nIHJhbmdlX2hpLFxcbi0tXFxubGliL21hcGxlX3RyZWUuYy0zOTQyLX1cXG5saWIvbWFwbGVfdHJlZS5jOjM5NDM6RVhQT1JUX1NZTUJPTChtYXNfYWxsb2NfY3ljbGljKTtcXG5saWIvbWFwbGVfdHJlZS5jLTM5NDQtXFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jPTYwMDE9aW50IG10cmVlX2FsbG9jX2N5Y2xpYyhzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0cCxcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmMtNjAxMy1cXHRtdHJlZV9sb2NrKG10KTtcXG5saWIvbWFwbGVfdHJlZS5jOjYwMTQ6XFx0cmV0ID0gbWFzX2FsbG9jX2N5Y2xpYyhcXHUwMDI2bWFzLCBzdGFydHAsIGVudHJ5LCByYW5nZV9sbywgcmFuZ2VfaGksXFxubGliL21hcGxlX3RyZWUuYy02MDE1LVxcdFxcdFxcdCAgICAgICBuZXh0LCBnZnApO1xcbi0tXFxubGliL3Rlc3RfbWFwbGVfdHJlZS5jPTM2NDY9c3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGFsbG9jX2N5Y2xpY190ZXN0aW5nKHN0cnVjdCBtYXBsZV90cmVlICptdClcXG4tLVxcbmxpYi90ZXN0X21hcGxlX3RyZWUuYy0zNjU1LVxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgMTAwOyBpKyspIHtcXG5saWIvdGVzdF9tYXBsZV90cmVlLmM6MzY1NjpcXHRcXHRtYXNfYWxsb2NfY3ljbGljKFxcdTAwMjZtYXMsIFxcdTAwMjZsb2NhdGlvbiwgbXQsIDIsIFVMT05HX01BWCwgXFx1MDAyNm5leHQsIEdGUF9LRVJORUwpO1xcbmxpYi90ZXN0X21hcGxlX3RyZWUuYy0zNjU3LVxcdFxcdE1BU19CVUdfT04oXFx1MDAyNm1hcywgaSAhPSBsb2NhdGlvbiAtIDIpO1xcbi0tXFxubGliL3Rlc3RfbWFwbGVfdHJlZS5jLTM2NzktXFx0ICogRXhoYXVzdGluZyB0aGUgYWxsb2NhdGlvbiBhcmVhIGFuZCBmb3JjaW5nIHRoZSBzZWFyY2ggdG8gd3JhcCBuZWVkcyBhXFxubGliL3Rlc3RfbWFwbGVfdHJlZS5jOjM2ODA6XFx0ICogbWFzX3Jlc2V0KCkgaW4gbWFzX2FsbG9jX2N5Y2xpYygpLlxcbmxpYi90ZXN0X21hcGxlX3RyZWUuYy0zNjgxLVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNDoyNDowNi42NDQwMTgwOTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTkzMDUxNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdCwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBgbWFzX2VyYXNlYCBVc2FnZSoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGdldCB0b28gZGVlcCBpbnRvIHRoaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBUaGUgcHJvbXB0IGlzIGluY3JlZGlibHkgc3BlY2lmaWMgLSBpdCBtZW50aW9ucyBgbWFzX2VyYXNlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgKndoeSogd2UncmUgZm9jdXNpbmcgb24gdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJcyB0aGVyZSBhIHNwZWNpZmljIHByb2JsZW0gdGhhdCB0aGlzIHN1Z2dlc3RzPyBJdCBjb3VsZCBiZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMsIG9yIHBlcmhhcHMgZGF0YSBzYW5pdGF0aW9uLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggcG9zc2libGUgc2NlbmFyaW9zIGJhc2VkIG9uIG15IGV4cGVyaWVuY2UuXG5cbk15IG5leHQgc3RlcCB3b3VsZCBiZSB0byBmaWd1cmUgb3V0IGlmIGl0J3MgdGhlIHJpZ2h0IGZ1bmN0aW9uIHRvIHVzZSwgdG8gY29uZmlybSB0aGF0IGl0J3MgdGhlIGJlc3Qgb3B0aW9uIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTQ0LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDQ6MjQ6MDkuMjM3MDc0MjUzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTQzODIyMjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFzX2VyYXNlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3Q9MTcxPVRoZSByYW5nZSBpcyBwYXNzZWQgaW4gYXMgbWVtYmVycyBvZiB0aGUgbWFwbGUgc3RhdGU6IGluZGV4IGFuZCBsYXN0LlxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3QtMTcyLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3Q6MTczOllvdSBjYW4gdXNlIG1hc19lcmFzZSgpIHRvIGVyYXNlIGFuIGVudGlyZSByYW5nZSBieSBzZXR0aW5nIGluZGV4IGFuZFxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3QtMTc0LWxhc3Qgb2YgdGhlIG1hcGxlIHN0YXRlIHRvIHRoZSBkZXNpcmVkIHJhbmdlIHRvIGVyYXNlLiAgVGhpcyB3aWxsIGVyYXNlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0PTE3Nj1hbmQgbGFzdCBhcyB0aGUgcmFuZ2UgdGhhdCB3YXMgZXJhc2VkIGFuZCByZXR1cm4gdGhlIGVudHJ5IHRoYXQgZXhpc3RlZFxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3Q6MTc3OmF0IHRoYXQgbG9jYXRpb24uICBOb3RlIHRoYXQgbWFzX2VyYXNlKCkgbWF5IGFsbG9jYXRlIHdpdGggdGhlIEdGUF9LRVJORUwgZmxhZy5cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0LTE3OC1JZiB0aGlzIGlzIG5vdCBva2F5LCBjb25zaWRlciB1c2luZyBtYXNfc3RvcmVfZ2ZwKCkgYW5kIHBhc3MgaXQgYSBgYE5VTExgYCxcXG4tLVxcbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtbWFwbGUuYz0xMDc9c3RhdGljIGludCByZWdjYWNoZV9tYXBsZV9kcm9wKHN0cnVjdCByZWdtYXAgKm1hcCwgdW5zaWduZWQgaW50IG1pbixcXG4tLVxcbmRyaXZlcnMvYmFzZS9yZWdtYXAvcmVnY2FjaGUtbWFwbGUuYy0xNTktXFx0XFx0bWFzX2xvY2soXFx1MDAyNm1hcyk7XFxuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS1tYXBsZS5jOjE2MDpcXHRcXHRtYXNfZXJhc2UoXFx1MDAyNm1hcyk7XFxuZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdjYWNoZS1tYXBsZS5jLTE2MS1cXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01MzExPXN0YXRpYyB2b2lkIHVibGtfYnVmX2VyYXNlX3JhbmdlcyhzdHJ1Y3QgdWJsa19kZXZpY2UgKnViLCBpbnQgYnVmX2luZGV4KVxcbi0tXFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTUzMTgtXFx0XFx0aWYgKHJhbmdlLVxcdTAwM2VidWZfaW5kZXggPT0gYnVmX2luZGV4KSB7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jOjUzMTk6XFx0XFx0XFx0bWFzX2VyYXNlKFxcdTAwMjZtYXMpO1xcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYy01MzIwLVxcdFxcdFxcdGtmcmVlKHJhbmdlKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svdWJsa19kcnYuYz01NDgwPXN0YXRpYyBib29sIF9fdWJsa19zaG1lbV9yZW1vdmVfcmFuZ2VzKHN0cnVjdCB1YmxrX2RldmljZSAqdWIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmMtNTUwNC1cXHRcXHRcXHRnb3RvIHVubG9jaztcXG5kcml2ZXJzL2Jsb2NrL3VibGtfZHJ2LmM6NTUwNTpcXHRcXHRtYXNfZXJhc2UoXFx1MDAyNm1hcyk7XFxuZHJpdmVycy9ibG9jay91YmxrX2Rydi5jLTU1MDYtXFx0XFx0a2ZyZWUocmFuZ2UpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmM9MzIzPW5vdXZlYXVfdXZtYV9yZWdpb25fcmVtb3ZlKHN0cnVjdCBub3V2ZWF1X3V2bWFfcmVnaW9uICpyZWcpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYy0zMjctXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmM6MzI4OlxcdG1hc19lcmFzZShcXHUwMDI2bWFzKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYy0zMjktfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmM9MTk2Mj1ub3V2ZWF1X3V2bW1fZmluaShzdHJ1Y3Qgbm91dmVhdV91dm1tICp1dm1tKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV91dm1tLmMtMTk5MC1cXHRtYXNfZm9yX2VhY2goXFx1MDAyNm1hcywgcmVnLCBVTE9OR19NQVgpIHtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYzoxOTkxOlxcdFxcdG1hc19lcmFzZShcXHUwMDI2bWFzKTtcXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3V2bW0uYy0xOTkyLVxcdFxcdG5vdXZlYXVfdXZtYV9yZWdpb25fc3BhcnNlX3VucmVmKHJlZyk7XFxuLS1cXG5kcml2ZXJzL2lvbW11L2dlbmVyaWNfcHQva3VuaXRfaW9tbXVfcHQuaD0yODc9c3RhdGljIHZvaWQgdW5tYXBfY29sbGlzaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QsIHN0cnVjdCBtYXBsZV90cmVlICptdCxcXG4tLVxcbmRyaXZlcnMvaW9tbXUvZ2VuZXJpY19wdC9rdW5pdF9pb21tdV9wdC5oLTI5OS1cXG5kcml2ZXJzL2lvbW11L2dlbmVyaWNfcHQva3VuaXRfaW9tbXVfcHQuaDozMDA6XFx0XFx0bWFzX2VyYXNlKFxcdTAwMjZtYXMpO1xcbmRyaXZlcnMvaW9tbXUvZ2VuZXJpY19wdC9rdW5pdF9pb21tdV9wdC5oLTMwMS1cXHRcXHRtYXNfcGF1c2UoXFx1MDAyNm1hcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaD01NjA9dm9pZCAqbWFzX3N0b3JlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSk7XFxuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmg6NTYxOnZvaWQgKm1hc19lcmFzZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcyk7XFxuaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmgtNTYyLWludCBtYXNfc3RvcmVfZ2ZwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSwgZ2ZwX3QgZ2ZwKTtcXG4tLVxcbmtlcm5lbC9pcnEvaXJxZGVzYy5jPTE5OD1zdGF0aWMgdm9pZCBkZWxldGVfaXJxX2Rlc2ModW5zaWduZWQgaW50IGlycSlcXG4tLVxcbmtlcm5lbC9pcnEvaXJxZGVzYy5jLTIwMC1cXHRNQV9TVEFURShtYXMsIFxcdTAwMjZzcGFyc2VfaXJxcywgaXJxLCBpcnEpO1xcbmtlcm5lbC9pcnEvaXJxZGVzYy5jOjIwMTpcXHRtYXNfZXJhc2UoXFx1MDAyNm1hcyk7XFxua2VybmVsL2lycS9pcnFkZXNjLmMtMjAyLX1cXG4tLVxcbmxpYi9tYXBsZV90cmVlLmM9NTY4ND1FWFBPUlRfU1lNQk9MX0dQTChtYXNfZmluZF9yYW5nZV9yZXYpO1xcbi0tXFxubGliL21hcGxlX3RyZWUuYy01Njg2LS8qKlxcbmxpYi9tYXBsZV90cmVlLmM6NTY4NzogKiBtYXNfZXJhc2UoKSAtIEZpbmQgdGhlIHJhbmdlIGluIHdoaWNoIGluZGV4IHJlc2lkZXMgYW5kIGVyYXNlIHRoZSBlbnRpcmVcXG5saWIvbWFwbGVfdHJlZS5jLTU2ODgtICogcmFuZ2UuXFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jLTU3MDAtICovXFxubGliL21hcGxlX3RyZWUuYzo1NzAxOnZvaWQgKm1hc19lcmFzZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcXG5saWIvbWFwbGVfdHJlZS5jLTU3MDIte1xcbi0tXFxubGliL21hcGxlX3RyZWUuYy01NzM5LX1cXG5saWIvbWFwbGVfdHJlZS5jOjU3NDA6RVhQT1JUX1NZTUJPTF9HUEwobWFzX2VyYXNlKTtcXG5saWIvbWFwbGVfdHJlZS5jLTU3NDEtXFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jPTYwNzQ9dm9pZCAqbXRyZWVfZXJhc2Uoc3RydWN0IG1hcGxlX3RyZWUgKm10LCB1bnNpZ25lZCBsb25nIGluZGV4KVxcbi0tXFxubGliL21hcGxlX3RyZWUuYy02MDgxLVxcdG10cmVlX2xvY2sobXQpO1xcbmxpYi9tYXBsZV90cmVlLmM6NjA4MjpcXHRlbnRyeSA9IG1hc19lcmFzZShcXHUwMDI2bWFzKTtcXG5saWIvbWFwbGVfdHJlZS5jLTYwODMtXFx0bXRyZWVfdW5sb2NrKG10KTtcXG4tLVxcbmxpYi90ZXN0X21hcGxlX3RyZWUuYz0zODc9c3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGNoZWNrX2ZpbmQoc3RydWN0IG1hcGxlX3RyZWUgKm10KVxcbi0tXFxubGliL3Rlc3RfbWFwbGVfdHJlZS5jLTU3OC1cXHRtYXMubGFzdCA9IFVMT05HX01BWDtcXG5saWIvdGVzdF9tYXBsZV90cmVlLmM6NTc5OlxcdG1hc19lcmFzZShcXHUwMDI2bWFzKTtcXG5saWIvdGVzdF9tYXBsZV90cmVlLmMtNTgwLVxcbi0tXFxubW0vYWxsb2NfdGFnLmM9MzczPXN0YXRpYyB2b2lkIGNsZWFuX3VudXNlZF9tb2R1bGVfYXJlYXNfbG9ja2VkKHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy0zODgtXFx0XFx0aWYgKGNsZWFuX3VudXNlZF9jb3VudGVycyhzdGFydF90YWcsIGVuZF90YWcpKVxcbm1tL2FsbG9jX3RhZy5jOjM4OTpcXHRcXHRcXHRtYXNfZXJhc2UoXFx1MDAyNm1hcyk7XFxubW0vYWxsb2NfdGFnLmMtMzkwLVxcdH1cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTQ4ND1zdGF0aWMgdm9pZCAqcmVzZXJ2ZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTUzMy1cXHRcXHRcXHRtYXMuaW5kZXggPSBwYWRfc3RhcnQ7XFxubW0vYWxsb2NfdGFnLmM6NTM0OlxcdFxcdFxcdG1hc19lcmFzZShcXHUwMDI2bWFzKTtcXG5tbS9hbGxvY190YWcuYy01MzUtXFx0XFx0XFx0cmV0ID0gRVJSX1BUUih4YV9lcnIobWFzLm5vZGUpKTtcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jPTM1OTAyPXN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19lcmFzZV9yZWJhbGFuY2Uoc3RydWN0IG1hcGxlX3RyZWUgKm10KVxcbi0tXFxudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMtMzU5NDctXFx0d2hpbGUgKG1hc19kYXRhX2VuZChcXHUwMDI2bWFzKSBcXHUwMDNlIDYpIHtcXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYzozNTk0ODpcXHRcXHRtYXNfZXJhc2UoXFx1MDAyNm1hcyk7XFxudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMtMzU5NDktXFx0XFx0bWFzX25leHQoXFx1MDAyNm1hcywgVUxPTkdfTUFYKTtcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jLTM1OTU5LVxcdHdoaWxlIChtYXNfZGF0YV9lbmQoXFx1MDAyNm1hcykgXFx1MDAzZSA5KSB7XFxudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmM6MzU5NjA6XFx0XFx0bWFzX2VyYXNlKFxcdTAwMjZtYXMpO1xcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jLTM1OTYxLVxcdFxcdG1hc19uZXh0KFxcdTAwMjZtYXMsIFVMT05HX01BWCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYy0zNTk2OS1cXHRcXHRtYXNfc2V0KFxcdTAwMjZtYXMsIHZhbCk7XFxudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmM6MzU5NzA6XFx0XFx0bWFzX2VyYXNlKFxcdTAwMjZtYXMpO1xcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jLTM1OTcxLVxcdFxcdG1hc19wcmV2KFxcdTAwMjZtYXMsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmM9MzYyMDA9c3RhdGljIHZvaWQgY2hlY2tfY29sbGFwc2luZ19yZWJhbGFuY2Uoc3RydWN0IG1hcGxlX3RyZWUgKm10KVxcbi0tXFxudG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMtMzYyMTItXFx0ZG8ge1xcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jOjM2MjEzOlxcdFxcdG1hc19lcmFzZShcXHUwMDI2bWFzKTtcXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYy0zNjIxNC1cXHR9IHdoaWxlIChtYXNfcHJldihcXHUwMDI2bWFzLCAwKSAhPSBOVUxMKTtcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jPTM2MjQwPXN0YXRpYyB2b2lkIGNoZWNrX25vbWVtX3dyaXRlcl9yYWNlKHN0cnVjdCBtYXBsZV90cmVlICptdClcXG4tLVxcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jLTM2MjU1LVxcdC8qIGVyYXNlIDAtNSAqL1xcbnRvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jOjM2MjU2OlxcdG1hc19lcmFzZShcXHUwMDI2bWFzKTtcXG50b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYy0zNjI1Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDQ6MjQ6MTEuNjkxNDYxMDQyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQyNjczMzk0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTWFwbGUgVHJlZSBMb2NrZGVwIGFuZCBTdG9yZSBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2gsIGFuZCBoZXJlJ3MgbXkgdGFrZSBvbiB0aGUgY2hhbmdlcy4gVGhlIGluaXRpYWwgYWRkaXRpb24gb2YgYG1hc19sb2NrX2NoZWNrYCwgYG1hc19pbml0X2xvY2tfY2hlY2tgLCBhbmQgYG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrYCwgYWxsIGxldmVyYWdpbmcgYGxvY2tfc2VxdWVuY2VgLCBhcmUgY2xlYXJseSBhYm91dCBpbnRlZ3JhdGluZyBsb2NrZGVwIGludG8gdGhlIE1hcGxlIFRyZWUuIFRoaXMgaXMgYSBzb2xpZCBtb3ZlIGZvciBpbXByb3ZpbmcgZGVidWdnaW5nIGFuZCBlbnN1cmluZyBwcm9wZXIgbG9ja2luZyBiZWhhdmlvciwgd2hpY2ggaXMgY3JpdGljYWwgZm9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGxpa2UgdGhpcy4gIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGBDT05GSUdfTE9DS0RFUGAgYW5kIHBvdGVudGlhbGx5IGBDT05GSUdfUFJPVkVfTE9DS0lOR2AgKHdoaWNoIGVuYWJsZXMgYExPQ0tERVBgKSBhbmQgYENPTkZJR19ERUJVR19NQVBMRV9UUkVFYCAod2hpY2ggZGVwZW5kcyBvbiBgREVCVUdfS0VSTkVMYCkgd2lsbCBiZSBlc3NlbnRpYWwgZm9yIHRlc3RpbmcgdGhpcyBwcm9wZXJseS5cblxuVGhlIHJlYWwgbWVhdCBvZiB0aGUgY2hhbmdlcywgaG93ZXZlciwgc2VlbXMgdG8gYmUgZm9jdXNlZCBvbiBvcHRpbWl6aW5nIHRoZSBgbWFzX3dyX25vZGVfc3RvcmVgIGFuZCBgbWFzX3dyX3N0b3JlX3R5cGVgIGZ1bmN0aW9ucy4gIEluIGBtYXNfd3Jfbm9kZV9zdG9yZWAsIGluc3RlYWQgb2YgYSBmdWxsIGBtZW1zZXRgIG9uIGByZXVzZWAgZm9yIHRoZSBuZXcgbm9kZSwgdGhlcmUncyBhIG1vcmUgdGFyZ2V0ZWQgY2xlYXJpbmcgb2YgdW51c2VkIHNsb3RzIGFuZCBwaXZvdHMgYXQgdGhlIGVuZCBvZiB0aGUgbm9kZS4gIFRoaXMgbG9va3MgbGlrZSBhIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGJ5IHJlZHVjaW5nIHVubmVjZXNzYXJ5IG1lbW9yeSB3cml0ZXMsIHdoaWNoIGlzIGFsd2F5cyB3ZWxjb21lLiAgSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGBub2RlX3Nsb3RzYCBhbmQgYG5vZGVfcGl2b3RzYCB2YXJpYWJsZXMgaGVyZSwgdG8gYmUgc3VyZSB0aGlzIGlzIGNvcnJlY3QuXG5cbmBtYXNfd3Jfc3RvcmVfdHlwZWAgaXMgYWxzbyBtb2RpZmllZCwgdG8gbW9yZSBpbnRlbGxpZ2VudGx5IGNsYXNzaWZ5IHN0b3JlIHR5cGVzLiAgVGhlcmUncyBhZGRlZCBsb2dpYyB0byBkZXRlcm1pbmUgaWYgdGhlIHN0b3JlIGlzIGFuIGFwcGVuZCwgYSBzbG90IHN0b3JlLCBvciByZWJhbGFuY2UgYmFzZWQgb24gZmFjdG9ycyBsaWtlIG5ld19lbmQsIGBpbl9yY3VgLCBgYXBwZW5kaW5nYCwgYW5kIGBvbmVfc2xvdGAuIFRoaXMgaXMgYSBjcnVjaWFsIGFyZWEgZm9yIHBlcmZvcm1hbmNlLCBhbmQgdGhlIGNvZGUgbG9va3MgbGlrZSBpdCBtYWtlcyB0aGVzZSBuZXcgY2hlY2tzIHByb3Blcmx5LiBJIHdpbGwgbmVlZCB0byByZWFsbHkgZm9jdXMgb24gdGhpcyBjb2RlIHNlY3Rpb24gZm9yIHRlc3RpbmcuIEkgYWxzbyBzZWUgdGhleSBoYXZlIGFsc28gbW9kaWZpZWQgYG1hc19hbGxvY19jeWNsaWNgLCBhbmQgYW0gbm90IHN1cmUgaWYgaXQgaXMgYSBzaWRlIGVmZmVjdCBvZiB0aGUgb3RoZXIgY2hhbmdlcy5cblxuVGhlIG1vZGlmaWNhdGlvbnMgdG8gYG1hc19lcmFzZWAgYXJlIGludGVyZXN0aW5nLCB3aXRoIHRoZSBhZGRpdGlvbiBvZiB0aGUgYG1pZ2h0X2FsbG9jYCBjYWxsIHdpdGhpbiBhbiBleHRlcm5hbCBsb2NrIGNoZWNrLiBUaGlzIGlzIGRlc2lnbmVkIGZvciBsb3ctbWVtb3J5IHNpdHVhdGlvbnMsIGFuZCB0aGlzIGxvb2tzIGxpa2UgYSByZWFzb25hYmxlIGFwcHJvYWNoLiBJIG5lZWQgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcy5cblxuRmluYWxseSwgdGhlIGNoYW5nZXMgdG8gYG1hc19ub21lbWAgYXJlIGFsc28gaW1wb3J0YW50LiBUaGUgYFdBUk5fT05fT05DRWAgYW5kIHRoZSBsb2dpYyBhcm91bmQgZXh0ZXJuYWwgbG9ja3MgYW5kIGJsb2NraW5nIEdGUCBmbGFncyBpcyBjcnVjaWFsIGZvciBwcmV2ZW50aW5nIGRlYWRsb2NrcyBhbmQgaGFuZGxpbmcgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZ3JhY2VmdWxseS4gVGhlIG5ldyBgbWFzX3Jlc2V0KG1hcylgIGNhbGwgaXMgYWRkZWQgdG8gaGFuZGxlIHRoaXMuXG5cblNvLCBvdmVyYWxsLCB0aGVzZSBwYXRjaGVzIGFyZSBmb2N1c2VkIG9uIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBhbmQgcm9idXN0bmVzcy4gVGhlIG9wdGltaXphdGlvbiBvZiBtZW1vcnkgd3JpdGVzIGluIHRoZSBub2RlIHN0b3JlIGlzIGdvb2QsIGFuZCB0aGUgaW1wcm92ZWQgc3RvcmUgdHlwZSBkZXRlcm1pbmF0aW9uIGxvb2tzIGJlbmVmaWNpYWwuIExvY2tkZXAgaW50ZWdyYXRpb24gaXMgYSBzb2xpZCBhZGRpdGlvbiwgYW5kIHRoZSBsb3ctbWVtb3J5IGhhbmRsaW5nIHNlZW1zIHdlbGwgdGhvdWdodCBvdXQuIEknbGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gYG1hc193cl9ub2RlX3N0b3JlYCwgYG1hc193cl9zdG9yZV90eXBlYCwgYG1hc19hbGxvY19jeWNsaWNgLCBgbWFzX2VyYXNlYCwgYW5kIGBtYXNfbm9tZW1gLiBJIHdpbGwgYWxzbyBoYXZlIHRvIGFkZCBgbWFzX3NldF9wYXJlbnRfc2xvdHNgIGFuZCBgbWFzX3VwZGF0ZV9nYXBfa25vd25gIHRvIG15IGZ1enogbGlzdCB0byBtYWtlIHN1cmUgSSBjb3ZlciBhbGwgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NjcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA0OjI0OjI1Ljk1ODgwNDY2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjczNTgwOTMyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXNfc2V0X3BhcmVudF9zbG90c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvbWFwbGVfdHJlZS5jPTQ2OT12b2lkIG1hc19zZXRfcGFyZW50KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKmVub2RlLFxcbi0tXFxubGliL21hcGxlX3RyZWUuYy00OTktLypcXG5saWIvbWFwbGVfdHJlZS5jOjUwMDogKiBtYXNfc2V0X3BhcmVudF9zbG90cygpIC0gQnVsayBvcGVyYXRpb24gdG8gc2V0IG1hbnkgc2xvdCBwYXJlbnQgcG9pbnRlcnNcXG5saWIvbWFwbGVfdHJlZS5jLTUwMS0gKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGVcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmM9NTA3PXN0YXRpYyBpbmxpbmVcXG5saWIvbWFwbGVfdHJlZS5jOjUwODp2b2lkIG1hc19zZXRfcGFyZW50X3Nsb3RzKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnBhcmVudCxcXG5saWIvbWFwbGVfdHJlZS5jLTUwOS1cXHR2b2lkIF9fcmN1ICoqc2xvdHMsIHVuc2lnbmVkIGNoYXIgc3RhcnRfc2xvdCwgdW5zaWduZWQgY2hhciBjb3VudClcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmM9MTY0Mz1zdGF0aWMgaW5saW5lIHZvaWQgbWFzX2Fkb3B0X2NoaWxkcmVuKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLFxcbi0tXFxubGliL21hcGxlX3RyZWUuYy0xNjUyLVxcdGVuZCA9IG1hX2RhdGFfZW5kKG5vZGUsIHR5cGUsIHBpdm90cywgbWFzLVxcdTAwM2VtYXgpO1xcbmxpYi9tYXBsZV90cmVlLmM6MTY1MzpcXHRtYXNfc2V0X3BhcmVudF9zbG90cyhtYXMsIHBhcmVudCwgc2xvdHMsIDAsIGVuZCArIDEpO1xcbmxpYi9tYXBsZV90cmVlLmMtMTY1NC19XFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jPTIwMjA9dW5zaWduZWQgbG9uZyBub2RlX2NvcHkoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9ub2RlICpzcmMsXFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jLTIwMzYtXFx0aWYgKCFtYV9pc19sZWFmKGRfbXQpIFxcdTAwMjZcXHUwMDI2IHNfbXQgPT0gbWFwbGVfY29weSlcXG5saWIvbWFwbGVfdHJlZS5jOjIwMzc6XFx0XFx0bWFzX3NldF9wYXJlbnRfc2xvdHMobWFzLCBtdF9ta19ub2RlKGRzdCwgZF9tdCksXFxubGliL21hcGxlX3RyZWUuYy0yMDM4LVxcdFxcdFxcdFxcdCAgICAgZF9zbG90cywgZF9zdGFydCwgc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDA0OjI0OjI4LjY5NDYxODI3NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Njg1MDMxNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBGb2N1cyBmb3IgTWFwbGUgVHJlZSBMb2NrIFNlcXVlbmNlIFZhbGlkYXRpb24gYW5kIE9wdGltaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBjb25zaWRlciB0aGUgZm9sbG93aW5nIHN5bWJvbHMsIHBhcnRpY3VsYXJseSBnaXZlbiB0aGUgY29udGV4dCBvZiBsb2NrIHNlcXVlbmNlIHZhbGlkYXRpb24gYW5kIG9wdGltaXphdGlvbiB3aXRoaW4gdGhlIE1hcGxlIFRyZWU6IGBtYXNfd3Jfbm9kZV9zdG9yZWAsIGBtYXNfd3Jfc3RvcmVfdHlwZWAsIGBtYXNfYWxsb2NfY3ljbGljYCwgYG1hc19lcmFzZWAsIGBtYXNfbm9tZW1gLCBgbWFzX3NldF9wYXJlbnRfc2xvdHNgLCBgbWFzX3VwZGF0ZV9nYXBfa25vd25gLCBgbWFzX2xvY2tfY2hlY2tgLCBgbWFzX2luaXRfbG9ja19jaGVja2AsIGFuZCBgbWFzX21heV9pbml0X2xvY2tfY2hlY2tgLiBIb3dldmVyLCBzaW5jZSBzb21lIGFyZSBgc3RhdGljYCBvciBgc3RhdGljIGlubGluZWAsIHRoZXkgbWlnaHQgYmUgaW5saW5lZCwgc28gdGhleSdyZSBub3QgdXNlZnVsIGVudHJ5IHBvaW50cyBmb3IgYW5hbHlzaXMuXG5cbkkga25vdyB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGxvY2sgc2VxdWVuY2UgdmFsaWRhdGlvbiB1c2luZyBgbG9ja2RlcGAsIG9wdGltaXppbmcgc3RvcmUgb3BlcmF0aW9ucywgYW5kIGZpeGluZyB3cmFwLWFyb3VuZCBpbiBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGluIHRoZSBNYXBsZSBUcmVlIGltcGxlbWVudGF0aW9uLlxuXG5TbywgSSBkZWNpZGVkIHRvIGZvY3VzIG9uIHRoZSBmb2xsb3dpbmcgbm9uLWlubGluZSBvciBleHBvcnRlZCBmdW5jdGlvbnM6IGBtYXNfYWxsb2NfY3ljbGljYCwgYG1hc19lcmFzZWAsIGBtdHJlZV9lcmFzZWAsIGBtYXNfbm9tZW1gLCBhbmQgYGxvY2tfc2VxdWVuY2VgLiBJIGFsc28gaW5pdGlhbGx5IGlkZW50aWZpZWQgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGxpa2UgYG1hc19zdG9yZWAsIGBtYXNfc3RvcmVfZ2ZwYCwgYG1hc19zdG9yZV9wcmVhbGxvY2AsIGFuZCBgbWFzX3ByZWFsbG9jYXRlYCwgYnV0IHRoZXNlIGFyZSBsaWtlbHkgaG90IHBhdGggZnVuY3Rpb25zLiBBdm9pZGluZyBob3QgcGF0aHMgaXMgaW1wb3J0YW50IGhlcmUuIFNvLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyBJIGp1c3QgbGlzdGVkOiBgbWFzX2FsbG9jX2N5Y2xpY2AsIGBtYXNfZXJhc2VgLCBgbXRyZWVfZXJhc2VgLCBgbWFzX25vbWVtYCwgYW5kIGBsb2NrX3NlcXVlbmNlYC5cblxuSSdtIHZlcmlmeWluZyB0aGF0IGBtYXNfYWxsb2NfY3ljbGljYCBpcyB1c2VkIGluIGBtdHJlZV9hbGxvY19jeWNsaWNgLCBgbWFzX2VyYXNlYCBpcyB1c2VkIGluIGBtdHJlZV9lcmFzZWAgYW5kIGEgZmV3IGRyaXZlcnMsIGFuZCBgbWFzX25vbWVtYCBpcyB1c2VkIGluIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgY2FzZXMuIFRoZSBjb25maWd1cmF0aW9ucyBvZiBpbnRlcmVzdCBhcmUgYERFQlVHX01BUExFX1RSRUVgLCBgUFJPVkVfTE9DS0lOR2AsIGFuZCBgTE9DS0RFUGAuIFRoZXNlIGZ1bmN0aW9ucyBhbmQgY29uZmlncyByZXByZXNlbnQgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBkZXRhaWxlZCBpbnNwZWN0aW9uIGFuZCBwb3NzaWJsZSBmdXp6aW5nIGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTU3LCJPdXRwdXRUb2tlbnMiOjE3MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwNDoyNDozOC4zNzk2NTI2MTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjM1MjcyNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX01BUExFX1RSRUVcIixcbiAgICBcIlBST1ZFX0xPQ0tJTkdcIixcbiAgICBcIkxPQ0tERVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYXNfYWxsb2NfY3ljbGljXCIsXG4gICAgXCJtYXNfZXJhc2VcIixcbiAgICBcIm10cmVlX2VyYXNlXCIsXG4gICAgXCJtYXNfbm9tZW1cIixcbiAgICBcImxvY2tfc2VxdWVuY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvY2sgc2VxdWVuY2UgdmFsaWRhdGlvbiBmb3IgbWFwbGUgdHJlZSBvcGVyYXRpb25zIHVzaW5nIGxvY2tkZXAsIGFuZCBvcHRpbWl6ZXMgbWFwbGUgdHJlZSBub2RlIHN0b3JlIG9wZXJhdGlvbnMgYW5kIHBhcmVudCBwb2ludGVyIHVwZGF0ZXMuIEl0IGFsc28gZml4ZXMgd3JhcC1hcm91bmQgaGFuZGxpbmcgaW4gYG1hc19hbGxvY19jeWNsaWNgIGFuZCBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBpbiBgbWFzX2VyYXNlYCBhbmQgYG1hc19ub21lbWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFQlVHX01BUExFX1RSRUVcIixcbiAgICBcIlBST1ZFX0xPQ0tJTkdcIixcbiAgICBcIkxPQ0tERVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYXNfYWxsb2NfY3ljbGljXCIsXG4gICAgXCJtYXNfZXJhc2VcIixcbiAgICBcIm10cmVlX2VyYXNlXCIsXG4gICAgXCJtYXNfbm9tZW1cIixcbiAgICBcImxvY2tfc2VxdWVuY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGxvY2sgc2VxdWVuY2UgdmFsaWRhdGlvbiBmb3IgbWFwbGUgdHJlZSBvcGVyYXRpb25zIHVzaW5nIGxvY2tkZXAsIGFuZCBvcHRpbWl6ZXMgbWFwbGUgdHJlZSBub2RlIHN0b3JlIG9wZXJhdGlvbnMgYW5kIHBhcmVudCBwb2ludGVyIHVwZGF0ZXMuIEl0IGFsc28gZml4ZXMgd3JhcC1hcm91bmQgaGFuZGxpbmcgaW4gYG1hc19hbGxvY19jeWNsaWNgIGFuZCBtb2RpZmllcyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBpbiBgbWFzX2VyYXNlYCBhbmQgYG1hc19ub21lbWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4gpxs[1] Phase: Succeeded StartedAt: 2026-07-02 04:24:50 +0000 UTC FinishedAt: 2026-07-02 04:24:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 04:24:50 +0000 UTC FinishedAt: 2026-07-02 04:24:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2] Phase: Succeeded StartedAt: 2026-07-02 04:24:50 +0000 UTC FinishedAt: 2026-07-02 08:51:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-02 04:24:50 +0000 UTC FinishedAt: 2026-07-02 08:51:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 04:24:50 +0000 UTC FinishedAt: 2026-07-02 04:25:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 04:24:50 +0000 UTC FinishedAt: 2026-07-02 04:25:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow4gpxs/series-workflow4gpxs-convert-artifact-2990295610/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 04:25:22 +0000 UTC FinishedAt: 2026-07-02 04:55:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 04:25:22 +0000 UTC FinishedAt: 2026-07-02 04:55:07 +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:*ccf64eb3-757f-4b04-983e-d1deab8e23ce,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-workflow4gpxs/series-workflow4gpxs-convert-artifact-2990295610/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": "371f4d82-1e85-47c8-aa10-2ab647b0661e", "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-workflow4gpxs/series-workflow4gpxs-build-action-3967385576/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-02 04:25:22 +0000 UTC FinishedAt: 2026-07-02 04:55:02 +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:*ccf64eb3-757f-4b04-983e-d1deab8e23ce,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-workflow4gpxs/series-workflow4gpxs-convert-artifact-2990295610/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": "371f4d82-1e85-47c8-aa10-2ab647b0661e", "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-workflow4gpxs/series-workflow4gpxs-build-action-3967385576/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-02 04:55:07 +0000 UTC FinishedAt: 2026-07-02 04:55:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-02 04:55:07 +0000 UTC FinishedAt: 2026-07-02 04:55:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-02 04:55:07 +0000 UTC FinishedAt: 2026-07-02 04:55:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-02 04:55:07 +0000 UTC FinishedAt: 2026-07-02 04:55:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow4gpxs/series-workflow4gpxs-convert-artifact-3501285525/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-02 04:55:17 +0000 UTC FinishedAt: 2026-07-02 04:57:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-02 04:55:17 +0000 UTC FinishedAt: 2026-07-02 04:57:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*371f4d82-1e85-47c8-aa10-2ab647b0661e,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-workflow4gpxs/series-workflow4gpxs-build-action-3967385576/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-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-02 04:57:29 +0000 UTC FinishedAt: 2026-07-02 04:57:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-02 04:57:29 +0000 UTC FinishedAt: 2026-07-02 04:57:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-02 04:57:29 +0000 UTC FinishedAt: 2026-07-02 05:41:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-02 04:57:29 +0000 UTC FinishedAt: 2026-07-02 05:41:13 +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:*ccf64eb3-757f-4b04-983e-d1deab8e23ce,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-workflow4gpxs/series-workflow4gpxs-convert-artifact-3501285525/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": "d2a2b271-00b4-40a2-b9d5-dad9ca80ca27", "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-workflow4gpxs/series-workflow4gpxs-build-action-3615491873/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-02 04:57:29 +0000 UTC FinishedAt: 2026-07-02 05:40:11 +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:*ccf64eb3-757f-4b04-983e-d1deab8e23ce,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-workflow4gpxs/series-workflow4gpxs-convert-artifact-3501285525/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": "d2a2b271-00b4-40a2-b9d5-dad9ca80ca27", "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-workflow4gpxs/series-workflow4gpxs-build-action-3615491873/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-02 05:41:13 +0000 UTC FinishedAt: 2026-07-02 05:41:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-02 05:41:13 +0000 UTC FinishedAt: 2026-07-02 05:41:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-02 05:41:13 +0000 UTC FinishedAt: 2026-07-02 05:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-02 05:41:13 +0000 UTC FinishedAt: 2026-07-02 05:43:15 +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:*d2a2b271-00b4-40a2-b9d5-dad9ca80ca27,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-workflow4gpxs/series-workflow4gpxs-build-action-3615491873/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-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-02 05:43:24 +0000 UTC FinishedAt: 2026-07-02 08:51:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-02 05:43:24 +0000 UTC FinishedAt: 2026-07-02 08:51:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},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:*371f4d82-1e85-47c8-aa10-2ab647b0661e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d2a2b271-00b4-40a2-b9d5-dad9ca80ca27,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-workflow4gpxs/series-workflow4gpxs-build-action-3967385576/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-workflow4gpxs/series-workflow4gpxs-build-action-3615491873/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-02 05:43:24 +0000 UTC FinishedAt: 2026-07-02 05:43:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-02 05:43:24 +0000 UTC FinishedAt: 2026-07-02 05:43:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},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-workflow4gpxs/series-workflow4gpxs-convert-artifact-311620474/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-02 05:43:24 +0000 UTC FinishedAt: 2026-07-02 05:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-02 05:43:24 +0000 UTC FinishedAt: 2026-07-02 05:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-02 05:43:24 +0000 UTC FinishedAt: 2026-07-02 05:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-02 05:43:34 +0000 UTC FinishedAt: 2026-07-02 08:51:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4gpxs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mas_alloc_cyclic","mas_erase","mtree_erase","mas_nomem","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f2d2f012a9ca4ae5fa400d38fdb37f8eac3f1001","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","PROVE_LOCKING","LOCKDEP"],"series_id":"f1f4ca05-4aa4-4657-9c56-27366f2402f2","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-02 05:43:34 +0000 UTC FinishedAt: 2026-07-02 08:51:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*371f4d82-1e85-47c8-aa10-2ab647b0661e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d2a2b271-00b4-40a2-b9d5-dad9ca80ca27,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-workflow4gpxs/series-workflow4gpxs-build-action-3967385576/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-workflow4gpxs/series-workflow4gpxs-build-action-3615491873/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-workflow4gpxs/series-workflow4gpxs-convert-artifact-311620474/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,}