Name: series-workflowsc2pt Phase: Succeeded StartedAt: 2026-07-01 02:13:26 +0000 UTC FinishedAt: 2026-07-01 07:01:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[0] Phase: Succeeded StartedAt: 2026-07-01 02:13:26 +0000 UTC FinishedAt: 2026-07-01 02:25:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 02:13:26 +0000 UTC FinishedAt: 2026-07-01 02:25:36 +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": "15654b0268cd65b4e673510c0377774e61b86397", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_MAPLE_TREE", "LOCKDEP", "PROVE_LOCKING", "RCU_STRICT_GRACE_PERIOD" ], "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": "15654b0268cd65b4e673510c0377774e61b86397", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_MAPLE_TREE", "LOCKDEP", "PROVE_LOCKING", "RCU_STRICT_GRACE_PERIOD" ], "series_id": "900befcc-c517-4d2e-b865-ae24029c312a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mas_erase", "mas_nomem", "mas_alloc_cyclic", "mas_wr_node_store", "mas_wr_store_type", "mas_store_gfp", "mas_store_prealloc", "mas_preallocate", "mtree_erase", "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+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX01BUExFX1RSRUUmIzM0OywKICAgICYjMzQ7TE9DS0RFUCYjMzQ7LAogICAgJiMzNDtQUk9WRV9MT0NLSU5HJiMzNDssCiAgICAmIzM0O1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFzX2VyYXNlJiMzNDssCiAgICAmIzM0O21hc19ub21lbSYjMzQ7LAogICAgJiMzNDttYXNfYWxsb2NfY3ljbGljJiMzNDssCiAgICAmIzM0O21hc193cl9ub2RlX3N0b3JlJiMzNDssCiAgICAmIzM0O21hc193cl9zdG9yZV90eXBlJiMzNDssCiAgICAmIzM0O21hc19zdG9yZV9nZnAmIzM0OywKICAgICYjMzQ7bWFzX3N0b3JlX3ByZWFsbG9jJiMzNDssCiAgICAmIzM0O21hc19wcmVhbGxvY2F0ZSYjMzQ7LAogICAgJiMzNDttdHJlZV9lcmFzZSYjMzQ7LAogICAgJiMzNDtsb2NrX3NlcXVlbmNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWFwbGUgdHJlZSBsb2dpYywgaW5jbHVkaW5nIGVyYXNlLCBhbGxvY2F0aW9uLCBhbmQgc3RvcmUgb3BlcmF0aW9ucywgYW5kIGludHJvZHVjZXMgbG9jayBzZXF1ZW5jZSB0cmFja2luZyBpbiBsb2NrZGVwIHRvIHZlcmlmeSBtYXBsZSB0cmVlIGxvY2tpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIGFyZSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNmFlNGNiNGI5OGVmNmQ1Njk0N2Q1YzMyNDcwZTljYzU4OGVkMWNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwMjoyNDo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdFxuaW5kZXggY2NkZDE2MTVjZjk3NGYuLjFlYWUyNGE5YzE4YjRhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdFxuQEAgLTE3LDcgJiM0MzsxNyw4IEBAIHN1cHBvcnRzIGl0ZXJhdGluZyBvdmVyIGEgcmFuZ2Ugb2YgZW50cmllcyBhbmQgZ29pbmcgdG8gdGhlIHByZXZpb3VzIG9yIG5leHRcbiBlbnRyeSBpbiBhIGNhY2hlLWVmZmljaWVudCBtYW5uZXIuICBUaGUgdHJlZSBjYW4gYWxzbyBiZSBwdXQgaW50byBhbiBSQ1Utc2FmZVxuIG1vZGUgb2Ygb3BlcmF0aW9uIHdoaWNoIGFsbG93cyByZWFkaW5nIGFuZCB3cml0aW5nIGNvbmN1cnJlbnRseS4gIFdyaXRlcnMgbXVzdFxuIHN5bmNocm9uaXplIG9uIGEgbG9jaywgd2hpY2ggY2FuIGJlIHRoZSBkZWZhdWx0IHNwaW5sb2NrLCBvciB0aGUgdXNlciBjYW4gc2V0XG4tdGhlIGxvY2sgdG8gYW4gZXh0ZXJuYWwgbG9jayBvZiBhIGRpZmZlcmVudCB0eXBlLlxuJiM0Mzt0aGUgbG9jayB0byBhbiBleHRlcm5hbCBsb2NrIG9mIGEgZGlmZmVyZW50IHR5cGUuICBOb3RlIHRoYXQgZXh0ZXJuYWwgbG9ja3MgbWF5XG4mIzQzO2ludGVyZmVyZSB3aXRoIGFsbG9jYXRpb25zIGluIGEgbG93IG1lbW9yeSBzaXR1YXRpb24uXG4gXG4gVGhlIE1hcGxlIFRyZWUgbWFpbnRhaW5zIGEgc21hbGwgbWVtb3J5IGZvb3RwcmludCBhbmQgd2FzIGRlc2lnbmVkIHRvIHVzZVxuIG1vZGVybiBwcm9jZXNzb3IgY2FjaGUgZWZmaWNpZW50bHkuICBUaGUgbWFqb3JpdHkgb2YgdGhlIHVzZXJzIHdpbGwgYmUgYWJsZSB0b1xuQEAgLTQyLDYgJiM0Mzs0MywxNSBAQCBzdWNjZXNzZnVsIHN0b3JlIG9wZXJhdGlvbiB3aXRoaW4gYSBnaXZlblxuIGNvZGUgc2VnbWVudCB3aGVuIGFsbG9jYXRpbmcgY2Fubm90IGJlIGRvbmUuICBBbGxvY2F0aW9ucyBvZiBub2RlcyBhcmVcbiByZWxhdGl2ZWx5IHNtYWxsIGF0IGFyb3VuZCAyNTYgYnl0ZXMuXG4gXG4mIzQzO1NpbmNlIHRoZSBtYXBsZSB0cmVlIHVzZXMgaW50ZXJuYWwgbm9kZXMgdGhhdCBhcmUgYWxsb2NhdGVkIGFuZCBoYXMgcnVsZXMgb25cbiYjNDM7ZGF0YSBkZW5zaXR5LCBlcmFzaW5nIGFuIGVudHJ5IG1heSBjYXVzZSBhbGxvY2F0aW9ucyB0byBvY2N1ci4gIFRoYXQgaXMsXG4mIzQzO2VyYXNpbmcgYW4gZW50cnkgbWF5IGNvbnN1bWUgbWVtb3J5LiAgVXNlcnMgbXVzdCB0YWtlIGNhcmUgdG8gZW5zdXJlIHRoYXQgdGhleVxuJiM0MztkbyBub3QgdmlvbGF0ZSB0aGUgbGFyZ2VyIHN5c3RlbSBjb25zdHJhaW50cyBvbiB3aGVuIGFuZCBob3cgbWVtb3J5IGlzXG4mIzQzO2FsbG9jYXRlZC4gIE1vc3Qgc2l0dWF0aW9ucyBhcmUgZmluZSB0byBhbGxvY2F0ZSwgYnV0IHRoZSBwcmUtYWxsb2NhdGlvblxuJiM0MztzdXBwb3J0IGlzIHByb3ZpZGVkIGFzIGEgbWVjaGFuaXNtIHRvIGF2b2lkIHRyaWNraWVyIHNpdHVhdGlvbnMuICBUaGVyZSBpcyBhbHNvXG4mIzQzO3RoZSBwb3NzaWJpbGl0eSBvZiB1c2luZyBzcGVjaWFsIGVudHJpZXMgYW5kIGNsZWFuIHVwIHRoZSB0cmVlIGxhdGVyLCBpblxuJiM0MztleHRyZW1lIGNpcmN1bXN0YW5jZXMuXG4mIzQzO1xuIC4uIF9tYXBsZS10cmVlLW5vcm1hbC1hcGk6XG4gXG4gTm9ybWFsIEFQSVxuQEAgLTYzLDcgJiM0Mzs3Myw4IEBAIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UuICBtdHJlZV9zdG9yZV9yYW5nZSgpIHdvcmtzIGluIHRoZSBzYW1lIHdheVxuIGJ1dCB0YWtlcyBhIHJhbmdlLiAgbXRyZWVfbG9hZCgpIGlzIHVzZWQgdG8gcmV0cmlldmUgdGhlIGVudHJ5IHN0b3JlZCBhdCBhXG4gZ2l2ZW4gaW5kZXguICBZb3UgY2FuIHVzZSBtdHJlZV9lcmFzZSgpIHRvIGVyYXNlIGFuIGVudGlyZSByYW5nZSBieSBvbmx5XG4ga25vd2luZyBvbmUgdmFsdWUgd2l0aGluIHRoYXQgcmFuZ2UsIG9yIG10cmVlX3N0b3JlKCkgY2FsbCB3aXRoIGFuIGVudHJ5IG9mXG4tTlVMTCBtYXkgYmUgdXNlZCB0byBwYXJ0aWFsbHkgZXJhc2UgYSByYW5nZSBvciBtYW55IHJhbmdlcyBhdCBvbmNlLlxuJiM0MztOVUxMIG1heSBiZSB1c2VkIHRvIHBhcnRpYWxseSBlcmFzZSBhIHJhbmdlIG9yIG1hbnkgcmFuZ2VzIGF0IG9uY2UuICBOb3RlIHRoYXRcbiYjNDM7bXRyZWVfZXJhc2UoKSBtYXkgdXNlIEdGUF9LRVJORUwgb24gYWxsb2NhdGlvbnMuXG4gXG4gSWYgeW91IHdhbnQgdG8gb25seSBzdG9yZSBhIG5ldyBlbnRyeSB0byBhIHJhbmdlIChvciBpbmRleCkgaWYgdGhhdCByYW5nZSBpc1xuIGN1cnJlbnRseSBgYE5VTExgYCwgeW91IGNhbiB1c2UgbXRyZWVfaW5zZXJ0X3JhbmdlKCkgb3IgbXRyZWVfaW5zZXJ0KCkgd2hpY2hcbkBAIC0xNjMsNyAmIzQzOzE3NCw5IEBAIFlvdSBjYW4gdXNlIG1hc19lcmFzZSgpIHRvIGVyYXNlIGFuIGVudGlyZSByYW5nZSBieSBzZXR0aW5nIGluZGV4IGFuZFxuIGxhc3Qgb2YgdGhlIG1hcGxlIHN0YXRlIHRvIHRoZSBkZXNpcmVkIHJhbmdlIHRvIGVyYXNlLiAgVGhpcyB3aWxsIGVyYXNlXG4gdGhlIGZpcnN0IHJhbmdlIHRoYXQgaXMgZm91bmQgaW4gdGhhdCByYW5nZSwgc2V0IHRoZSBtYXBsZSBzdGF0ZSBpbmRleFxuIGFuZCBsYXN0IGFzIHRoZSByYW5nZSB0aGF0IHdhcyBlcmFzZWQgYW5kIHJldHVybiB0aGUgZW50cnkgdGhhdCBleGlzdGVkXG4tYXQgdGhhdCBsb2NhdGlvbi5cbiYjNDM7YXQgdGhhdCBsb2NhdGlvbi4gIE5vdGUgdGhhdCBtYXNfZXJhc2UoKSBtYXkgYWxsb2NhdGUgd2l0aCB0aGUgR0ZQX0tFUk5FTCBmbGFnLlxuJiM0MztJZiB0aGlzIGlzIG5vdCBva2F5LCBjb25zaWRlciB1c2luZyBtYXNfc3RvcmVfZ2ZwKCkgYW5kIHBhc3MgaXQgYSBgYE5VTExgYCxcbiYjNDM7YWZ0ZXIgc2V0dGluZyB1cCB0aGUgY29ycmVjdCByYW5nZSBieSB3YWxraW5nIHRvIHRoZSBlbnRyeS5cbiBcbiBZb3UgY2FuIHdhbGsgZWFjaCBlbnRyeSB3aXRoaW4gYSByYW5nZSBieSB1c2luZyBtYXNfZm9yX2VhY2goKS4gIElmIHlvdSB3YW50XG4gdG8gd2FsayBlYWNoIGVsZW1lbnQgb2YgdGhlIHRyZWUgdGhlbiBgYDBgYCBhbmQgYGBVTE9OR19NQVhgYCBtYXkgYmUgdXNlZCBhc1xuQEAgLTIxMSw3ICYjNDM7MjI0LDcgQEAgQWR2YW5jZWQgTG9ja2luZ1xuIFxuIFRoZSBtYXBsZSB0cmVlIHVzZXMgYSBzcGlubG9jayBieSBkZWZhdWx0LCBidXQgZXh0ZXJuYWwgbG9ja3MgY2FuIGJlIHVzZWQgZm9yXG4gdHJlZSB1cGRhdGVzIGFzIHdlbGwuICBUbyB1c2UgYW4gZXh0ZXJuYWwgbG9jaywgdGhlIHRyZWUgbXVzdCBiZSBpbml0aWFsaXplZFxuLXdpdGggdGhlIGBgTVRfRkxBR1NfTE9DS19FWFRFUk4gZmxhZ2BgLCB0aGlzIGlzIHVzdWFsbHkgZG9uZSB3aXRoIHRoZVxuJiM0Mzt3aXRoIHRoZSBgYE1UX0ZMQUdTX0xPQ0tfRVhURVJOYGAgZmxhZywgdGhpcyBpcyB1c3VhbGx5IGRvbmUgd2l0aCB0aGVcbiBNVFJFRV9JTklUX0VYVCgpICNkZWZpbmUsIHdoaWNoIHRha2VzIGFuIGV4dGVybmFsIGxvY2sgYXMgYW4gYXJndW1lbnQuXG4gXG4gRnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFxuaW5kZXggNjIxNTY2MzQ1NDA2ZGQuLmE2NDUxZWNiYmU5YTA1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oXG5AQCAtMjczLDYgJiM0MzsyNzMsOSBAQCBleHRlcm4gc3RydWN0IHBpbl9jb29raWUgbG9ja19waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spO1xuIGV4dGVybiB2b2lkIGxvY2tfcmVwaW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llKTtcbiBleHRlcm4gdm9pZCBsb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSk7XG4gXG4mIzQzO2V4dGVybiB1MzIgbG9ja19zZXF1ZW5jZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spO1xuJiM0MzsjZGVmaW5lIGxvY2tkZXBfc2VxdWVuY2UobG9jaylcdGxvY2tfc2VxdWVuY2UoXHUwMDI2KGxvY2spLVx1MDAzZWRlcF9tYXApXG4mIzQzO1xuICNkZWZpbmUgbG9ja2RlcF9kZXB0aCh0c2spXHQoZGVidWdfbG9ja3MgPyAodHNrKS1cdTAwM2Vsb2NrZGVwX2RlcHRoIDogMClcbiBcbiAjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0KGNvbmQpXHRcdFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaFxuaW5kZXggZWFlMTE1YTI2NDg4NTYuLjU1YzRiMTUyZmVkZjdjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oXG5AQCAtMjUzLDcgJiM0MzsyNTMsOCBAQCBzdHJ1Y3QgaGVsZF9sb2NrIHtcbiBcdHVuc2lnbmVkIGludCBoYXJkaXJxc19vZmY6MTtcbiBcdHVuc2lnbmVkIGludCBzeW5jOjE7XG4gXHR1bnNpZ25lZCBpbnQgcmVmZXJlbmNlczoxMTtcdFx0XHRcdFx0LyogMzIgYml0cyAqL1xuLVx0dW5zaWduZWQgaW50IHBpbl9jb3VudDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcGluX2NvdW50OjI0O1xuJiM0MztcdHVuc2lnbmVkIGludCBzZXFfY291bnQ6ODtcbiB9O1xuIFxuICNlbHNlIC8qICFDT05GSUdfTE9DS0RFUCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oIGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcbmluZGV4IDRhNTYzMTkwNmFmZmI1Li41ZTBiZDI4NTdkOTQxZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaFxuQEAgLTI5LDEzICYjNDM7MjksMTEgQEBcbiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFNcdDMxXHQvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC1cdTAwM2VwYXJlbnQgKi9cbiAjZGVmaW5lIE1BUExFX1JBTkdFNjRfU0xPVFNcdDE2XHQvKiAyNTYgYnl0ZXMgKi9cbiAjZGVmaW5lIE1BUExFX0FSQU5HRTY0X1NMT1RTXHQxMFx0LyogMjQwIGJ5dGVzICovXG4tI2RlZmluZSBNQVBMRV9BTExPQ19TTE9UU1x0KE1BUExFX05PREVfU0xPVFMgLSAxKVxuICNlbHNlXG4gLyogMzJiaXQgc2l6ZXMgKi9cbiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFNcdDYzXHQvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC1cdTAwM2VwYXJlbnQgKi9cbiAjZGVmaW5lIE1BUExFX1JBTkdFNjRfU0xPVFNcdDMyXHQvKiAyNTYgYnl0ZXMgKi9cbiAjZGVmaW5lIE1BUExFX0FSQU5HRTY0X1NMT1RTXHQyMVx0LyogMjQwIGJ5dGVzICovXG4tI2RlZmluZSBNQVBMRV9BTExPQ19TTE9UU1x0KE1BUExFX05PREVfU0xPVFMgLSAyKVxuICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR182NEJJVCkgfHwgZGVmaW5lZChCVUlMRF9WRFNPMzJfNjQpICovXG4gXG4gI2RlZmluZSBNQVBMRV9OT0RFX01BU0tcdFx0MjU1VUxcbkBAIC00ODUsNiAmIzQzOzQ4MywxMiBAQCBzdHJ1Y3QgbWFfc3RhdGUge1xuIFx0dW5zaWduZWQgY2hhciBtYXNfZmxhZ3M7XG4gXHR1bnNpZ25lZCBjaGFyIGVuZDtcdFx0LyogVGhlIGVuZCBvZiB0aGUgbm9kZSAqL1xuIFx0ZW51bSBzdG9yZV90eXBlIHN0b3JlX3R5cGU7XHQvKiBUaGUgdHlwZSBvZiBzdG9yZSBuZWVkZWQgZm9yIHRoaXMgb3BlcmF0aW9uICovXG4mIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUFxuJiM0MztcdHUzMiBsZF9zZXE7XG4mIzQzOyNpZmRlZiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHJjdV9ncDtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi9cbiB9O1xuIFxuIHN0cnVjdCBtYV93cl9zdGF0ZSB7XG5AQCAtNTcyLDcgJiM0Mzs1NzYsNyBAQCB2b2lkIG1hcGxlX3RyZWVfaW5pdCh2b2lkKTtcbiB2b2lkIG1hc19kZXN0cm95KHN0cnVjdCBtYV9zdGF0ZSAqbWFzKTtcbiBcbiB2b2lkICptYXNfcHJldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pO1xuLXZvaWQgKm1hc19wcmV2X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heCk7XG4mIzQzO3ZvaWQgKm1hc19wcmV2X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbik7XG4gdm9pZCAqbWFzX25leHQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KTtcbiB2b2lkICptYXNfbmV4dF9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuaW5kZXggMzczYmNjMDU5OGQxMGIuLjE0ZDVjZThkZDYxMzY1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbkBAIC0xMjg4LDYgJiM0MzsxMjg4LDcgQEAgc3RydWN0IHRhc2tfc3RydWN0IHtcbiBcdHU2NFx0XHRcdFx0Y3Vycl9jaGFpbl9rZXk7XG4gXHRpbnRcdFx0XHRcdGxvY2tkZXBfZGVwdGg7XG4gXHR1bnNpZ25lZCBpbnRcdFx0XHRsb2NrZGVwX3JlY3Vyc2lvbjtcbiYjNDM7XHR1bnNpZ25lZCBpbnRcdFx0XHRsb2NrZGVwX3NlcTtcbiBcdHN0cnVjdCBoZWxkX2xvY2tcdFx0aGVsZF9sb2Nrc1tNQVhfTE9DS19ERVBUSF07XG4gI2VuZGlmXG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG5pbmRleCAyZDRjNWJhYjVhZjg4Ny4uYTY5NTY3YmRkNzkxMmUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuQEAgLTUwNzcsNyAmIzQzOzUwNzcsNyBAQCBzdGF0aWMgaW50IF9fbG9ja19pc19oZWxkKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgaW50IHJlYWQpO1xuIHN0YXRpYyBpbnQgX19sb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsXG4gXHRcdFx0ICBpbnQgdHJ5bG9jaywgaW50IHJlYWQsIGludCBjaGVjaywgaW50IGhhcmRpcnFzX29mZixcbiBcdFx0XHQgIHN0cnVjdCBsb2NrZGVwX21hcCAqbmVzdF9sb2NrLCB1bnNpZ25lZCBsb25nIGlwLFxuLVx0XHRcdCAgaW50IHJlZmVyZW5jZXMsIGludCBwaW5fY291bnQsIGludCBzeW5jKVxuJiM0MztcdFx0XHQgIGludCByZWZlcmVuY2VzLCBpbnQgcGluX2NvdW50LCBpbnQgc3luYywgaW50IHNlcSlcbiB7XG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50O1xuIFx0c3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gTlVMTDtcbkBAIC01MTgzLDYgJiM0Mzs1MTgzLDcgQEAgc3RhdGljIGludCBfX2xvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcyxcbiBcdGhsb2NrLVx1MDAzZWhvbGR0aW1lX3N0YW1wID0gbG9ja3N0YXRfY2xvY2soKTtcbiAjZW5kaWZcbiBcdGhsb2NrLVx1MDAzZXBpbl9jb3VudCA9IHBpbl9jb3VudDtcbiYjNDM7XHRobG9jay1cdTAwM2VzZXFfY291bnQgPSBzZXE7XG4gXG4gXHRpZiAoY2hlY2tfd2FpdF9jb250ZXh0KGN1cnIsIGhsb2NrKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNTM4OCw3ICYjNDM7NTM4OSw3IEBAIHN0YXRpYyBpbnQgcmVhY3F1aXJlX2hlbGRfbG9ja3Moc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCB1bnNpZ25lZCBpbnQgZGVwdGgsXG4gXHRcdFx0XHQgICAgaGxvY2stXHUwMDNlcmVhZCwgaGxvY2stXHUwMDNlY2hlY2ssXG4gXHRcdFx0XHQgICAgaGxvY2stXHUwMDNlaGFyZGlycXNfb2ZmLFxuIFx0XHRcdFx0ICAgIGhsb2NrLVx1MDAzZW5lc3RfbG9jaywgaGxvY2stXHUwMDNlYWNxdWlyZV9pcCxcbi1cdFx0XHRcdCAgICBobG9jay1cdTAwM2VyZWZlcmVuY2VzLCBobG9jay1cdTAwM2VwaW5fY291bnQsIDApKSB7XG4mIzQzO1x0XHRcdFx0ICAgIGhsb2NrLVx1MDAzZXJlZmVyZW5jZXMsIGhsb2NrLVx1MDAzZXBpbl9jb3VudCwgMCwgaGxvY2stXHUwMDNlc2VxX2NvdW50KSkge1xuIFx0XHRjYXNlIDA6XG4gXHRcdFx0cmV0dXJuIDE7XG4gXHRcdGNhc2UgMTpcbkBAIC01NjY5LDE0ICYjNDM7NTY3MCwxNyBAQCBzdGF0aWMgdm9pZCBfX2xvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llIGNvb2tpZVxuIFx0XHRzdHJ1Y3QgaGVsZF9sb2NrICpobG9jayA9IGN1cnItXHUwMDNlaGVsZF9sb2NrcyAmIzQzOyBpO1xuIFxuIFx0XHRpZiAobWF0Y2hfaGVsZF9sb2NrKGhsb2NrLCBsb2NrKSkge1xuJiM0MztcdFx0XHRpbnQgcGluX2NvdW50O1xuJiM0MztcbiBcdFx0XHRpZiAoV0FSTighaGxvY2stXHUwMDNlcGluX2NvdW50LCBcJiMzNDt1bnBpbm5pbmcgYW4gdW5waW5uZWQgbG9ja1xcblwmIzM0OykpXG4gXHRcdFx0XHRyZXR1cm47XG4gXG4tXHRcdFx0aGxvY2stXHUwMDNlcGluX2NvdW50IC09IGNvb2tpZS52YWw7XG4mIzQzO1x0XHRcdHBpbl9jb3VudCA9IGhsb2NrLVx1MDAzZXBpbl9jb3VudCAtIGNvb2tpZS52YWw7XG4gXG4tXHRcdFx0aWYgKFdBUk4oKGludClobG9jay1cdTAwM2VwaW5fY291bnQgXHUwMDNjIDAsIFwmIzM0O3BpbiBjb3VudCBjb3JydXB0ZWRcXG5cJiMzNDspKVxuLVx0XHRcdFx0aGxvY2stXHUwMDNlcGluX2NvdW50ID0gMDtcbiYjNDM7XHRcdFx0aWYgKFdBUk4ocGluX2NvdW50IFx1MDAzYyAwLCBcJiMzNDtwaW4gY291bnQgY29ycnVwdGVkXFxuXCYjMzQ7KSlcbiYjNDM7XHRcdFx0XHRwaW5fY291bnQgPSAwO1xuIFxuJiM0MztcdFx0XHRobG9jay1cdTAwM2VwaW5fY291bnQgPSBwaW5fY291bnQ7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHR9XG5AQCAtNTY4NCw2ICYjNDM7NTY4OCwyNCBAQCBzdGF0aWMgdm9pZCBfX2xvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llIGNvb2tpZVxuIFx0V0FSTigxLCBcJiMzNDt1bnBpbm5pbmcgYW4gdW5oZWxkIGxvY2tcXG5cJiMzNDspO1xuIH1cbiBcbiYjNDM7c3RhdGljIHUzMiBfX2xvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFkZWJ1Z19sb2NrcykpXG4mIzQzO1x0XHRyZXR1cm4gfjA7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGN1cnItXHUwMDNlbG9ja2RlcF9kZXB0aDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrID0gY3Vyci1cdTAwM2VoZWxkX2xvY2tzICYjNDM7IGk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1hdGNoX2hlbGRfbG9jayhobG9jaywgbG9jaykpXG4mIzQzO1x0XHRcdHJldHVybiBobG9jay1cdTAwM2VzZXFfY291bnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gfjA7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBDaGVjayB3aGV0aGVyIHdlIGZvbGxvdyB0aGUgaXJxLWZsYWdzIHN0YXRlIHByZWNpc2VseTpcbiAgKi9cbkBAIC01ODY2LDcgJiM0Mzs1ODg4LDggQEAgdm9pZCBsb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsXG4gXG4gXHRsb2NrZGVwX3JlY3Vyc2lvbl9pbmMoKTtcbiBcdF9fbG9ja19hY3F1aXJlKGxvY2ssIHN1YmNsYXNzLCB0cnlsb2NrLCByZWFkLCBjaGVjayxcbi1cdFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAwKTtcbiYjNDM7XHRcdCAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMCxcbiYjNDM7XHRcdCAgICAgICAmIzQzOyYjNDM7Y3VycmVudC1cdTAwM2Vsb2NrZGVwX3NlcSk7XG4gXHRsb2NrZGVwX3JlY3Vyc2lvbl9maW5pc2goKTtcbiBcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gfVxuQEAgLTU5MTQsNyAmIzQzOzU5MzcsOCBAQCB2b2lkIGxvY2tfc3luYyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIHN1YmNsYXNzLCBpbnQgcmVhZCxcbiBcbiBcdGxvY2tkZXBfcmVjdXJzaW9uX2luYygpO1xuIFx0X19sb2NrX2FjcXVpcmUobG9jaywgc3ViY2xhc3MsIDAsIHJlYWQsIGNoZWNrLFxuLVx0XHQgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDAsIDAsIDEpO1xuJiM0MztcdFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAxLFxuJiM0MztcdFx0ICAgICAgICYjNDM7JiM0MztjdXJyZW50LVx1MDAzZWxvY2tkZXBfc2VxKTtcbiBcdGNoZWNrX2NoYWluX2tleShjdXJyZW50KTtcbiBcdGxvY2tkZXBfcmVjdXJzaW9uX2ZpbmlzaCgpO1xuIFx0cmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbkBAIC02MDAwLDYgJiM0Mzs2MDI0LDI2IEBAIHZvaWQgbG9ja191bnBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUgY29va2llKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChsb2NrX3VucGluX2xvY2spO1xuIFxuJiM0Mzt1MzIgbG9ja19zZXF1ZW5jZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHUzMiBzZXEgPSB+MDtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFsb2NrZGVwX2VuYWJsZWQoKSkpXG4mIzQzO1x0XHRyZXR1cm4gc2VxO1xuJiM0MztcbiYjNDM7XHRyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuJiM0MztcdGNoZWNrX2ZsYWdzKGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XG4mIzQzO1x0c2VxID0gX19sb2NrX3NlcXVlbmNlKGxvY2spO1xuJiM0MztcdGxvY2tkZXBfcmVjdXJzaW9uX2ZpbmlzaCgpO1xuJiM0MztcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzZXE7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobG9ja19zZXF1ZW5jZSk7XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfTE9DS19TVEFUXG4gc3RhdGljIHZvaWQgcHJpbnRfbG9ja19jb250ZW50aW9uX2J1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssXG5kaWZmIC0tZ2l0IGEvbGliL21hcGxlX3RyZWUuYyBiL2xpYi9tYXBsZV90cmVlLmNcbmluZGV4IGU1Mjg3NjQzNWI3N2YwLi4wNmNjMDViNzlmYmRjOCAxMDA2NDRcbi0tLSBhL2xpYi9tYXBsZV90cmVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9tYXBsZV90cmVlLmNcbkBAIC0yNjEsNiAmIzQzOzI2MSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFzX2lzX3VuZGVyZmxvdyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiBcdHJldHVybiBtYXMtXHUwMDNlc3RhdHVzID09IG1hX3VuZGVyZmxvdztcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtYXNfbWFrZV93YWxrYWJsZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiYjNDM7e1xuJiM0MztcdGlmICghbWFzX2lzX2FjdGl2ZShtYXMpIFx1MDAyNlx1MDAyNiAhbWFzX2lzX3N0YXJ0KG1hcykpXG4mIzQzO1x0XHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgbWFwbGVfbm9kZSAqbXRlX3RvX25vZGUoXG4gXHRcdGNvbnN0IHN0cnVjdCBtYXBsZV9lbm9kZSAqZW50cnkpXG4ge1xuQEAgLTQ1NSw0NiAmIzQzOzQ2MSw2IEBAIGVudW0gbWFwbGVfdHlwZSBtYXNfcGFyZW50X3R5cGUoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLypcbi0gKiBtYXNfc2V0X3BhcmVudCgpIC0gU2V0IHRoZSBwYXJlbnQgbm9kZSBhbmQgZW5jb2RlIHRoZSBzbG90XG4tICogQG1hczogVGhlIG1hcGxlIHN0YXRlXG4tICogQGVub2RlOiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlLlxuLSAqIEBwYXJlbnQ6IFRoZSBlbmNvZGVkIG1hcGxlIG5vZGUgdGhhdCBpcyB0aGUgcGFyZW50IG9mIEBlbm9kZS5cbi0gKiBAc2xvdDogVGhlIHNsb3QgdGhhdCBAZW5vZGUgcmVzaWRlcyBpbiBAcGFyZW50LlxuLSAqXG4tICogU2xvdCBudW1iZXIgaXMgZW5jb2RlZCBpbiB0aGUgZW5vZGUtXHUwMDNlcGFyZW50IGJpdCAzLTYgb3IgMi02LCBkZXBlbmRpbmcgb24gdGhlXG4tICogcGFyZW50IHR5cGUuXG4tICovXG4tc3RhdGljIGlubGluZVxuLXZvaWQgbWFzX3NldF9wYXJlbnQoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUsXG4tXHRcdCAgICBjb25zdCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnBhcmVudCwgdW5zaWduZWQgY2hhciBzbG90KVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50O1xuLVx0dW5zaWduZWQgbG9uZyBzaGlmdDtcbi1cdHVuc2lnbmVkIGxvbmcgdHlwZTtcbi1cdGVudW0gbWFwbGVfdHlwZSBwX3R5cGUgPSBtdGVfbm9kZV90eXBlKHBhcmVudCk7XG4tXG4tXHRNQVNfQlVHX09OKG1hcywgcF90eXBlID09IG1hcGxlX2RlbnNlKTtcbi1cdE1BU19CVUdfT04obWFzLCBwX3R5cGUgPT0gbWFwbGVfbGVhZl82NCk7XG4tXG4tXHRzd2l0Y2ggKHBfdHlwZSkge1xuLVx0Y2FzZSBtYXBsZV9yYW5nZV82NDpcbi1cdGNhc2UgbWFwbGVfYXJhbmdlXzY0OlxuLVx0XHRzaGlmdCA9IE1BUExFX1BBUkVOVF9TTE9UX1NISUZUO1xuLVx0XHR0eXBlID0gTUFQTEVfUEFSRU5UX1JBTkdFNjQ7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdGNhc2UgbWFwbGVfZGVuc2U6XG4tXHRjYXNlIG1hcGxlX2xlYWZfNjQ6XG4tXHRcdHNoaWZ0ID0gdHlwZSA9IDA7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0dmFsIFx1MDAyNj0gfk1BUExFX05PREVfTUFTSzsgLyogQ2xlYXIgYWxsIG5vZGUgbWV0YWRhdGEgaW4gcGFyZW50ICovXG4tXHR2YWwgfD0gKHNsb3QgXHUwMDNjXHUwMDNjIHNoaWZ0KSB8IHR5cGU7XG4tXHRtdGVfdG9fbm9kZShlbm9kZSktXHUwMDNlcGFyZW50ID0gbWFfcGFyZW50X3B0cih2YWwpO1xuLX1cbi1cbiAvKlxuICAqIG10ZV9wYXJlbnRfc2xvdCgpIC0gZ2V0IHRoZSBwYXJlbnQgc2xvdCBvZiBAZW5vZGUuXG4gICogQGVub2RlOiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlLlxuQEAgLTg3Niw2ICYjNDM7ODQyLDQyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYV9zZXRfbWV0YV9nYXAoc3RydWN0IG1hcGxlX25vZGUgKm1uLCBlbnVtIG1hcGxlX3R5cGUgbXQsXG4gXHRtZXRhLVx1MDAzZWdhcCA9IG9mZnNldDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIG1hc19zZXRfcGFyZW50X3Nsb3RzKCkgLSBCdWxrIG9wZXJhdGlvbiB0byBzZXQgbWFueSBzbG90IHBhcmVudCBwb2ludGVyc1xuJiM0MzsgKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGVcbiYjNDM7ICogQHBhcmVudDogVGhlIGVuY29kZWQgbWFwbGUgbm9kZSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgQGVub2RlLlxuJiM0MzsgKiBAc2xvdDogVGhlIHNsb3QgdGhhdCBvZiB0aGUgQGVub2RlLlxuJiM0MzsgKiBAc3RhcnRfc2xvdDogVGhlIG9mZnNldCBpbnRvIEBzbG90XG4mIzQzOyAqIEBjb3VudDogVGhlIG51bWJlciBvZiBzbG90cyB0byBzZXQgKGVnOiBleGNsdXNpdmUpXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lXG4mIzQzO3ZvaWQgbWFzX3NldF9wYXJlbnRfc2xvdHMoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqcGFyZW50LFxuJiM0MztcdHZvaWQgX19yY3UgKipzbG90cywgdW5zaWduZWQgY2hhciBzdGFydF9zbG90LCB1bnNpZ25lZCBjaGFyIGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB2YWw7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzaGlmdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHR5cGU7XG4mIzQzO1x0ZW51bSBtYXBsZV90eXBlIHBfdHlwZSA9IG10ZV9ub2RlX3R5cGUocGFyZW50KTtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGk7XG4mIzQzO1xuJiM0MztcdE1BU19CVUdfT04obWFzLCBwX3R5cGUgIT0gbWFwbGVfcmFuZ2VfNjQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdHBfdHlwZSAhPSBtYXBsZV9hcmFuZ2VfNjQpO1xuJiM0MztcbiYjNDM7XHRzaGlmdCA9IE1BUExFX1BBUkVOVF9TTE9UX1NISUZUO1xuJiM0MztcdHR5cGUgPSBNQVBMRV9QQVJFTlRfUkFOR0U2NDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50O1xuJiM0MztcdHZhbCBcdTAwMjY9IH5NQVBMRV9OT0RFX01BU0s7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwdmFsID0gdmFsIHwgKChzdGFydF9zbG90ICYjNDM7IGkpIFx1MDAzY1x1MDAzYyBzaGlmdCkgfCB0eXBlO1xuJiM0MztcdFx0c3RydWN0IG1hcGxlX2Vub2RlICpjaGlsZDtcbiYjNDM7XG4mIzQzO1x0XHRjaGlsZCA9IG10X3Nsb3RfbG9ja2VkKG1hcy1cdTAwM2V0cmVlLCBzbG90cywgaSk7XG4mIzQzO1x0XHRtdGVfdG9fbm9kZShjaGlsZCktXHUwMDNlcGFyZW50ID0gbWFfcGFyZW50X3B0cihwdmFsKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBtYXRfYWRkKCkgLSBBZGQgYSBAZGVhZF9lbm9kZSB0byB0aGUgbWFfdG9waWFyeSBvZiBhIGxpc3Qgb2YgZGVhZCBub2Rlcy5cbiAgKiBAbWF0OiB0aGUgbWFfdG9waWFyeSwgYSBsaW5rZWQgbGlzdCBvZiBkZWFkIG5vZGVzLlxuQEAgLTExNTMsNiAmIzQzOzExNTUsNzMgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19mcmVlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnVzZWQpXG4gXHRtYV9mcmVlX3JjdShtdGVfdG9fbm9kZSh1c2VkKSk7XG4gfVxuIFxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19MT0NLREVQXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbG9ja2RlcF9tYXAgKm1hc19sb2NrZGVwX21hcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYXBsZV90cmVlICptdCA9IG1hcy1cdTAwM2V0cmVlO1xuJiM0MztcbiYjNDM7XHRpZiAobXRfZXh0ZXJuYWxfbG9jayhtdCkpXG4mIzQzO1x0XHRyZXR1cm4gbXQtXHUwMDNlbWFfZXh0ZXJuYWxfbG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNihtdC1cdTAwM2VtYV9sb2NrKS5kZXBfbWFwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1hc19sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUFxuJiM0MztcdHN0cnVjdCBsb2NrZGVwX21hcCAqbWFwO1xuJiM0MztcdGlmICghbWFzX2lzX2FjdGl2ZShtYXMpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxuJiM0MztcdGlmICghbXRfbG9ja2VkKG1hcy1cdTAwM2V0cmVlKSkge1xuJiM0MztcdFx0aWYgKG10X2luX3JjdShtYXMtXHUwMDNldHJlZSkpXG4mIzQzO1x0XHRcdFdBUk5fT05fT05DRShwb2xsX3N0YXRlX3N5bmNocm9uaXplX3JjdShtYXMtXHUwMDNlcmN1X2dwKSk7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXG4mIzQzO1xuJiM0MztcdG1hcCA9IG1hc19sb2NrZGVwX21hcChtYXMpO1xuJiM0MztcdGlmIChtYXAgXHUwMDI2XHUwMDI2IGxvY2tfaXNfaGVsZChtYXApKVxuJiM0MztcdFx0V0FSTl9PTl9PTkNFKG1hcy1cdTAwM2VsZF9zZXEgIT0gbG9ja19zZXF1ZW5jZShtYXApKTtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19MT0NLREVQICovXG4mIzQzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtYXNfaW5pdF9sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUFxuJiM0MztcdHN0cnVjdCBsb2NrZGVwX21hcCAqbWFwO1xuJiM0MzsjaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXG4mIzQzO1x0aWYgKCFtdF9sb2NrZWQobWFzLVx1MDAzZXRyZWUpKSB7XG4mIzQzO1x0XHRpZiAobXRfaW5fcmN1KG1hcy1cdTAwM2V0cmVlKSlcbiYjNDM7XHRcdFx0bWFzLVx1MDAzZXJjdV9ncCA9IGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9yY3UoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QgKi9cbiYjNDM7XG4mIzQzO1x0bWFwID0gbWFzX2xvY2tkZXBfbWFwKG1hcyk7XG4mIzQzO1x0aWYgKG1hcCBcdTAwMjZcdTAwMjYgbG9ja19pc19oZWxkKG1hcCkpXG4mIzQzO1x0XHRtYXMtXHUwMDNlbGRfc2VxID0gbG9ja19zZXF1ZW5jZShtYXNfbG9ja2RlcF9tYXAobWFzKSk7XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xuJiM0MztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWFzX21heV9pbml0X2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpXG4mIzQzO3tcbiYjNDM7I2lmZGVmIENPTkZJR19MT0NLREVQXG4mIzQzOyNpZmRlZiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RcbiYjNDM7XHRpZiAobWFzX2lzX3N0YXJ0KG1hcykgfHwgbWFzX2lzX3BhdXNlZChtYXMpKSB7XG4mIzQzO1x0XHRtYXNfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXG4mIzQzO1x0bWFzX2xvY2tfY2hlY2sobWFzKTtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19MT0NLREVQICovXG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBtYXNfc3RhcnQoKSAtIFNldHMgdXAgbWFwbGUgc3RhdGUgZm9yIG9wZXJhdGlvbnMuXG4gICogQG1hczogVGhlIG1hcGxlIHN0YXRlLlxuQEAgLTExNzEsNiAmIzQzOzEyNDAsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXBsZV9lbm9kZSAqbWFzX3N0YXJ0KHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIFx0aWYgKGxpa2VseShtYXNfaXNfc3RhcnQobWFzKSkpIHtcbiBcdFx0c3RydWN0IG1hcGxlX2Vub2RlICpyb290O1xuIFxuJiM0MztcdFx0bWFzX2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0XHRtYXMtXHUwMDNlbWluID0gMDtcbiBcdFx0bWFzLVx1MDAzZW1heCA9IFVMT05HX01BWDtcbiBcbkBAIC0xNTAxLDE0ICYjNDM7MTU3MSwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3BhcmVudF9nYXAoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGNoYXIgb2Zmc2V0LFxuIFx0Z290byBhc2NlbmQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWFzX3VwZGF0ZV9nYXBfa25vd24oc3RydWN0IG1hX3N0YXRlICptYXMsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGdhcClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgcHNsb3Q7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwX2dhcDtcbiYjNDM7XG4mIzQzO1x0cHNsb3QgPSBtdGVfcGFyZW50X3Nsb3QobWFzLVx1MDAzZW5vZGUpO1xuJiM0MztcdHBfZ2FwID0gbWFfZ2FwcyhtdGVfcGFyZW50KG1hcy1cdTAwM2Vub2RlKSxcbiYjNDM7XHRcdFx0bWFzX3BhcmVudF90eXBlKG1hcywgbWFzLVx1MDAzZW5vZGUpKVtwc2xvdF07XG4mIzQzO1xuJiM0MztcdGlmIChwX2dhcCAhPSBnYXApXG4mIzQzO1x0XHRtYXNfcGFyZW50X2dhcChtYXMsIHBzbG90LCBnYXApO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogbWFzX3VwZGF0ZV9nYXAoKSAtIFVwZGF0ZSBhIG5vZGVzIGdhcHMgYW5kIHByb3BhZ2F0ZSB1cCBpZiBuZWNlc3NhcnkuXG4gICogQG1hczogdGhlIG1hcGxlIHN0YXRlLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfdXBkYXRlX2dhcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiB7XG4tXHR1bnNpZ25lZCBjaGFyIHBzbG90O1xuLVx0dW5zaWduZWQgbG9uZyBwX2dhcDtcbiBcdHVuc2lnbmVkIGxvbmcgbWF4X2dhcDtcbiBcbiBcdGlmICghbXRfaXNfYWxsb2MobWFzLVx1MDAzZXRyZWUpKVxuQEAgLTE1MTgsMTMgJiM0MzsxNjAwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc191cGRhdGVfZ2FwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRtYXhfZ2FwID0gbWFzX21heF9nYXAobWFzKTtcbi1cbi1cdHBzbG90ID0gbXRlX3BhcmVudF9zbG90KG1hcy1cdTAwM2Vub2RlKTtcbi1cdHBfZ2FwID0gbWFfZ2FwcyhtdGVfcGFyZW50KG1hcy1cdTAwM2Vub2RlKSxcbi1cdFx0XHRtYXNfcGFyZW50X3R5cGUobWFzLCBtYXMtXHUwMDNlbm9kZSkpW3BzbG90XTtcbi1cbi1cdGlmIChwX2dhcCAhPSBtYXhfZ2FwKVxuLVx0XHRtYXNfcGFyZW50X2dhcChtYXMsIHBzbG90LCBtYXhfZ2FwKTtcbiYjNDM7XHRtYXNfdXBkYXRlX2dhcF9rbm93bihtYXMsIG1heF9nYXApO1xuIH1cbiBcbiAvKlxuQEAgLTE1NDAsMTQgJiM0MzsxNjE2LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfYWRvcHRfY2hpbGRyZW4oc3RydWN0IG1hX3N0YXRlICptYXMsXG4gXHRzdHJ1Y3QgbWFwbGVfbm9kZSAqbm9kZSA9IG10ZV90b19ub2RlKHBhcmVudCk7XG4gXHR2b2lkIF9fcmN1ICoqc2xvdHMgPSBtYV9zbG90cyhub2RlLCB0eXBlKTtcbiBcdHVuc2lnbmVkIGxvbmcgKnBpdm90cyA9IG1hX3Bpdm90cyhub2RlLCB0eXBlKTtcbi1cdHN0cnVjdCBtYXBsZV9lbm9kZSAqY2hpbGQ7XG4tXHR1bnNpZ25lZCBjaGFyIG9mZnNldDtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGVuZDtcbiBcbi1cdG9mZnNldCA9IG1hX2RhdGFfZW5kKG5vZGUsIHR5cGUsIHBpdm90cywgbWFzLVx1MDAzZW1heCk7XG4tXHRkbyB7XG4tXHRcdGNoaWxkID0gbWFzX3Nsb3RfbG9ja2VkKG1hcywgc2xvdHMsIG9mZnNldCk7XG4tXHRcdG1hc19zZXRfcGFyZW50KG1hcywgY2hpbGQsIHBhcmVudCwgb2Zmc2V0KTtcbi1cdH0gd2hpbGUgKG9mZnNldC0tKTtcbiYjNDM7XHRlbmQgPSBtYV9kYXRhX2VuZChub2RlLCB0eXBlLCBwaXZvdHMsIG1hcy1cdTAwM2VtYXgpO1xuJiM0MztcdG1hc19zZXRfcGFyZW50X3Nsb3RzKG1hcywgcGFyZW50LCBzbG90cywgMCwgZW5kICYjNDM7IDEpO1xuIH1cbiBcbiAvKlxuQEAgLTE5MjksMTUgJiM0MzsyMDAxLDEwIEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9jb3B5KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfbm9kZSAqc3JjLFxuIFx0c19zbG90cyA9IG1hX3Nsb3RzKHNyYywgc19tdCkgJiM0Mzsgc3RhcnQ7XG4gXHRzX3Bpdm90cyA9IG1hX3Bpdm90cyhzcmMsIHNfbXQpICYjNDM7IHN0YXJ0O1xuIFx0bWVtY3B5KGRfc2xvdHMsIHNfc2xvdHMsIHNpemUgKiBzaXplb2Yodm9pZCBfX3JjdSAqKSk7XG4tXHRpZiAoIW1hX2lzX2xlYWYoZF9tdCkgXHUwMDI2XHUwMDI2IHNfbXQgPT0gbWFwbGVfY29weSkge1xuLVx0XHRzdHJ1Y3QgbWFwbGVfZW5vZGUgKmVkc3QgPSBtdF9ta19ub2RlKGRzdCwgZF9tdCk7XG4tXG4gXG4tXHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBzaXplOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRtYXNfc2V0X3BhcmVudChtYXMsXG4tXHRcdFx0XHQgICAgICAgbXRfc2xvdF9sb2NrZWQobWFzLVx1MDAzZXRyZWUsIGRfc2xvdHMsIGkpLFxuLVx0XHRcdFx0ICAgICAgIGVkc3QsIGRfc3RhcnQgJiM0MzsgaSk7XG4tXHR9XG4mIzQzO1x0aWYgKCFtYV9pc19sZWFmKGRfbXQpIFx1MDAyNlx1MDAyNiBzX210ID09IG1hcGxlX2NvcHkpXG4mIzQzO1x0XHRtYXNfc2V0X3BhcmVudF9zbG90cyhtYXMsIG10X21rX25vZGUoZHN0LCBkX210KSxcbiYjNDM7XHRcdFx0XHQgICAgIGRfc2xvdHMsIGRfc3RhcnQsIHNpemUpO1xuIFxuIFx0ZF9nYXBzID0gbWFfZ2Fwcyhkc3QsIGRfbXQpO1xuIFx0aWYgKGRfZ2Fwcykge1xuQEAgLTIwODEsOCAmIzQzOzIxNDgsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dtYl9yZXBsYWNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfY29weSAqY3ApXG4gXHRtYXMtXHUwMDNlbm9kZSA9IG10X3Nsb3RfbG9ja2VkKG1hcy1cdTAwM2V0cmVlLCBjcC1cdTAwM2VzbG90LCAwKTtcbiBcdC8qIEluc2VydCB0aGUgbmV3IGRhdGEgaW4gdGhlIHRyZWUgKi9cbiBcdG1hc190b3BpYXJ5X3JlcGxhY2UobWFzLCBvbGRfZW5vZGUsIGNwLVx1MDAzZWhlaWdodCk7XG4tXHRpZiAoIW10ZV9pc19sZWFmKG1hcy1cdTAwM2Vub2RlKSlcbi1cdFx0bWFzX3VwZGF0ZV9nYXAobWFzKTtcbiYjNDM7XHRpZiAobXRfaXNfYWxsb2MobWFzLVx1MDAzZXRyZWUpIFx1MDAyNlx1MDAyNiAhbXRlX2lzX3Jvb3QobWFzLVx1MDAzZW5vZGUpKVxuJiM0MztcdFx0bWFzX3VwZGF0ZV9nYXBfa25vd24obWFzLCBjcC1cdTAwM2VnYXBbMF0pO1xuIFxuIFx0bXRyZWVfcmFuZ2Vfd2FsayhtYXMpO1xuIH1cbkBAIC0yOTI4LDEzICYjNDM7Mjk5NSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfZXh0ZW5kX3NwYW5uaW5nX251bGwoc3RydWN0IG1hX3dyX3N0YXRlICpsX3dyX21hcyxcbiBcdFx0aWYgKHJfbWFzLVx1MDAzZWxhc3QgXHUwMDNjIHJfd3JfbWFzLVx1MDAzZXJfbWF4KVxuIFx0XHRcdHJfbWFzLVx1MDAzZWxhc3QgPSByX3dyX21hcy1cdTAwM2VyX21heDtcbiBcdFx0cl9tYXMtXHUwMDNlb2Zmc2V0JiM0MzsmIzQzOztcbi1cdH0gZWxzZSBpZiAoKHJfbWFzLVx1MDAzZWxhc3QgPT0gcl93cl9tYXMtXHUwMDNlcl9tYXgpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChyX21hcy1cdTAwM2VsYXN0IFx1MDAzYyByX21hcy1cdTAwM2VtYXgpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFtYXNfc2xvdF9sb2NrZWQocl9tYXMsIHJfd3JfbWFzLVx1MDAzZXNsb3RzLCByX21hcy1cdTAwM2VvZmZzZXQgJiM0MzsgMSkpIHtcbi1cdFx0cl9tYXMtXHUwMDNlbGFzdCA9IG1hc19zYWZlX3Bpdm90KHJfbWFzLCByX3dyX21hcy1cdTAwM2VwaXZvdHMsXG4tXHRcdFx0XHRcdCAgICAgcl93cl9tYXMtXHUwMDNldHlwZSwgcl9tYXMtXHUwMDNlb2Zmc2V0ICYjNDM7IDEpO1xuLVx0XHRyX21hcy1cdTAwM2VvZmZzZXQmIzQzOyYjNDM7O1xuLVx0XHRyX3dyX21hcy1cdTAwM2VyX21heCA9IHJfbWFzLVx1MDAzZWxhc3Q7XG4gXHR9XG4gfVxuIFxuQEAgLTMxMjUsNyAmIzQzOzMxODUsNyBAQCBzdGF0aWMgdm9pZCBtYXNfd3Jfc3Bhbm5pbmdfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4gc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIHtcbiBcdHVuc2lnbmVkIGNoYXIgZHN0X29mZnNldCwgb2Zmc2V0X2VuZDtcbi1cdHVuc2lnbmVkIGNoYXIgY29weV9zaXplLCBub2RlX3Bpdm90cztcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGNvcHlfc2l6ZSwgbm9kZV9waXZvdHMsIG5vZGVfc2xvdHM7XG4gXHRzdHJ1Y3QgbWFwbGVfbm9kZSByZXVzZSwgKm5ld25vZGU7XG4gXHR1bnNpZ25lZCBsb25nICpkc3RfcGl2b3RzO1xuIFx0dm9pZCBfX3JjdSAqKmRzdF9zbG90cztcbkBAIC0zMTM4LDYgJiM0MzszMTk4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIFx0aW5fcmN1ID0gbXRfaW5fcmN1KG1hcy1cdTAwM2V0cmVlKTtcbiBcdG9mZnNldF9lbmQgPSB3cl9tYXMtXHUwMDNlb2Zmc2V0X2VuZDtcbiBcdG5vZGVfcGl2b3RzID0gbXRfcGl2b3RzW3dyX21hcy1cdTAwM2V0eXBlXTtcbiYjNDM7XHRub2RlX3Nsb3RzID0gbXRfc2xvdHNbd3JfbWFzLVx1MDAzZXR5cGVdO1xuIFx0LyogQXNzdW1lIGxhc3QgYWRkcyBhbiBlbnRyeSAqL1xuIFx0bmV3X2VuZCA9IG1hcy1cdTAwM2VlbmQgJiM0MzsgMSAtIG9mZnNldF9lbmQgJiM0MzsgbWFzLVx1MDAzZW9mZnNldDtcbiBcdGlmIChtYXMtXHUwMDNlbGFzdCA9PSB3cl9tYXMtXHUwMDNlZW5kX3Bpdikge1xuQEAgLTMxNDksNyAmIzQzOzMyMTAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4gXHRpZiAoaW5fcmN1KSB7XG4gXHRcdG5ld25vZGUgPSBtYXNfcG9wX25vZGUobWFzKTtcbiBcdH0gZWxzZSB7XG4tXHRcdG1lbXNldChcdTAwMjZyZXVzZSwgMCwgc2l6ZW9mKHN0cnVjdCBtYXBsZV9ub2RlKSk7XG4gXHRcdG5ld25vZGUgPSBcdTAwMjZyZXVzZTtcbiBcdH1cbiBcbkBAIC0zMTkzLDcgJiM0MzszMjUzLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiBcdFx0ZHN0X3Bpdm90c1tuZXdfZW5kXSA9IG1hcy1cdTAwM2VtYXg7XG4gXG4gZG9uZTpcbi1cdG1hc19sZWFmX3NldF9tZXRhKG5ld25vZGUsIG1hcGxlX2xlYWZfNjQsIG5ld19lbmQpO1xuJiM0MztcdGlmICghaW5fcmN1IFx1MDAyNlx1MDAyNiBuZXdfZW5kICYjNDM7IDIgXHUwMDNjIG5vZGVfc2xvdHMpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGNoYXIgY2xlYXJfZnJvbSA9IG5ld19lbmQgJiM0MzsgMTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogTm90ZSB0aGF0IHRoZSBsYXN0IHNsb3QgaXMgbmV2ZXIgY2xlYXJlZCwgc2luY2UgdGhlIG1ldGFkYXRhXG4mIzQzO1x0XHQgKiB3aWxsIGJlIHN0b3JlZCB0aGVyZSBvciBpdCBoYXMgYSB2YWx1ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bWVtc2V0KGRzdF9zbG90cyAmIzQzOyBjbGVhcl9mcm9tLCAwLFxuJiM0MztcdFx0ICAgICAgIHNpemVvZih2b2lkIF9fcmN1ICopICogKG5vZGVfc2xvdHMgLSBjbGVhcl9mcm9tKSk7XG4mIzQzO1x0XHRpZiAoY2xlYXJfZnJvbSBcdTAwM2Mgbm9kZV9waXZvdHMpXG4mIzQzO1x0XHRcdG1lbXNldChkc3RfcGl2b3RzICYjNDM7IGNsZWFyX2Zyb20sIDAsXG4mIzQzO1x0XHRcdCAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZykgKiAobm9kZV9waXZvdHMgLSBjbGVhcl9mcm9tKSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtYXNfbGVhZl9zZXRfbWV0YShuZXdub2RlLCB3cl9tYXMtXHUwMDNldHlwZSwgbmV3X2VuZCk7XG4gXHRpZiAoaW5fcmN1KSB7XG4gXHRcdHN0cnVjdCBtYXBsZV9lbm9kZSAqb2xkX2Vub2RlID0gbWFzLVx1MDAzZW5vZGU7XG4gXG5AQCAtMzIxOCw3ICYjNDM7MzI5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfc2xvdF9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiBcdHZvaWQgX19yY3UgKipzbG90cyA9IHdyX21hcy1cdTAwM2VzbG90cztcbiBcdGJvb2wgZ2FwID0gZmFsc2U7XG4gXG4tXHRnYXAgfD0gIW10X3Nsb3RfbG9ja2VkKG1hcy1cdTAwM2V0cmVlLCBzbG90cywgb2Zmc2V0KTtcbiYjNDM7XHRnYXAgfD0gIXdyX21hcy1cdTAwM2Vjb250ZW50O1xuIFx0Z2FwIHw9ICFtdF9zbG90X2xvY2tlZChtYXMtXHUwMDNldHJlZSwgc2xvdHMsIG9mZnNldCAmIzQzOyAxKTtcbiBcbiBcdGlmICh3cl9tYXMtXHUwMDNlb2Zmc2V0X2VuZCAtIG9mZnNldCA9PSAxKSB7XG5AQCAtMzY2MSw2ICYjNDM7MzczNSw5IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBzdG9yZV90eXBlIG1hc193cl9zdG9yZV90eXBlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIHtcbiBcdHN0cnVjdCBtYV9zdGF0ZSAqbWFzID0gd3JfbWFzLVx1MDAzZW1hcztcbiBcdHVuc2lnbmVkIGNoYXIgbmV3X2VuZDtcbiYjNDM7XHRib29sIGFwcGVuZGluZztcbiYjNDM7XHRib29sIG9uZV9zbG90O1xuJiM0MztcdGJvb2wgaW5fcmN1O1xuIFxuIFx0aWYgKHVubGlrZWx5KG1hc19pc19ub25lKG1hcykgfHwgbWFzX2lzX3B0cihtYXMpKSlcbiBcdFx0cmV0dXJuIHdyX3N0b3JlX3Jvb3Q7XG5AQCAtMzY4MCwyMSAmIzQzOzM3NTcsMzAgQEAgc3RhdGljIGlubGluZSBlbnVtIHN0b3JlX3R5cGUgbWFzX3dyX3N0b3JlX3R5cGUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4gXHRcdHJldHVybiB3cl9uZXdfcm9vdDtcbiBcbiBcdG5ld19lbmQgPSBtYXNfd3JfbmV3X2VuZCh3cl9tYXMpO1xuJiM0MztcdGluX3JjdSA9IG10X2luX3JjdShtYXMtXHUwMDNldHJlZSk7XG4mIzQzO1x0YXBwZW5kaW5nID0gbWFzLVx1MDAzZW9mZnNldCA9PSBtYXMtXHUwMDNlZW5kO1xuJiM0MztcdG9uZV9zbG90ID0gd3JfbWFzLVx1MDAzZW9mZnNldF9lbmQgLSBtYXMtXHUwMDNlb2Zmc2V0ID09IDE7XG4mIzQzO1xuIFx0LyogUG90ZW50aWFsIHNwYW5uaW5nIHJlYmFsYW5jZSBjb2xsYXBzaW5nIGEgbm9kZSAqL1xuIFx0aWYgKG5ld19lbmQgXHUwMDNjIG10X21pbl9zbG90c1t3cl9tYXMtXHUwMDNldHlwZV0pIHtcbiBcdFx0aWYgKCFtdGVfaXNfcm9vdChtYXMtXHUwMDNlbm9kZSkpXG4gXHRcdFx0cmV0dXJuICB3cl9yZWJhbGFuY2U7XG4mIzQzO1x0XHRpZiAoIWluX3JjdSkge1xuJiM0MztcdFx0XHRpZiAoYXBwZW5kaW5nKVxuJiM0MztcdFx0XHRcdHJldHVybiB3cl9hcHBlbmQ7XG4mIzQzO1x0XHRcdGVsc2UgaWYgKG1hcy1cdTAwM2VlbmQgPT0gbmV3X2VuZCBcdTAwMjZcdTAwMjYgb25lX3Nsb3QpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHdyX3Nsb3Rfc3RvcmU7XG4mIzQzO1x0XHR9XG4gXHRcdHJldHVybiB3cl9ub2RlX3N0b3JlO1xuIFx0fVxuIFxuIFx0aWYgKG5ld19lbmQgXHUwMDNlPSBtdF9zbG90c1t3cl9tYXMtXHUwMDNldHlwZV0pXG4gXHRcdHJldHVybiB3cl9zcGxpdF9zdG9yZTtcbiBcbi1cdGlmICghbXRfaW5fcmN1KG1hcy1cdTAwM2V0cmVlKSBcdTAwMjZcdTAwMjYgKG1hcy1cdTAwM2VvZmZzZXQgPT0gbWFzLVx1MDAzZWVuZCkpXG4mIzQzO1x0aWYgKCFpbl9yY3UgXHUwMDI2XHUwMDI2IGFwcGVuZGluZylcbiBcdFx0cmV0dXJuIHdyX2FwcGVuZDtcbiBcbi1cdGlmICgobmV3X2VuZCA9PSBtYXMtXHUwMDNlZW5kKSBcdTAwMjZcdTAwMjYgKCFtdF9pbl9yY3UobWFzLVx1MDAzZXRyZWUpIHx8XG4tXHRcdCh3cl9tYXMtXHUwMDNlb2Zmc2V0X2VuZCAtIG1hcy1cdTAwM2VvZmZzZXQgPT0gMSkpKVxuJiM0MztcdGlmIChuZXdfZW5kID09IG1hcy1cdTAwM2VlbmQgXHUwMDI2XHUwMDI2ICghaW5fcmN1IHx8IG9uZV9zbG90KSlcbiBcdFx0cmV0dXJuIHdyX3Nsb3Rfc3RvcmU7XG4gXG4gXHRyZXR1cm4gd3Jfbm9kZV9zdG9yZTtcbkBAIC0zNzkzLDM1ICYjNDM7Mzg3OSw0MCBAQCBpbnQgbWFzX2FsbG9jX2N5Y2xpYyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyAqc3RhcnRwLFxuIFx0XHR2b2lkICplbnRyeSwgdW5zaWduZWQgbG9uZyByYW5nZV9sbywgdW5zaWduZWQgbG9uZyByYW5nZV9oaSxcbiBcdFx0dW5zaWduZWQgbG9uZyAqbmV4dCwgZ2ZwX3QgZ2ZwKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbWluID0gcmFuZ2VfbG87XG4tXHRpbnQgcmV0ID0gMDtcbi1cbi1cdHJhbmdlX2xvID0gbWF4KG1pbiwgKm5leHQpO1xuLVx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCByYW5nZV9sbywgcmFuZ2VfaGksIDEpO1xuLVx0aWYgKChtYXMtXHUwMDNldHJlZS1cdTAwM2VtYV9mbGFncyBcdTAwMjYgTVRfRkxBR1NfQUxMT0NfV1JBUFBFRCkgXHUwMDI2XHUwMDI2IHJldCA9PSAwKSB7XG4tXHRcdG1hcy1cdTAwM2V0cmVlLVx1MDAzZW1hX2ZsYWdzIFx1MDAyNj0gfk1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQ7XG4tXHRcdHJldCA9IDE7XG4tXHR9XG4tXHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByYW5nZV9sbyBcdTAwM2UgbWluKSB7XG4tXHRcdG1hc19yZXNldChtYXMpO1xuLVx0XHRyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIG1pbiwgcmFuZ2VfaGksIDEpO1xuLVx0XHRpZiAocmV0ID09IDApXG4tXHRcdFx0cmV0ID0gMTtcbi1cdH1cbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1pbjtcbiBcbiYjNDM7XHRtaW4gPSByYW5nZV9sbztcbiBcdGRvIHtcbiYjNDM7XHRcdHJhbmdlX2xvID0gbWF4KG1pbiwgKm5leHQpO1xuJiM0MztcdFx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCByYW5nZV9sbywgcmFuZ2VfaGksIDEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgcmFuZ2VfbG8gXHUwMDNlIG1pbikge1xuJiM0MztcdFx0XHRtYXNfcmVzZXQobWFzKTtcbiYjNDM7XHRcdFx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCBtaW4sIHJhbmdlX2hpLCAxKTtcbiYjNDM7XHRcdFx0aWYgKHJldCA9PSAwKVxuJiM0MztcdFx0XHRcdHJldCA9IDE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRcdG1hc19pbnNlcnQobWFzLCBlbnRyeSk7XG4gXHR9IHdoaWxlIChtYXNfbm9tZW0obWFzLCBnZnApKTtcbi1cdGlmIChtYXNfaXNfZXJyKG1hcykpXG4tXHRcdHJldHVybiB4YV9lcnIobWFzLVx1MDAzZW5vZGUpO1xuIFxuJiM0MztcdGlmIChtYXNfaXNfZXJyKG1hcykpIHtcbiYjNDM7XHRcdHJldCA9IHhhX2VycihtYXMtXHUwMDNlbm9kZSk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICgobWFzLVx1MDAzZXRyZWUtXHUwMDNlbWFfZmxhZ3MgXHUwMDI2IE1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQpIFx1MDAyNlx1MDAyNiByZXQgPT0gMCkge1xuJiM0MztcdFx0bWFzLVx1MDAzZXRyZWUtXHUwMDNlbWFfZmxhZ3MgXHUwMDI2PSB+TVRfRkxBR1NfQUxMT0NfV1JBUFBFRDtcbiYjNDM7XHRcdHJldCA9IDE7XG4mIzQzO1x0fVxuIFx0KnN0YXJ0cCA9IG1hcy1cdTAwM2VpbmRleDtcbiBcdCpuZXh0ID0gKnN0YXJ0cCAmIzQzOyAxO1xuIFx0aWYgKCpuZXh0ID09IDApXG4gXHRcdG1hcy1cdTAwM2V0cmVlLVx1MDAzZW1hX2ZsYWdzIHw9IE1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQ7XG4gXG4mIzQzO291dDpcbiBcdG1hc19kZXN0cm95KG1hcyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC00MzYwLDggJiM0Mzs0NDUxLDggQEAgdm9pZCAqbWFzX3dhbGsoc3RydWN0IG1hX3N0YXRlICptYXMpXG4ge1xuIFx0dm9pZCAqZW50cnk7XG4gXG4tXHRpZiAoIW1hc19pc19hY3RpdmUobWFzKSBcdTAwMjZcdTAwMjYgIW1hc19pc19zdGFydChtYXMpKVxuLVx0XHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XG4mIzQzO1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiYjNDM7XHRtYXNfbWFrZV93YWxrYWJsZShtYXMpO1xuIHJldHJ5OlxuIFx0ZW50cnkgPSBtYXNfc3RhdGVfd2FsayhtYXMpO1xuIFx0aWYgKG1hc19pc19zdGFydChtYXMpKSB7XG5AQCAtNDgzMSw2ICYjNDM7NDkyMiw3IEBAIHZvaWQgKm1hc19zdG9yZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnkpXG4ge1xuIFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIGVudHJ5KTtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0dHJhY2VfbWFfd3JpdGUoVFBfRkNULCBtYXMsIDAsIGVudHJ5KTtcbiAjaWZkZWYgQ09ORklHX0RFQlVHX01BUExFX1RSRUVcbiBcdGlmIChNQVNfV0FSTl9PTihtYXMsIG1hcy1cdTAwM2VpbmRleCBcdTAwM2UgbWFzLVx1MDAzZWxhc3QpKVxuQEAgLTQ4ODksNiAmIzQzOzQ5ODEsNyBAQCBpbnQgbWFzX3N0b3JlX2dmcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnksIGdmcF90IGdmcClcbiBcdE1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBlbnRyeSk7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIHJldHJ5OlxuIFx0bWFzX3dyX3ByZWFsbG9jYXRlKFx1MDAyNndyX21hcywgZW50cnkpO1xuIFx0aWYgKHVubGlrZWx5KG1hc19ub21lbShtYXMsIGdmcCkpKSB7XG5AQCAtNDkxOSw2ICYjNDM7NTAxMiw3IEBAIHZvaWQgbWFzX3N0b3JlX3ByZWFsbG9jKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSlcbiB7XG4gXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xuIFxuJiM0MztcdG1hc19sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzLVx1MDAzZXN0b3JlX3R5cGUgPT0gd3Jfc3RvcmVfcm9vdCkge1xuIFx0XHRtYXNfd3JfcHJlYWxsb2Nfc2V0dXAoXHUwMDI2d3JfbWFzKTtcbiBcdFx0Z290byBzdG9yZTtcbkBAIC00OTUxLDYgJiM0Mzs1MDQ1LDcgQEAgaW50IG1hc19wcmVhbGxvY2F0ZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnksIGdmcF90IGdmcClcbiB7XG4gXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xuIFxuJiM0MztcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRtYXNfd3JfcHJlYWxsb2Nfc2V0dXAoXHUwMDI2d3JfbWFzKTtcbiBcdG1hcy1cdTAwM2VzdG9yZV90eXBlID0gbWFzX3dyX3N0b3JlX3R5cGUoXHUwMDI2d3JfbWFzKTtcbiBcdG1hc19wcmVhbGxvY19jYWxjKFx1MDAyNndyX21hcywgZW50cnkpO1xuQEAgLTQ5OTcsNiAmIzQzOzUwOTIsNyBAQCBzdGF0aWMgdm9pZCBtYXNfbWF5X2FjdGl2YXRlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIFx0XHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XG4gXHR9IGVsc2Uge1xuIFx0XHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfYWN0aXZlO1xuJiM0MztcdFx0bWFzX2xvY2tfY2hlY2sobWFzKTtcbiBcdH1cbiB9XG4gXG5AQCAtNTA3NCw2ICYjNDM7NTE3MCw3IEBAIHZvaWQgKm1hc19uZXh0KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heClcbiB7XG4gXHR2b2lkICplbnRyeSA9IE5VTEw7XG4gXG4mIzQzO1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfbmV4dF9zZXR1cChtYXMsIG1heCwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTA5Nyw2ICYjNDM7NTE5NCw3IEBAIHZvaWQgKm1hc19uZXh0X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heClcbiB7XG4gXHR2b2lkICplbnRyeSA9IE5VTEw7XG4gXG4mIzQzO1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfbmV4dF9zZXR1cChtYXMsIG1heCwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTIwNSw2ICYjNDM7NTMwMyw3IEBAIHZvaWQgKm1hc19wcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbilcbiB7XG4gXHR2b2lkICplbnRyeSA9IE5VTEw7XG4gXG4mIzQzO1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfcHJldl9zZXR1cChtYXMsIG1pbiwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTIyOCw2ICYjNDM7NTMyNyw3IEBAIHZvaWQgKm1hc19wcmV2X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbilcbiB7XG4gXHR2b2lkICplbnRyeSA9IE5VTEw7XG4gXG4mIzQzO1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfcHJldl9zZXR1cChtYXMsIG1pbiwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTI3NCw2ICYjNDM7NTM3NCw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG10X3ByZXYpO1xuICAqL1xuIHZvaWQgbWFzX3BhdXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIHtcbiYjNDM7XHRtYXNfbG9ja19jaGVjayhtYXMpO1xuIFx0bWFzLVx1MDAzZXN0YXR1cyA9IG1hX3BhdXNlO1xuIFx0bWFzLVx1MDAzZW5vZGUgPSBOVUxMO1xuIH1cbkBAIC01MzgyLDYgJiM0Mzs1NDgzLDcgQEAgdm9pZCAqbWFzX2ZpbmQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19maW5kX3NldHVwKG1hcywgbWF4LCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01NDA5LDYgJiM0Mzs1NTExLDcgQEAgdm9pZCAqbWFzX2ZpbmRfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19maW5kX3NldHVwKG1hcywgbWF4LCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01NDI4LDcgJiM0Mzs1NTMxLDYgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWFzX2ZpbmRfcmFuZ2UpO1xuIHN0YXRpYyBib29sIG1hc19maW5kX3Jldl9zZXR1cChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4sXG4gXHRcdHZvaWQgKiplbnRyeSlcbiB7XG4tXG4gXHRzd2l0Y2ggKG1hcy1cdTAwM2VzdGF0dXMpIHtcbiBcdGNhc2UgbWFfYWN0aXZlOlxuIFx0XHRnb3RvIGFjdGl2ZTtcbkBAIC01NTIxLDYgJiM0Mzs1NjIzLDcgQEAgdm9pZCAqbWFzX2ZpbmRfcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbilcbiB7XG4gXHR2b2lkICplbnRyeSA9IE5VTEw7XG4gXG4mIzQzO1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfZmluZF9yZXZfc2V0dXAobWFzLCBtaW4sIFx1MDAyNmVudHJ5KSlcbiBcdFx0cmV0dXJuIGVudHJ5O1xuIFxuQEAgLTU1NDcsNiAmIzQzOzU2NTAsNyBAQCB2b2lkICptYXNfZmluZF9yYW5nZV9yZXYoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19maW5kX3Jldl9zZXR1cChtYXMsIG1pbiwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTU2NCw2ICYjNDM7NTY2OCwxMCBAQCBFWFBPUlRfU1lNQk9MX0dQTChtYXNfZmluZF9yYW5nZV9yZXYpO1xuICAqIFNlYXJjaGVzIGZvciBAbWFzLVx1MDAzZWluZGV4LCBzZXRzIEBtYXMtXHUwMDNlaW5kZXggYW5kIEBtYXMtXHUwMDNlbGFzdCB0byB0aGUgcmFuZ2UgYW5kXG4gICogZXJhc2VzIHRoYXQgcmFuZ2UuXG4gICpcbiYjNDM7ICogTm90ZSB0aGF0IGVyYXNlIHJlcXVpcmVzIGFsbG9jYXRpb25zIGFuZCB3aWxsIHVzZSBHRlBfS0VSTkVMIHRvIGRvIHNvIGlmXG4mIzQzOyAqIG5lY2Vzc2FyeS4gIElmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgaW50ZXJuYWwgbG9jayB3aWxsIGJlIGRyb3BwZWQgdG9cbiYjNDM7ICogcmV0cnkuXG4mIzQzOyAqXG4gICogUmV0dXJuOiB0aGUgZW50cnkgdGhhdCB3YXMgZXJhc2VkIG9yICVOVUxMLCBAbWFzLVx1MDAzZWluZGV4IGFuZCBAbWFzLVx1MDAzZWxhc3QgYXJlIHVwZGF0ZWQuXG4gICovXG4gdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuQEAgLTU1NzIsMTMgJiM0Mzs1NjgwLDE5IEBAIHZvaWQgKm1hc19lcmFzZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiBcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBtYXMtXHUwMDNlaW5kZXg7XG4gXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgTlVMTCk7XG4gXG4tXHRpZiAoIW1hc19pc19hY3RpdmUobWFzKSB8fCAhbWFzX2lzX3N0YXJ0KG1hcykpXG4tXHRcdG1hcy1cdTAwM2VzdGF0dXMgPSBtYV9zdGFydDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEluIGxvdyBtZW1vcnkgc2l0dWF0aW9ucywgdGhlIGFsbG9jYXRpb24gaXMgcmV0cmllZCB3aXRoIHRoZSBnZnAgZmxhZ1xuJiM0MztcdCAqIEdGUF9LRVJORUwuICBUaGUgaW50ZXJuYWwgc3BpbmxvY2sgaXMgZHJvcHBlZCBpbiBtYXNfbm9tZW0oKSwgaG93ZXZlclxuJiM0MztcdCAqIHRoZSBleHRlcm5hbCBsb2NrIGlzIG5vdCBkcm9wcGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChtdF9leHRlcm5hbF9sb2NrKG1hcy1cdTAwM2V0cmVlKSlcbiYjNDM7XHRcdG1pZ2h0X2FsbG9jKEdGUF9LRVJORUwpO1xuIFxuJiM0MztcdG1hc19tYWtlX3dhbGthYmxlKG1hcyk7XG4gd3JpdGVfcmV0cnk6XG4gXHRlbnRyeSA9IG1hc19zdGF0ZV93YWxrKG1hcyk7XG4gXHRpZiAoIWVudHJ5KVxuLVx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuIFxuIFx0LyogTXVzdCByZXNldCB0byBlbnN1cmUgc3Bhbm5pbmcgd3JpdGVzIG9mIGxhc3Qgc2xvdCBhcmUgZGV0ZWN0ZWQgKi9cbiBcdG1hc19yZXNldChtYXMpO1xuQEAgLTU1ODksOCAmIzQzOzU3MDMsMTAgQEAgdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIFx0XHRnb3RvIHdyaXRlX3JldHJ5O1xuIFx0fVxuIFxuLVx0aWYgKG1hc19pc19lcnIobWFzKSlcbiYjNDM7XHRpZiAobWFzX2lzX2VycihtYXMpKSB7XG4mIzQzO1x0XHRlbnRyeSA9IE5VTEw7XG4gXHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiBcbiBcdG1hc193cl9zdG9yZV9lbnRyeShcdTAwMjZ3cl9tYXMpO1xuIG91dDpcbkBAIC01NjAxLDEwICYjNDM7NTcxNywxMSBAQCBFWFBPUlRfU1lNQk9MX0dQTChtYXNfZXJhc2UpO1xuIFxuIC8qKlxuICAqIG1hc19ub21lbSgpIC0gQ2hlY2sgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGFsbG9jYXRpbmcgYW5kIGRvIHRoZSBhbGxvY2F0aW9uXG4tICogaWYgbmVjZXNzYXJ5IElmIHRoZXJlIGFyZSBhbGxvY2F0aW9ucywgdGhlbiBmcmVlIHRoZW0uXG4mIzQzOyAqIGlmIG5lY2Vzc2FyeS5cbiYjNDM7ICpcbiAgKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGVcbiAgKiBAZ2ZwOiBUaGUgR0ZQX0ZMQUdTIHRvIHVzZSBmb3IgYWxsb2NhdGlvbnNcbi0gKiBSZXR1cm46IHRydWUgb24gYWxsb2NhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLlxuJiM0MzsgKiBSZXR1cm46IEZhbHNlIG9uIG5vIG1lbW9yeS4gIFRydWUgb3RoZXJ3aXNlIChwYXJ0aWFsIHN1Y2Nlc3MgYXMgd2VsbClcbiAgKi9cbiBib29sIG1hc19ub21lbShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgZ2ZwX3QgZ2ZwKVxuIFx0X19tdXN0X2hvbGQobWFzLVx1MDAzZXRyZWUtXHUwMDNlbWFfbG9jaylcbkBAIC01NjEyLDYgJiM0Mzs1NzI5LDEwIEBAIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApXG4gXHRpZiAobGlrZWx5KG1hcy1cdTAwM2Vub2RlICE9IE1BX0VSUk9SKC1FTk9NRU0pKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuJiM0MztcdC8qIEFsbG9jYXRpb25zIGNhbiBmYWlsLCBkb24mIzM5O3QgZG8gdGhpcy4gKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIG10X2V4dGVybmFsX2xvY2sobWFzLVx1MDAzZXRyZWUpKTtcbiYjNDM7XG4gXHRpZiAoZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwKSBcdTAwMjZcdTAwMjYgIW10X2V4dGVybmFsX2xvY2sobWFzLVx1MDAzZXRyZWUpKSB7XG4gXHRcdG10cmVlX3VubG9jayhtYXMtXHUwMDNldHJlZSk7XG4gXHRcdG1hc19hbGxvY19ub2RlcyhtYXMsIGdmcCk7XG5AQCAtNTYyMCwxMCAmIzQzOzU3NDEsMTcgQEAgYm9vbCBtYXNfbm9tZW0oc3RydWN0IG1hX3N0YXRlICptYXMsIGdmcF90IGdmcClcbiBcdFx0bWFzX2FsbG9jX25vZGVzKG1hcywgZ2ZwKTtcbiBcdH1cbiBcbi1cdGlmICghbWFzLVx1MDAzZXNoZWFmIFx1MDAyNlx1MDAyNiAhbWFzLVx1MDAzZWFsbG9jKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogUmV0dXJuIGZhbHNlIG9uIHplcm8gZm9yd2FyZCBwcm9ncmVzcy4gIFBhcnRpYWwgYWxsb2NhdGlvbnMgYXJlIGtlcHRcbiYjNDM7XHQgKiBzbyB0aGUgcmV0cnkgcGF0aCB3aWxsIGF0dGVtcHQgdG8gZ2V0IHRoZSByZXN0LiAgVGhlIGZhaWx1cmUgc2hvdWxkXG4mIzQzO1x0ICogbm90IGhhcHBlbiBhcyB3ZSB0cnkgb3VyIGJlc3QgdG8gcmVjbGFpbS4gIFRoZSB1c2VyIHdvdWxkIG5lZWQgYW5cbiYjNDM7XHQgKiBleHRlcm5hbCBsb2NrIHdpdGggYSBub24tYmxvY2tpbmcgZ2ZwIGluIGEgbG93IG1lbW9yeSBzaXR1YXRpb24gLVxuJiM0MztcdCAqIHdoaWNoIHdvdWxkIGhhdmUgdHJpZ2dlcmVkIHRoZSBmaXJzdCB3YXJuaW5nIGluIHRoaXMgZnVuY3Rpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghbWFzLVx1MDAzZXNoZWFmIFx1MDAyNlx1MDAyNiAhbWFzLVx1MDAzZWFsbG9jKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0bWFzLVx1MDAzZXN0YXR1cyA9IG1hX3N0YXJ0O1xuJiM0MztcdG1hc19yZXNldChtYXMpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTU5MTMsNiAmIzQzOzYwNDEsMTAgQEAgRVhQT1JUX1NZTUJPTChtdHJlZV9hbGxvY19ycmFuZ2UpO1xuICAqIEVyYXNpbmcgaXMgdGhlIHNhbWUgYXMgYSB3YWxrIHRvIGFuIGVudHJ5IHRoZW4gYSBzdG9yZSBvZiBhIE5VTEwgdG8gdGhhdFxuICAqIEVOVElSRSByYW5nZS4gIEluIGZhY3QsIGl0IGlzIGltcGxlbWVudGVkIGFzIHN1Y2ggdXNpbmcgdGhlIGFkdmFuY2VkIEFQSS5cbiAgKlxuJiM0MzsgKiBOb3RlIHRoYXQgZXJhc2UgcmVxdWlyZXMgYWxsb2NhdGlvbnMgYW5kIHdpbGwgdXNlIEdGUF9LRVJORUwgdG8gZG8gc28gaWZcbiYjNDM7ICogbmVjZXNzYXJ5LiAgSWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBpbnRlcm5hbCBsb2NrIHdpbGwgYmUgZHJvcHBlZCB0b1xuJiM0MzsgKiByZXRyeS5cbiYjNDM7ICpcbiAgKiBSZXR1cm46IFRoZSBlbnRyeSBzdG9yZWQgYXQgdGhlIEBpbmRleCBvciAlTlVMTFxuICAqL1xuIHZvaWQgKm10cmVlX2VyYXNlKHN0cnVjdCBtYXBsZV90cmVlICptdCwgdW5zaWduZWQgbG9uZyBpbmRleClcbkBAIC01OTIyLDYgJiM0Mzs2MDU0LDcgQEAgdm9pZCAqbXRyZWVfZXJhc2Uoc3RydWN0IG1hcGxlX3RyZWUgKm10LCB1bnNpZ25lZCBsb25nIGluZGV4KVxuIFx0TUFfU1RBVEUobWFzLCBtdCwgaW5kZXgsIGluZGV4KTtcbiBcdHRyYWNlX21hX29wKFRQX0ZDVCwgXHUwMDI2bWFzKTtcbiBcbiYjNDM7XHRtaWdodF9hbGxvYyhHRlBfS0VSTkVMKTtcbiBcdG10cmVlX2xvY2sobXQpO1xuIFx0ZW50cnkgPSBtYXNfZXJhc2UoXHUwMDI2bWFzKTtcbiBcdG10cmVlX3VubG9jayhtdCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY1xuaW5kZXggMDYwNzkxM2EzMDIyZDUuLmQ5NjdlNzZhM2MwNjUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jXG5AQCAtMzUyMzQsNyAmIzQzOzM1MjM0LDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGNoZWNrX3ByZWFsbG9jKHN0cnVjdCBtYXBsZV90cmVlICptdClcbiBcdG10X3NldF9ub25fa2VybmVsKDEpO1xuIFx0LyogU3Bhbm5pbmcgc3RvcmUgKi9cbiBcdG1hc19zZXRfcmFuZ2UoXHUwMDI2bWFzLCAxLCAxMDApO1xuLVx0TVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoXHUwMDI2bWFzLCBwdHIsIEdGUF9LRVJORUwgXHUwMDI2IEdGUF9OT1dBSVQpID09IDApO1xuJiM0MztcdE1UX0JVR19PTihtdCwgbWFzX3ByZWFsbG9jYXRlKFx1MDAyNm1hcywgcHRyLCBHRlBfTk9XQUlUKSA9PSAwKTtcbiBcdGFsbG9jYXRlZCA9IG1hc19hbGxvY2F0ZWQoXHUwMDI2bWFzKTtcbiBcdGhlaWdodCA9IG1hc19tdF9oZWlnaHQoXHUwMDI2bWFzKTtcbiBcdE1UX0JVR19PTihtdCwgYWxsb2NhdGVkICE9IDApO1xuQEAgLTM1MjU3LDcgJiM0MzszNTI1Nyw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19wcmVhbGxvYyhzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQpXG4gXHRNVF9CVUdfT04obXQsIG1hc19hbGxvY2F0ZWQoXHUwMDI2bWFzKSAhPSAwKTtcbiBcdG1hc19zZXRfcmFuZ2UoXHUwMDI2bWFzLCAwLCAyMDApO1xuIFx0bXRfc2V0X25vbl9rZXJuZWwoMSk7XG4tXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX0tFUk5FTCBcdTAwMjYgR0ZQX05PV0FJVCkgPT0gMCk7XG4mIzQzO1x0TVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoXHUwMDI2bWFzLCBwdHIsIEdGUF9OT1dBSVQpID09IDApO1xuIFx0YWxsb2NhdGVkID0gbWFzX2FsbG9jYXRlZChcdTAwMjZtYXMpO1xuIFx0aGVpZ2h0ID0gbWFzX210X2hlaWdodChcdTAwMjZtYXMpO1xuIFx0TVRfQlVHX09OKG10LCBhbGxvY2F0ZWQgIT0gMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVCVUdfTUFQTEVfVFJFRSYjMzQ7LAogICAgJiMzNDtMT0NLREVQJiMzNDssCiAgICAmIzM0O1BST1ZFX0xPQ0tJTkcmIzM0OywKICAgICYjMzQ7UkNVX1NUUklDVF9HUkFDRV9QRVJJT0QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYXNfZXJhc2UmIzM0OywKICAgICYjMzQ7bWFzX25vbWVtJiMzNDssCiAgICAmIzM0O21hc19hbGxvY19jeWNsaWMmIzM0OywKICAgICYjMzQ7bWFzX3dyX25vZGVfc3RvcmUmIzM0OywKICAgICYjMzQ7bWFzX3dyX3N0b3JlX3R5cGUmIzM0OywKICAgICYjMzQ7bWFzX3N0b3JlX2dmcCYjMzQ7LAogICAgJiMzNDttYXNfc3RvcmVfcHJlYWxsb2MmIzM0OywKICAgICYjMzQ7bWFzX3ByZWFsbG9jYXRlJiMzNDssCiAgICAmIzM0O210cmVlX2VyYXNlJiMzNDssCiAgICAmIzM0O2xvY2tfc2VxdWVuY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtYXBsZSB0cmVlIGxvZ2ljLCBpbmNsdWRpbmcgZXJhc2UsIGFsbG9jYXRpb24sIGFuZCBzdG9yZSBvcGVyYXRpb25zLCBhbmQgaW50cm9kdWNlcyBsb2NrIHNlcXVlbmNlIHRyYWNraW5nIGluIGxvY2tkZXAgdG8gdmVyaWZ5IG1hcGxlIHRyZWUgbG9ja2luZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvY2tpbmcgdmFsaWRhdGlvbiwgd2hpY2ggYXJlIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzZhZTRjYjRiOThlZjZkNTY5NDdkNWMzMjQ3MGU5Y2M1ODhlZDFjZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMDI6MjQ6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdAppbmRleCBjY2RkMTYxNWNmOTc0Zi4uMWVhZTI0YTljMThiNGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdApAQCAtMTcsNyAmIzQzOzE3LDggQEAgc3VwcG9ydHMgaXRlcmF0aW5nIG92ZXIgYSByYW5nZSBvZiBlbnRyaWVzIGFuZCBnb2luZyB0byB0aGUgcHJldmlvdXMgb3IgbmV4dAogZW50cnkgaW4gYSBjYWNoZS1lZmZpY2llbnQgbWFubmVyLiAgVGhlIHRyZWUgY2FuIGFsc28gYmUgcHV0IGludG8gYW4gUkNVLXNhZmUKIG1vZGUgb2Ygb3BlcmF0aW9uIHdoaWNoIGFsbG93cyByZWFkaW5nIGFuZCB3cml0aW5nIGNvbmN1cnJlbnRseS4gIFdyaXRlcnMgbXVzdAogc3luY2hyb25pemUgb24gYSBsb2NrLCB3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQgc3BpbmxvY2ssIG9yIHRoZSB1c2VyIGNhbiBzZXQKLXRoZSBsb2NrIHRvIGFuIGV4dGVybmFsIGxvY2sgb2YgYSBkaWZmZXJlbnQgdHlwZS4KJiM0Mzt0aGUgbG9jayB0byBhbiBleHRlcm5hbCBsb2NrIG9mIGEgZGlmZmVyZW50IHR5cGUuICBOb3RlIHRoYXQgZXh0ZXJuYWwgbG9ja3MgbWF5CiYjNDM7aW50ZXJmZXJlIHdpdGggYWxsb2NhdGlvbnMgaW4gYSBsb3cgbWVtb3J5IHNpdHVhdGlvbi4KIAogVGhlIE1hcGxlIFRyZWUgbWFpbnRhaW5zIGEgc21hbGwgbWVtb3J5IGZvb3RwcmludCBhbmQgd2FzIGRlc2lnbmVkIHRvIHVzZQogbW9kZXJuIHByb2Nlc3NvciBjYWNoZSBlZmZpY2llbnRseS4gIFRoZSBtYWpvcml0eSBvZiB0aGUgdXNlcnMgd2lsbCBiZSBhYmxlIHRvCkBAIC00Miw2ICYjNDM7NDMsMTUgQEAgc3VjY2Vzc2Z1bCBzdG9yZSBvcGVyYXRpb24gd2l0aGluIGEgZ2l2ZW4KIGNvZGUgc2VnbWVudCB3aGVuIGFsbG9jYXRpbmcgY2Fubm90IGJlIGRvbmUuICBBbGxvY2F0aW9ucyBvZiBub2RlcyBhcmUKIHJlbGF0aXZlbHkgc21hbGwgYXQgYXJvdW5kIDI1NiBieXRlcy4KIAomIzQzO1NpbmNlIHRoZSBtYXBsZSB0cmVlIHVzZXMgaW50ZXJuYWwgbm9kZXMgdGhhdCBhcmUgYWxsb2NhdGVkIGFuZCBoYXMgcnVsZXMgb24KJiM0MztkYXRhIGRlbnNpdHksIGVyYXNpbmcgYW4gZW50cnkgbWF5IGNhdXNlIGFsbG9jYXRpb25zIHRvIG9jY3VyLiAgVGhhdCBpcywKJiM0MztlcmFzaW5nIGFuIGVudHJ5IG1heSBjb25zdW1lIG1lbW9yeS4gIFVzZXJzIG11c3QgdGFrZSBjYXJlIHRvIGVuc3VyZSB0aGF0IHRoZXkKJiM0MztkbyBub3QgdmlvbGF0ZSB0aGUgbGFyZ2VyIHN5c3RlbSBjb25zdHJhaW50cyBvbiB3aGVuIGFuZCBob3cgbWVtb3J5IGlzCiYjNDM7YWxsb2NhdGVkLiAgTW9zdCBzaXR1YXRpb25zIGFyZSBmaW5lIHRvIGFsbG9jYXRlLCBidXQgdGhlIHByZS1hbGxvY2F0aW9uCiYjNDM7c3VwcG9ydCBpcyBwcm92aWRlZCBhcyBhIG1lY2hhbmlzbSB0byBhdm9pZCB0cmlja2llciBzaXR1YXRpb25zLiAgVGhlcmUgaXMgYWxzbwomIzQzO3RoZSBwb3NzaWJpbGl0eSBvZiB1c2luZyBzcGVjaWFsIGVudHJpZXMgYW5kIGNsZWFuIHVwIHRoZSB0cmVlIGxhdGVyLCBpbgomIzQzO2V4dHJlbWUgY2lyY3Vtc3RhbmNlcy4KJiM0MzsKIC4uIF9tYXBsZS10cmVlLW5vcm1hbC1hcGk6CiAKIE5vcm1hbCBBUEkKQEAgLTYzLDcgJiM0Mzs3Myw4IEBAIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UuICBtdHJlZV9zdG9yZV9yYW5nZSgpIHdvcmtzIGluIHRoZSBzYW1lIHdheQogYnV0IHRha2VzIGEgcmFuZ2UuICBtdHJlZV9sb2FkKCkgaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgZW50cnkgc3RvcmVkIGF0IGEKIGdpdmVuIGluZGV4LiAgWW91IGNhbiB1c2UgbXRyZWVfZXJhc2UoKSB0byBlcmFzZSBhbiBlbnRpcmUgcmFuZ2UgYnkgb25seQoga25vd2luZyBvbmUgdmFsdWUgd2l0aGluIHRoYXQgcmFuZ2UsIG9yIG10cmVlX3N0b3JlKCkgY2FsbCB3aXRoIGFuIGVudHJ5IG9mCi1OVUxMIG1heSBiZSB1c2VkIHRvIHBhcnRpYWxseSBlcmFzZSBhIHJhbmdlIG9yIG1hbnkgcmFuZ2VzIGF0IG9uY2UuCiYjNDM7TlVMTCBtYXkgYmUgdXNlZCB0byBwYXJ0aWFsbHkgZXJhc2UgYSByYW5nZSBvciBtYW55IHJhbmdlcyBhdCBvbmNlLiAgTm90ZSB0aGF0CiYjNDM7bXRyZWVfZXJhc2UoKSBtYXkgdXNlIEdGUF9LRVJORUwgb24gYWxsb2NhdGlvbnMuCiAKIElmIHlvdSB3YW50IHRvIG9ubHkgc3RvcmUgYSBuZXcgZW50cnkgdG8gYSByYW5nZSAob3IgaW5kZXgpIGlmIHRoYXQgcmFuZ2UgaXMKIGN1cnJlbnRseSBgYE5VTExgYCwgeW91IGNhbiB1c2UgbXRyZWVfaW5zZXJ0X3JhbmdlKCkgb3IgbXRyZWVfaW5zZXJ0KCkgd2hpY2gKQEAgLTE2Myw3ICYjNDM7MTc0LDkgQEAgWW91IGNhbiB1c2UgbWFzX2VyYXNlKCkgdG8gZXJhc2UgYW4gZW50aXJlIHJhbmdlIGJ5IHNldHRpbmcgaW5kZXggYW5kCiBsYXN0IG9mIHRoZSBtYXBsZSBzdGF0ZSB0byB0aGUgZGVzaXJlZCByYW5nZSB0byBlcmFzZS4gIFRoaXMgd2lsbCBlcmFzZQogdGhlIGZpcnN0IHJhbmdlIHRoYXQgaXMgZm91bmQgaW4gdGhhdCByYW5nZSwgc2V0IHRoZSBtYXBsZSBzdGF0ZSBpbmRleAogYW5kIGxhc3QgYXMgdGhlIHJhbmdlIHRoYXQgd2FzIGVyYXNlZCBhbmQgcmV0dXJuIHRoZSBlbnRyeSB0aGF0IGV4aXN0ZWQKLWF0IHRoYXQgbG9jYXRpb24uCiYjNDM7YXQgdGhhdCBsb2NhdGlvbi4gIE5vdGUgdGhhdCBtYXNfZXJhc2UoKSBtYXkgYWxsb2NhdGUgd2l0aCB0aGUgR0ZQX0tFUk5FTCBmbGFnLgomIzQzO0lmIHRoaXMgaXMgbm90IG9rYXksIGNvbnNpZGVyIHVzaW5nIG1hc19zdG9yZV9nZnAoKSBhbmQgcGFzcyBpdCBhIGBgTlVMTGBgLAomIzQzO2FmdGVyIHNldHRpbmcgdXAgdGhlIGNvcnJlY3QgcmFuZ2UgYnkgd2Fsa2luZyB0byB0aGUgZW50cnkuCiAKIFlvdSBjYW4gd2FsayBlYWNoIGVudHJ5IHdpdGhpbiBhIHJhbmdlIGJ5IHVzaW5nIG1hc19mb3JfZWFjaCgpLiAgSWYgeW91IHdhbnQKIHRvIHdhbGsgZWFjaCBlbGVtZW50IG9mIHRoZSB0cmVlIHRoZW4gYGAwYGAgYW5kIGBgVUxPTkdfTUFYYGAgbWF5IGJlIHVzZWQgYXMKQEAgLTIxMSw3ICYjNDM7MjI0LDcgQEAgQWR2YW5jZWQgTG9ja2luZwogCiBUaGUgbWFwbGUgdHJlZSB1c2VzIGEgc3BpbmxvY2sgYnkgZGVmYXVsdCwgYnV0IGV4dGVybmFsIGxvY2tzIGNhbiBiZSB1c2VkIGZvcgogdHJlZSB1cGRhdGVzIGFzIHdlbGwuICBUbyB1c2UgYW4gZXh0ZXJuYWwgbG9jaywgdGhlIHRyZWUgbXVzdCBiZSBpbml0aWFsaXplZAotd2l0aCB0aGUgYGBNVF9GTEFHU19MT0NLX0VYVEVSTiBmbGFnYGAsIHRoaXMgaXMgdXN1YWxseSBkb25lIHdpdGggdGhlCiYjNDM7d2l0aCB0aGUgYGBNVF9GTEFHU19MT0NLX0VYVEVSTmBgIGZsYWcsIHRoaXMgaXMgdXN1YWxseSBkb25lIHdpdGggdGhlCiBNVFJFRV9JTklUX0VYVCgpICNkZWZpbmUsIHdoaWNoIHRha2VzIGFuIGV4dGVybmFsIGxvY2sgYXMgYW4gYXJndW1lbnQuCiAKIEZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaAppbmRleCA2MjE1NjYzNDU0MDZkZC4uYTY0NTFlY2JiZTlhMDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCkBAIC0yNzMsNiAmIzQzOzI3Myw5IEBAIGV4dGVybiBzdHJ1Y3QgcGluX2Nvb2tpZSBsb2NrX3Bpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jayk7CiBleHRlcm4gdm9pZCBsb2NrX3JlcGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSk7CiBleHRlcm4gdm9pZCBsb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSk7CiAKJiM0MztleHRlcm4gdTMyIGxvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKTsKJiM0MzsjZGVmaW5lIGxvY2tkZXBfc2VxdWVuY2UobG9jaykJbG9ja19zZXF1ZW5jZSgmYW1wOyhsb2NrKS0mZ3Q7ZGVwX21hcCkKJiM0MzsKICNkZWZpbmUgbG9ja2RlcF9kZXB0aCh0c2spCShkZWJ1Z19sb2NrcyA/ICh0c2spLSZndDtsb2NrZGVwX2RlcHRoIDogMCkKIAogI2RlZmluZSBsb2NrZGVwX2Fzc2VydChjb25kKQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaAppbmRleCBlYWUxMTVhMjY0ODg1Ni4uNTVjNGIxNTJmZWRmN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oCkBAIC0yNTMsNyAmIzQzOzI1Myw4IEBAIHN0cnVjdCBoZWxkX2xvY2sgewogCXVuc2lnbmVkIGludCBoYXJkaXJxc19vZmY6MTsKIAl1bnNpZ25lZCBpbnQgc3luYzoxOwogCXVuc2lnbmVkIGludCByZWZlcmVuY2VzOjExOwkJCQkJLyogMzIgYml0cyAqLwotCXVuc2lnbmVkIGludCBwaW5fY291bnQ7CiYjNDM7CXVuc2lnbmVkIGludCBwaW5fY291bnQ6MjQ7CiYjNDM7CXVuc2lnbmVkIGludCBzZXFfY291bnQ6ODsKIH07CiAKICNlbHNlIC8qICFDT05GSUdfTE9DS0RFUCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmggYi9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaAppbmRleCA0YTU2MzE5MDZhZmZiNS4uNWUwYmQyODU3ZDk0MWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oCkBAIC0yOSwxMyAmIzQzOzI5LDExIEBACiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFMJMzEJLyogMjU2IGJ5dGVzIGluY2x1ZGluZyAtJmd0O3BhcmVudCAqLwogI2RlZmluZSBNQVBMRV9SQU5HRTY0X1NMT1RTCTE2CS8qIDI1NiBieXRlcyAqLwogI2RlZmluZSBNQVBMRV9BUkFOR0U2NF9TTE9UUwkxMAkvKiAyNDAgYnl0ZXMgKi8KLSNkZWZpbmUgTUFQTEVfQUxMT0NfU0xPVFMJKE1BUExFX05PREVfU0xPVFMgLSAxKQogI2Vsc2UKIC8qIDMyYml0IHNpemVzICovCiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFMJNjMJLyogMjU2IGJ5dGVzIGluY2x1ZGluZyAtJmd0O3BhcmVudCAqLwogI2RlZmluZSBNQVBMRV9SQU5HRTY0X1NMT1RTCTMyCS8qIDI1NiBieXRlcyAqLwogI2RlZmluZSBNQVBMRV9BUkFOR0U2NF9TTE9UUwkyMQkvKiAyNDAgYnl0ZXMgKi8KLSNkZWZpbmUgTUFQTEVfQUxMT0NfU0xPVFMJKE1BUExFX05PREVfU0xPVFMgLSAyKQogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHXzY0QklUKSB8fCBkZWZpbmVkKEJVSUxEX1ZEU08zMl82NCkgKi8KIAogI2RlZmluZSBNQVBMRV9OT0RFX01BU0sJCTI1NVVMCkBAIC00ODUsNiAmIzQzOzQ4MywxMiBAQCBzdHJ1Y3QgbWFfc3RhdGUgewogCXVuc2lnbmVkIGNoYXIgbWFzX2ZsYWdzOwogCXVuc2lnbmVkIGNoYXIgZW5kOwkJLyogVGhlIGVuZCBvZiB0aGUgbm9kZSAqLwogCWVudW0gc3RvcmVfdHlwZSBzdG9yZV90eXBlOwkvKiBUaGUgdHlwZSBvZiBzdG9yZSBuZWVkZWQgZm9yIHRoaXMgb3BlcmF0aW9uICovCiYjNDM7I2lmZGVmIENPTkZJR19MT0NLREVQCiYjNDM7CXUzMiBsZF9zZXE7CiYjNDM7I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRAomIzQzOwl1bnNpZ25lZCBsb25nIHJjdV9ncDsKJiM0MzsjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovCiYjNDM7I2VuZGlmIC8qIENPTkZJR19MT0NLREVQICovCiB9OwogCiBzdHJ1Y3QgbWFfd3Jfc3RhdGUgewpAQCAtNTcyLDcgJiM0Mzs1NzYsNyBAQCB2b2lkIG1hcGxlX3RyZWVfaW5pdCh2b2lkKTsKIHZvaWQgbWFzX2Rlc3Ryb3koc3RydWN0IG1hX3N0YXRlICptYXMpOwogCiB2b2lkICptYXNfcHJldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pOwotdm9pZCAqbWFzX3ByZXZfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KTsKJiM0Mzt2b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pOwogdm9pZCAqbWFzX25leHQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KTsKIHZvaWQgKm1hc19uZXh0X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCAzNzNiY2MwNTk4ZDEwYi4uMTRkNWNlOGRkNjEzNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTEyODgsNiAmIzQzOzEyODgsNyBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3QgewogCXU2NAkJCQljdXJyX2NoYWluX2tleTsKIAlpbnQJCQkJbG9ja2RlcF9kZXB0aDsKIAl1bnNpZ25lZCBpbnQJCQlsb2NrZGVwX3JlY3Vyc2lvbjsKJiM0MzsJdW5zaWduZWQgaW50CQkJbG9ja2RlcF9zZXE7CiAJc3RydWN0IGhlbGRfbG9jawkJaGVsZF9sb2Nrc1tNQVhfTE9DS19ERVBUSF07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jCmluZGV4IDJkNGM1YmFiNWFmODg3Li5hNjk1NjdiZGQ3OTEyZSAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYwpAQCAtNTA3Nyw3ICYjNDM7NTA3Nyw3IEBAIHN0YXRpYyBpbnQgX19sb2NrX2lzX2hlbGQoY29uc3Qgc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBpbnQgcmVhZCk7CiBzdGF0aWMgaW50IF9fbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLAogCQkJICBpbnQgdHJ5bG9jaywgaW50IHJlYWQsIGludCBjaGVjaywgaW50IGhhcmRpcnFzX29mZiwKIAkJCSAgc3RydWN0IGxvY2tkZXBfbWFwICpuZXN0X2xvY2ssIHVuc2lnbmVkIGxvbmcgaXAsCi0JCQkgIGludCByZWZlcmVuY2VzLCBpbnQgcGluX2NvdW50LCBpbnQgc3luYykKJiM0MzsJCQkgIGludCByZWZlcmVuY2VzLCBpbnQgcGluX2NvdW50LCBpbnQgc3luYywgaW50IHNlcSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50OwogCXN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IE5VTEw7CkBAIC01MTgzLDYgJiM0Mzs1MTgzLDcgQEAgc3RhdGljIGludCBfX2xvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcywKIAlobG9jay0mZ3Q7aG9sZHRpbWVfc3RhbXAgPSBsb2Nrc3RhdF9jbG9jaygpOwogI2VuZGlmCiAJaGxvY2stJmd0O3Bpbl9jb3VudCA9IHBpbl9jb3VudDsKJiM0MzsJaGxvY2stJmd0O3NlcV9jb3VudCA9IHNlcTsKIAogCWlmIChjaGVja193YWl0X2NvbnRleHQoY3VyciwgaGxvY2spKQogCQlyZXR1cm4gMDsKQEAgLTUzODgsNyAmIzQzOzUzODksNyBAQCBzdGF0aWMgaW50IHJlYWNxdWlyZV9oZWxkX2xvY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwgdW5zaWduZWQgaW50IGRlcHRoLAogCQkJCSAgICBobG9jay0mZ3Q7cmVhZCwgaGxvY2stJmd0O2NoZWNrLAogCQkJCSAgICBobG9jay0mZ3Q7aGFyZGlycXNfb2ZmLAogCQkJCSAgICBobG9jay0mZ3Q7bmVzdF9sb2NrLCBobG9jay0mZ3Q7YWNxdWlyZV9pcCwKLQkJCQkgICAgaGxvY2stJmd0O3JlZmVyZW5jZXMsIGhsb2NrLSZndDtwaW5fY291bnQsIDApKSB7CiYjNDM7CQkJCSAgICBobG9jay0mZ3Q7cmVmZXJlbmNlcywgaGxvY2stJmd0O3Bpbl9jb3VudCwgMCwgaGxvY2stJmd0O3NlcV9jb3VudCkpIHsKIAkJY2FzZSAwOgogCQkJcmV0dXJuIDE7CiAJCWNhc2UgMToKQEAgLTU2NjksMTQgJiM0Mzs1NjcwLDE3IEBAIHN0YXRpYyB2b2lkIF9fbG9ja191bnBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUgY29va2llCiAJCXN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrID0gY3Vyci0mZ3Q7aGVsZF9sb2NrcyAmIzQzOyBpOwogCiAJCWlmIChtYXRjaF9oZWxkX2xvY2soaGxvY2ssIGxvY2spKSB7CiYjNDM7CQkJaW50IHBpbl9jb3VudDsKJiM0MzsKIAkJCWlmIChXQVJOKCFobG9jay0mZ3Q7cGluX2NvdW50LCAmIzM0O3VucGlubmluZyBhbiB1bnBpbm5lZCBsb2NrXG4mIzM0OykpCiAJCQkJcmV0dXJuOwogCi0JCQlobG9jay0mZ3Q7cGluX2NvdW50IC09IGNvb2tpZS52YWw7CiYjNDM7CQkJcGluX2NvdW50ID0gaGxvY2stJmd0O3Bpbl9jb3VudCAtIGNvb2tpZS52YWw7CiAKLQkJCWlmIChXQVJOKChpbnQpaGxvY2stJmd0O3Bpbl9jb3VudCAmbHQ7IDAsICYjMzQ7cGluIGNvdW50IGNvcnJ1cHRlZFxuJiMzNDspKQotCQkJCWhsb2NrLSZndDtwaW5fY291bnQgPSAwOwomIzQzOwkJCWlmIChXQVJOKHBpbl9jb3VudCAmbHQ7IDAsICYjMzQ7cGluIGNvdW50IGNvcnJ1cHRlZFxuJiMzNDspKQomIzQzOwkJCQlwaW5fY291bnQgPSAwOwogCiYjNDM7CQkJaGxvY2stJmd0O3Bpbl9jb3VudCA9IHBpbl9jb3VudDsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTU2ODQsNiAmIzQzOzU2ODgsMjQgQEAgc3RhdGljIHZvaWQgX19sb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSBjb29raWUKIAlXQVJOKDEsICYjMzQ7dW5waW5uaW5nIGFuIHVuaGVsZCBsb2NrXG4mIzM0Oyk7CiB9CiAKJiM0MztzdGF0aWMgdTMyIF9fbG9ja19zZXF1ZW5jZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50OwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KCFkZWJ1Z19sb2NrcykpCiYjNDM7CQlyZXR1cm4gfjA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjdXJyLSZndDtsb2NrZGVwX2RlcHRoOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGhlbGRfbG9jayAqaGxvY2sgPSBjdXJyLSZndDtoZWxkX2xvY2tzICYjNDM7IGk7CiYjNDM7CiYjNDM7CQlpZiAobWF0Y2hfaGVsZF9sb2NrKGhsb2NrLCBsb2NrKSkKJiM0MzsJCQlyZXR1cm4gaGxvY2stJmd0O3NlcV9jb3VudDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gfjA7CiYjNDM7fQomIzQzOwogLyoKICAqIENoZWNrIHdoZXRoZXIgd2UgZm9sbG93IHRoZSBpcnEtZmxhZ3Mgc3RhdGUgcHJlY2lzZWx5OgogICovCkBAIC01ODY2LDcgJiM0Mzs1ODg4LDggQEAgdm9pZCBsb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsCiAKIAlsb2NrZGVwX3JlY3Vyc2lvbl9pbmMoKTsKIAlfX2xvY2tfYWNxdWlyZShsb2NrLCBzdWJjbGFzcywgdHJ5bG9jaywgcmVhZCwgY2hlY2ssCi0JCSAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMCk7CiYjNDM7CQkgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDAsIDAsIDAsCiYjNDM7CQkgICAgICAgJiM0MzsmIzQzO2N1cnJlbnQtJmd0O2xvY2tkZXBfc2VxKTsKIAlsb2NrZGVwX3JlY3Vyc2lvbl9maW5pc2goKTsKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQpAQCAtNTkxNCw3ICYjNDM7NTkzNyw4IEBAIHZvaWQgbG9ja19zeW5jKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgc3ViY2xhc3MsIGludCByZWFkLAogCiAJbG9ja2RlcF9yZWN1cnNpb25faW5jKCk7CiAJX19sb2NrX2FjcXVpcmUobG9jaywgc3ViY2xhc3MsIDAsIHJlYWQsIGNoZWNrLAotCQkgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDAsIDAsIDEpOwomIzQzOwkJICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAxLAomIzQzOwkJICAgICAgICYjNDM7JiM0MztjdXJyZW50LSZndDtsb2NrZGVwX3NlcSk7CiAJY2hlY2tfY2hhaW5fa2V5KGN1cnJlbnQpOwogCWxvY2tkZXBfcmVjdXJzaW9uX2ZpbmlzaCgpOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC02MDAwLDYgJiM0Mzs2MDI0LDI2IEBAIHZvaWQgbG9ja191bnBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUgY29va2llKQogfQogRVhQT1JUX1NZTUJPTF9HUEwobG9ja191bnBpbl9sb2NrKTsKIAomIzQzO3UzMiBsb2NrX3NlcXVlbmNlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXUzMiBzZXEgPSB+MDsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KCFsb2NrZGVwX2VuYWJsZWQoKSkpCiYjNDM7CQlyZXR1cm4gc2VxOwomIzQzOwomIzQzOwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwomIzQzOwljaGVja19mbGFncyhmbGFncyk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfcmVjdXJzaW9uX2luYygpOwomIzQzOwlzZXEgPSBfX2xvY2tfc2VxdWVuY2UobG9jayk7CiYjNDM7CWxvY2tkZXBfcmVjdXJzaW9uX2ZpbmlzaCgpOwomIzQzOwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gc2VxOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChsb2NrX3NlcXVlbmNlKTsKJiM0MzsKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCiBzdGF0aWMgdm9pZCBwcmludF9sb2NrX2NvbnRlbnRpb25fYnVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwKIAkJCQkgICAgICBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssCmRpZmYgLS1naXQgYS9saWIvbWFwbGVfdHJlZS5jIGIvbGliL21hcGxlX3RyZWUuYwppbmRleCBlNTI4NzY0MzViNzdmMC4uMDZjYzA1Yjc5ZmJkYzggMTAwNjQ0Ci0tLSBhL2xpYi9tYXBsZV90cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL21hcGxlX3RyZWUuYwpAQCAtMjYxLDYgJiM0MzsyNjEsMTIgQEAgc3RhdGljIGlubGluZSBib29sIG1hc19pc191bmRlcmZsb3coc3RydWN0IG1hX3N0YXRlICptYXMpCiAJcmV0dXJuIG1hcy0mZ3Q7c3RhdHVzID09IG1hX3VuZGVyZmxvdzsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtYXNfbWFrZV93YWxrYWJsZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcykKJiM0Mzt7CiYjNDM7CWlmICghbWFzX2lzX2FjdGl2ZShtYXMpICZhbXA7JmFtcDsgIW1hc19pc19zdGFydChtYXMpKQomIzQzOwkJbWFzLSZndDtzdGF0dXMgPSBtYV9zdGFydDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBtYXBsZV9ub2RlICptdGVfdG9fbm9kZSgKIAkJY29uc3Qgc3RydWN0IG1hcGxlX2Vub2RlICplbnRyeSkKIHsKQEAgLTQ1NSw0NiAmIzQzOzQ2MSw2IEBAIGVudW0gbWFwbGVfdHlwZSBtYXNfcGFyZW50X3R5cGUoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUpCiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBtYXNfc2V0X3BhcmVudCgpIC0gU2V0IHRoZSBwYXJlbnQgbm9kZSBhbmQgZW5jb2RlIHRoZSBzbG90Ci0gKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGUKLSAqIEBlbm9kZTogVGhlIGVuY29kZWQgbWFwbGUgbm9kZS4KLSAqIEBwYXJlbnQ6IFRoZSBlbmNvZGVkIG1hcGxlIG5vZGUgdGhhdCBpcyB0aGUgcGFyZW50IG9mIEBlbm9kZS4KLSAqIEBzbG90OiBUaGUgc2xvdCB0aGF0IEBlbm9kZSByZXNpZGVzIGluIEBwYXJlbnQuCi0gKgotICogU2xvdCBudW1iZXIgaXMgZW5jb2RlZCBpbiB0aGUgZW5vZGUtJmd0O3BhcmVudCBiaXQgMy02IG9yIDItNiwgZGVwZW5kaW5nIG9uIHRoZQotICogcGFyZW50IHR5cGUuCi0gKi8KLXN0YXRpYyBpbmxpbmUKLXZvaWQgbWFzX3NldF9wYXJlbnQoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUsCi0JCSAgICBjb25zdCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnBhcmVudCwgdW5zaWduZWQgY2hhciBzbG90KQotewotCXVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50OwotCXVuc2lnbmVkIGxvbmcgc2hpZnQ7Ci0JdW5zaWduZWQgbG9uZyB0eXBlOwotCWVudW0gbWFwbGVfdHlwZSBwX3R5cGUgPSBtdGVfbm9kZV90eXBlKHBhcmVudCk7Ci0KLQlNQVNfQlVHX09OKG1hcywgcF90eXBlID09IG1hcGxlX2RlbnNlKTsKLQlNQVNfQlVHX09OKG1hcywgcF90eXBlID09IG1hcGxlX2xlYWZfNjQpOwotCi0Jc3dpdGNoIChwX3R5cGUpIHsKLQljYXNlIG1hcGxlX3JhbmdlXzY0OgotCWNhc2UgbWFwbGVfYXJhbmdlXzY0OgotCQlzaGlmdCA9IE1BUExFX1BBUkVOVF9TTE9UX1NISUZUOwotCQl0eXBlID0gTUFQTEVfUEFSRU5UX1JBTkdFNjQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JY2FzZSBtYXBsZV9kZW5zZToKLQljYXNlIG1hcGxlX2xlYWZfNjQ6Ci0JCXNoaWZ0ID0gdHlwZSA9IDA7Ci0JCWJyZWFrOwotCX0KLQotCXZhbCAmYW1wOz0gfk1BUExFX05PREVfTUFTSzsgLyogQ2xlYXIgYWxsIG5vZGUgbWV0YWRhdGEgaW4gcGFyZW50ICovCi0JdmFsIHw9IChzbG90ICZsdDsmbHQ7IHNoaWZ0KSB8IHR5cGU7Ci0JbXRlX3RvX25vZGUoZW5vZGUpLSZndDtwYXJlbnQgPSBtYV9wYXJlbnRfcHRyKHZhbCk7Ci19Ci0KIC8qCiAgKiBtdGVfcGFyZW50X3Nsb3QoKSAtIGdldCB0aGUgcGFyZW50IHNsb3Qgb2YgQGVub2RlLgogICogQGVub2RlOiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlLgpAQCAtODc2LDYgJiM0Mzs4NDIsNDIgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hX3NldF9tZXRhX2dhcChzdHJ1Y3QgbWFwbGVfbm9kZSAqbW4sIGVudW0gbWFwbGVfdHlwZSBtdCwKIAltZXRhLSZndDtnYXAgPSBvZmZzZXQ7CiB9CiAKJiM0MzsvKgomIzQzOyAqIG1hc19zZXRfcGFyZW50X3Nsb3RzKCkgLSBCdWxrIG9wZXJhdGlvbiB0byBzZXQgbWFueSBzbG90IHBhcmVudCBwb2ludGVycwomIzQzOyAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZQomIzQzOyAqIEBwYXJlbnQ6IFRoZSBlbmNvZGVkIG1hcGxlIG5vZGUgdGhhdCBpcyB0aGUgcGFyZW50IG9mIEBlbm9kZS4KJiM0MzsgKiBAc2xvdDogVGhlIHNsb3QgdGhhdCBvZiB0aGUgQGVub2RlLgomIzQzOyAqIEBzdGFydF9zbG90OiBUaGUgb2Zmc2V0IGludG8gQHNsb3QKJiM0MzsgKiBAY291bnQ6IFRoZSBudW1iZXIgb2Ygc2xvdHMgdG8gc2V0IChlZzogZXhjbHVzaXZlKQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUKJiM0Mzt2b2lkIG1hc19zZXRfcGFyZW50X3Nsb3RzKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnBhcmVudCwKJiM0MzsJdm9pZCBfX3JjdSAqKnNsb3RzLCB1bnNpZ25lZCBjaGFyIHN0YXJ0X3Nsb3QsIHVuc2lnbmVkIGNoYXIgY291bnQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHZhbDsKJiM0MzsJdW5zaWduZWQgbG9uZyBzaGlmdDsKJiM0MzsJdW5zaWduZWQgbG9uZyB0eXBlOwomIzQzOwllbnVtIG1hcGxlX3R5cGUgcF90eXBlID0gbXRlX25vZGVfdHlwZShwYXJlbnQpOwomIzQzOwl1bnNpZ25lZCBjaGFyIGk7CiYjNDM7CiYjNDM7CU1BU19CVUdfT04obWFzLCBwX3R5cGUgIT0gbWFwbGVfcmFuZ2VfNjQgJmFtcDsmYW1wOwomIzQzOwkJCXBfdHlwZSAhPSBtYXBsZV9hcmFuZ2VfNjQpOwomIzQzOwomIzQzOwlzaGlmdCA9IE1BUExFX1BBUkVOVF9TTE9UX1NISUZUOwomIzQzOwl0eXBlID0gTUFQTEVfUEFSRU5UX1JBTkdFNjQ7CiYjNDM7CiYjNDM7CXZhbCA9ICh1bnNpZ25lZCBsb25nKXBhcmVudDsKJiM0MzsJdmFsICZhbXA7PSB+TUFQTEVfTk9ERV9NQVNLOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIHB2YWwgPSB2YWwgfCAoKHN0YXJ0X3Nsb3QgJiM0MzsgaSkgJmx0OyZsdDsgc2hpZnQpIHwgdHlwZTsKJiM0MzsJCXN0cnVjdCBtYXBsZV9lbm9kZSAqY2hpbGQ7CiYjNDM7CiYjNDM7CQljaGlsZCA9IG10X3Nsb3RfbG9ja2VkKG1hcy0mZ3Q7dHJlZSwgc2xvdHMsIGkpOwomIzQzOwkJbXRlX3RvX25vZGUoY2hpbGQpLSZndDtwYXJlbnQgPSBtYV9wYXJlbnRfcHRyKHB2YWwpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoKICAqIG1hdF9hZGQoKSAtIEFkZCBhIEBkZWFkX2Vub2RlIHRvIHRoZSBtYV90b3BpYXJ5IG9mIGEgbGlzdCBvZiBkZWFkIG5vZGVzLgogICogQG1hdDogdGhlIG1hX3RvcGlhcnksIGEgbGlua2VkIGxpc3Qgb2YgZGVhZCBub2Rlcy4KQEAgLTExNTMsNiAmIzQzOzExNTUsNzMgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19mcmVlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnVzZWQpCiAJbWFfZnJlZV9yY3UobXRlX3RvX25vZGUodXNlZCkpOwogfQogCiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19MT0NLREVQCiYjNDM7c3RhdGljIHN0cnVjdCBsb2NrZGVwX21hcCAqbWFzX2xvY2tkZXBfbWFwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcGxlX3RyZWUgKm10ID0gbWFzLSZndDt0cmVlOwomIzQzOwomIzQzOwlpZiAobXRfZXh0ZXJuYWxfbG9jayhtdCkpCiYjNDM7CQlyZXR1cm4gbXQtJmd0O21hX2V4dGVybmFsX2xvY2s7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wOyhtdC0mZ3Q7bWFfbG9jaykuZGVwX21hcDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWFzX2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUAomIzQzOwlzdHJ1Y3QgbG9ja2RlcF9tYXAgKm1hcDsKJiM0MzsJaWYgKCFtYXNfaXNfYWN0aXZlKG1hcykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRAomIzQzOwlpZiAoIW10X2xvY2tlZChtYXMtJmd0O3RyZWUpKSB7CiYjNDM7CQlpZiAobXRfaW5fcmN1KG1hcy0mZ3Q7dHJlZSkpCiYjNDM7CQkJV0FSTl9PTl9PTkNFKHBvbGxfc3RhdGVfc3luY2hyb25pemVfcmN1KG1hcy0mZ3Q7cmN1X2dwKSk7CiYjNDM7CX0KJiM0MzsjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovCiYjNDM7CiYjNDM7CW1hcCA9IG1hc19sb2NrZGVwX21hcChtYXMpOwomIzQzOwlpZiAobWFwICZhbXA7JmFtcDsgbG9ja19pc19oZWxkKG1hcCkpCiYjNDM7CQlXQVJOX09OX09OQ0UobWFzLSZndDtsZF9zZXEgIT0gbG9ja19zZXF1ZW5jZShtYXApKTsKJiM0MzsjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi8KJiM0MzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWFzX2luaXRfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcykKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19MT0NLREVQCiYjNDM7CXN0cnVjdCBsb2NrZGVwX21hcCAqbWFwOwomIzQzOyNpZmRlZiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QKJiM0MzsJaWYgKCFtdF9sb2NrZWQobWFzLSZndDt0cmVlKSkgewomIzQzOwkJaWYgKG10X2luX3JjdShtYXMtJmd0O3RyZWUpKQomIzQzOwkJCW1hcy0mZ3Q7cmN1X2dwID0gZ2V0X3N0YXRlX3N5bmNocm9uaXplX3JjdSgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqLwomIzQzOwomIzQzOwltYXAgPSBtYXNfbG9ja2RlcF9tYXAobWFzKTsKJiM0MzsJaWYgKG1hcCAmYW1wOyZhbXA7IGxvY2tfaXNfaGVsZChtYXApKQomIzQzOwkJbWFzLSZndDtsZF9zZXEgPSBsb2NrX3NlcXVlbmNlKG1hc19sb2NrZGVwX21hcChtYXMpKTsKJiM0MzsjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi8KJiM0MzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWFzX21heV9pbml0X2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUAomIzQzOyNpZmRlZiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QKJiM0MzsJaWYgKG1hc19pc19zdGFydChtYXMpIHx8IG1hc19pc19wYXVzZWQobWFzKSkgewomIzQzOwkJbWFzX2luaXRfbG9ja19jaGVjayhtYXMpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqLwomIzQzOwltYXNfbG9ja19jaGVjayhtYXMpOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqLwomIzQzO30KJiM0MzsKIC8qCiAgKiBtYXNfc3RhcnQoKSAtIFNldHMgdXAgbWFwbGUgc3RhdGUgZm9yIG9wZXJhdGlvbnMuCiAgKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGUuCkBAIC0xMTcxLDYgJiM0MzsxMjQwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWFwbGVfZW5vZGUgKm1hc19zdGFydChzdHJ1Y3QgbWFfc3RhdGUgKm1hcykKIAlpZiAobGlrZWx5KG1hc19pc19zdGFydChtYXMpKSkgewogCQlzdHJ1Y3QgbWFwbGVfZW5vZGUgKnJvb3Q7CiAKJiM0MzsJCW1hc19pbml0X2xvY2tfY2hlY2sobWFzKTsKIAkJbWFzLSZndDttaW4gPSAwOwogCQltYXMtJmd0O21heCA9IFVMT05HX01BWDsKIApAQCAtMTUwMSwxNCAmIzQzOzE1NzEsMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19wYXJlbnRfZ2FwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBjaGFyIG9mZnNldCwKIAlnb3RvIGFzY2VuZDsKIH0KIAomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtYXNfdXBkYXRlX2dhcF9rbm93bihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywKJiM0MzsJCXVuc2lnbmVkIGxvbmcgZ2FwKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgY2hhciBwc2xvdDsKJiM0MzsJdW5zaWduZWQgbG9uZyBwX2dhcDsKJiM0MzsKJiM0MzsJcHNsb3QgPSBtdGVfcGFyZW50X3Nsb3QobWFzLSZndDtub2RlKTsKJiM0MzsJcF9nYXAgPSBtYV9nYXBzKG10ZV9wYXJlbnQobWFzLSZndDtub2RlKSwKJiM0MzsJCQltYXNfcGFyZW50X3R5cGUobWFzLCBtYXMtJmd0O25vZGUpKVtwc2xvdF07CiYjNDM7CiYjNDM7CWlmIChwX2dhcCAhPSBnYXApCiYjNDM7CQltYXNfcGFyZW50X2dhcChtYXMsIHBzbG90LCBnYXApOwomIzQzO30KJiM0MzsKIC8qCiAgKiBtYXNfdXBkYXRlX2dhcCgpIC0gVXBkYXRlIGEgbm9kZXMgZ2FwcyBhbmQgcHJvcGFnYXRlIHVwIGlmIG5lY2Vzc2FyeS4KICAqIEBtYXM6IHRoZSBtYXBsZSBzdGF0ZS4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIG1hc191cGRhdGVfZ2FwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQogewotCXVuc2lnbmVkIGNoYXIgcHNsb3Q7Ci0JdW5zaWduZWQgbG9uZyBwX2dhcDsKIAl1bnNpZ25lZCBsb25nIG1heF9nYXA7CiAKIAlpZiAoIW10X2lzX2FsbG9jKG1hcy0mZ3Q7dHJlZSkpCkBAIC0xNTE4LDEzICYjNDM7MTYwMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfdXBkYXRlX2dhcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcykKIAkJcmV0dXJuOwogCiAJbWF4X2dhcCA9IG1hc19tYXhfZ2FwKG1hcyk7Ci0KLQlwc2xvdCA9IG10ZV9wYXJlbnRfc2xvdChtYXMtJmd0O25vZGUpOwotCXBfZ2FwID0gbWFfZ2FwcyhtdGVfcGFyZW50KG1hcy0mZ3Q7bm9kZSksCi0JCQltYXNfcGFyZW50X3R5cGUobWFzLCBtYXMtJmd0O25vZGUpKVtwc2xvdF07Ci0KLQlpZiAocF9nYXAgIT0gbWF4X2dhcCkKLQkJbWFzX3BhcmVudF9nYXAobWFzLCBwc2xvdCwgbWF4X2dhcCk7CiYjNDM7CW1hc191cGRhdGVfZ2FwX2tub3duKG1hcywgbWF4X2dhcCk7CiB9CiAKIC8qCkBAIC0xNTQwLDE0ICYjNDM7MTYxNiwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX2Fkb3B0X2NoaWxkcmVuKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLAogCXN0cnVjdCBtYXBsZV9ub2RlICpub2RlID0gbXRlX3RvX25vZGUocGFyZW50KTsKIAl2b2lkIF9fcmN1ICoqc2xvdHMgPSBtYV9zbG90cyhub2RlLCB0eXBlKTsKIAl1bnNpZ25lZCBsb25nICpwaXZvdHMgPSBtYV9waXZvdHMobm9kZSwgdHlwZSk7Ci0Jc3RydWN0IG1hcGxlX2Vub2RlICpjaGlsZDsKLQl1bnNpZ25lZCBjaGFyIG9mZnNldDsKJiM0MzsJdW5zaWduZWQgY2hhciBlbmQ7CiAKLQlvZmZzZXQgPSBtYV9kYXRhX2VuZChub2RlLCB0eXBlLCBwaXZvdHMsIG1hcy0mZ3Q7bWF4KTsKLQlkbyB7Ci0JCWNoaWxkID0gbWFzX3Nsb3RfbG9ja2VkKG1hcywgc2xvdHMsIG9mZnNldCk7Ci0JCW1hc19zZXRfcGFyZW50KG1hcywgY2hpbGQsIHBhcmVudCwgb2Zmc2V0KTsKLQl9IHdoaWxlIChvZmZzZXQtLSk7CiYjNDM7CWVuZCA9IG1hX2RhdGFfZW5kKG5vZGUsIHR5cGUsIHBpdm90cywgbWFzLSZndDttYXgpOwomIzQzOwltYXNfc2V0X3BhcmVudF9zbG90cyhtYXMsIHBhcmVudCwgc2xvdHMsIDAsIGVuZCAmIzQzOyAxKTsKIH0KIAogLyoKQEAgLTE5MjksMTUgJiM0MzsyMDAxLDEwIEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9jb3B5KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfbm9kZSAqc3JjLAogCXNfc2xvdHMgPSBtYV9zbG90cyhzcmMsIHNfbXQpICYjNDM7IHN0YXJ0OwogCXNfcGl2b3RzID0gbWFfcGl2b3RzKHNyYywgc19tdCkgJiM0Mzsgc3RhcnQ7CiAJbWVtY3B5KGRfc2xvdHMsIHNfc2xvdHMsIHNpemUgKiBzaXplb2Yodm9pZCBfX3JjdSAqKSk7Ci0JaWYgKCFtYV9pc19sZWFmKGRfbXQpICZhbXA7JmFtcDsgc19tdCA9PSBtYXBsZV9jb3B5KSB7Ci0JCXN0cnVjdCBtYXBsZV9lbm9kZSAqZWRzdCA9IG10X21rX25vZGUoZHN0LCBkX210KTsKLQogCi0JCWZvciAoaW50IGkgPSAwOyBpICZsdDsgc2l6ZTsgaSYjNDM7JiM0MzspCi0JCQltYXNfc2V0X3BhcmVudChtYXMsCi0JCQkJICAgICAgIG10X3Nsb3RfbG9ja2VkKG1hcy0mZ3Q7dHJlZSwgZF9zbG90cywgaSksCi0JCQkJICAgICAgIGVkc3QsIGRfc3RhcnQgJiM0MzsgaSk7Ci0JfQomIzQzOwlpZiAoIW1hX2lzX2xlYWYoZF9tdCkgJmFtcDsmYW1wOyBzX210ID09IG1hcGxlX2NvcHkpCiYjNDM7CQltYXNfc2V0X3BhcmVudF9zbG90cyhtYXMsIG10X21rX25vZGUoZHN0LCBkX210KSwKJiM0MzsJCQkJICAgICBkX3Nsb3RzLCBkX3N0YXJ0LCBzaXplKTsKIAogCWRfZ2FwcyA9IG1hX2dhcHMoZHN0LCBkX210KTsKIAlpZiAoZF9nYXBzKSB7CkBAIC0yMDgxLDggJiM0MzsyMTQ4LDggQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193bWJfcmVwbGFjZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2NvcHkgKmNwKQogCW1hcy0mZ3Q7bm9kZSA9IG10X3Nsb3RfbG9ja2VkKG1hcy0mZ3Q7dHJlZSwgY3AtJmd0O3Nsb3QsIDApOwogCS8qIEluc2VydCB0aGUgbmV3IGRhdGEgaW4gdGhlIHRyZWUgKi8KIAltYXNfdG9waWFyeV9yZXBsYWNlKG1hcywgb2xkX2Vub2RlLCBjcC0mZ3Q7aGVpZ2h0KTsKLQlpZiAoIW10ZV9pc19sZWFmKG1hcy0mZ3Q7bm9kZSkpCi0JCW1hc191cGRhdGVfZ2FwKG1hcyk7CiYjNDM7CWlmIChtdF9pc19hbGxvYyhtYXMtJmd0O3RyZWUpICZhbXA7JmFtcDsgIW10ZV9pc19yb290KG1hcy0mZ3Q7bm9kZSkpCiYjNDM7CQltYXNfdXBkYXRlX2dhcF9rbm93bihtYXMsIGNwLSZndDtnYXBbMF0pOwogCiAJbXRyZWVfcmFuZ2Vfd2FsayhtYXMpOwogfQpAQCAtMjkyOCwxMyAmIzQzOzI5OTUsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX2V4dGVuZF9zcGFubmluZ19udWxsKHN0cnVjdCBtYV93cl9zdGF0ZSAqbF93cl9tYXMsCiAJCWlmIChyX21hcy0mZ3Q7bGFzdCAmbHQ7IHJfd3JfbWFzLSZndDtyX21heCkKIAkJCXJfbWFzLSZndDtsYXN0ID0gcl93cl9tYXMtJmd0O3JfbWF4OwogCQlyX21hcy0mZ3Q7b2Zmc2V0JiM0MzsmIzQzOzsKLQl9IGVsc2UgaWYgKChyX21hcy0mZ3Q7bGFzdCA9PSByX3dyX21hcy0mZ3Q7cl9tYXgpICZhbXA7JmFtcDsKLQkgICAgKHJfbWFzLSZndDtsYXN0ICZsdDsgcl9tYXMtJmd0O21heCkgJmFtcDsmYW1wOwotCSAgICAhbWFzX3Nsb3RfbG9ja2VkKHJfbWFzLCByX3dyX21hcy0mZ3Q7c2xvdHMsIHJfbWFzLSZndDtvZmZzZXQgJiM0MzsgMSkpIHsKLQkJcl9tYXMtJmd0O2xhc3QgPSBtYXNfc2FmZV9waXZvdChyX21hcywgcl93cl9tYXMtJmd0O3Bpdm90cywKLQkJCQkJICAgICByX3dyX21hcy0mZ3Q7dHlwZSwgcl9tYXMtJmd0O29mZnNldCAmIzQzOyAxKTsKLQkJcl9tYXMtJmd0O29mZnNldCYjNDM7JiM0Mzs7Ci0JCXJfd3JfbWFzLSZndDtyX21heCA9IHJfbWFzLSZndDtsYXN0OwogCX0KIH0KIApAQCAtMzEyNSw3ICYjNDM7MzE4NSw3IEBAIHN0YXRpYyB2b2lkIG1hc193cl9zcGFubmluZ19zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcykKIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcykKIHsKIAl1bnNpZ25lZCBjaGFyIGRzdF9vZmZzZXQsIG9mZnNldF9lbmQ7Ci0JdW5zaWduZWQgY2hhciBjb3B5X3NpemUsIG5vZGVfcGl2b3RzOwomIzQzOwl1bnNpZ25lZCBjaGFyIGNvcHlfc2l6ZSwgbm9kZV9waXZvdHMsIG5vZGVfc2xvdHM7CiAJc3RydWN0IG1hcGxlX25vZGUgcmV1c2UsICpuZXdub2RlOwogCXVuc2lnbmVkIGxvbmcgKmRzdF9waXZvdHM7CiAJdm9pZCBfX3JjdSAqKmRzdF9zbG90czsKQEAgLTMxMzgsNiAmIzQzOzMxOTgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpCiAJaW5fcmN1ID0gbXRfaW5fcmN1KG1hcy0mZ3Q7dHJlZSk7CiAJb2Zmc2V0X2VuZCA9IHdyX21hcy0mZ3Q7b2Zmc2V0X2VuZDsKIAlub2RlX3Bpdm90cyA9IG10X3Bpdm90c1t3cl9tYXMtJmd0O3R5cGVdOwomIzQzOwlub2RlX3Nsb3RzID0gbXRfc2xvdHNbd3JfbWFzLSZndDt0eXBlXTsKIAkvKiBBc3N1bWUgbGFzdCBhZGRzIGFuIGVudHJ5ICovCiAJbmV3X2VuZCA9IG1hcy0mZ3Q7ZW5kICYjNDM7IDEgLSBvZmZzZXRfZW5kICYjNDM7IG1hcy0mZ3Q7b2Zmc2V0OwogCWlmIChtYXMtJmd0O2xhc3QgPT0gd3JfbWFzLSZndDtlbmRfcGl2KSB7CkBAIC0zMTQ5LDcgJiM0MzszMjEwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKQogCWlmIChpbl9yY3UpIHsKIAkJbmV3bm9kZSA9IG1hc19wb3Bfbm9kZShtYXMpOwogCX0gZWxzZSB7Ci0JCW1lbXNldCgmYW1wO3JldXNlLCAwLCBzaXplb2Yoc3RydWN0IG1hcGxlX25vZGUpKTsKIAkJbmV3bm9kZSA9ICZhbXA7cmV1c2U7CiAJfQogCkBAIC0zMTkzLDcgJiM0MzszMjUzLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcykKIAkJZHN0X3Bpdm90c1tuZXdfZW5kXSA9IG1hcy0mZ3Q7bWF4OwogCiBkb25lOgotCW1hc19sZWFmX3NldF9tZXRhKG5ld25vZGUsIG1hcGxlX2xlYWZfNjQsIG5ld19lbmQpOwomIzQzOwlpZiAoIWluX3JjdSAmYW1wOyZhbXA7IG5ld19lbmQgJiM0MzsgMiAmbHQ7IG5vZGVfc2xvdHMpIHsKJiM0MzsJCXVuc2lnbmVkIGNoYXIgY2xlYXJfZnJvbSA9IG5ld19lbmQgJiM0MzsgMTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBOb3RlIHRoYXQgdGhlIGxhc3Qgc2xvdCBpcyBuZXZlciBjbGVhcmVkLCBzaW5jZSB0aGUgbWV0YWRhdGEKJiM0MzsJCSAqIHdpbGwgYmUgc3RvcmVkIHRoZXJlIG9yIGl0IGhhcyBhIHZhbHVlLgomIzQzOwkJICovCiYjNDM7CQltZW1zZXQoZHN0X3Nsb3RzICYjNDM7IGNsZWFyX2Zyb20sIDAsCiYjNDM7CQkgICAgICAgc2l6ZW9mKHZvaWQgX19yY3UgKikgKiAobm9kZV9zbG90cyAtIGNsZWFyX2Zyb20pKTsKJiM0MzsJCWlmIChjbGVhcl9mcm9tICZsdDsgbm9kZV9waXZvdHMpCiYjNDM7CQkJbWVtc2V0KGRzdF9waXZvdHMgJiM0MzsgY2xlYXJfZnJvbSwgMCwKJiM0MzsJCQkgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogKG5vZGVfcGl2b3RzIC0gY2xlYXJfZnJvbSkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1hc19sZWFmX3NldF9tZXRhKG5ld25vZGUsIHdyX21hcy0mZ3Q7dHlwZSwgbmV3X2VuZCk7CiAJaWYgKGluX3JjdSkgewogCQlzdHJ1Y3QgbWFwbGVfZW5vZGUgKm9sZF9lbm9kZSA9IG1hcy0mZ3Q7bm9kZTsKIApAQCAtMzIxOCw3ICYjNDM7MzI5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfc2xvdF9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcykKIAl2b2lkIF9fcmN1ICoqc2xvdHMgPSB3cl9tYXMtJmd0O3Nsb3RzOwogCWJvb2wgZ2FwID0gZmFsc2U7CiAKLQlnYXAgfD0gIW10X3Nsb3RfbG9ja2VkKG1hcy0mZ3Q7dHJlZSwgc2xvdHMsIG9mZnNldCk7CiYjNDM7CWdhcCB8PSAhd3JfbWFzLSZndDtjb250ZW50OwogCWdhcCB8PSAhbXRfc2xvdF9sb2NrZWQobWFzLSZndDt0cmVlLCBzbG90cywgb2Zmc2V0ICYjNDM7IDEpOwogCiAJaWYgKHdyX21hcy0mZ3Q7b2Zmc2V0X2VuZCAtIG9mZnNldCA9PSAxKSB7CkBAIC0zNjYxLDYgJiM0MzszNzM1LDkgQEAgc3RhdGljIGlubGluZSBlbnVtIHN0b3JlX3R5cGUgbWFzX3dyX3N0b3JlX3R5cGUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpCiB7CiAJc3RydWN0IG1hX3N0YXRlICptYXMgPSB3cl9tYXMtJmd0O21hczsKIAl1bnNpZ25lZCBjaGFyIG5ld19lbmQ7CiYjNDM7CWJvb2wgYXBwZW5kaW5nOwomIzQzOwlib29sIG9uZV9zbG90OwomIzQzOwlib29sIGluX3JjdTsKIAogCWlmICh1bmxpa2VseShtYXNfaXNfbm9uZShtYXMpIHx8IG1hc19pc19wdHIobWFzKSkpCiAJCXJldHVybiB3cl9zdG9yZV9yb290OwpAQCAtMzY4MCwyMSAmIzQzOzM3NTcsMzAgQEAgc3RhdGljIGlubGluZSBlbnVtIHN0b3JlX3R5cGUgbWFzX3dyX3N0b3JlX3R5cGUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpCiAJCXJldHVybiB3cl9uZXdfcm9vdDsKIAogCW5ld19lbmQgPSBtYXNfd3JfbmV3X2VuZCh3cl9tYXMpOwomIzQzOwlpbl9yY3UgPSBtdF9pbl9yY3UobWFzLSZndDt0cmVlKTsKJiM0MzsJYXBwZW5kaW5nID0gbWFzLSZndDtvZmZzZXQgPT0gbWFzLSZndDtlbmQ7CiYjNDM7CW9uZV9zbG90ID0gd3JfbWFzLSZndDtvZmZzZXRfZW5kIC0gbWFzLSZndDtvZmZzZXQgPT0gMTsKJiM0MzsKIAkvKiBQb3RlbnRpYWwgc3Bhbm5pbmcgcmViYWxhbmNlIGNvbGxhcHNpbmcgYSBub2RlICovCiAJaWYgKG5ld19lbmQgJmx0OyBtdF9taW5fc2xvdHNbd3JfbWFzLSZndDt0eXBlXSkgewogCQlpZiAoIW10ZV9pc19yb290KG1hcy0mZ3Q7bm9kZSkpCiAJCQlyZXR1cm4gIHdyX3JlYmFsYW5jZTsKJiM0MzsJCWlmICghaW5fcmN1KSB7CiYjNDM7CQkJaWYgKGFwcGVuZGluZykKJiM0MzsJCQkJcmV0dXJuIHdyX2FwcGVuZDsKJiM0MzsJCQllbHNlIGlmIChtYXMtJmd0O2VuZCA9PSBuZXdfZW5kICZhbXA7JmFtcDsgb25lX3Nsb3QpCiYjNDM7CQkJCXJldHVybiB3cl9zbG90X3N0b3JlOwomIzQzOwkJfQogCQlyZXR1cm4gd3Jfbm9kZV9zdG9yZTsKIAl9CiAKIAlpZiAobmV3X2VuZCAmZ3Q7PSBtdF9zbG90c1t3cl9tYXMtJmd0O3R5cGVdKQogCQlyZXR1cm4gd3Jfc3BsaXRfc3RvcmU7CiAKLQlpZiAoIW10X2luX3JjdShtYXMtJmd0O3RyZWUpICZhbXA7JmFtcDsgKG1hcy0mZ3Q7b2Zmc2V0ID09IG1hcy0mZ3Q7ZW5kKSkKJiM0MzsJaWYgKCFpbl9yY3UgJmFtcDsmYW1wOyBhcHBlbmRpbmcpCiAJCXJldHVybiB3cl9hcHBlbmQ7CiAKLQlpZiAoKG5ld19lbmQgPT0gbWFzLSZndDtlbmQpICZhbXA7JmFtcDsgKCFtdF9pbl9yY3UobWFzLSZndDt0cmVlKSB8fAotCQkod3JfbWFzLSZndDtvZmZzZXRfZW5kIC0gbWFzLSZndDtvZmZzZXQgPT0gMSkpKQomIzQzOwlpZiAobmV3X2VuZCA9PSBtYXMtJmd0O2VuZCAmYW1wOyZhbXA7ICghaW5fcmN1IHx8IG9uZV9zbG90KSkKIAkJcmV0dXJuIHdyX3Nsb3Rfc3RvcmU7CiAKIAlyZXR1cm4gd3Jfbm9kZV9zdG9yZTsKQEAgLTM3OTMsMzUgJiM0MzszODc5LDQwIEBAIGludCBtYXNfYWxsb2NfY3ljbGljKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nICpzdGFydHAsCiAJCXZvaWQgKmVudHJ5LCB1bnNpZ25lZCBsb25nIHJhbmdlX2xvLCB1bnNpZ25lZCBsb25nIHJhbmdlX2hpLAogCQl1bnNpZ25lZCBsb25nICpuZXh0LCBnZnBfdCBnZnApCiB7Ci0JdW5zaWduZWQgbG9uZyBtaW4gPSByYW5nZV9sbzsKLQlpbnQgcmV0ID0gMDsKLQotCXJhbmdlX2xvID0gbWF4KG1pbiwgKm5leHQpOwotCXJldCA9IG1hc19lbXB0eV9hcmVhKG1hcywgcmFuZ2VfbG8sIHJhbmdlX2hpLCAxKTsKLQlpZiAoKG1hcy0mZ3Q7dHJlZS0mZ3Q7bWFfZmxhZ3MgJmFtcDsgTVRfRkxBR1NfQUxMT0NfV1JBUFBFRCkgJmFtcDsmYW1wOyByZXQgPT0gMCkgewotCQltYXMtJmd0O3RyZWUtJmd0O21hX2ZsYWdzICZhbXA7PSB+TVRfRkxBR1NfQUxMT0NfV1JBUFBFRDsKLQkJcmV0ID0gMTsKLQl9Ci0JaWYgKHJldCAmbHQ7IDAgJmFtcDsmYW1wOyByYW5nZV9sbyAmZ3Q7IG1pbikgewotCQltYXNfcmVzZXQobWFzKTsKLQkJcmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCBtaW4sIHJhbmdlX2hpLCAxKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gMTsKLQl9Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiByZXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWluOwogCiYjNDM7CW1pbiA9IHJhbmdlX2xvOwogCWRvIHsKJiM0MzsJCXJhbmdlX2xvID0gbWF4KG1pbiwgKm5leHQpOwomIzQzOwkJcmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCByYW5nZV9sbywgcmFuZ2VfaGksIDEpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDAgJmFtcDsmYW1wOyByYW5nZV9sbyAmZ3Q7IG1pbikgewomIzQzOwkJCW1hc19yZXNldChtYXMpOwomIzQzOwkJCXJldCA9IG1hc19lbXB0eV9hcmVhKG1hcywgbWluLCByYW5nZV9oaSwgMSk7CiYjNDM7CQkJaWYgKHJldCA9PSAwKQomIzQzOwkJCQlyZXQgPSAxOwomIzQzOwkJfQomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiAJCW1hc19pbnNlcnQobWFzLCBlbnRyeSk7CiAJfSB3aGlsZSAobWFzX25vbWVtKG1hcywgZ2ZwKSk7Ci0JaWYgKG1hc19pc19lcnIobWFzKSkKLQkJcmV0dXJuIHhhX2VycihtYXMtJmd0O25vZGUpOwogCiYjNDM7CWlmIChtYXNfaXNfZXJyKG1hcykpIHsKJiM0MzsJCXJldCA9IHhhX2VycihtYXMtJmd0O25vZGUpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKChtYXMtJmd0O3RyZWUtJmd0O21hX2ZsYWdzICZhbXA7IE1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQpICZhbXA7JmFtcDsgcmV0ID09IDApIHsKJiM0MzsJCW1hcy0mZ3Q7dHJlZS0mZ3Q7bWFfZmxhZ3MgJmFtcDs9IH5NVF9GTEFHU19BTExPQ19XUkFQUEVEOwomIzQzOwkJcmV0ID0gMTsKJiM0MzsJfQogCSpzdGFydHAgPSBtYXMtJmd0O2luZGV4OwogCSpuZXh0ID0gKnN0YXJ0cCAmIzQzOyAxOwogCWlmICgqbmV4dCA9PSAwKQogCQltYXMtJmd0O3RyZWUtJmd0O21hX2ZsYWdzIHw9IE1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQ7CiAKJiM0MztvdXQ6CiAJbWFzX2Rlc3Ryb3kobWFzKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDM2MCw4ICYjNDM7NDQ1MSw4IEBAIHZvaWQgKm1hc193YWxrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQogewogCXZvaWQgKmVudHJ5OwogCi0JaWYgKCFtYXNfaXNfYWN0aXZlKG1hcykgJmFtcDsmYW1wOyAhbWFzX2lzX3N0YXJ0KG1hcykpCi0JCW1hcy0mZ3Q7c3RhdHVzID0gbWFfc3RhcnQ7CiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiYjNDM7CW1hc19tYWtlX3dhbGthYmxlKG1hcyk7CiByZXRyeToKIAllbnRyeSA9IG1hc19zdGF0ZV93YWxrKG1hcyk7CiAJaWYgKG1hc19pc19zdGFydChtYXMpKSB7CkBAIC00ODMxLDYgJiM0Mzs0OTIyLDcgQEAgdm9pZCAqbWFzX3N0b3JlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSkKIHsKIAlNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpOwogCiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiAJdHJhY2VfbWFfd3JpdGUoVFBfRkNULCBtYXMsIDAsIGVudHJ5KTsKICNpZmRlZiBDT05GSUdfREVCVUdfTUFQTEVfVFJFRQogCWlmIChNQVNfV0FSTl9PTihtYXMsIG1hcy0mZ3Q7aW5kZXggJmd0OyBtYXMtJmd0O2xhc3QpKQpAQCAtNDg4OSw2ICYjNDM7NDk4MSw3IEBAIGludCBtYXNfc3RvcmVfZ2ZwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSwgZ2ZwX3QgZ2ZwKQogCU1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBlbnRyeSk7CiAJaW50IHJldCA9IDA7CiAKJiM0MzsJbWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTsKIHJldHJ5OgogCW1hc193cl9wcmVhbGxvY2F0ZSgmYW1wO3dyX21hcywgZW50cnkpOwogCWlmICh1bmxpa2VseShtYXNfbm9tZW0obWFzLCBnZnApKSkgewpAQCAtNDkxOSw2ICYjNDM7NTAxMiw3IEBAIHZvaWQgbWFzX3N0b3JlX3ByZWFsbG9jKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSkKIHsKIAlNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpOwogCiYjNDM7CW1hc19sb2NrX2NoZWNrKG1hcyk7CiAJaWYgKG1hcy0mZ3Q7c3RvcmVfdHlwZSA9PSB3cl9zdG9yZV9yb290KSB7CiAJCW1hc193cl9wcmVhbGxvY19zZXR1cCgmYW1wO3dyX21hcyk7CiAJCWdvdG8gc3RvcmU7CkBAIC00OTUxLDYgJiM0Mzs1MDQ1LDcgQEAgaW50IG1hc19wcmVhbGxvY2F0ZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnksIGdmcF90IGdmcCkKIHsKIAlNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpOwogCiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiAJbWFzX3dyX3ByZWFsbG9jX3NldHVwKCZhbXA7d3JfbWFzKTsKIAltYXMtJmd0O3N0b3JlX3R5cGUgPSBtYXNfd3Jfc3RvcmVfdHlwZSgmYW1wO3dyX21hcyk7CiAJbWFzX3ByZWFsbG9jX2NhbGMoJmFtcDt3cl9tYXMsIGVudHJ5KTsKQEAgLTQ5OTcsNiAmIzQzOzUwOTIsNyBAQCBzdGF0aWMgdm9pZCBtYXNfbWF5X2FjdGl2YXRlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQogCQltYXMtJmd0O3N0YXR1cyA9IG1hX3N0YXJ0OwogCX0gZWxzZSB7CiAJCW1hcy0mZ3Q7c3RhdHVzID0gbWFfYWN0aXZlOwomIzQzOwkJbWFzX2xvY2tfY2hlY2sobWFzKTsKIAl9CiB9CiAKQEAgLTUwNzQsNiAmIzQzOzUxNzAsNyBAQCB2b2lkICptYXNfbmV4dChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpCiB7CiAJdm9pZCAqZW50cnkgPSBOVUxMOwogCiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiAJaWYgKG1hc19uZXh0X3NldHVwKG1hcywgbWF4LCAmYW1wO2VudHJ5KSkKIAkJcmV0dXJuIGVudHJ5OwogCkBAIC01MDk3LDYgJiM0Mzs1MTk0LDcgQEAgdm9pZCAqbWFzX25leHRfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KQogewogCXZvaWQgKmVudHJ5ID0gTlVMTDsKIAomIzQzOwltYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpOwogCWlmIChtYXNfbmV4dF9zZXR1cChtYXMsIG1heCwgJmFtcDtlbnRyeSkpCiAJCXJldHVybiBlbnRyeTsKIApAQCAtNTIwNSw2ICYjNDM7NTMwMyw3IEBAIHZvaWQgKm1hc19wcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbikKIHsKIAl2b2lkICplbnRyeSA9IE5VTEw7CiAKJiM0MzsJbWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTsKIAlpZiAobWFzX3ByZXZfc2V0dXAobWFzLCBtaW4sICZhbXA7ZW50cnkpKQogCQlyZXR1cm4gZW50cnk7CiAKQEAgLTUyMjgsNiAmIzQzOzUzMjcsNyBAQCB2b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pCiB7CiAJdm9pZCAqZW50cnkgPSBOVUxMOwogCiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiAJaWYgKG1hc19wcmV2X3NldHVwKG1hcywgbWluLCAmYW1wO2VudHJ5KSkKIAkJcmV0dXJuIGVudHJ5OwogCkBAIC01Mjc0LDYgJiM0Mzs1Mzc0LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwobXRfcHJldik7CiAgKi8KIHZvaWQgbWFzX3BhdXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQogewomIzQzOwltYXNfbG9ja19jaGVjayhtYXMpOwogCW1hcy0mZ3Q7c3RhdHVzID0gbWFfcGF1c2U7CiAJbWFzLSZndDtub2RlID0gTlVMTDsKIH0KQEAgLTUzODIsNiAmIzQzOzU0ODMsNyBAQCB2b2lkICptYXNfZmluZChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpCiB7CiAJdm9pZCAqZW50cnkgPSBOVUxMOwogCiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiAJaWYgKG1hc19maW5kX3NldHVwKG1hcywgbWF4LCAmYW1wO2VudHJ5KSkKIAkJcmV0dXJuIGVudHJ5OwogCkBAIC01NDA5LDYgJiM0Mzs1NTExLDcgQEAgdm9pZCAqbWFzX2ZpbmRfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KQogewogCXZvaWQgKmVudHJ5ID0gTlVMTDsKIAomIzQzOwltYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpOwogCWlmIChtYXNfZmluZF9zZXR1cChtYXMsIG1heCwgJmFtcDtlbnRyeSkpCiAJCXJldHVybiBlbnRyeTsKIApAQCAtNTQyOCw3ICYjNDM7NTUzMSw2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1hc19maW5kX3JhbmdlKTsKIHN0YXRpYyBib29sIG1hc19maW5kX3Jldl9zZXR1cChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4sCiAJCXZvaWQgKiplbnRyeSkKIHsKLQogCXN3aXRjaCAobWFzLSZndDtzdGF0dXMpIHsKIAljYXNlIG1hX2FjdGl2ZToKIAkJZ290byBhY3RpdmU7CkBAIC01NTIxLDYgJiM0Mzs1NjIzLDcgQEAgdm9pZCAqbWFzX2ZpbmRfcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbikKIHsKIAl2b2lkICplbnRyeSA9IE5VTEw7CiAKJiM0MzsJbWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTsKIAlpZiAobWFzX2ZpbmRfcmV2X3NldHVwKG1hcywgbWluLCAmYW1wO2VudHJ5KSkKIAkJcmV0dXJuIGVudHJ5OwogCkBAIC01NTQ3LDYgJiM0Mzs1NjUwLDcgQEAgdm9pZCAqbWFzX2ZpbmRfcmFuZ2VfcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbikKIHsKIAl2b2lkICplbnRyeSA9IE5VTEw7CiAKJiM0MzsJbWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTsKIAlpZiAobWFzX2ZpbmRfcmV2X3NldHVwKG1hcywgbWluLCAmYW1wO2VudHJ5KSkKIAkJcmV0dXJuIGVudHJ5OwogCkBAIC01NTY0LDYgJiM0Mzs1NjY4LDEwIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1hc19maW5kX3JhbmdlX3Jldik7CiAgKiBTZWFyY2hlcyBmb3IgQG1hcy0mZ3Q7aW5kZXgsIHNldHMgQG1hcy0mZ3Q7aW5kZXggYW5kIEBtYXMtJmd0O2xhc3QgdG8gdGhlIHJhbmdlIGFuZAogICogZXJhc2VzIHRoYXQgcmFuZ2UuCiAgKgomIzQzOyAqIE5vdGUgdGhhdCBlcmFzZSByZXF1aXJlcyBhbGxvY2F0aW9ucyBhbmQgd2lsbCB1c2UgR0ZQX0tFUk5FTCB0byBkbyBzbyBpZgomIzQzOyAqIG5lY2Vzc2FyeS4gIElmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgaW50ZXJuYWwgbG9jayB3aWxsIGJlIGRyb3BwZWQgdG8KJiM0MzsgKiByZXRyeS4KJiM0MzsgKgogICogUmV0dXJuOiB0aGUgZW50cnkgdGhhdCB3YXMgZXJhc2VkIG9yICVOVUxMLCBAbWFzLSZndDtpbmRleCBhbmQgQG1hcy0mZ3Q7bGFzdCBhcmUgdXBkYXRlZC4KICAqLwogdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQpAQCAtNTU3MiwxMyAmIzQzOzU2ODAsMTkgQEAgdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQogCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBtYXMtJmd0O2luZGV4OwogCU1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBOVUxMKTsKIAotCWlmICghbWFzX2lzX2FjdGl2ZShtYXMpIHx8ICFtYXNfaXNfc3RhcnQobWFzKSkKLQkJbWFzLSZndDtzdGF0dXMgPSBtYV9zdGFydDsKJiM0MzsJLyoKJiM0MzsJICogSW4gbG93IG1lbW9yeSBzaXR1YXRpb25zLCB0aGUgYWxsb2NhdGlvbiBpcyByZXRyaWVkIHdpdGggdGhlIGdmcCBmbGFnCiYjNDM7CSAqIEdGUF9LRVJORUwuICBUaGUgaW50ZXJuYWwgc3BpbmxvY2sgaXMgZHJvcHBlZCBpbiBtYXNfbm9tZW0oKSwgaG93ZXZlcgomIzQzOwkgKiB0aGUgZXh0ZXJuYWwgbG9jayBpcyBub3QgZHJvcHBlZC4KJiM0MzsJICovCiYjNDM7CWlmIChtdF9leHRlcm5hbF9sb2NrKG1hcy0mZ3Q7dHJlZSkpCiYjNDM7CQltaWdodF9hbGxvYyhHRlBfS0VSTkVMKTsKIAomIzQzOwltYXNfbWFrZV93YWxrYWJsZShtYXMpOwogd3JpdGVfcmV0cnk6CiAJZW50cnkgPSBtYXNfc3RhdGVfd2FsayhtYXMpOwogCWlmICghZW50cnkpCi0JCXJldHVybiBOVUxMOwomIzQzOwkJZ290byBvdXQ7CiAKIAkvKiBNdXN0IHJlc2V0IHRvIGVuc3VyZSBzcGFubmluZyB3cml0ZXMgb2YgbGFzdCBzbG90IGFyZSBkZXRlY3RlZCAqLwogCW1hc19yZXNldChtYXMpOwpAQCAtNTU4OSw4ICYjNDM7NTcwMywxMCBAQCB2b2lkICptYXNfZXJhc2Uoc3RydWN0IG1hX3N0YXRlICptYXMpCiAJCWdvdG8gd3JpdGVfcmV0cnk7CiAJfQogCi0JaWYgKG1hc19pc19lcnIobWFzKSkKJiM0MzsJaWYgKG1hc19pc19lcnIobWFzKSkgewomIzQzOwkJZW50cnkgPSBOVUxMOwogCQlnb3RvIG91dDsKJiM0MzsJfQogCiAJbWFzX3dyX3N0b3JlX2VudHJ5KCZhbXA7d3JfbWFzKTsKIG91dDoKQEAgLTU2MDEsMTAgJiM0Mzs1NzE3LDExIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1hc19lcmFzZSk7CiAKIC8qKgogICogbWFzX25vbWVtKCkgLSBDaGVjayBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgYWxsb2NhdGluZyBhbmQgZG8gdGhlIGFsbG9jYXRpb24KLSAqIGlmIG5lY2Vzc2FyeSBJZiB0aGVyZSBhcmUgYWxsb2NhdGlvbnMsIHRoZW4gZnJlZSB0aGVtLgomIzQzOyAqIGlmIG5lY2Vzc2FyeS4KJiM0MzsgKgogICogQG1hczogVGhlIG1hcGxlIHN0YXRlCiAgKiBAZ2ZwOiBUaGUgR0ZQX0ZMQUdTIHRvIHVzZSBmb3IgYWxsb2NhdGlvbnMKLSAqIFJldHVybjogdHJ1ZSBvbiBhbGxvY2F0aW9uLCBmYWxzZSBvdGhlcndpc2UuCiYjNDM7ICogUmV0dXJuOiBGYWxzZSBvbiBubyBtZW1vcnkuICBUcnVlIG90aGVyd2lzZSAocGFydGlhbCBzdWNjZXNzIGFzIHdlbGwpCiAgKi8KIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApCiAJX19tdXN0X2hvbGQobWFzLSZndDt0cmVlLSZndDttYV9sb2NrKQpAQCAtNTYxMiw2ICYjNDM7NTcyOSwxMCBAQCBib29sIG1hc19ub21lbShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgZ2ZwX3QgZ2ZwKQogCWlmIChsaWtlbHkobWFzLSZndDtub2RlICE9IE1BX0VSUk9SKC1FTk9NRU0pKSkKIAkJcmV0dXJuIGZhbHNlOwogCiYjNDM7CS8qIEFsbG9jYXRpb25zIGNhbiBmYWlsLCBkb24mIzM5O3QgZG8gdGhpcy4gKi8KJiM0MzsJV0FSTl9PTl9PTkNFKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgbXRfZXh0ZXJuYWxfbG9jayhtYXMtJmd0O3RyZWUpKTsKJiM0MzsKIAlpZiAoZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwKSAmYW1wOyZhbXA7ICFtdF9leHRlcm5hbF9sb2NrKG1hcy0mZ3Q7dHJlZSkpIHsKIAkJbXRyZWVfdW5sb2NrKG1hcy0mZ3Q7dHJlZSk7CiAJCW1hc19hbGxvY19ub2RlcyhtYXMsIGdmcCk7CkBAIC01NjIwLDEwICYjNDM7NTc0MSwxNyBAQCBib29sIG1hc19ub21lbShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgZ2ZwX3QgZ2ZwKQogCQltYXNfYWxsb2Nfbm9kZXMobWFzLCBnZnApOwogCX0KIAotCWlmICghbWFzLSZndDtzaGVhZiAmYW1wOyZhbXA7ICFtYXMtJmd0O2FsbG9jKQomIzQzOwkvKgomIzQzOwkgKiBSZXR1cm4gZmFsc2Ugb24gemVybyBmb3J3YXJkIHByb2dyZXNzLiAgUGFydGlhbCBhbGxvY2F0aW9ucyBhcmUga2VwdAomIzQzOwkgKiBzbyB0aGUgcmV0cnkgcGF0aCB3aWxsIGF0dGVtcHQgdG8gZ2V0IHRoZSByZXN0LiAgVGhlIGZhaWx1cmUgc2hvdWxkCiYjNDM7CSAqIG5vdCBoYXBwZW4gYXMgd2UgdHJ5IG91ciBiZXN0IHRvIHJlY2xhaW0uICBUaGUgdXNlciB3b3VsZCBuZWVkIGFuCiYjNDM7CSAqIGV4dGVybmFsIGxvY2sgd2l0aCBhIG5vbi1ibG9ja2luZyBnZnAgaW4gYSBsb3cgbWVtb3J5IHNpdHVhdGlvbiAtCiYjNDM7CSAqIHdoaWNoIHdvdWxkIGhhdmUgdHJpZ2dlcmVkIHRoZSBmaXJzdCB3YXJuaW5nIGluIHRoaXMgZnVuY3Rpb24uCiYjNDM7CSAqLwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFtYXMtJmd0O3NoZWFmICZhbXA7JmFtcDsgIW1hcy0mZ3Q7YWxsb2MpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQltYXMtJmd0O3N0YXR1cyA9IG1hX3N0YXJ0OwomIzQzOwltYXNfcmVzZXQobWFzKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNTkxMyw2ICYjNDM7NjA0MSwxMCBAQCBFWFBPUlRfU1lNQk9MKG10cmVlX2FsbG9jX3JyYW5nZSk7CiAgKiBFcmFzaW5nIGlzIHRoZSBzYW1lIGFzIGEgd2FsayB0byBhbiBlbnRyeSB0aGVuIGEgc3RvcmUgb2YgYSBOVUxMIHRvIHRoYXQKICAqIEVOVElSRSByYW5nZS4gIEluIGZhY3QsIGl0IGlzIGltcGxlbWVudGVkIGFzIHN1Y2ggdXNpbmcgdGhlIGFkdmFuY2VkIEFQSS4KICAqCiYjNDM7ICogTm90ZSB0aGF0IGVyYXNlIHJlcXVpcmVzIGFsbG9jYXRpb25zIGFuZCB3aWxsIHVzZSBHRlBfS0VSTkVMIHRvIGRvIHNvIGlmCiYjNDM7ICogbmVjZXNzYXJ5LiAgSWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBpbnRlcm5hbCBsb2NrIHdpbGwgYmUgZHJvcHBlZCB0bwomIzQzOyAqIHJldHJ5LgomIzQzOyAqCiAgKiBSZXR1cm46IFRoZSBlbnRyeSBzdG9yZWQgYXQgdGhlIEBpbmRleCBvciAlTlVMTAogICovCiB2b2lkICptdHJlZV9lcmFzZShzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQsIHVuc2lnbmVkIGxvbmcgaW5kZXgpCkBAIC01OTIyLDYgJiM0Mzs2MDU0LDcgQEAgdm9pZCAqbXRyZWVfZXJhc2Uoc3RydWN0IG1hcGxlX3RyZWUgKm10LCB1bnNpZ25lZCBsb25nIGluZGV4KQogCU1BX1NUQVRFKG1hcywgbXQsIGluZGV4LCBpbmRleCk7CiAJdHJhY2VfbWFfb3AoVFBfRkNULCAmYW1wO21hcyk7CiAKJiM0MzsJbWlnaHRfYWxsb2MoR0ZQX0tFUk5FTCk7CiAJbXRyZWVfbG9jayhtdCk7CiAJZW50cnkgPSBtYXNfZXJhc2UoJmFtcDttYXMpOwogCW10cmVlX3VubG9jayhtdCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jCmluZGV4IDA2MDc5MTNhMzAyMmQ1Li5kOTY3ZTc2YTNjMDY1MCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMKQEAgLTM1MjM0LDcgJiM0MzszNTIzNCw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19wcmVhbGxvYyhzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQpCiAJbXRfc2V0X25vbl9rZXJuZWwoMSk7CiAJLyogU3Bhbm5pbmcgc3RvcmUgKi8KIAltYXNfc2V0X3JhbmdlKCZhbXA7bWFzLCAxLCAxMDApOwotCU1UX0JVR19PTihtdCwgbWFzX3ByZWFsbG9jYXRlKCZhbXA7bWFzLCBwdHIsIEdGUF9LRVJORUwgJmFtcDsgR0ZQX05PV0FJVCkgPT0gMCk7CiYjNDM7CU1UX0JVR19PTihtdCwgbWFzX3ByZWFsbG9jYXRlKCZhbXA7bWFzLCBwdHIsIEdGUF9OT1dBSVQpID09IDApOwogCWFsbG9jYXRlZCA9IG1hc19hbGxvY2F0ZWQoJmFtcDttYXMpOwogCWhlaWdodCA9IG1hc19tdF9oZWlnaHQoJmFtcDttYXMpOwogCU1UX0JVR19PTihtdCwgYWxsb2NhdGVkICE9IDApOwpAQCAtMzUyNTcsNyAmIzQzOzM1MjU3LDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGNoZWNrX3ByZWFsbG9jKHN0cnVjdCBtYXBsZV90cmVlICptdCkKIAlNVF9CVUdfT04obXQsIG1hc19hbGxvY2F0ZWQoJmFtcDttYXMpICE9IDApOwogCW1hc19zZXRfcmFuZ2UoJmFtcDttYXMsIDAsIDIwMCk7CiAJbXRfc2V0X25vbl9rZXJuZWwoMSk7Ci0JTVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoJmFtcDttYXMsIHB0ciwgR0ZQX0tFUk5FTCAmYW1wOyBHRlBfTk9XQUlUKSA9PSAwKTsKJiM0MzsJTVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoJmFtcDttYXMsIHB0ciwgR0ZQX05PV0FJVCkgPT0gMCk7CiAJYWxsb2NhdGVkID0gbWFzX2FsbG9jYXRlZCgmYW1wO21hcyk7CiAJaGVpZ2h0ID0gbWFzX210X2hlaWdodCgmYW1wO21hcyk7CiAJTVRfQlVHX09OKG10LCBhbGxvY2F0ZWQgIT0gMCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDY4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBzdHVmZiDigJMgdGhlIE1hcGxlIFRyZWUsIGxvY2tkZXAsIGFuZCB0aGUgZG9jdW1lbnRhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgZmFpcmx5IHN1YnN0YW50aWFsIGNoYW5nZS4gSSBzZWUgdGhleSYjMzk7cmUgaW50cm9kdWNpbmcgYGxvY2tfc2VxdWVuY2VgIGludG8gbG9ja2RlcCwgYWRkaW5nIGBsZF9zZXFgIHRvIHRoZSBgc3RydWN0IG1hX3N0YXRlYCB3aXRoaW4gdGhlIG1hcGxlIHRyZWUgY29kZSwgYW5kIGltcG9ydGFudGx5LCB0aGV5JiMzOTtyZSBlbWJlZGRpbmcgbG9ja2RlcCBjaGVja3Mgd2l0aGluIGNvcmUgTWFwbGUgVHJlZSBvcGVyYXRpb25zIGxpa2UgYG1hc19sb2NrX2NoZWNrYCwgYG1hc19pbml0X2xvY2tfY2hlY2tgLCBhbmQgYG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrYC4gSSBub3RlIHRoZSBjaGFuZ2VzIHRvIGBtYXNfZXJhc2VgIHRvIGhhbmRsZSBwb3RlbnRpYWwgbG93LW1lbW9yeSBzY2VuYXJpb3MsIGluY2x1ZGluZyB0aGUgaW50cm9kdWN0aW9uIG9mIGBtaWdodF9hbGxvYyhHRlBfS0VSTkVMKWAgd2hlbiBhbiBleHRlcm5hbCBsb2NrIGlzIGluIHBsYXkuIEkgYWxzbyBzZWUgbW9kaWZpY2F0aW9ucyB0byBgbWFzX3dyX25vZGVfc3RvcmVgIGFuZCBgbWFzX3dyX3N0b3JlX3R5cGVgLgoKVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCByZXF1aXJlcyBjYXJlZnVsIHNjcnV0aW55LiBTaW5jZSB0aGlzIHBhdGNoIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIE1hcGxlIFRyZWUgaW1wbGVtZW50YXRpb24gYW5kIGxvY2tkZXAsIEkga25vdyBmdXp6aW5nIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwuIFdlIG5lZWQgdG8gZXhwb3NlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIG9yIG1lbW9yeSBwcm9ibGVtcyBlYXJseS4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aG9zZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gRm9yIGxvY2tkZXAsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGBDT05GSUdfTE9DS0RFUGAgaXMgdGhlIGtleS4gV2l0aCB0aGUgTWFwbGUgVHJlZSwgaXQmIzM5O3MgYmFrZWQgaW50byB0aGUga2VybmVsLiBBbHRob3VnaCBhbHdheXMgZW5hYmxlZCwgSSBrbm93IGBDT05GSUdfREVCVUdfTUFQTEVfVFJFRWAgd291bGQgYmUgaGVscGZ1bCB3aGVuIGRlYnVnZ2luZy4gSSBzaG91bGQgcHJvYmFibHkgZG8gYSBxdWljayBgZ2l0IGdyZXBgIG9uIHRoZSBjb25maWdzIHRvIGNvbmZpcm0gYW55IHNwZWNpZmljIGNvbmZpZ3MgdGhhdCBhcHBseSB0byB0aGUgTWFwbGUgVHJlZSB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQVBMRV9UUkVFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE1OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLY29uZmlnIEluc3BlY3Rpb24gZm9yIE1hcGxlIFRyZWUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNYXBsZSBUcmVlIGlzIGJlaW5nIGNvbmZpZ3VyZWQgd2l0aGluIHRoaXMgc3lzdGVtLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgYGxpYi9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgbWFueSBrZXJuZWwgc3Vic3lzdGVtcyBhcmUgZGVmaW5lZC4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoaXMgZmlsZSB3aWxsIGxpa2VseSBjb250YWluIHRoZSBvcHRpb25zIHJlbGF0ZWQgdG8gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoZSBNYXBsZSBUcmVlIGZlYXR1cmUsIG1heWJlIHNvbWUgYXNzb2NpYXRlZCBwYXJhbWV0ZXJzLCBhbmQgcG90ZW50aWFsbHkgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IGNvbmZpZ3VyYXRpb24gY29udHJvbHMgYXJlIGluIHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQVBMRV9UUkVFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzMzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkxvY2tpbmcgQ29uZmlndXJhdGlvbnMgaW4gdGhlIEtlcm5lbCoqCgpSaWdodCwgc28gdGhlIE1hcGxlIHRyZWUgaXMgYWx3YXlzIGVuYWJsZWQsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgYENPTkZJR19MT0NLREVQYC4gU2luY2UgYFBST1ZFX0xPQ0tJTkdgIGlzIG1lbnRpb25lZCwgSSBrbm93IGBMT0NLREVQYCBpcyBiZWluZyBpbmRpcmVjdGx5IGVuYWJsZWQuIE1ha2VzIHNlbnNlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhlIGxvY2tpbmcgcmVxdWlyZW1lbnRzIHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBjaGFuZ2UgYmVpbmcgZGlzY3Vzc2VkLiBBbmQgc2luY2UgdGhlIHBhdGNoIG1lbnRpb25zIGBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RgIHNwZWNpZmljYWxseSwgdGhhdCB3YXJyYW50cyBhIGRlZXBlciBsb29rLiBJJiMzOTtsbCBuZWVkIHRvIHJlY2FsbCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgc2V0dGluZy4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGdyYWNlIHBlcmlvZCBoYW5kbGluZywgYW5kIGl0cyBpbXBhY3Qgb24gdGhlIG5ldyBNYXBsZSB0cmVlIGltcGxlbWVudGF0aW9uIGlzIHByb2JhYmx5IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBjb21lcyBpbnRvIHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UkNVX1NUUklDVF9HUkFDRV9QRVJJT0QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvbWFwbGVfdHJlZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9tYXBsZV90cmVlLmM9MTE3Mj1zdGF0aWMgdm9pZCBtYXNfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTExNzgtXG5saWIvbWFwbGVfdHJlZS5jOjExNzk6I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxubGliL21hcGxlX3RyZWUuYy0xMTgwLVx0aWYgKCFtdF9sb2NrZWQobWFzLVx1MDAzZXRyZWUpKSB7XG4tLVxubGliL21hcGxlX3RyZWUuYy0xMTgzLVx0fVxubGliL21hcGxlX3RyZWUuYzoxMTg0OiNlbmRpZiAvKiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QgKi9cbmxpYi9tYXBsZV90cmVlLmMtMTE4NS1cbi0tXG5saWIvbWFwbGVfdHJlZS5jPTExOTM9c3RhdGljIHZvaWQgbWFzX2luaXRfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTExOTYtXHRzdHJ1Y3QgbG9ja2RlcF9tYXAgKm1hcDtcbmxpYi9tYXBsZV90cmVlLmM6MTE5NzojaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXG5saWIvbWFwbGVfdHJlZS5jLTExOTgtXHRpZiAoIW10X2xvY2tlZChtYXMtXHUwMDNldHJlZSkpIHtcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTEyMDItXHR9XG5saWIvbWFwbGVfdHJlZS5jOjEyMDM6I2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xubGliL21hcGxlX3RyZWUuYy0xMjA0LVxuLS1cbmxpYi9tYXBsZV90cmVlLmM9MTIxMj1zdGF0aWMgdm9pZCBtYXNfbWF5X2luaXRfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTEyMTQtI2lmZGVmIENPTkZJR19MT0NLREVQXG5saWIvbWFwbGVfdHJlZS5jOjEyMTU6I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxubGliL21hcGxlX3RyZWUuYy0xMjE2LVx0aWYgKG1hc19pc19zdGFydChtYXMpIHx8IG1hc19pc19wYXVzZWQobWFzKSkge1xuLS1cbmxpYi9tYXBsZV90cmVlLmMtMTIxOS1cdH1cbmxpYi9tYXBsZV90cmVlLmM6MTIyMDojZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXG5saWIvbWFwbGVfdHJlZS5jLTEyMjEtXHRtYXNfbG9ja19jaGVjayhtYXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTUwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgUkNVIGFuZCBMb2NraW5nIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gYFJDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EYCBpcyBkZWZpbml0ZWx5IGluIHBsYXkuIFRoYXQgbmFycm93cyBkb3duIHRoZSBwb3NzaWJpbGl0aWVzIGEgYml0IHdoZW4gY29uc2lkZXJpbmcgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBhbmQgSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiB0aGUgYmFjayBvZiBteSBtaW5kLiBUaGVuLCAqb2YgY291cnNlKiBgQ09ORklHX0xPQ0tERVBgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgZ29vZDsgaXQgbWVhbnMgd2UgaGF2ZSBleHRyYSBzYWZldHkgY2hlY2tzLCB3aGljaCBpcyBhbHdheXMgd2VsY29tZSwgZXZlbiBpZiBpdCBtaWdodCBhZGQgc29tZSBvdmVyaGVhZC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhlc2UgZGVidWcgY29uZmlndXJhdGlvbnMgY2FuIGFmZmVjdCBwZXJmb3JtYW5jZSB3aGVuIEkmIzM5O20gbG9va2luZyBhdCB0aW1pbmcgcHJvZmlsZXMgbGF0ZXIgb24uIE9rYXksIHdoYXQgZWxzZSBpcyBpbiBwbGF5PyBMZXQmIzM5O3MgYWxzbyB2ZXJpZnkgd2hldGhlciBgQ09ORklHX0RFQlVHX01BUExFX1RSRUVgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZSBhdCBoYW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtERUJVR19NQVBMRV9UUkVFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL21hcGxlX3RyZWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvbWFwbGVfdHJlZS5jPTk2PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbWFwbGVfbm9kZV9jYWNoZTtcbmxpYi9tYXBsZV90cmVlLmMtOTctXG5saWIvbWFwbGVfdHJlZS5jOjk4OiNpZmRlZiBDT05GSUdfREVCVUdfTUFQTEVfVFJFRVxubGliL21hcGxlX3RyZWUuYy05OS1zdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBtdF9tYXhbXSA9IHtcbi0tXG5saWIvbWFwbGVfdHJlZS5jPTQ5MjE9dm9pZCAqbWFzX3N0b3JlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSlcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTQ5MjYtXHR0cmFjZV9tYV93cml0ZShUUF9GQ1QsIG1hcywgMCwgZW50cnkpO1xubGliL21hcGxlX3RyZWUuYzo0OTI3OiNpZmRlZiBDT05GSUdfREVCVUdfTUFQTEVfVFJFRVxubGliL21hcGxlX3RyZWUuYy00OTI4LVx0aWYgKE1BU19XQVJOX09OKG1hcywgbWFzLVx1MDAzZWluZGV4IFx1MDAzZSBtYXMtXHUwMDNlbGFzdCkpXG4tLVxubGliL21hcGxlX3RyZWUuYz02MzkyPXZvaWQgKm10X2ZpbmQoc3RydWN0IG1hcGxlX3RyZWUgKm10LCB1bnNpZ25lZCBsb25nICppbmRleCwgdW5zaWduZWQgbG9uZyBtYXgpXG4tLVxubGliL21hcGxlX3RyZWUuYy02Mzk1LVx0dm9pZCAqZW50cnk7XG5saWIvbWFwbGVfdHJlZS5jOjYzOTY6I2lmZGVmIENPTkZJR19ERUJVR19NQVBMRV9UUkVFXG5saWIvbWFwbGVfdHJlZS5jLTYzOTctXHR1bnNpZ25lZCBsb25nIGNvcHkgPSAqaW5kZXg7XG4tLVxubGliL21hcGxlX3RyZWUuYy02NDI4LVx0XHQqaW5kZXggPSBtYXMubGFzdCAmIzQzOyAxO1xubGliL21hcGxlX3RyZWUuYzo2NDI5OiNpZmRlZiBDT05GSUdfREVCVUdfTUFQTEVfVFJFRVxubGliL21hcGxlX3RyZWUuYy02NDMwLVx0XHRpZiAoTVRfV0FSTl9PTihtdCwgKCppbmRleCkgXHUwMDI2XHUwMDI2ICgoKmluZGV4KSBcdTAwM2M9IGNvcHkpKSlcbi0tXG5saWIvbWFwbGVfdHJlZS5jPTY0NjA9RVhQT1JUX1NZTUJPTChtdF9maW5kX2FmdGVyKTtcbmxpYi9tYXBsZV90cmVlLmMtNjQ2MS1cbmxpYi9tYXBsZV90cmVlLmM6NjQ2MjojaWZkZWYgQ09ORklHX0RFQlVHX01BUExFX1RSRUVcbmxpYi9tYXBsZV90cmVlLmMtNjQ2My1hdG9taWNfdCBtYXBsZV90cmVlX3Rlc3RzX3J1bjtcbi0tXG5saWIvbWFwbGVfdHJlZS5jPTcxNzY9RVhQT1JUX1NZTUJPTF9HUEwobWFzX3dyX2R1bXApO1xubGliL21hcGxlX3RyZWUuYy03MTc3LVxubGliL21hcGxlX3RyZWUuYzo3MTc4OiNlbmRpZiAvKiBDT05GSUdfREVCVUdfTUFQTEVfVFJFRSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAwMAoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiA0MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNYXBsZSBUcmVlIFBhdGNoIGZvciBQb3RlbnRpYWwgSXNzdWVzKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIE1hcGxlIFRyZWUgY29kZS4gRW5hYmxpbmcgYERFQlVHX01BUExFX1RSRUVgIGlzIGEgZ29vZCBmaXJzdCBzdGVwIHRvIGhlbHAgd2l0aCBkZWJ1Z2dpbmcuIEkgc2hvdWxkIGFsc28gY2hlY2sgYFBST1ZFX0xPQ0tJTkdgIHRvIGVuYWJsZSBgTE9DS0RFUGAsIHdoaWNoIHdpbGwgYmUgY3J1Y2lhbCBmb3IgYW5hbHl6aW5nIGFueSBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgc3BlY2lmaWNzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIFRoZSBwYXRjaCBtb2RpZmllcyBhIHJhbmdlIG9mIE1hcGxlIFRyZWUgZnVuY3Rpb25zOiBgbWFzX2VyYXNlYCwgYG1hc19ub21lbWAsIGBtYXNfYWxsb2NfY3ljbGljYCwgYG1hc193cl9ub2RlX3N0b3JlYCwgYG1hc193cl9zdG9yZV90eXBlYCwgYG1hc19zdG9yZWAsIGBtYXNfc3RvcmVfZ2ZwYCwgYG1hc19zdG9yZV9wcmVhbGxvY2AsIGBtYXNfcHJlYWxsb2NhdGVgLCBgbWFzX25leHRgLCBgbWFzX25leHRfcmFuZ2VgLCBgbWFzX3ByZXZgLCBgbWFzX3ByZXZfcmFuZ2VgLCBgbWFzX2ZpbmRgLCBgbWFzX2ZpbmRfcmFuZ2VgLCBgbWFzX2ZpbmRfcmV2YCwgYG1hc19maW5kX3JhbmdlX3JldmAsIGFuZCBgbXRyZWVfZXJhc2VgLiBHaXZlbiB0aGUgTWFwbGUgVHJlZSYjMzk7cyBpbXBvcnRhbmNlIGluIHRoZSBrZXJuZWwsIGVzcGVjaWFsbHkgZm9yIHRoaW5ncyBsaWtlIFZNQSBtYW5hZ2VtZW50LCBJIHNob3VsZCBjYXJlZnVsbHkgZXZhbHVhdGUgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGljaCBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIG1vc3QgbGlrZWx5IHRvIGJlIHByb2JsZW1hdGljLiBgbWFzX2VyYXNlYCwgYG1hc19ub21lbWAsIGBtYXNfYWxsb2NfY3ljbGljYCwgYG1hc193cl9ub2RlX3N0b3JlYCwgYG1hc193cl9zdG9yZV90eXBlYCwgYG1hc19zdG9yZV9nZnBgLCBgbWFzX3N0b3JlX3ByZWFsbG9jYCwgYG1hc19wcmVhbGxvY2F0ZWAsIGFuZCBgbXRyZWVfZXJhc2VgIHNlZW0gbGlrZSB0aGV5IG1pZ2h0IGJlIG1vcmUgaW50ZXJlc3RpbmcgdGhhbiB0aGUgZ2VuZXJhbCBwYXRoIG9uZXMgbGlrZSBgbWFzX25leHRgLCBgbWFzX3ByZXZgLCBhbmQgYG1hc19maW5kYCB3aGljaCBhcmUgcHJvYmFibHkgd2VsbC10ZXN0ZWQgYW5kIGZyZXF1ZW50bHkgdXNlZC4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGZpcnN0IGdyb3VwLiBJdCYjMzk7cyBsaWtlbHkgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIHdpbGwgbmVlZCBtb3JlIGluLWRlcHRoIHJldmlldy4KCk9oLCBhbmQgSSBhbHNvIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBgbG9ja19zZXF1ZW5jZWAgaW4gYGxvY2tkZXAuY2AuIFRoYXQmIzM5O3MgZGVmaW5pdGVseSByZWxhdGVkIHRvIHRoaXMsIGdpdmVuIHRoZSBgTE9DS0RFUGAgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX01BUExFX1RSRUUmIzM0OywKICAgICYjMzQ7TE9DS0RFUCYjMzQ7LAogICAgJiMzNDtQUk9WRV9MT0NLSU5HJiMzNDssCiAgICAmIzM0O1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFzX2VyYXNlJiMzNDssCiAgICAmIzM0O21hc19ub21lbSYjMzQ7LAogICAgJiMzNDttYXNfYWxsb2NfY3ljbGljJiMzNDssCiAgICAmIzM0O21hc193cl9ub2RlX3N0b3JlJiMzNDssCiAgICAmIzM0O21hc193cl9zdG9yZV90eXBlJiMzNDssCiAgICAmIzM0O21hc19zdG9yZV9nZnAmIzM0OywKICAgICYjMzQ7bWFzX3N0b3JlX3ByZWFsbG9jJiMzNDssCiAgICAmIzM0O21hc19wcmVhbGxvY2F0ZSYjMzQ7LAogICAgJiMzNDttdHJlZV9lcmFzZSYjMzQ7LAogICAgJiMzNDtsb2NrX3NlcXVlbmNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWFwbGUgdHJlZSBsb2dpYywgaW5jbHVkaW5nIGVyYXNlLCBhbGxvY2F0aW9uLCBhbmQgc3RvcmUgb3BlcmF0aW9ucywgYW5kIGludHJvZHVjZXMgbG9jayBzZXF1ZW5jZSB0cmFja2luZyBpbiBsb2NrZGVwIHRvIHZlcmlmeSBtYXBsZSB0cmVlIGxvY2tpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIGFyZSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX01BUExFX1RSRUUmIzM0OywKICAgICYjMzQ7TE9DS0RFUCYjMzQ7LAogICAgJiMzNDtQUk9WRV9MT0NLSU5HJiMzNDssCiAgICAmIzM0O1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFzX2VyYXNlJiMzNDssCiAgICAmIzM0O21hc19ub21lbSYjMzQ7LAogICAgJiMzNDttYXNfYWxsb2NfY3ljbGljJiMzNDssCiAgICAmIzM0O21hc193cl9ub2RlX3N0b3JlJiMzNDssCiAgICAmIzM0O21hc193cl9zdG9yZV90eXBlJiMzNDssCiAgICAmIzM0O21hc19zdG9yZV9nZnAmIzM0OywKICAgICYjMzQ7bWFzX3N0b3JlX3ByZWFsbG9jJiMzNDssCiAgICAmIzM0O21hc19wcmVhbGxvY2F0ZSYjMzQ7LAogICAgJiMzNDttdHJlZV9lcmFzZSYjMzQ7LAogICAgJiMzNDtsb2NrX3NlcXVlbmNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWFwbGUgdHJlZSBsb2dpYywgaW5jbHVkaW5nIGVyYXNlLCBhbGxvY2F0aW9uLCBhbmQgc3RvcmUgb3BlcmF0aW9ucywgYW5kIGludHJvZHVjZXMgbG9jayBzZXF1ZW5jZSB0cmFja2luZyBpbiBsb2NrZGVwIHRvIHZlcmlmeSBtYXBsZSB0cmVlIGxvY2tpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIGFyZSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMjoyNDo1NC45MTM0NTExNjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTU3MDE4OTcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19NQVBMRV9UUkVFXCIsXG4gICAgXCJMT0NLREVQXCIsXG4gICAgXCJQUk9WRV9MT0NLSU5HXCIsXG4gICAgXCJSQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hc19lcmFzZVwiLFxuICAgIFwibWFzX25vbWVtXCIsXG4gICAgXCJtYXNfYWxsb2NfY3ljbGljXCIsXG4gICAgXCJtYXNfd3Jfbm9kZV9zdG9yZVwiLFxuICAgIFwibWFzX3dyX3N0b3JlX3R5cGVcIixcbiAgICBcIm1hc19zdG9yZV9nZnBcIixcbiAgICBcIm1hc19zdG9yZV9wcmVhbGxvY1wiLFxuICAgIFwibWFzX3ByZWFsbG9jYXRlXCIsXG4gICAgXCJtdHJlZV9lcmFzZVwiLFxuICAgIFwibG9ja19zZXF1ZW5jZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWFwbGUgdHJlZSBsb2dpYywgaW5jbHVkaW5nIGVyYXNlLCBhbGxvY2F0aW9uLCBhbmQgc3RvcmUgb3BlcmF0aW9ucywgYW5kIGludHJvZHVjZXMgbG9jayBzZXF1ZW5jZSB0cmFja2luZyBpbiBsb2NrZGVwIHRvIHZlcmlmeSBtYXBsZSB0cmVlIGxvY2tpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIGFyZSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI0OjU0LjkxMzQ1OTAwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MTg2MTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzZhZTRjYjRiOThlZjZkNTY5NDdkNWMzMjQ3MGU5Y2M1ODhlZDFjZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxIDAyOjI0OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0XFxuaW5kZXggY2NkZDE2MTVjZjk3NGYuLjFlYWUyNGE5YzE4YjRhIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0XFxuQEAgLTE3LDcgKzE3LDggQEAgc3VwcG9ydHMgaXRlcmF0aW5nIG92ZXIgYSByYW5nZSBvZiBlbnRyaWVzIGFuZCBnb2luZyB0byB0aGUgcHJldmlvdXMgb3IgbmV4dFxcbiBlbnRyeSBpbiBhIGNhY2hlLWVmZmljaWVudCBtYW5uZXIuICBUaGUgdHJlZSBjYW4gYWxzbyBiZSBwdXQgaW50byBhbiBSQ1Utc2FmZVxcbiBtb2RlIG9mIG9wZXJhdGlvbiB3aGljaCBhbGxvd3MgcmVhZGluZyBhbmQgd3JpdGluZyBjb25jdXJyZW50bHkuICBXcml0ZXJzIG11c3RcXG4gc3luY2hyb25pemUgb24gYSBsb2NrLCB3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQgc3BpbmxvY2ssIG9yIHRoZSB1c2VyIGNhbiBzZXRcXG4tdGhlIGxvY2sgdG8gYW4gZXh0ZXJuYWwgbG9jayBvZiBhIGRpZmZlcmVudCB0eXBlLlxcbit0aGUgbG9jayB0byBhbiBleHRlcm5hbCBsb2NrIG9mIGEgZGlmZmVyZW50IHR5cGUuICBOb3RlIHRoYXQgZXh0ZXJuYWwgbG9ja3MgbWF5XFxuK2ludGVyZmVyZSB3aXRoIGFsbG9jYXRpb25zIGluIGEgbG93IG1lbW9yeSBzaXR1YXRpb24uXFxuIFxcbiBUaGUgTWFwbGUgVHJlZSBtYWludGFpbnMgYSBzbWFsbCBtZW1vcnkgZm9vdHByaW50IGFuZCB3YXMgZGVzaWduZWQgdG8gdXNlXFxuIG1vZGVybiBwcm9jZXNzb3IgY2FjaGUgZWZmaWNpZW50bHkuICBUaGUgbWFqb3JpdHkgb2YgdGhlIHVzZXJzIHdpbGwgYmUgYWJsZSB0b1xcbkBAIC00Miw2ICs0MywxNSBAQCBzdWNjZXNzZnVsIHN0b3JlIG9wZXJhdGlvbiB3aXRoaW4gYSBnaXZlblxcbiBjb2RlIHNlZ21lbnQgd2hlbiBhbGxvY2F0aW5nIGNhbm5vdCBiZSBkb25lLiAgQWxsb2NhdGlvbnMgb2Ygbm9kZXMgYXJlXFxuIHJlbGF0aXZlbHkgc21hbGwgYXQgYXJvdW5kIDI1NiBieXRlcy5cXG4gXFxuK1NpbmNlIHRoZSBtYXBsZSB0cmVlIHVzZXMgaW50ZXJuYWwgbm9kZXMgdGhhdCBhcmUgYWxsb2NhdGVkIGFuZCBoYXMgcnVsZXMgb25cXG4rZGF0YSBkZW5zaXR5LCBlcmFzaW5nIGFuIGVudHJ5IG1heSBjYXVzZSBhbGxvY2F0aW9ucyB0byBvY2N1ci4gIFRoYXQgaXMsXFxuK2VyYXNpbmcgYW4gZW50cnkgbWF5IGNvbnN1bWUgbWVtb3J5LiAgVXNlcnMgbXVzdCB0YWtlIGNhcmUgdG8gZW5zdXJlIHRoYXQgdGhleVxcbitkbyBub3QgdmlvbGF0ZSB0aGUgbGFyZ2VyIHN5c3RlbSBjb25zdHJhaW50cyBvbiB3aGVuIGFuZCBob3cgbWVtb3J5IGlzXFxuK2FsbG9jYXRlZC4gIE1vc3Qgc2l0dWF0aW9ucyBhcmUgZmluZSB0byBhbGxvY2F0ZSwgYnV0IHRoZSBwcmUtYWxsb2NhdGlvblxcbitzdXBwb3J0IGlzIHByb3ZpZGVkIGFzIGEgbWVjaGFuaXNtIHRvIGF2b2lkIHRyaWNraWVyIHNpdHVhdGlvbnMuICBUaGVyZSBpcyBhbHNvXFxuK3RoZSBwb3NzaWJpbGl0eSBvZiB1c2luZyBzcGVjaWFsIGVudHJpZXMgYW5kIGNsZWFuIHVwIHRoZSB0cmVlIGxhdGVyLCBpblxcbitleHRyZW1lIGNpcmN1bXN0YW5jZXMuXFxuK1xcbiAuLiBfbWFwbGUtdHJlZS1ub3JtYWwtYXBpOlxcbiBcXG4gTm9ybWFsIEFQSVxcbkBAIC02Myw3ICs3Myw4IEBAIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UuICBtdHJlZV9zdG9yZV9yYW5nZSgpIHdvcmtzIGluIHRoZSBzYW1lIHdheVxcbiBidXQgdGFrZXMgYSByYW5nZS4gIG10cmVlX2xvYWQoKSBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBlbnRyeSBzdG9yZWQgYXQgYVxcbiBnaXZlbiBpbmRleC4gIFlvdSBjYW4gdXNlIG10cmVlX2VyYXNlKCkgdG8gZXJhc2UgYW4gZW50aXJlIHJhbmdlIGJ5IG9ubHlcXG4ga25vd2luZyBvbmUgdmFsdWUgd2l0aGluIHRoYXQgcmFuZ2UsIG9yIG10cmVlX3N0b3JlKCkgY2FsbCB3aXRoIGFuIGVudHJ5IG9mXFxuLU5VTEwgbWF5IGJlIHVzZWQgdG8gcGFydGlhbGx5IGVyYXNlIGEgcmFuZ2Ugb3IgbWFueSByYW5nZXMgYXQgb25jZS5cXG4rTlVMTCBtYXkgYmUgdXNlZCB0byBwYXJ0aWFsbHkgZXJhc2UgYSByYW5nZSBvciBtYW55IHJhbmdlcyBhdCBvbmNlLiAgTm90ZSB0aGF0XFxuK210cmVlX2VyYXNlKCkgbWF5IHVzZSBHRlBfS0VSTkVMIG9uIGFsbG9jYXRpb25zLlxcbiBcXG4gSWYgeW91IHdhbnQgdG8gb25seSBzdG9yZSBhIG5ldyBlbnRyeSB0byBhIHJhbmdlIChvciBpbmRleCkgaWYgdGhhdCByYW5nZSBpc1xcbiBjdXJyZW50bHkgYGBOVUxMYGAsIHlvdSBjYW4gdXNlIG10cmVlX2luc2VydF9yYW5nZSgpIG9yIG10cmVlX2luc2VydCgpIHdoaWNoXFxuQEAgLTE2Myw3ICsxNzQsOSBAQCBZb3UgY2FuIHVzZSBtYXNfZXJhc2UoKSB0byBlcmFzZSBhbiBlbnRpcmUgcmFuZ2UgYnkgc2V0dGluZyBpbmRleCBhbmRcXG4gbGFzdCBvZiB0aGUgbWFwbGUgc3RhdGUgdG8gdGhlIGRlc2lyZWQgcmFuZ2UgdG8gZXJhc2UuICBUaGlzIHdpbGwgZXJhc2VcXG4gdGhlIGZpcnN0IHJhbmdlIHRoYXQgaXMgZm91bmQgaW4gdGhhdCByYW5nZSwgc2V0IHRoZSBtYXBsZSBzdGF0ZSBpbmRleFxcbiBhbmQgbGFzdCBhcyB0aGUgcmFuZ2UgdGhhdCB3YXMgZXJhc2VkIGFuZCByZXR1cm4gdGhlIGVudHJ5IHRoYXQgZXhpc3RlZFxcbi1hdCB0aGF0IGxvY2F0aW9uLlxcbithdCB0aGF0IGxvY2F0aW9uLiAgTm90ZSB0aGF0IG1hc19lcmFzZSgpIG1heSBhbGxvY2F0ZSB3aXRoIHRoZSBHRlBfS0VSTkVMIGZsYWcuXFxuK0lmIHRoaXMgaXMgbm90IG9rYXksIGNvbnNpZGVyIHVzaW5nIG1hc19zdG9yZV9nZnAoKSBhbmQgcGFzcyBpdCBhIGBgTlVMTGBgLFxcbithZnRlciBzZXR0aW5nIHVwIHRoZSBjb3JyZWN0IHJhbmdlIGJ5IHdhbGtpbmcgdG8gdGhlIGVudHJ5LlxcbiBcXG4gWW91IGNhbiB3YWxrIGVhY2ggZW50cnkgd2l0aGluIGEgcmFuZ2UgYnkgdXNpbmcgbWFzX2Zvcl9lYWNoKCkuICBJZiB5b3Ugd2FudFxcbiB0byB3YWxrIGVhY2ggZWxlbWVudCBvZiB0aGUgdHJlZSB0aGVuIGBgMGBgIGFuZCBgYFVMT05HX01BWGBgIG1heSBiZSB1c2VkIGFzXFxuQEAgLTIxMSw3ICsyMjQsNyBAQCBBZHZhbmNlZCBMb2NraW5nXFxuIFxcbiBUaGUgbWFwbGUgdHJlZSB1c2VzIGEgc3BpbmxvY2sgYnkgZGVmYXVsdCwgYnV0IGV4dGVybmFsIGxvY2tzIGNhbiBiZSB1c2VkIGZvclxcbiB0cmVlIHVwZGF0ZXMgYXMgd2VsbC4gIFRvIHVzZSBhbiBleHRlcm5hbCBsb2NrLCB0aGUgdHJlZSBtdXN0IGJlIGluaXRpYWxpemVkXFxuLXdpdGggdGhlIGBgTVRfRkxBR1NfTE9DS19FWFRFUk4gZmxhZ2BgLCB0aGlzIGlzIHVzdWFsbHkgZG9uZSB3aXRoIHRoZVxcbit3aXRoIHRoZSBgYE1UX0ZMQUdTX0xPQ0tfRVhURVJOYGAgZmxhZywgdGhpcyBpcyB1c3VhbGx5IGRvbmUgd2l0aCB0aGVcXG4gTVRSRUVfSU5JVF9FWFQoKSAjZGVmaW5lLCB3aGljaCB0YWtlcyBhbiBleHRlcm5hbCBsb2NrIGFzIGFuIGFyZ3VtZW50LlxcbiBcXG4gRnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcXG5pbmRleCA2MjE1NjYzNDU0MDZkZC4uYTY0NTFlY2JiZTlhMDUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFxcbkBAIC0yNzMsNiArMjczLDkgQEAgZXh0ZXJuIHN0cnVjdCBwaW5fY29va2llIGxvY2tfcGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKTtcXG4gZXh0ZXJuIHZvaWQgbG9ja19yZXBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUpO1xcbiBleHRlcm4gdm9pZCBsb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSk7XFxuIFxcbitleHRlcm4gdTMyIGxvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKTtcXG4rI2RlZmluZSBsb2NrZGVwX3NlcXVlbmNlKGxvY2spXFx0bG9ja19zZXF1ZW5jZShcXHUwMDI2KGxvY2spLVxcdTAwM2VkZXBfbWFwKVxcbitcXG4gI2RlZmluZSBsb2NrZGVwX2RlcHRoKHRzaylcXHQoZGVidWdfbG9ja3MgPyAodHNrKS1cXHUwMDNlbG9ja2RlcF9kZXB0aCA6IDApXFxuIFxcbiAjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0KGNvbmQpXFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oXFxuaW5kZXggZWFlMTE1YTI2NDg4NTYuLjU1YzRiMTUyZmVkZjdjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmhcXG5AQCAtMjUzLDcgKzI1Myw4IEBAIHN0cnVjdCBoZWxkX2xvY2sge1xcbiBcXHR1bnNpZ25lZCBpbnQgaGFyZGlycXNfb2ZmOjE7XFxuIFxcdHVuc2lnbmVkIGludCBzeW5jOjE7XFxuIFxcdHVuc2lnbmVkIGludCByZWZlcmVuY2VzOjExO1xcdFxcdFxcdFxcdFxcdC8qIDMyIGJpdHMgKi9cXG4tXFx0dW5zaWduZWQgaW50IHBpbl9jb3VudDtcXG4rXFx0dW5zaWduZWQgaW50IHBpbl9jb3VudDoyNDtcXG4rXFx0dW5zaWduZWQgaW50IHNlcV9jb3VudDo4O1xcbiB9O1xcbiBcXG4gI2Vsc2UgLyogIUNPTkZJR19MT0NLREVQICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oIGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcXG5pbmRleCA0YTU2MzE5MDZhZmZiNS4uNWUwYmQyODU3ZDk0MWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaFxcbkBAIC0yOSwxMyArMjksMTEgQEBcXG4gI2RlZmluZSBNQVBMRV9OT0RFX1NMT1RTXFx0MzFcXHQvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC1cXHUwMDNlcGFyZW50ICovXFxuICNkZWZpbmUgTUFQTEVfUkFOR0U2NF9TTE9UU1xcdDE2XFx0LyogMjU2IGJ5dGVzICovXFxuICNkZWZpbmUgTUFQTEVfQVJBTkdFNjRfU0xPVFNcXHQxMFxcdC8qIDI0MCBieXRlcyAqL1xcbi0jZGVmaW5lIE1BUExFX0FMTE9DX1NMT1RTXFx0KE1BUExFX05PREVfU0xPVFMgLSAxKVxcbiAjZWxzZVxcbiAvKiAzMmJpdCBzaXplcyAqL1xcbiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFNcXHQ2M1xcdC8qIDI1NiBieXRlcyBpbmNsdWRpbmcgLVxcdTAwM2VwYXJlbnQgKi9cXG4gI2RlZmluZSBNQVBMRV9SQU5HRTY0X1NMT1RTXFx0MzJcXHQvKiAyNTYgYnl0ZXMgKi9cXG4gI2RlZmluZSBNQVBMRV9BUkFOR0U2NF9TTE9UU1xcdDIxXFx0LyogMjQwIGJ5dGVzICovXFxuLSNkZWZpbmUgTUFQTEVfQUxMT0NfU0xPVFNcXHQoTUFQTEVfTk9ERV9TTE9UUyAtIDIpXFxuICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR182NEJJVCkgfHwgZGVmaW5lZChCVUlMRF9WRFNPMzJfNjQpICovXFxuIFxcbiAjZGVmaW5lIE1BUExFX05PREVfTUFTS1xcdFxcdDI1NVVMXFxuQEAgLTQ4NSw2ICs0ODMsMTIgQEAgc3RydWN0IG1hX3N0YXRlIHtcXG4gXFx0dW5zaWduZWQgY2hhciBtYXNfZmxhZ3M7XFxuIFxcdHVuc2lnbmVkIGNoYXIgZW5kO1xcdFxcdC8qIFRoZSBlbmQgb2YgdGhlIG5vZGUgKi9cXG4gXFx0ZW51bSBzdG9yZV90eXBlIHN0b3JlX3R5cGU7XFx0LyogVGhlIHR5cGUgb2Ygc3RvcmUgbmVlZGVkIGZvciB0aGlzIG9wZXJhdGlvbiAqL1xcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4rXFx0dTMyIGxkX3NlcTtcXG4rI2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxcbitcXHR1bnNpZ25lZCBsb25nIHJjdV9ncDtcXG4rI2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xcbisjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi9cXG4gfTtcXG4gXFxuIHN0cnVjdCBtYV93cl9zdGF0ZSB7XFxuQEAgLTU3Miw3ICs1NzYsNyBAQCB2b2lkIG1hcGxlX3RyZWVfaW5pdCh2b2lkKTtcXG4gdm9pZCBtYXNfZGVzdHJveShzdHJ1Y3QgbWFfc3RhdGUgKm1hcyk7XFxuIFxcbiB2b2lkICptYXNfcHJldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pO1xcbi12b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xcbit2b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pO1xcbiB2b2lkICptYXNfbmV4dChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xcbiB2b2lkICptYXNfbmV4dF9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXFxuaW5kZXggMzczYmNjMDU5OGQxMGIuLjE0ZDVjZThkZDYxMzY1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxcbkBAIC0xMjg4LDYgKzEyODgsNyBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3Qge1xcbiBcXHR1NjRcXHRcXHRcXHRcXHRjdXJyX2NoYWluX2tleTtcXG4gXFx0aW50XFx0XFx0XFx0XFx0bG9ja2RlcF9kZXB0aDtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0XFx0bG9ja2RlcF9yZWN1cnNpb247XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdFxcdGxvY2tkZXBfc2VxO1xcbiBcXHRzdHJ1Y3QgaGVsZF9sb2NrXFx0XFx0aGVsZF9sb2Nrc1tNQVhfTE9DS19ERVBUSF07XFxuICNlbmRpZlxcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXFxuaW5kZXggMmQ0YzViYWI1YWY4ODcuLmE2OTU2N2JkZDc5MTJlIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xcbisrKyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xcbkBAIC01MDc3LDcgKzUwNzcsNyBAQCBzdGF0aWMgaW50IF9fbG9ja19pc19oZWxkKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgaW50IHJlYWQpO1xcbiBzdGF0aWMgaW50IF9fbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLFxcbiBcXHRcXHRcXHQgIGludCB0cnlsb2NrLCBpbnQgcmVhZCwgaW50IGNoZWNrLCBpbnQgaGFyZGlycXNfb2ZmLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBsb2NrZGVwX21hcCAqbmVzdF9sb2NrLCB1bnNpZ25lZCBsb25nIGlwLFxcbi1cXHRcXHRcXHQgIGludCByZWZlcmVuY2VzLCBpbnQgcGluX2NvdW50LCBpbnQgc3luYylcXG4rXFx0XFx0XFx0ICBpbnQgcmVmZXJlbmNlcywgaW50IHBpbl9jb3VudCwgaW50IHN5bmMsIGludCBzZXEpXFxuIHtcXG4gXFx0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDtcXG4gXFx0c3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gTlVMTDtcXG5AQCAtNTE4Myw2ICs1MTgzLDcgQEAgc3RhdGljIGludCBfX2xvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcyxcXG4gXFx0aGxvY2stXFx1MDAzZWhvbGR0aW1lX3N0YW1wID0gbG9ja3N0YXRfY2xvY2soKTtcXG4gI2VuZGlmXFxuIFxcdGhsb2NrLVxcdTAwM2VwaW5fY291bnQgPSBwaW5fY291bnQ7XFxuK1xcdGhsb2NrLVxcdTAwM2VzZXFfY291bnQgPSBzZXE7XFxuIFxcbiBcXHRpZiAoY2hlY2tfd2FpdF9jb250ZXh0KGN1cnIsIGhsb2NrKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTUzODgsNyArNTM4OSw3IEBAIHN0YXRpYyBpbnQgcmVhY3F1aXJlX2hlbGRfbG9ja3Moc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCB1bnNpZ25lZCBpbnQgZGVwdGgsXFxuIFxcdFxcdFxcdFxcdCAgICBobG9jay1cXHUwMDNlcmVhZCwgaGxvY2stXFx1MDAzZWNoZWNrLFxcbiBcXHRcXHRcXHRcXHQgICAgaGxvY2stXFx1MDAzZWhhcmRpcnFzX29mZixcXG4gXFx0XFx0XFx0XFx0ICAgIGhsb2NrLVxcdTAwM2VuZXN0X2xvY2ssIGhsb2NrLVxcdTAwM2VhY3F1aXJlX2lwLFxcbi1cXHRcXHRcXHRcXHQgICAgaGxvY2stXFx1MDAzZXJlZmVyZW5jZXMsIGhsb2NrLVxcdTAwM2VwaW5fY291bnQsIDApKSB7XFxuK1xcdFxcdFxcdFxcdCAgICBobG9jay1cXHUwMDNlcmVmZXJlbmNlcywgaGxvY2stXFx1MDAzZXBpbl9jb3VudCwgMCwgaGxvY2stXFx1MDAzZXNlcV9jb3VudCkpIHtcXG4gXFx0XFx0Y2FzZSAwOlxcbiBcXHRcXHRcXHRyZXR1cm4gMTtcXG4gXFx0XFx0Y2FzZSAxOlxcbkBAIC01NjY5LDE0ICs1NjcwLDE3IEBAIHN0YXRpYyB2b2lkIF9fbG9ja191bnBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUgY29va2llXFxuIFxcdFxcdHN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrID0gY3Vyci1cXHUwMDNlaGVsZF9sb2NrcyArIGk7XFxuIFxcbiBcXHRcXHRpZiAobWF0Y2hfaGVsZF9sb2NrKGhsb2NrLCBsb2NrKSkge1xcbitcXHRcXHRcXHRpbnQgcGluX2NvdW50O1xcbitcXG4gXFx0XFx0XFx0aWYgKFdBUk4oIWhsb2NrLVxcdTAwM2VwaW5fY291bnQsIFxcXCJ1bnBpbm5pbmcgYW4gdW5waW5uZWQgbG9ja1xcXFxuXFxcIikpXFxuIFxcdFxcdFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdFxcdFxcdGhsb2NrLVxcdTAwM2VwaW5fY291bnQgLT0gY29va2llLnZhbDtcXG4rXFx0XFx0XFx0cGluX2NvdW50ID0gaGxvY2stXFx1MDAzZXBpbl9jb3VudCAtIGNvb2tpZS52YWw7XFxuIFxcbi1cXHRcXHRcXHRpZiAoV0FSTigoaW50KWhsb2NrLVxcdTAwM2VwaW5fY291bnQgXFx1MDAzYyAwLCBcXFwicGluIGNvdW50IGNvcnJ1cHRlZFxcXFxuXFxcIikpXFxuLVxcdFxcdFxcdFxcdGhsb2NrLVxcdTAwM2VwaW5fY291bnQgPSAwO1xcbitcXHRcXHRcXHRpZiAoV0FSTihwaW5fY291bnQgXFx1MDAzYyAwLCBcXFwicGluIGNvdW50IGNvcnJ1cHRlZFxcXFxuXFxcIikpXFxuK1xcdFxcdFxcdFxcdHBpbl9jb3VudCA9IDA7XFxuIFxcbitcXHRcXHRcXHRobG9jay1cXHUwMDNlcGluX2NvdW50ID0gcGluX2NvdW50O1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4gXFx0fVxcbkBAIC01Njg0LDYgKzU2ODgsMjQgQEAgc3RhdGljIHZvaWQgX19sb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSBjb29raWVcXG4gXFx0V0FSTigxLCBcXFwidW5waW5uaW5nIGFuIHVuaGVsZCBsb2NrXFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIHUzMiBfX2xvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KCFkZWJ1Z19sb2NrcykpXFxuK1xcdFxcdHJldHVybiB+MDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjdXJyLVxcdTAwM2Vsb2NrZGVwX2RlcHRoOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGhlbGRfbG9jayAqaGxvY2sgPSBjdXJyLVxcdTAwM2VoZWxkX2xvY2tzICsgaTtcXG4rXFxuK1xcdFxcdGlmIChtYXRjaF9oZWxkX2xvY2soaGxvY2ssIGxvY2spKVxcbitcXHRcXHRcXHRyZXR1cm4gaGxvY2stXFx1MDAzZXNlcV9jb3VudDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIH4wO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBDaGVjayB3aGV0aGVyIHdlIGZvbGxvdyB0aGUgaXJxLWZsYWdzIHN0YXRlIHByZWNpc2VseTpcXG4gICovXFxuQEAgLTU4NjYsNyArNTg4OCw4IEBAIHZvaWQgbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLFxcbiBcXG4gXFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XFxuIFxcdF9fbG9ja19hY3F1aXJlKGxvY2ssIHN1YmNsYXNzLCB0cnlsb2NrLCByZWFkLCBjaGVjayxcXG4tXFx0XFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAwKTtcXG4rXFx0XFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAwLFxcbitcXHRcXHQgICAgICAgKytjdXJyZW50LVxcdTAwM2Vsb2NrZGVwX3NlcSk7XFxuIFxcdGxvY2tkZXBfcmVjdXJzaW9uX2ZpbmlzaCgpO1xcbiBcXHRyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbiB9XFxuQEAgLTU5MTQsNyArNTkzNyw4IEBAIHZvaWQgbG9ja19zeW5jKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgc3ViY2xhc3MsIGludCByZWFkLFxcbiBcXG4gXFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XFxuIFxcdF9fbG9ja19hY3F1aXJlKGxvY2ssIHN1YmNsYXNzLCAwLCByZWFkLCBjaGVjayxcXG4tXFx0XFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAxKTtcXG4rXFx0XFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAxLFxcbitcXHRcXHQgICAgICAgKytjdXJyZW50LVxcdTAwM2Vsb2NrZGVwX3NlcSk7XFxuIFxcdGNoZWNrX2NoYWluX2tleShjdXJyZW50KTtcXG4gXFx0bG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7XFxuIFxcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuQEAgLTYwMDAsNiArNjAyNCwyNiBAQCB2b2lkIGxvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llIGNvb2tpZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChsb2NrX3VucGluX2xvY2spO1xcbiBcXG4rdTMyIGxvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHUzMiBzZXEgPSB+MDtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghbG9ja2RlcF9lbmFibGVkKCkpKVxcbitcXHRcXHRyZXR1cm4gc2VxO1xcbitcXG4rXFx0cmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4rXFx0Y2hlY2tfZmxhZ3MoZmxhZ3MpO1xcbitcXG4rXFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XFxuK1xcdHNlcSA9IF9fbG9ja19zZXF1ZW5jZShsb2NrKTtcXG4rXFx0bG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7XFxuK1xcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuK1xcbitcXHRyZXR1cm4gc2VxO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGxvY2tfc2VxdWVuY2UpO1xcbitcXG4gI2lmZGVmIENPTkZJR19MT0NLX1NUQVRcXG4gc3RhdGljIHZvaWQgcHJpbnRfbG9ja19jb250ZW50aW9uX2J1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jayxcXG5kaWZmIC0tZ2l0IGEvbGliL21hcGxlX3RyZWUuYyBiL2xpYi9tYXBsZV90cmVlLmNcXG5pbmRleCBlNTI4NzY0MzViNzdmMC4uMDZjYzA1Yjc5ZmJkYzggMTAwNjQ0XFxuLS0tIGEvbGliL21hcGxlX3RyZWUuY1xcbisrKyBiL2xpYi9tYXBsZV90cmVlLmNcXG5AQCAtMjYxLDYgKzI2MSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFzX2lzX3VuZGVyZmxvdyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcXG4gXFx0cmV0dXJuIG1hcy1cXHUwMDNlc3RhdHVzID09IG1hX3VuZGVyZmxvdztcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIG1hc19tYWtlX3dhbGthYmxlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbit7XFxuK1xcdGlmICghbWFzX2lzX2FjdGl2ZShtYXMpIFxcdTAwMjZcXHUwMDI2ICFtYXNfaXNfc3RhcnQobWFzKSlcXG4rXFx0XFx0bWFzLVxcdTAwM2VzdGF0dXMgPSBtYV9zdGFydDtcXG4rfVxcbitcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgbWFwbGVfbm9kZSAqbXRlX3RvX25vZGUoXFxuIFxcdFxcdGNvbnN0IHN0cnVjdCBtYXBsZV9lbm9kZSAqZW50cnkpXFxuIHtcXG5AQCAtNDU1LDQ2ICs0NjEsNiBAQCBlbnVtIG1hcGxlX3R5cGUgbWFzX3BhcmVudF90eXBlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKmVub2RlKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tLypcXG4tICogbWFzX3NldF9wYXJlbnQoKSAtIFNldCB0aGUgcGFyZW50IG5vZGUgYW5kIGVuY29kZSB0aGUgc2xvdFxcbi0gKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGVcXG4tICogQGVub2RlOiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlLlxcbi0gKiBAcGFyZW50OiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlIHRoYXQgaXMgdGhlIHBhcmVudCBvZiBAZW5vZGUuXFxuLSAqIEBzbG90OiBUaGUgc2xvdCB0aGF0IEBlbm9kZSByZXNpZGVzIGluIEBwYXJlbnQuXFxuLSAqXFxuLSAqIFNsb3QgbnVtYmVyIGlzIGVuY29kZWQgaW4gdGhlIGVub2RlLVxcdTAwM2VwYXJlbnQgYml0IDMtNiBvciAyLTYsIGRlcGVuZGluZyBvbiB0aGVcXG4tICogcGFyZW50IHR5cGUuXFxuLSAqL1xcbi1zdGF0aWMgaW5saW5lXFxuLXZvaWQgbWFzX3NldF9wYXJlbnQoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUsXFxuLVxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnBhcmVudCwgdW5zaWduZWQgY2hhciBzbG90KVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50O1xcbi1cXHR1bnNpZ25lZCBsb25nIHNoaWZ0O1xcbi1cXHR1bnNpZ25lZCBsb25nIHR5cGU7XFxuLVxcdGVudW0gbWFwbGVfdHlwZSBwX3R5cGUgPSBtdGVfbm9kZV90eXBlKHBhcmVudCk7XFxuLVxcbi1cXHRNQVNfQlVHX09OKG1hcywgcF90eXBlID09IG1hcGxlX2RlbnNlKTtcXG4tXFx0TUFTX0JVR19PTihtYXMsIHBfdHlwZSA9PSBtYXBsZV9sZWFmXzY0KTtcXG4tXFxuLVxcdHN3aXRjaCAocF90eXBlKSB7XFxuLVxcdGNhc2UgbWFwbGVfcmFuZ2VfNjQ6XFxuLVxcdGNhc2UgbWFwbGVfYXJhbmdlXzY0Olxcbi1cXHRcXHRzaGlmdCA9IE1BUExFX1BBUkVOVF9TTE9UX1NISUZUO1xcbi1cXHRcXHR0eXBlID0gTUFQTEVfUEFSRU5UX1JBTkdFNjQ7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRjYXNlIG1hcGxlX2RlbnNlOlxcbi1cXHRjYXNlIG1hcGxlX2xlYWZfNjQ6XFxuLVxcdFxcdHNoaWZ0ID0gdHlwZSA9IDA7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuLVxcbi1cXHR2YWwgXFx1MDAyNj0gfk1BUExFX05PREVfTUFTSzsgLyogQ2xlYXIgYWxsIG5vZGUgbWV0YWRhdGEgaW4gcGFyZW50ICovXFxuLVxcdHZhbCB8PSAoc2xvdCBcXHUwMDNjXFx1MDAzYyBzaGlmdCkgfCB0eXBlO1xcbi1cXHRtdGVfdG9fbm9kZShlbm9kZSktXFx1MDAzZXBhcmVudCA9IG1hX3BhcmVudF9wdHIodmFsKTtcXG4tfVxcbi1cXG4gLypcXG4gICogbXRlX3BhcmVudF9zbG90KCkgLSBnZXQgdGhlIHBhcmVudCBzbG90IG9mIEBlbm9kZS5cXG4gICogQGVub2RlOiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlLlxcbkBAIC04NzYsNiArODQyLDQyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYV9zZXRfbWV0YV9nYXAoc3RydWN0IG1hcGxlX25vZGUgKm1uLCBlbnVtIG1hcGxlX3R5cGUgbXQsXFxuIFxcdG1ldGEtXFx1MDAzZWdhcCA9IG9mZnNldDtcXG4gfVxcbiBcXG4rLypcXG4rICogbWFzX3NldF9wYXJlbnRfc2xvdHMoKSAtIEJ1bGsgb3BlcmF0aW9uIHRvIHNldCBtYW55IHNsb3QgcGFyZW50IHBvaW50ZXJzXFxuKyAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZVxcbisgKiBAcGFyZW50OiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlIHRoYXQgaXMgdGhlIHBhcmVudCBvZiBAZW5vZGUuXFxuKyAqIEBzbG90OiBUaGUgc2xvdCB0aGF0IG9mIHRoZSBAZW5vZGUuXFxuKyAqIEBzdGFydF9zbG90OiBUaGUgb2Zmc2V0IGludG8gQHNsb3RcXG4rICogQGNvdW50OiBUaGUgbnVtYmVyIG9mIHNsb3RzIHRvIHNldCAoZWc6IGV4Y2x1c2l2ZSlcXG4rICovXFxuK3N0YXRpYyBpbmxpbmVcXG4rdm9pZCBtYXNfc2V0X3BhcmVudF9zbG90cyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICpwYXJlbnQsXFxuK1xcdHZvaWQgX19yY3UgKipzbG90cywgdW5zaWduZWQgY2hhciBzdGFydF9zbG90LCB1bnNpZ25lZCBjaGFyIGNvdW50KVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdmFsO1xcbitcXHR1bnNpZ25lZCBsb25nIHNoaWZ0O1xcbitcXHR1bnNpZ25lZCBsb25nIHR5cGU7XFxuK1xcdGVudW0gbWFwbGVfdHlwZSBwX3R5cGUgPSBtdGVfbm9kZV90eXBlKHBhcmVudCk7XFxuK1xcdHVuc2lnbmVkIGNoYXIgaTtcXG4rXFxuK1xcdE1BU19CVUdfT04obWFzLCBwX3R5cGUgIT0gbWFwbGVfcmFuZ2VfNjQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0cF90eXBlICE9IG1hcGxlX2FyYW5nZV82NCk7XFxuK1xcbitcXHRzaGlmdCA9IE1BUExFX1BBUkVOVF9TTE9UX1NISUZUO1xcbitcXHR0eXBlID0gTUFQTEVfUEFSRU5UX1JBTkdFNjQ7XFxuK1xcbitcXHR2YWwgPSAodW5zaWduZWQgbG9uZylwYXJlbnQ7XFxuK1xcdHZhbCBcXHUwMDI2PSB+TUFQTEVfTk9ERV9NQVNLO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwdmFsID0gdmFsIHwgKChzdGFydF9zbG90ICsgaSkgXFx1MDAzY1xcdTAwM2Mgc2hpZnQpIHwgdHlwZTtcXG4rXFx0XFx0c3RydWN0IG1hcGxlX2Vub2RlICpjaGlsZDtcXG4rXFxuK1xcdFxcdGNoaWxkID0gbXRfc2xvdF9sb2NrZWQobWFzLVxcdTAwM2V0cmVlLCBzbG90cywgaSk7XFxuK1xcdFxcdG10ZV90b19ub2RlKGNoaWxkKS1cXHUwMDNlcGFyZW50ID0gbWFfcGFyZW50X3B0cihwdmFsKTtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKlxcbiAgKiBtYXRfYWRkKCkgLSBBZGQgYSBAZGVhZF9lbm9kZSB0byB0aGUgbWFfdG9waWFyeSBvZiBhIGxpc3Qgb2YgZGVhZCBub2Rlcy5cXG4gICogQG1hdDogdGhlIG1hX3RvcGlhcnksIGEgbGlua2VkIGxpc3Qgb2YgZGVhZCBub2Rlcy5cXG5AQCAtMTE1Myw2ICsxMTU1LDczIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfZnJlZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICp1c2VkKVxcbiBcXHRtYV9mcmVlX3JjdShtdGVfdG9fbm9kZSh1c2VkKSk7XFxuIH1cXG4gXFxuK1xcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4rc3RhdGljIHN0cnVjdCBsb2NrZGVwX21hcCAqbWFzX2xvY2tkZXBfbWFwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbit7XFxuK1xcdHN0cnVjdCBtYXBsZV90cmVlICptdCA9IG1hcy1cXHUwMDNldHJlZTtcXG4rXFxuK1xcdGlmIChtdF9leHRlcm5hbF9sb2NrKG10KSlcXG4rXFx0XFx0cmV0dXJuIG10LVxcdTAwM2VtYV9leHRlcm5hbF9sb2NrO1xcbitcXG4rXFx0cmV0dXJuIFxcdTAwMjYobXQtXFx1MDAzZW1hX2xvY2spLmRlcF9tYXA7XFxuK31cXG4rXFxuKyNlbmRpZlxcbitcXG4rc3RhdGljIHZvaWQgbWFzX2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19MT0NLREVQXFxuK1xcdHN0cnVjdCBsb2NrZGVwX21hcCAqbWFwO1xcbitcXHRpZiAoIW1hc19pc19hY3RpdmUobWFzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rI2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxcbitcXHRpZiAoIW10X2xvY2tlZChtYXMtXFx1MDAzZXRyZWUpKSB7XFxuK1xcdFxcdGlmIChtdF9pbl9yY3UobWFzLVxcdTAwM2V0cmVlKSlcXG4rXFx0XFx0XFx0V0FSTl9PTl9PTkNFKHBvbGxfc3RhdGVfc3luY2hyb25pemVfcmN1KG1hcy1cXHUwMDNlcmN1X2dwKSk7XFxuK1xcdH1cXG4rI2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xcbitcXG4rXFx0bWFwID0gbWFzX2xvY2tkZXBfbWFwKG1hcyk7XFxuK1xcdGlmIChtYXAgXFx1MDAyNlxcdTAwMjYgbG9ja19pc19oZWxkKG1hcCkpXFxuK1xcdFxcdFdBUk5fT05fT05DRShtYXMtXFx1MDAzZWxkX3NlcSAhPSBsb2NrX3NlcXVlbmNlKG1hcCkpO1xcbisjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi9cXG4rXFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1hc19pbml0X2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19MT0NLREVQXFxuK1xcdHN0cnVjdCBsb2NrZGVwX21hcCAqbWFwO1xcbisjaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXFxuK1xcdGlmICghbXRfbG9ja2VkKG1hcy1cXHUwMDNldHJlZSkpIHtcXG4rXFx0XFx0aWYgKG10X2luX3JjdShtYXMtXFx1MDAzZXRyZWUpKVxcbitcXHRcXHRcXHRtYXMtXFx1MDAzZXJjdV9ncCA9IGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuKyNlbmRpZiAvKiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QgKi9cXG4rXFxuK1xcdG1hcCA9IG1hc19sb2NrZGVwX21hcChtYXMpO1xcbitcXHRpZiAobWFwIFxcdTAwMjZcXHUwMDI2IGxvY2tfaXNfaGVsZChtYXApKVxcbitcXHRcXHRtYXMtXFx1MDAzZWxkX3NlcSA9IGxvY2tfc2VxdWVuY2UobWFzX2xvY2tkZXBfbWFwKG1hcykpO1xcbisjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi9cXG4rXFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbit7XFxuKyNpZmRlZiBDT05GSUdfTE9DS0RFUFxcbisjaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXFxuK1xcdGlmIChtYXNfaXNfc3RhcnQobWFzKSB8fCBtYXNfaXNfcGF1c2VkKG1hcykpIHtcXG4rXFx0XFx0bWFzX2luaXRfbG9ja19jaGVjayhtYXMpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rI2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xcbitcXHRtYXNfbG9ja19jaGVjayhtYXMpO1xcbisjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi9cXG4rfVxcbitcXG4gLypcXG4gICogbWFzX3N0YXJ0KCkgLSBTZXRzIHVwIG1hcGxlIHN0YXRlIGZvciBvcGVyYXRpb25zLlxcbiAgKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGUuXFxuQEAgLTExNzEsNiArMTI0MCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1hcGxlX2Vub2RlICptYXNfc3RhcnQoc3RydWN0IG1hX3N0YXRlICptYXMpXFxuIFxcdGlmIChsaWtlbHkobWFzX2lzX3N0YXJ0KG1hcykpKSB7XFxuIFxcdFxcdHN0cnVjdCBtYXBsZV9lbm9kZSAqcm9vdDtcXG4gXFxuK1xcdFxcdG1hc19pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0XFx0bWFzLVxcdTAwM2VtaW4gPSAwO1xcbiBcXHRcXHRtYXMtXFx1MDAzZW1heCA9IFVMT05HX01BWDtcXG4gXFxuQEAgLTE1MDEsMTQgKzE1NzEsMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19wYXJlbnRfZ2FwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBjaGFyIG9mZnNldCxcXG4gXFx0Z290byBhc2NlbmQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtYXNfdXBkYXRlX2dhcF9rbm93bihzdHJ1Y3QgbWFfc3RhdGUgKm1hcyxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBnYXApXFxuK3tcXG4rXFx0dW5zaWduZWQgY2hhciBwc2xvdDtcXG4rXFx0dW5zaWduZWQgbG9uZyBwX2dhcDtcXG4rXFxuK1xcdHBzbG90ID0gbXRlX3BhcmVudF9zbG90KG1hcy1cXHUwMDNlbm9kZSk7XFxuK1xcdHBfZ2FwID0gbWFfZ2FwcyhtdGVfcGFyZW50KG1hcy1cXHUwMDNlbm9kZSksXFxuK1xcdFxcdFxcdG1hc19wYXJlbnRfdHlwZShtYXMsIG1hcy1cXHUwMDNlbm9kZSkpW3BzbG90XTtcXG4rXFxuK1xcdGlmIChwX2dhcCAhPSBnYXApXFxuK1xcdFxcdG1hc19wYXJlbnRfZ2FwKG1hcywgcHNsb3QsIGdhcCk7XFxuK31cXG4rXFxuIC8qXFxuICAqIG1hc191cGRhdGVfZ2FwKCkgLSBVcGRhdGUgYSBub2RlcyBnYXBzIGFuZCBwcm9wYWdhdGUgdXAgaWYgbmVjZXNzYXJ5LlxcbiAgKiBAbWFzOiB0aGUgbWFwbGUgc3RhdGUuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3VwZGF0ZV9nYXAoc3RydWN0IG1hX3N0YXRlICptYXMpXFxuIHtcXG4tXFx0dW5zaWduZWQgY2hhciBwc2xvdDtcXG4tXFx0dW5zaWduZWQgbG9uZyBwX2dhcDtcXG4gXFx0dW5zaWduZWQgbG9uZyBtYXhfZ2FwO1xcbiBcXG4gXFx0aWYgKCFtdF9pc19hbGxvYyhtYXMtXFx1MDAzZXRyZWUpKVxcbkBAIC0xNTE4LDEzICsxNjAwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc191cGRhdGVfZ2FwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRtYXhfZ2FwID0gbWFzX21heF9nYXAobWFzKTtcXG4tXFxuLVxcdHBzbG90ID0gbXRlX3BhcmVudF9zbG90KG1hcy1cXHUwMDNlbm9kZSk7XFxuLVxcdHBfZ2FwID0gbWFfZ2FwcyhtdGVfcGFyZW50KG1hcy1cXHUwMDNlbm9kZSksXFxuLVxcdFxcdFxcdG1hc19wYXJlbnRfdHlwZShtYXMsIG1hcy1cXHUwMDNlbm9kZSkpW3BzbG90XTtcXG4tXFxuLVxcdGlmIChwX2dhcCAhPSBtYXhfZ2FwKVxcbi1cXHRcXHRtYXNfcGFyZW50X2dhcChtYXMsIHBzbG90LCBtYXhfZ2FwKTtcXG4rXFx0bWFzX3VwZGF0ZV9nYXBfa25vd24obWFzLCBtYXhfZ2FwKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMTU0MCwxNCArMTYxNiwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX2Fkb3B0X2NoaWxkcmVuKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLFxcbiBcXHRzdHJ1Y3QgbWFwbGVfbm9kZSAqbm9kZSA9IG10ZV90b19ub2RlKHBhcmVudCk7XFxuIFxcdHZvaWQgX19yY3UgKipzbG90cyA9IG1hX3Nsb3RzKG5vZGUsIHR5cGUpO1xcbiBcXHR1bnNpZ25lZCBsb25nICpwaXZvdHMgPSBtYV9waXZvdHMobm9kZSwgdHlwZSk7XFxuLVxcdHN0cnVjdCBtYXBsZV9lbm9kZSAqY2hpbGQ7XFxuLVxcdHVuc2lnbmVkIGNoYXIgb2Zmc2V0O1xcbitcXHR1bnNpZ25lZCBjaGFyIGVuZDtcXG4gXFxuLVxcdG9mZnNldCA9IG1hX2RhdGFfZW5kKG5vZGUsIHR5cGUsIHBpdm90cywgbWFzLVxcdTAwM2VtYXgpO1xcbi1cXHRkbyB7XFxuLVxcdFxcdGNoaWxkID0gbWFzX3Nsb3RfbG9ja2VkKG1hcywgc2xvdHMsIG9mZnNldCk7XFxuLVxcdFxcdG1hc19zZXRfcGFyZW50KG1hcywgY2hpbGQsIHBhcmVudCwgb2Zmc2V0KTtcXG4tXFx0fSB3aGlsZSAob2Zmc2V0LS0pO1xcbitcXHRlbmQgPSBtYV9kYXRhX2VuZChub2RlLCB0eXBlLCBwaXZvdHMsIG1hcy1cXHUwMDNlbWF4KTtcXG4rXFx0bWFzX3NldF9wYXJlbnRfc2xvdHMobWFzLCBwYXJlbnQsIHNsb3RzLCAwLCBlbmQgKyAxKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMTkyOSwxNSArMjAwMSwxMCBAQCB1bnNpZ25lZCBsb25nIG5vZGVfY29weShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX25vZGUgKnNyYyxcXG4gXFx0c19zbG90cyA9IG1hX3Nsb3RzKHNyYywgc19tdCkgKyBzdGFydDtcXG4gXFx0c19waXZvdHMgPSBtYV9waXZvdHMoc3JjLCBzX210KSArIHN0YXJ0O1xcbiBcXHRtZW1jcHkoZF9zbG90cywgc19zbG90cywgc2l6ZSAqIHNpemVvZih2b2lkIF9fcmN1ICopKTtcXG4tXFx0aWYgKCFtYV9pc19sZWFmKGRfbXQpIFxcdTAwMjZcXHUwMDI2IHNfbXQgPT0gbWFwbGVfY29weSkge1xcbi1cXHRcXHRzdHJ1Y3QgbWFwbGVfZW5vZGUgKmVkc3QgPSBtdF9ta19ub2RlKGRzdCwgZF9tdCk7XFxuLVxcbiBcXG4tXFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBzaXplOyBpKyspXFxuLVxcdFxcdFxcdG1hc19zZXRfcGFyZW50KG1hcyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIG10X3Nsb3RfbG9ja2VkKG1hcy1cXHUwMDNldHJlZSwgZF9zbG90cywgaSksXFxuLVxcdFxcdFxcdFxcdCAgICAgICBlZHN0LCBkX3N0YXJ0ICsgaSk7XFxuLVxcdH1cXG4rXFx0aWYgKCFtYV9pc19sZWFmKGRfbXQpIFxcdTAwMjZcXHUwMDI2IHNfbXQgPT0gbWFwbGVfY29weSlcXG4rXFx0XFx0bWFzX3NldF9wYXJlbnRfc2xvdHMobWFzLCBtdF9ta19ub2RlKGRzdCwgZF9tdCksXFxuK1xcdFxcdFxcdFxcdCAgICAgZF9zbG90cywgZF9zdGFydCwgc2l6ZSk7XFxuIFxcbiBcXHRkX2dhcHMgPSBtYV9nYXBzKGRzdCwgZF9tdCk7XFxuIFxcdGlmIChkX2dhcHMpIHtcXG5AQCAtMjA4MSw4ICsyMTQ4LDggQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193bWJfcmVwbGFjZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2NvcHkgKmNwKVxcbiBcXHRtYXMtXFx1MDAzZW5vZGUgPSBtdF9zbG90X2xvY2tlZChtYXMtXFx1MDAzZXRyZWUsIGNwLVxcdTAwM2VzbG90LCAwKTtcXG4gXFx0LyogSW5zZXJ0IHRoZSBuZXcgZGF0YSBpbiB0aGUgdHJlZSAqL1xcbiBcXHRtYXNfdG9waWFyeV9yZXBsYWNlKG1hcywgb2xkX2Vub2RlLCBjcC1cXHUwMDNlaGVpZ2h0KTtcXG4tXFx0aWYgKCFtdGVfaXNfbGVhZihtYXMtXFx1MDAzZW5vZGUpKVxcbi1cXHRcXHRtYXNfdXBkYXRlX2dhcChtYXMpO1xcbitcXHRpZiAobXRfaXNfYWxsb2MobWFzLVxcdTAwM2V0cmVlKSBcXHUwMDI2XFx1MDAyNiAhbXRlX2lzX3Jvb3QobWFzLVxcdTAwM2Vub2RlKSlcXG4rXFx0XFx0bWFzX3VwZGF0ZV9nYXBfa25vd24obWFzLCBjcC1cXHUwMDNlZ2FwWzBdKTtcXG4gXFxuIFxcdG10cmVlX3JhbmdlX3dhbGsobWFzKTtcXG4gfVxcbkBAIC0yOTI4LDEzICsyOTk1LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19leHRlbmRfc3Bhbm5pbmdfbnVsbChzdHJ1Y3QgbWFfd3Jfc3RhdGUgKmxfd3JfbWFzLFxcbiBcXHRcXHRpZiAocl9tYXMtXFx1MDAzZWxhc3QgXFx1MDAzYyByX3dyX21hcy1cXHUwMDNlcl9tYXgpXFxuIFxcdFxcdFxcdHJfbWFzLVxcdTAwM2VsYXN0ID0gcl93cl9tYXMtXFx1MDAzZXJfbWF4O1xcbiBcXHRcXHRyX21hcy1cXHUwMDNlb2Zmc2V0Kys7XFxuLVxcdH0gZWxzZSBpZiAoKHJfbWFzLVxcdTAwM2VsYXN0ID09IHJfd3JfbWFzLVxcdTAwM2VyX21heCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIChyX21hcy1cXHUwMDNlbGFzdCBcXHUwMDNjIHJfbWFzLVxcdTAwM2VtYXgpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhbWFzX3Nsb3RfbG9ja2VkKHJfbWFzLCByX3dyX21hcy1cXHUwMDNlc2xvdHMsIHJfbWFzLVxcdTAwM2VvZmZzZXQgKyAxKSkge1xcbi1cXHRcXHRyX21hcy1cXHUwMDNlbGFzdCA9IG1hc19zYWZlX3Bpdm90KHJfbWFzLCByX3dyX21hcy1cXHUwMDNlcGl2b3RzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHJfd3JfbWFzLVxcdTAwM2V0eXBlLCByX21hcy1cXHUwMDNlb2Zmc2V0ICsgMSk7XFxuLVxcdFxcdHJfbWFzLVxcdTAwM2VvZmZzZXQrKztcXG4tXFx0XFx0cl93cl9tYXMtXFx1MDAzZXJfbWF4ID0gcl9tYXMtXFx1MDAzZWxhc3Q7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMzEyNSw3ICszMTg1LDcgQEAgc3RhdGljIHZvaWQgbWFzX3dyX3NwYW5uaW5nX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXFxuIHtcXG4gXFx0dW5zaWduZWQgY2hhciBkc3Rfb2Zmc2V0LCBvZmZzZXRfZW5kO1xcbi1cXHR1bnNpZ25lZCBjaGFyIGNvcHlfc2l6ZSwgbm9kZV9waXZvdHM7XFxuK1xcdHVuc2lnbmVkIGNoYXIgY29weV9zaXplLCBub2RlX3Bpdm90cywgbm9kZV9zbG90cztcXG4gXFx0c3RydWN0IG1hcGxlX25vZGUgcmV1c2UsICpuZXdub2RlO1xcbiBcXHR1bnNpZ25lZCBsb25nICpkc3RfcGl2b3RzO1xcbiBcXHR2b2lkIF9fcmN1ICoqZHN0X3Nsb3RzO1xcbkBAIC0zMTM4LDYgKzMxOTgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXFxuIFxcdGluX3JjdSA9IG10X2luX3JjdShtYXMtXFx1MDAzZXRyZWUpO1xcbiBcXHRvZmZzZXRfZW5kID0gd3JfbWFzLVxcdTAwM2VvZmZzZXRfZW5kO1xcbiBcXHRub2RlX3Bpdm90cyA9IG10X3Bpdm90c1t3cl9tYXMtXFx1MDAzZXR5cGVdO1xcbitcXHRub2RlX3Nsb3RzID0gbXRfc2xvdHNbd3JfbWFzLVxcdTAwM2V0eXBlXTtcXG4gXFx0LyogQXNzdW1lIGxhc3QgYWRkcyBhbiBlbnRyeSAqL1xcbiBcXHRuZXdfZW5kID0gbWFzLVxcdTAwM2VlbmQgKyAxIC0gb2Zmc2V0X2VuZCArIG1hcy1cXHUwMDNlb2Zmc2V0O1xcbiBcXHRpZiAobWFzLVxcdTAwM2VsYXN0ID09IHdyX21hcy1cXHUwMDNlZW5kX3Bpdikge1xcbkBAIC0zMTQ5LDcgKzMyMTAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXFxuIFxcdGlmIChpbl9yY3UpIHtcXG4gXFx0XFx0bmV3bm9kZSA9IG1hc19wb3Bfbm9kZShtYXMpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRtZW1zZXQoXFx1MDAyNnJldXNlLCAwLCBzaXplb2Yoc3RydWN0IG1hcGxlX25vZGUpKTtcXG4gXFx0XFx0bmV3bm9kZSA9IFxcdTAwMjZyZXVzZTtcXG4gXFx0fVxcbiBcXG5AQCAtMzE5Myw3ICszMjUzLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcXG4gXFx0XFx0ZHN0X3Bpdm90c1tuZXdfZW5kXSA9IG1hcy1cXHUwMDNlbWF4O1xcbiBcXG4gZG9uZTpcXG4tXFx0bWFzX2xlYWZfc2V0X21ldGEobmV3bm9kZSwgbWFwbGVfbGVhZl82NCwgbmV3X2VuZCk7XFxuK1xcdGlmICghaW5fcmN1IFxcdTAwMjZcXHUwMDI2IG5ld19lbmQgKyAyIFxcdTAwM2Mgbm9kZV9zbG90cykge1xcbitcXHRcXHR1bnNpZ25lZCBjaGFyIGNsZWFyX2Zyb20gPSBuZXdfZW5kICsgMTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIE5vdGUgdGhhdCB0aGUgbGFzdCBzbG90IGlzIG5ldmVyIGNsZWFyZWQsIHNpbmNlIHRoZSBtZXRhZGF0YVxcbitcXHRcXHQgKiB3aWxsIGJlIHN0b3JlZCB0aGVyZSBvciBpdCBoYXMgYSB2YWx1ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG1lbXNldChkc3Rfc2xvdHMgKyBjbGVhcl9mcm9tLCAwLFxcbitcXHRcXHQgICAgICAgc2l6ZW9mKHZvaWQgX19yY3UgKikgKiAobm9kZV9zbG90cyAtIGNsZWFyX2Zyb20pKTtcXG4rXFx0XFx0aWYgKGNsZWFyX2Zyb20gXFx1MDAzYyBub2RlX3Bpdm90cylcXG4rXFx0XFx0XFx0bWVtc2V0KGRzdF9waXZvdHMgKyBjbGVhcl9mcm9tLCAwLFxcbitcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogKG5vZGVfcGl2b3RzIC0gY2xlYXJfZnJvbSkpO1xcbitcXHR9XFxuK1xcbitcXHRtYXNfbGVhZl9zZXRfbWV0YShuZXdub2RlLCB3cl9tYXMtXFx1MDAzZXR5cGUsIG5ld19lbmQpO1xcbiBcXHRpZiAoaW5fcmN1KSB7XFxuIFxcdFxcdHN0cnVjdCBtYXBsZV9lbm9kZSAqb2xkX2Vub2RlID0gbWFzLVxcdTAwM2Vub2RlO1xcbiBcXG5AQCAtMzIxOCw3ICszMjkyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9zbG90X3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxcbiBcXHR2b2lkIF9fcmN1ICoqc2xvdHMgPSB3cl9tYXMtXFx1MDAzZXNsb3RzO1xcbiBcXHRib29sIGdhcCA9IGZhbHNlO1xcbiBcXG4tXFx0Z2FwIHw9ICFtdF9zbG90X2xvY2tlZChtYXMtXFx1MDAzZXRyZWUsIHNsb3RzLCBvZmZzZXQpO1xcbitcXHRnYXAgfD0gIXdyX21hcy1cXHUwMDNlY29udGVudDtcXG4gXFx0Z2FwIHw9ICFtdF9zbG90X2xvY2tlZChtYXMtXFx1MDAzZXRyZWUsIHNsb3RzLCBvZmZzZXQgKyAxKTtcXG4gXFxuIFxcdGlmICh3cl9tYXMtXFx1MDAzZW9mZnNldF9lbmQgLSBvZmZzZXQgPT0gMSkge1xcbkBAIC0zNjYxLDYgKzM3MzUsOSBAQCBzdGF0aWMgaW5saW5lIGVudW0gc3RvcmVfdHlwZSBtYXNfd3Jfc3RvcmVfdHlwZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWFfc3RhdGUgKm1hcyA9IHdyX21hcy1cXHUwMDNlbWFzO1xcbiBcXHR1bnNpZ25lZCBjaGFyIG5ld19lbmQ7XFxuK1xcdGJvb2wgYXBwZW5kaW5nO1xcbitcXHRib29sIG9uZV9zbG90O1xcbitcXHRib29sIGluX3JjdTtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShtYXNfaXNfbm9uZShtYXMpIHx8IG1hc19pc19wdHIobWFzKSkpXFxuIFxcdFxcdHJldHVybiB3cl9zdG9yZV9yb290O1xcbkBAIC0zNjgwLDIxICszNzU3LDMwIEBAIHN0YXRpYyBpbmxpbmUgZW51bSBzdG9yZV90eXBlIG1hc193cl9zdG9yZV90eXBlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxcbiBcXHRcXHRyZXR1cm4gd3JfbmV3X3Jvb3Q7XFxuIFxcbiBcXHRuZXdfZW5kID0gbWFzX3dyX25ld19lbmQod3JfbWFzKTtcXG4rXFx0aW5fcmN1ID0gbXRfaW5fcmN1KG1hcy1cXHUwMDNldHJlZSk7XFxuK1xcdGFwcGVuZGluZyA9IG1hcy1cXHUwMDNlb2Zmc2V0ID09IG1hcy1cXHUwMDNlZW5kO1xcbitcXHRvbmVfc2xvdCA9IHdyX21hcy1cXHUwMDNlb2Zmc2V0X2VuZCAtIG1hcy1cXHUwMDNlb2Zmc2V0ID09IDE7XFxuK1xcbiBcXHQvKiBQb3RlbnRpYWwgc3Bhbm5pbmcgcmViYWxhbmNlIGNvbGxhcHNpbmcgYSBub2RlICovXFxuIFxcdGlmIChuZXdfZW5kIFxcdTAwM2MgbXRfbWluX3Nsb3RzW3dyX21hcy1cXHUwMDNldHlwZV0pIHtcXG4gXFx0XFx0aWYgKCFtdGVfaXNfcm9vdChtYXMtXFx1MDAzZW5vZGUpKVxcbiBcXHRcXHRcXHRyZXR1cm4gIHdyX3JlYmFsYW5jZTtcXG4rXFx0XFx0aWYgKCFpbl9yY3UpIHtcXG4rXFx0XFx0XFx0aWYgKGFwcGVuZGluZylcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHdyX2FwcGVuZDtcXG4rXFx0XFx0XFx0ZWxzZSBpZiAobWFzLVxcdTAwM2VlbmQgPT0gbmV3X2VuZCBcXHUwMDI2XFx1MDAyNiBvbmVfc2xvdClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHdyX3Nsb3Rfc3RvcmU7XFxuK1xcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIHdyX25vZGVfc3RvcmU7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChuZXdfZW5kIFxcdTAwM2U9IG10X3Nsb3RzW3dyX21hcy1cXHUwMDNldHlwZV0pXFxuIFxcdFxcdHJldHVybiB3cl9zcGxpdF9zdG9yZTtcXG4gXFxuLVxcdGlmICghbXRfaW5fcmN1KG1hcy1cXHUwMDNldHJlZSkgXFx1MDAyNlxcdTAwMjYgKG1hcy1cXHUwMDNlb2Zmc2V0ID09IG1hcy1cXHUwMDNlZW5kKSlcXG4rXFx0aWYgKCFpbl9yY3UgXFx1MDAyNlxcdTAwMjYgYXBwZW5kaW5nKVxcbiBcXHRcXHRyZXR1cm4gd3JfYXBwZW5kO1xcbiBcXG4tXFx0aWYgKChuZXdfZW5kID09IG1hcy1cXHUwMDNlZW5kKSBcXHUwMDI2XFx1MDAyNiAoIW10X2luX3JjdShtYXMtXFx1MDAzZXRyZWUpIHx8XFxuLVxcdFxcdCh3cl9tYXMtXFx1MDAzZW9mZnNldF9lbmQgLSBtYXMtXFx1MDAzZW9mZnNldCA9PSAxKSkpXFxuK1xcdGlmIChuZXdfZW5kID09IG1hcy1cXHUwMDNlZW5kIFxcdTAwMjZcXHUwMDI2ICghaW5fcmN1IHx8IG9uZV9zbG90KSlcXG4gXFx0XFx0cmV0dXJuIHdyX3Nsb3Rfc3RvcmU7XFxuIFxcbiBcXHRyZXR1cm4gd3Jfbm9kZV9zdG9yZTtcXG5AQCAtMzc5MywzNSArMzg3OSw0MCBAQCBpbnQgbWFzX2FsbG9jX2N5Y2xpYyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyAqc3RhcnRwLFxcbiBcXHRcXHR2b2lkICplbnRyeSwgdW5zaWduZWQgbG9uZyByYW5nZV9sbywgdW5zaWduZWQgbG9uZyByYW5nZV9oaSxcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyAqbmV4dCwgZ2ZwX3QgZ2ZwKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbWluID0gcmFuZ2VfbG87XFxuLVxcdGludCByZXQgPSAwO1xcbi1cXG4tXFx0cmFuZ2VfbG8gPSBtYXgobWluLCAqbmV4dCk7XFxuLVxcdHJldCA9IG1hc19lbXB0eV9hcmVhKG1hcywgcmFuZ2VfbG8sIHJhbmdlX2hpLCAxKTtcXG4tXFx0aWYgKChtYXMtXFx1MDAzZXRyZWUtXFx1MDAzZW1hX2ZsYWdzIFxcdTAwMjYgTVRfRkxBR1NfQUxMT0NfV1JBUFBFRCkgXFx1MDAyNlxcdTAwMjYgcmV0ID09IDApIHtcXG4tXFx0XFx0bWFzLVxcdTAwM2V0cmVlLVxcdTAwM2VtYV9mbGFncyBcXHUwMDI2PSB+TVRfRkxBR1NfQUxMT0NfV1JBUFBFRDtcXG4tXFx0XFx0cmV0ID0gMTtcXG4tXFx0fVxcbi1cXHRpZiAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiByYW5nZV9sbyBcXHUwMDNlIG1pbikge1xcbi1cXHRcXHRtYXNfcmVzZXQobWFzKTtcXG4tXFx0XFx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCBtaW4sIHJhbmdlX2hpLCAxKTtcXG4tXFx0XFx0aWYgKHJldCA9PSAwKVxcbi1cXHRcXHRcXHRyZXQgPSAxO1xcbi1cXHR9XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRpbnQgcmV0O1xcbitcXHR1bnNpZ25lZCBsb25nIG1pbjtcXG4gXFxuK1xcdG1pbiA9IHJhbmdlX2xvO1xcbiBcXHRkbyB7XFxuK1xcdFxcdHJhbmdlX2xvID0gbWF4KG1pbiwgKm5leHQpO1xcbitcXHRcXHRyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIHJhbmdlX2xvLCByYW5nZV9oaSwgMSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IHJhbmdlX2xvIFxcdTAwM2UgbWluKSB7XFxuK1xcdFxcdFxcdG1hc19yZXNldChtYXMpO1xcbitcXHRcXHRcXHRyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIG1pbiwgcmFuZ2VfaGksIDEpO1xcbitcXHRcXHRcXHRpZiAocmV0ID09IDApXFxuK1xcdFxcdFxcdFxcdHJldCA9IDE7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0XFx0bWFzX2luc2VydChtYXMsIGVudHJ5KTtcXG4gXFx0fSB3aGlsZSAobWFzX25vbWVtKG1hcywgZ2ZwKSk7XFxuLVxcdGlmIChtYXNfaXNfZXJyKG1hcykpXFxuLVxcdFxcdHJldHVybiB4YV9lcnIobWFzLVxcdTAwM2Vub2RlKTtcXG4gXFxuK1xcdGlmIChtYXNfaXNfZXJyKG1hcykpIHtcXG4rXFx0XFx0cmV0ID0geGFfZXJyKG1hcy1cXHUwMDNlbm9kZSk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoKG1hcy1cXHUwMDNldHJlZS1cXHUwMDNlbWFfZmxhZ3MgXFx1MDAyNiBNVF9GTEFHU19BTExPQ19XUkFQUEVEKSBcXHUwMDI2XFx1MDAyNiByZXQgPT0gMCkge1xcbitcXHRcXHRtYXMtXFx1MDAzZXRyZWUtXFx1MDAzZW1hX2ZsYWdzIFxcdTAwMjY9IH5NVF9GTEFHU19BTExPQ19XUkFQUEVEO1xcbitcXHRcXHRyZXQgPSAxO1xcbitcXHR9XFxuIFxcdCpzdGFydHAgPSBtYXMtXFx1MDAzZWluZGV4O1xcbiBcXHQqbmV4dCA9ICpzdGFydHAgKyAxO1xcbiBcXHRpZiAoKm5leHQgPT0gMClcXG4gXFx0XFx0bWFzLVxcdTAwM2V0cmVlLVxcdTAwM2VtYV9mbGFncyB8PSBNVF9GTEFHU19BTExPQ19XUkFQUEVEO1xcbiBcXG4rb3V0OlxcbiBcXHRtYXNfZGVzdHJveShtYXMpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTQzNjAsOCArNDQ1MSw4IEBAIHZvaWQgKm1hc193YWxrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbiB7XFxuIFxcdHZvaWQgKmVudHJ5O1xcbiBcXG4tXFx0aWYgKCFtYXNfaXNfYWN0aXZlKG1hcykgXFx1MDAyNlxcdTAwMjYgIW1hc19pc19zdGFydChtYXMpKVxcbi1cXHRcXHRtYXMtXFx1MDAzZXN0YXR1cyA9IG1hX3N0YXJ0O1xcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbitcXHRtYXNfbWFrZV93YWxrYWJsZShtYXMpO1xcbiByZXRyeTpcXG4gXFx0ZW50cnkgPSBtYXNfc3RhdGVfd2FsayhtYXMpO1xcbiBcXHRpZiAobWFzX2lzX3N0YXJ0KG1hcykpIHtcXG5AQCAtNDgzMSw2ICs0OTIyLDcgQEAgdm9pZCAqbWFzX3N0b3JlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSlcXG4ge1xcbiBcXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0dHJhY2VfbWFfd3JpdGUoVFBfRkNULCBtYXMsIDAsIGVudHJ5KTtcXG4gI2lmZGVmIENPTkZJR19ERUJVR19NQVBMRV9UUkVFXFxuIFxcdGlmIChNQVNfV0FSTl9PTihtYXMsIG1hcy1cXHUwMDNlaW5kZXggXFx1MDAzZSBtYXMtXFx1MDAzZWxhc3QpKVxcbkBAIC00ODg5LDYgKzQ5ODEsNyBAQCBpbnQgbWFzX3N0b3JlX2dmcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnksIGdmcF90IGdmcClcXG4gXFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIGVudHJ5KTtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiByZXRyeTpcXG4gXFx0bWFzX3dyX3ByZWFsbG9jYXRlKFxcdTAwMjZ3cl9tYXMsIGVudHJ5KTtcXG4gXFx0aWYgKHVubGlrZWx5KG1hc19ub21lbShtYXMsIGdmcCkpKSB7XFxuQEAgLTQ5MTksNiArNTAxMiw3IEBAIHZvaWQgbWFzX3N0b3JlX3ByZWFsbG9jKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSlcXG4ge1xcbiBcXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xcbiBcXG4rXFx0bWFzX2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0aWYgKG1hcy1cXHUwMDNlc3RvcmVfdHlwZSA9PSB3cl9zdG9yZV9yb290KSB7XFxuIFxcdFxcdG1hc193cl9wcmVhbGxvY19zZXR1cChcXHUwMDI2d3JfbWFzKTtcXG4gXFx0XFx0Z290byBzdG9yZTtcXG5AQCAtNDk1MSw2ICs1MDQ1LDcgQEAgaW50IG1hc19wcmVhbGxvY2F0ZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnksIGdmcF90IGdmcClcXG4ge1xcbiBcXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0bWFzX3dyX3ByZWFsbG9jX3NldHVwKFxcdTAwMjZ3cl9tYXMpO1xcbiBcXHRtYXMtXFx1MDAzZXN0b3JlX3R5cGUgPSBtYXNfd3Jfc3RvcmVfdHlwZShcXHUwMDI2d3JfbWFzKTtcXG4gXFx0bWFzX3ByZWFsbG9jX2NhbGMoXFx1MDAyNndyX21hcywgZW50cnkpO1xcbkBAIC00OTk3LDYgKzUwOTIsNyBAQCBzdGF0aWMgdm9pZCBtYXNfbWF5X2FjdGl2YXRlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbiBcXHRcXHRtYXMtXFx1MDAzZXN0YXR1cyA9IG1hX3N0YXJ0O1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRtYXMtXFx1MDAzZXN0YXR1cyA9IG1hX2FjdGl2ZTtcXG4rXFx0XFx0bWFzX2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC01MDc0LDYgKzUxNzAsNyBAQCB2b2lkICptYXNfbmV4dChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpXFxuIHtcXG4gXFx0dm9pZCAqZW50cnkgPSBOVUxMO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0aWYgKG1hc19uZXh0X3NldHVwKG1hcywgbWF4LCBcXHUwMDI2ZW50cnkpKVxcbiBcXHRcXHRyZXR1cm4gZW50cnk7XFxuIFxcbkBAIC01MDk3LDYgKzUxOTQsNyBAQCB2b2lkICptYXNfbmV4dF9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpXFxuIHtcXG4gXFx0dm9pZCAqZW50cnkgPSBOVUxMO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0aWYgKG1hc19uZXh0X3NldHVwKG1hcywgbWF4LCBcXHUwMDI2ZW50cnkpKVxcbiBcXHRcXHRyZXR1cm4gZW50cnk7XFxuIFxcbkBAIC01MjA1LDYgKzUzMDMsNyBAQCB2b2lkICptYXNfcHJldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pXFxuIHtcXG4gXFx0dm9pZCAqZW50cnkgPSBOVUxMO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0aWYgKG1hc19wcmV2X3NldHVwKG1hcywgbWluLCBcXHUwMDI2ZW50cnkpKVxcbiBcXHRcXHRyZXR1cm4gZW50cnk7XFxuIFxcbkBAIC01MjI4LDYgKzUzMjcsNyBAQCB2b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pXFxuIHtcXG4gXFx0dm9pZCAqZW50cnkgPSBOVUxMO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0aWYgKG1hc19wcmV2X3NldHVwKG1hcywgbWluLCBcXHUwMDI2ZW50cnkpKVxcbiBcXHRcXHRyZXR1cm4gZW50cnk7XFxuIFxcbkBAIC01Mjc0LDYgKzUzNzQsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChtdF9wcmV2KTtcXG4gICovXFxuIHZvaWQgbWFzX3BhdXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbiB7XFxuK1xcdG1hc19sb2NrX2NoZWNrKG1hcyk7XFxuIFxcdG1hcy1cXHUwMDNlc3RhdHVzID0gbWFfcGF1c2U7XFxuIFxcdG1hcy1cXHUwMDNlbm9kZSA9IE5VTEw7XFxuIH1cXG5AQCAtNTM4Miw2ICs1NDgzLDcgQEAgdm9pZCAqbWFzX2ZpbmQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxcbiB7XFxuIFxcdHZvaWQgKmVudHJ5ID0gTlVMTDtcXG4gXFxuK1xcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XFxuIFxcdGlmIChtYXNfZmluZF9zZXR1cChtYXMsIG1heCwgXFx1MDAyNmVudHJ5KSlcXG4gXFx0XFx0cmV0dXJuIGVudHJ5O1xcbiBcXG5AQCAtNTQwOSw2ICs1NTExLDcgQEAgdm9pZCAqbWFzX2ZpbmRfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxcbiB7XFxuIFxcdHZvaWQgKmVudHJ5ID0gTlVMTDtcXG4gXFxuK1xcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XFxuIFxcdGlmIChtYXNfZmluZF9zZXR1cChtYXMsIG1heCwgXFx1MDAyNmVudHJ5KSlcXG4gXFx0XFx0cmV0dXJuIGVudHJ5O1xcbiBcXG5AQCAtNTQyOCw3ICs1NTMxLDYgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWFzX2ZpbmRfcmFuZ2UpO1xcbiBzdGF0aWMgYm9vbCBtYXNfZmluZF9yZXZfc2V0dXAoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluLFxcbiBcXHRcXHR2b2lkICoqZW50cnkpXFxuIHtcXG4tXFxuIFxcdHN3aXRjaCAobWFzLVxcdTAwM2VzdGF0dXMpIHtcXG4gXFx0Y2FzZSBtYV9hY3RpdmU6XFxuIFxcdFxcdGdvdG8gYWN0aXZlO1xcbkBAIC01NTIxLDYgKzU2MjMsNyBAQCB2b2lkICptYXNfZmluZF9yZXYoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKVxcbiB7XFxuIFxcdHZvaWQgKmVudHJ5ID0gTlVMTDtcXG4gXFxuK1xcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XFxuIFxcdGlmIChtYXNfZmluZF9yZXZfc2V0dXAobWFzLCBtaW4sIFxcdTAwMjZlbnRyeSkpXFxuIFxcdFxcdHJldHVybiBlbnRyeTtcXG4gXFxuQEAgLTU1NDcsNiArNTY1MCw3IEBAIHZvaWQgKm1hc19maW5kX3JhbmdlX3JldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pXFxuIHtcXG4gXFx0dm9pZCAqZW50cnkgPSBOVUxMO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0aWYgKG1hc19maW5kX3Jldl9zZXR1cChtYXMsIG1pbiwgXFx1MDAyNmVudHJ5KSlcXG4gXFx0XFx0cmV0dXJuIGVudHJ5O1xcbiBcXG5AQCAtNTU2NCw2ICs1NjY4LDEwIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1hc19maW5kX3JhbmdlX3Jldik7XFxuICAqIFNlYXJjaGVzIGZvciBAbWFzLVxcdTAwM2VpbmRleCwgc2V0cyBAbWFzLVxcdTAwM2VpbmRleCBhbmQgQG1hcy1cXHUwMDNlbGFzdCB0byB0aGUgcmFuZ2UgYW5kXFxuICAqIGVyYXNlcyB0aGF0IHJhbmdlLlxcbiAgKlxcbisgKiBOb3RlIHRoYXQgZXJhc2UgcmVxdWlyZXMgYWxsb2NhdGlvbnMgYW5kIHdpbGwgdXNlIEdGUF9LRVJORUwgdG8gZG8gc28gaWZcXG4rICogbmVjZXNzYXJ5LiAgSWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBpbnRlcm5hbCBsb2NrIHdpbGwgYmUgZHJvcHBlZCB0b1xcbisgKiByZXRyeS5cXG4rICpcXG4gICogUmV0dXJuOiB0aGUgZW50cnkgdGhhdCB3YXMgZXJhc2VkIG9yICVOVUxMLCBAbWFzLVxcdTAwM2VpbmRleCBhbmQgQG1hcy1cXHUwMDNlbGFzdCBhcmUgdXBkYXRlZC5cXG4gICovXFxuIHZvaWQgKm1hc19lcmFzZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcXG5AQCAtNTU3MiwxMyArNTY4MCwxOSBAQCB2b2lkICptYXNfZXJhc2Uoc3RydWN0IG1hX3N0YXRlICptYXMpXFxuIFxcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBtYXMtXFx1MDAzZWluZGV4O1xcbiBcXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgTlVMTCk7XFxuIFxcbi1cXHRpZiAoIW1hc19pc19hY3RpdmUobWFzKSB8fCAhbWFzX2lzX3N0YXJ0KG1hcykpXFxuLVxcdFxcdG1hcy1cXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XFxuK1xcdC8qXFxuK1xcdCAqIEluIGxvdyBtZW1vcnkgc2l0dWF0aW9ucywgdGhlIGFsbG9jYXRpb24gaXMgcmV0cmllZCB3aXRoIHRoZSBnZnAgZmxhZ1xcbitcXHQgKiBHRlBfS0VSTkVMLiAgVGhlIGludGVybmFsIHNwaW5sb2NrIGlzIGRyb3BwZWQgaW4gbWFzX25vbWVtKCksIGhvd2V2ZXJcXG4rXFx0ICogdGhlIGV4dGVybmFsIGxvY2sgaXMgbm90IGRyb3BwZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAobXRfZXh0ZXJuYWxfbG9jayhtYXMtXFx1MDAzZXRyZWUpKVxcbitcXHRcXHRtaWdodF9hbGxvYyhHRlBfS0VSTkVMKTtcXG4gXFxuK1xcdG1hc19tYWtlX3dhbGthYmxlKG1hcyk7XFxuIHdyaXRlX3JldHJ5OlxcbiBcXHRlbnRyeSA9IG1hc19zdGF0ZV93YWxrKG1hcyk7XFxuIFxcdGlmICghZW50cnkpXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdC8qIE11c3QgcmVzZXQgdG8gZW5zdXJlIHNwYW5uaW5nIHdyaXRlcyBvZiBsYXN0IHNsb3QgYXJlIGRldGVjdGVkICovXFxuIFxcdG1hc19yZXNldChtYXMpO1xcbkBAIC01NTg5LDggKzU3MDMsMTAgQEAgdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbiBcXHRcXHRnb3RvIHdyaXRlX3JldHJ5O1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAobWFzX2lzX2VycihtYXMpKVxcbitcXHRpZiAobWFzX2lzX2VycihtYXMpKSB7XFxuK1xcdFxcdGVudHJ5ID0gTlVMTDtcXG4gXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4gXFxuIFxcdG1hc193cl9zdG9yZV9lbnRyeShcXHUwMDI2d3JfbWFzKTtcXG4gb3V0OlxcbkBAIC01NjAxLDEwICs1NzE3LDExIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1hc19lcmFzZSk7XFxuIFxcbiAvKipcXG4gICogbWFzX25vbWVtKCkgLSBDaGVjayBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgYWxsb2NhdGluZyBhbmQgZG8gdGhlIGFsbG9jYXRpb25cXG4tICogaWYgbmVjZXNzYXJ5IElmIHRoZXJlIGFyZSBhbGxvY2F0aW9ucywgdGhlbiBmcmVlIHRoZW0uXFxuKyAqIGlmIG5lY2Vzc2FyeS5cXG4rICpcXG4gICogQG1hczogVGhlIG1hcGxlIHN0YXRlXFxuICAqIEBnZnA6IFRoZSBHRlBfRkxBR1MgdG8gdXNlIGZvciBhbGxvY2F0aW9uc1xcbi0gKiBSZXR1cm46IHRydWUgb24gYWxsb2NhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLlxcbisgKiBSZXR1cm46IEZhbHNlIG9uIG5vIG1lbW9yeS4gIFRydWUgb3RoZXJ3aXNlIChwYXJ0aWFsIHN1Y2Nlc3MgYXMgd2VsbClcXG4gICovXFxuIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApXFxuIFxcdF9fbXVzdF9ob2xkKG1hcy1cXHUwMDNldHJlZS1cXHUwMDNlbWFfbG9jaylcXG5AQCAtNTYxMiw2ICs1NzI5LDEwIEBAIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApXFxuIFxcdGlmIChsaWtlbHkobWFzLVxcdTAwM2Vub2RlICE9IE1BX0VSUk9SKC1FTk9NRU0pKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0LyogQWxsb2NhdGlvbnMgY2FuIGZhaWwsIGRvbid0IGRvIHRoaXMuICovXFxuK1xcdFdBUk5fT05fT05DRSghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIG10X2V4dGVybmFsX2xvY2sobWFzLVxcdTAwM2V0cmVlKSk7XFxuK1xcbiBcXHRpZiAoZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwKSBcXHUwMDI2XFx1MDAyNiAhbXRfZXh0ZXJuYWxfbG9jayhtYXMtXFx1MDAzZXRyZWUpKSB7XFxuIFxcdFxcdG10cmVlX3VubG9jayhtYXMtXFx1MDAzZXRyZWUpO1xcbiBcXHRcXHRtYXNfYWxsb2Nfbm9kZXMobWFzLCBnZnApO1xcbkBAIC01NjIwLDEwICs1NzQxLDE3IEBAIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApXFxuIFxcdFxcdG1hc19hbGxvY19ub2RlcyhtYXMsIGdmcCk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghbWFzLVxcdTAwM2VzaGVhZiBcXHUwMDI2XFx1MDAyNiAhbWFzLVxcdTAwM2VhbGxvYylcXG4rXFx0LypcXG4rXFx0ICogUmV0dXJuIGZhbHNlIG9uIHplcm8gZm9yd2FyZCBwcm9ncmVzcy4gIFBhcnRpYWwgYWxsb2NhdGlvbnMgYXJlIGtlcHRcXG4rXFx0ICogc28gdGhlIHJldHJ5IHBhdGggd2lsbCBhdHRlbXB0IHRvIGdldCB0aGUgcmVzdC4gIFRoZSBmYWlsdXJlIHNob3VsZFxcbitcXHQgKiBub3QgaGFwcGVuIGFzIHdlIHRyeSBvdXIgYmVzdCB0byByZWNsYWltLiAgVGhlIHVzZXIgd291bGQgbmVlZCBhblxcbitcXHQgKiBleHRlcm5hbCBsb2NrIHdpdGggYSBub24tYmxvY2tpbmcgZ2ZwIGluIGEgbG93IG1lbW9yeSBzaXR1YXRpb24gLVxcbitcXHQgKiB3aGljaCB3b3VsZCBoYXZlIHRyaWdnZXJlZCB0aGUgZmlyc3Qgd2FybmluZyBpbiB0aGlzIGZ1bmN0aW9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKFdBUk5fT05fT05DRSghbWFzLVxcdTAwM2VzaGVhZiBcXHUwMDI2XFx1MDAyNiAhbWFzLVxcdTAwM2VhbGxvYykpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdG1hcy1cXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XFxuK1xcdG1hc19yZXNldChtYXMpO1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG5AQCAtNTkxMyw2ICs2MDQxLDEwIEBAIEVYUE9SVF9TWU1CT0wobXRyZWVfYWxsb2NfcnJhbmdlKTtcXG4gICogRXJhc2luZyBpcyB0aGUgc2FtZSBhcyBhIHdhbGsgdG8gYW4gZW50cnkgdGhlbiBhIHN0b3JlIG9mIGEgTlVMTCB0byB0aGF0XFxuICAqIEVOVElSRSByYW5nZS4gIEluIGZhY3QsIGl0IGlzIGltcGxlbWVudGVkIGFzIHN1Y2ggdXNpbmcgdGhlIGFkdmFuY2VkIEFQSS5cXG4gICpcXG4rICogTm90ZSB0aGF0IGVyYXNlIHJlcXVpcmVzIGFsbG9jYXRpb25zIGFuZCB3aWxsIHVzZSBHRlBfS0VSTkVMIHRvIGRvIHNvIGlmXFxuKyAqIG5lY2Vzc2FyeS4gIElmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgaW50ZXJuYWwgbG9jayB3aWxsIGJlIGRyb3BwZWQgdG9cXG4rICogcmV0cnkuXFxuKyAqXFxuICAqIFJldHVybjogVGhlIGVudHJ5IHN0b3JlZCBhdCB0aGUgQGluZGV4IG9yICVOVUxMXFxuICAqL1xcbiB2b2lkICptdHJlZV9lcmFzZShzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQsIHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuQEAgLTU5MjIsNiArNjA1NCw3IEBAIHZvaWQgKm10cmVlX2VyYXNlKHN0cnVjdCBtYXBsZV90cmVlICptdCwgdW5zaWduZWQgbG9uZyBpbmRleClcXG4gXFx0TUFfU1RBVEUobWFzLCBtdCwgaW5kZXgsIGluZGV4KTtcXG4gXFx0dHJhY2VfbWFfb3AoVFBfRkNULCBcXHUwMDI2bWFzKTtcXG4gXFxuK1xcdG1pZ2h0X2FsbG9jKEdGUF9LRVJORUwpO1xcbiBcXHRtdHJlZV9sb2NrKG10KTtcXG4gXFx0ZW50cnkgPSBtYXNfZXJhc2UoXFx1MDAyNm1hcyk7XFxuIFxcdG10cmVlX3VubG9jayhtdCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jIGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNcXG5pbmRleCAwNjA3OTEzYTMwMjJkNS4uZDk2N2U3NmEzYzA2NTAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY1xcbkBAIC0zNTIzNCw3ICszNTIzNCw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19wcmVhbGxvYyhzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQpXFxuIFxcdG10X3NldF9ub25fa2VybmVsKDEpO1xcbiBcXHQvKiBTcGFubmluZyBzdG9yZSAqL1xcbiBcXHRtYXNfc2V0X3JhbmdlKFxcdTAwMjZtYXMsIDEsIDEwMCk7XFxuLVxcdE1UX0JVR19PTihtdCwgbWFzX3ByZWFsbG9jYXRlKFxcdTAwMjZtYXMsIHB0ciwgR0ZQX0tFUk5FTCBcXHUwMDI2IEdGUF9OT1dBSVQpID09IDApO1xcbitcXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcXHUwMDI2bWFzLCBwdHIsIEdGUF9OT1dBSVQpID09IDApO1xcbiBcXHRhbGxvY2F0ZWQgPSBtYXNfYWxsb2NhdGVkKFxcdTAwMjZtYXMpO1xcbiBcXHRoZWlnaHQgPSBtYXNfbXRfaGVpZ2h0KFxcdTAwMjZtYXMpO1xcbiBcXHRNVF9CVUdfT04obXQsIGFsbG9jYXRlZCAhPSAwKTtcXG5AQCAtMzUyNTcsNyArMzUyNTcsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfcHJlYWxsb2Moc3RydWN0IG1hcGxlX3RyZWUgKm10KVxcbiBcXHRNVF9CVUdfT04obXQsIG1hc19hbGxvY2F0ZWQoXFx1MDAyNm1hcykgIT0gMCk7XFxuIFxcdG1hc19zZXRfcmFuZ2UoXFx1MDAyNm1hcywgMCwgMjAwKTtcXG4gXFx0bXRfc2V0X25vbl9rZXJuZWwoMSk7XFxuLVxcdE1UX0JVR19PTihtdCwgbWFzX3ByZWFsbG9jYXRlKFxcdTAwMjZtYXMsIHB0ciwgR0ZQX0tFUk5FTCBcXHUwMDI2IEdGUF9OT1dBSVQpID09IDApO1xcbitcXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcXHUwMDI2bWFzLCBwdHIsIEdGUF9OT1dBSVQpID09IDApO1xcbiBcXHRhbGxvY2F0ZWQgPSBtYXNfYWxsb2NhdGVkKFxcdTAwMjZtYXMpO1xcbiBcXHRoZWlnaHQgPSBtYXNfbXRfaGVpZ2h0KFxcdTAwMjZtYXMpO1xcbiBcXHRNVF9CVUdfT04obXQsIGFsbG9jYXRlZCAhPSAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6MjQ6NTUuMzg5MzcyMjg3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA5NDI1MzU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19NQVBMRV9UUkVFXCIsXG4gICAgXCJMT0NLREVQXCIsXG4gICAgXCJQUk9WRV9MT0NLSU5HXCIsXG4gICAgXCJSQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hc19lcmFzZVwiLFxuICAgIFwibWFzX25vbWVtXCIsXG4gICAgXCJtYXNfYWxsb2NfY3ljbGljXCIsXG4gICAgXCJtYXNfd3Jfbm9kZV9zdG9yZVwiLFxuICAgIFwibWFzX3dyX3N0b3JlX3R5cGVcIixcbiAgICBcIm1hc19zdG9yZV9nZnBcIixcbiAgICBcIm1hc19zdG9yZV9wcmVhbGxvY1wiLFxuICAgIFwibWFzX3ByZWFsbG9jYXRlXCIsXG4gICAgXCJtdHJlZV9lcmFzZVwiLFxuICAgIFwibG9ja19zZXF1ZW5jZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWFwbGUgdHJlZSBsb2dpYywgaW5jbHVkaW5nIGVyYXNlLCBhbGxvY2F0aW9uLCBhbmQgc3RvcmUgb3BlcmF0aW9ucywgYW5kIGludHJvZHVjZXMgbG9jayBzZXF1ZW5jZSB0cmFja2luZyBpbiBsb2NrZGVwIHRvIHZlcmlmeSBtYXBsZSB0cmVlIGxvY2tpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIGFyZSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzZhZTRjYjRiOThlZjZkNTY5NDdkNWMzMjQ3MGU5Y2M1ODhlZDFjZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMDI6MjQ6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdFxuaW5kZXggY2NkZDE2MTVjZjk3NGYuLjFlYWUyNGE5YzE4YjRhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdFxuQEAgLTE3LDcgKzE3LDggQEAgc3VwcG9ydHMgaXRlcmF0aW5nIG92ZXIgYSByYW5nZSBvZiBlbnRyaWVzIGFuZCBnb2luZyB0byB0aGUgcHJldmlvdXMgb3IgbmV4dFxuIGVudHJ5IGluIGEgY2FjaGUtZWZmaWNpZW50IG1hbm5lci4gIFRoZSB0cmVlIGNhbiBhbHNvIGJlIHB1dCBpbnRvIGFuIFJDVS1zYWZlXG4gbW9kZSBvZiBvcGVyYXRpb24gd2hpY2ggYWxsb3dzIHJlYWRpbmcgYW5kIHdyaXRpbmcgY29uY3VycmVudGx5LiAgV3JpdGVycyBtdXN0XG4gc3luY2hyb25pemUgb24gYSBsb2NrLCB3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQgc3BpbmxvY2ssIG9yIHRoZSB1c2VyIGNhbiBzZXRcbi10aGUgbG9jayB0byBhbiBleHRlcm5hbCBsb2NrIG9mIGEgZGlmZmVyZW50IHR5cGUuXG4rdGhlIGxvY2sgdG8gYW4gZXh0ZXJuYWwgbG9jayBvZiBhIGRpZmZlcmVudCB0eXBlLiAgTm90ZSB0aGF0IGV4dGVybmFsIGxvY2tzIG1heVxuK2ludGVyZmVyZSB3aXRoIGFsbG9jYXRpb25zIGluIGEgbG93IG1lbW9yeSBzaXR1YXRpb24uXG4gXG4gVGhlIE1hcGxlIFRyZWUgbWFpbnRhaW5zIGEgc21hbGwgbWVtb3J5IGZvb3RwcmludCBhbmQgd2FzIGRlc2lnbmVkIHRvIHVzZVxuIG1vZGVybiBwcm9jZXNzb3IgY2FjaGUgZWZmaWNpZW50bHkuICBUaGUgbWFqb3JpdHkgb2YgdGhlIHVzZXJzIHdpbGwgYmUgYWJsZSB0b1xuQEAgLTQyLDYgKzQzLDE1IEBAIHN1Y2Nlc3NmdWwgc3RvcmUgb3BlcmF0aW9uIHdpdGhpbiBhIGdpdmVuXG4gY29kZSBzZWdtZW50IHdoZW4gYWxsb2NhdGluZyBjYW5ub3QgYmUgZG9uZS4gIEFsbG9jYXRpb25zIG9mIG5vZGVzIGFyZVxuIHJlbGF0aXZlbHkgc21hbGwgYXQgYXJvdW5kIDI1NiBieXRlcy5cbiBcbitTaW5jZSB0aGUgbWFwbGUgdHJlZSB1c2VzIGludGVybmFsIG5vZGVzIHRoYXQgYXJlIGFsbG9jYXRlZCBhbmQgaGFzIHJ1bGVzIG9uXG4rZGF0YSBkZW5zaXR5LCBlcmFzaW5nIGFuIGVudHJ5IG1heSBjYXVzZSBhbGxvY2F0aW9ucyB0byBvY2N1ci4gIFRoYXQgaXMsXG4rZXJhc2luZyBhbiBlbnRyeSBtYXkgY29uc3VtZSBtZW1vcnkuICBVc2VycyBtdXN0IHRha2UgY2FyZSB0byBlbnN1cmUgdGhhdCB0aGV5XG4rZG8gbm90IHZpb2xhdGUgdGhlIGxhcmdlciBzeXN0ZW0gY29uc3RyYWludHMgb24gd2hlbiBhbmQgaG93IG1lbW9yeSBpc1xuK2FsbG9jYXRlZC4gIE1vc3Qgc2l0dWF0aW9ucyBhcmUgZmluZSB0byBhbGxvY2F0ZSwgYnV0IHRoZSBwcmUtYWxsb2NhdGlvblxuK3N1cHBvcnQgaXMgcHJvdmlkZWQgYXMgYSBtZWNoYW5pc20gdG8gYXZvaWQgdHJpY2tpZXIgc2l0dWF0aW9ucy4gIFRoZXJlIGlzIGFsc29cbit0aGUgcG9zc2liaWxpdHkgb2YgdXNpbmcgc3BlY2lhbCBlbnRyaWVzIGFuZCBjbGVhbiB1cCB0aGUgdHJlZSBsYXRlciwgaW5cbitleHRyZW1lIGNpcmN1bXN0YW5jZXMuXG4rXG4gLi4gX21hcGxlLXRyZWUtbm9ybWFsLWFwaTpcbiBcbiBOb3JtYWwgQVBJXG5AQCAtNjMsNyArNzMsOCBAQCBzdWNjZXNzIG9yIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlLiAgbXRyZWVfc3RvcmVfcmFuZ2UoKSB3b3JrcyBpbiB0aGUgc2FtZSB3YXlcbiBidXQgdGFrZXMgYSByYW5nZS4gIG10cmVlX2xvYWQoKSBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBlbnRyeSBzdG9yZWQgYXQgYVxuIGdpdmVuIGluZGV4LiAgWW91IGNhbiB1c2UgbXRyZWVfZXJhc2UoKSB0byBlcmFzZSBhbiBlbnRpcmUgcmFuZ2UgYnkgb25seVxuIGtub3dpbmcgb25lIHZhbHVlIHdpdGhpbiB0aGF0IHJhbmdlLCBvciBtdHJlZV9zdG9yZSgpIGNhbGwgd2l0aCBhbiBlbnRyeSBvZlxuLU5VTEwgbWF5IGJlIHVzZWQgdG8gcGFydGlhbGx5IGVyYXNlIGEgcmFuZ2Ugb3IgbWFueSByYW5nZXMgYXQgb25jZS5cbitOVUxMIG1heSBiZSB1c2VkIHRvIHBhcnRpYWxseSBlcmFzZSBhIHJhbmdlIG9yIG1hbnkgcmFuZ2VzIGF0IG9uY2UuICBOb3RlIHRoYXRcbittdHJlZV9lcmFzZSgpIG1heSB1c2UgR0ZQX0tFUk5FTCBvbiBhbGxvY2F0aW9ucy5cbiBcbiBJZiB5b3Ugd2FudCB0byBvbmx5IHN0b3JlIGEgbmV3IGVudHJ5IHRvIGEgcmFuZ2UgKG9yIGluZGV4KSBpZiB0aGF0IHJhbmdlIGlzXG4gY3VycmVudGx5IGBgTlVMTGBgLCB5b3UgY2FuIHVzZSBtdHJlZV9pbnNlcnRfcmFuZ2UoKSBvciBtdHJlZV9pbnNlcnQoKSB3aGljaFxuQEAgLTE2Myw3ICsxNzQsOSBAQCBZb3UgY2FuIHVzZSBtYXNfZXJhc2UoKSB0byBlcmFzZSBhbiBlbnRpcmUgcmFuZ2UgYnkgc2V0dGluZyBpbmRleCBhbmRcbiBsYXN0IG9mIHRoZSBtYXBsZSBzdGF0ZSB0byB0aGUgZGVzaXJlZCByYW5nZSB0byBlcmFzZS4gIFRoaXMgd2lsbCBlcmFzZVxuIHRoZSBmaXJzdCByYW5nZSB0aGF0IGlzIGZvdW5kIGluIHRoYXQgcmFuZ2UsIHNldCB0aGUgbWFwbGUgc3RhdGUgaW5kZXhcbiBhbmQgbGFzdCBhcyB0aGUgcmFuZ2UgdGhhdCB3YXMgZXJhc2VkIGFuZCByZXR1cm4gdGhlIGVudHJ5IHRoYXQgZXhpc3RlZFxuLWF0IHRoYXQgbG9jYXRpb24uXG4rYXQgdGhhdCBsb2NhdGlvbi4gIE5vdGUgdGhhdCBtYXNfZXJhc2UoKSBtYXkgYWxsb2NhdGUgd2l0aCB0aGUgR0ZQX0tFUk5FTCBmbGFnLlxuK0lmIHRoaXMgaXMgbm90IG9rYXksIGNvbnNpZGVyIHVzaW5nIG1hc19zdG9yZV9nZnAoKSBhbmQgcGFzcyBpdCBhIGBgTlVMTGBgLFxuK2FmdGVyIHNldHRpbmcgdXAgdGhlIGNvcnJlY3QgcmFuZ2UgYnkgd2Fsa2luZyB0byB0aGUgZW50cnkuXG4gXG4gWW91IGNhbiB3YWxrIGVhY2ggZW50cnkgd2l0aGluIGEgcmFuZ2UgYnkgdXNpbmcgbWFzX2Zvcl9lYWNoKCkuICBJZiB5b3Ugd2FudFxuIHRvIHdhbGsgZWFjaCBlbGVtZW50IG9mIHRoZSB0cmVlIHRoZW4gYGAwYGAgYW5kIGBgVUxPTkdfTUFYYGAgbWF5IGJlIHVzZWQgYXNcbkBAIC0yMTEsNyArMjI0LDcgQEAgQWR2YW5jZWQgTG9ja2luZ1xuIFxuIFRoZSBtYXBsZSB0cmVlIHVzZXMgYSBzcGlubG9jayBieSBkZWZhdWx0LCBidXQgZXh0ZXJuYWwgbG9ja3MgY2FuIGJlIHVzZWQgZm9yXG4gdHJlZSB1cGRhdGVzIGFzIHdlbGwuICBUbyB1c2UgYW4gZXh0ZXJuYWwgbG9jaywgdGhlIHRyZWUgbXVzdCBiZSBpbml0aWFsaXplZFxuLXdpdGggdGhlIGBgTVRfRkxBR1NfTE9DS19FWFRFUk4gZmxhZ2BgLCB0aGlzIGlzIHVzdWFsbHkgZG9uZSB3aXRoIHRoZVxuK3dpdGggdGhlIGBgTVRfRkxBR1NfTE9DS19FWFRFUk5gYCBmbGFnLCB0aGlzIGlzIHVzdWFsbHkgZG9uZSB3aXRoIHRoZVxuIE1UUkVFX0lOSVRfRVhUKCkgI2RlZmluZSwgd2hpY2ggdGFrZXMgYW4gZXh0ZXJuYWwgbG9jayBhcyBhbiBhcmd1bWVudC5cbiBcbiBGdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oXG5pbmRleCA2MjE1NjYzNDU0MDZkZC4uYTY0NTFlY2JiZTlhMDUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcbkBAIC0yNzMsNiArMjczLDkgQEAgZXh0ZXJuIHN0cnVjdCBwaW5fY29va2llIGxvY2tfcGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKTtcbiBleHRlcm4gdm9pZCBsb2NrX3JlcGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSk7XG4gZXh0ZXJuIHZvaWQgbG9ja191bnBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUpO1xuIFxuK2V4dGVybiB1MzIgbG9ja19zZXF1ZW5jZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spO1xuKyNkZWZpbmUgbG9ja2RlcF9zZXF1ZW5jZShsb2NrKVx0bG9ja19zZXF1ZW5jZShcdTAwMjYobG9jayktXHUwMDNlZGVwX21hcClcbitcbiAjZGVmaW5lIGxvY2tkZXBfZGVwdGgodHNrKVx0KGRlYnVnX2xvY2tzID8gKHRzayktXHUwMDNlbG9ja2RlcF9kZXB0aCA6IDApXG4gXG4gI2RlZmluZSBsb2NrZGVwX2Fzc2VydChjb25kKVx0XHRcXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmhcbmluZGV4IGVhZTExNWEyNjQ4ODU2Li41NWM0YjE1MmZlZGY3YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaFxuQEAgLTI1Myw3ICsyNTMsOCBAQCBzdHJ1Y3QgaGVsZF9sb2NrIHtcbiBcdHVuc2lnbmVkIGludCBoYXJkaXJxc19vZmY6MTtcbiBcdHVuc2lnbmVkIGludCBzeW5jOjE7XG4gXHR1bnNpZ25lZCBpbnQgcmVmZXJlbmNlczoxMTtcdFx0XHRcdFx0LyogMzIgYml0cyAqL1xuLVx0dW5zaWduZWQgaW50IHBpbl9jb3VudDtcbitcdHVuc2lnbmVkIGludCBwaW5fY291bnQ6MjQ7XG4rXHR1bnNpZ25lZCBpbnQgc2VxX2NvdW50Ojg7XG4gfTtcbiBcbiAjZWxzZSAvKiAhQ09ORklHX0xPQ0tERVAgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaCBiL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oXG5pbmRleCA0YTU2MzE5MDZhZmZiNS4uNWUwYmQyODU3ZDk0MWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcbkBAIC0yOSwxMyArMjksMTEgQEBcbiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFNcdDMxXHQvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC1cdTAwM2VwYXJlbnQgKi9cbiAjZGVmaW5lIE1BUExFX1JBTkdFNjRfU0xPVFNcdDE2XHQvKiAyNTYgYnl0ZXMgKi9cbiAjZGVmaW5lIE1BUExFX0FSQU5HRTY0X1NMT1RTXHQxMFx0LyogMjQwIGJ5dGVzICovXG4tI2RlZmluZSBNQVBMRV9BTExPQ19TTE9UU1x0KE1BUExFX05PREVfU0xPVFMgLSAxKVxuICNlbHNlXG4gLyogMzJiaXQgc2l6ZXMgKi9cbiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFNcdDYzXHQvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC1cdTAwM2VwYXJlbnQgKi9cbiAjZGVmaW5lIE1BUExFX1JBTkdFNjRfU0xPVFNcdDMyXHQvKiAyNTYgYnl0ZXMgKi9cbiAjZGVmaW5lIE1BUExFX0FSQU5HRTY0X1NMT1RTXHQyMVx0LyogMjQwIGJ5dGVzICovXG4tI2RlZmluZSBNQVBMRV9BTExPQ19TTE9UU1x0KE1BUExFX05PREVfU0xPVFMgLSAyKVxuICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR182NEJJVCkgfHwgZGVmaW5lZChCVUlMRF9WRFNPMzJfNjQpICovXG4gXG4gI2RlZmluZSBNQVBMRV9OT0RFX01BU0tcdFx0MjU1VUxcbkBAIC00ODUsNiArNDgzLDEyIEBAIHN0cnVjdCBtYV9zdGF0ZSB7XG4gXHR1bnNpZ25lZCBjaGFyIG1hc19mbGFncztcbiBcdHVuc2lnbmVkIGNoYXIgZW5kO1x0XHQvKiBUaGUgZW5kIG9mIHRoZSBub2RlICovXG4gXHRlbnVtIHN0b3JlX3R5cGUgc3RvcmVfdHlwZTtcdC8qIFRoZSB0eXBlIG9mIHN0b3JlIG5lZWRlZCBmb3IgdGhpcyBvcGVyYXRpb24gKi9cbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcbitcdHUzMiBsZF9zZXE7XG4rI2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxuK1x0dW5zaWduZWQgbG9uZyByY3VfZ3A7XG4rI2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xuKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xuIH07XG4gXG4gc3RydWN0IG1hX3dyX3N0YXRlIHtcbkBAIC01NzIsNyArNTc2LDcgQEAgdm9pZCBtYXBsZV90cmVlX2luaXQodm9pZCk7XG4gdm9pZCBtYXNfZGVzdHJveShzdHJ1Y3QgbWFfc3RhdGUgKm1hcyk7XG4gXG4gdm9pZCAqbWFzX3ByZXYoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKTtcbi12b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xuK3ZvaWQgKm1hc19wcmV2X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbik7XG4gdm9pZCAqbWFzX25leHQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KTtcbiB2b2lkICptYXNfbmV4dF9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuaW5kZXggMzczYmNjMDU5OGQxMGIuLjE0ZDVjZThkZDYxMzY1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbkBAIC0xMjg4LDYgKzEyODgsNyBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3Qge1xuIFx0dTY0XHRcdFx0XHRjdXJyX2NoYWluX2tleTtcbiBcdGludFx0XHRcdFx0bG9ja2RlcF9kZXB0aDtcbiBcdHVuc2lnbmVkIGludFx0XHRcdGxvY2tkZXBfcmVjdXJzaW9uO1xuK1x0dW5zaWduZWQgaW50XHRcdFx0bG9ja2RlcF9zZXE7XG4gXHRzdHJ1Y3QgaGVsZF9sb2NrXHRcdGhlbGRfbG9ja3NbTUFYX0xPQ0tfREVQVEhdO1xuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuaW5kZXggMmQ0YzViYWI1YWY4ODcuLmE2OTU2N2JkZDc5MTJlIDEwMDY0NFxuLS0tIGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG4rKysgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbkBAIC01MDc3LDcgKzUwNzcsNyBAQCBzdGF0aWMgaW50IF9fbG9ja19pc19oZWxkKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgaW50IHJlYWQpO1xuIHN0YXRpYyBpbnQgX19sb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsXG4gXHRcdFx0ICBpbnQgdHJ5bG9jaywgaW50IHJlYWQsIGludCBjaGVjaywgaW50IGhhcmRpcnFzX29mZixcbiBcdFx0XHQgIHN0cnVjdCBsb2NrZGVwX21hcCAqbmVzdF9sb2NrLCB1bnNpZ25lZCBsb25nIGlwLFxuLVx0XHRcdCAgaW50IHJlZmVyZW5jZXMsIGludCBwaW5fY291bnQsIGludCBzeW5jKVxuK1x0XHRcdCAgaW50IHJlZmVyZW5jZXMsIGludCBwaW5fY291bnQsIGludCBzeW5jLCBpbnQgc2VxKVxuIHtcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7XG4gXHRzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBOVUxMO1xuQEAgLTUxODMsNiArNTE4Myw3IEBAIHN0YXRpYyBpbnQgX19sb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsXG4gXHRobG9jay1cdTAwM2Vob2xkdGltZV9zdGFtcCA9IGxvY2tzdGF0X2Nsb2NrKCk7XG4gI2VuZGlmXG4gXHRobG9jay1cdTAwM2VwaW5fY291bnQgPSBwaW5fY291bnQ7XG4rXHRobG9jay1cdTAwM2VzZXFfY291bnQgPSBzZXE7XG4gXG4gXHRpZiAoY2hlY2tfd2FpdF9jb250ZXh0KGN1cnIsIGhsb2NrKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNTM4OCw3ICs1Mzg5LDcgQEAgc3RhdGljIGludCByZWFjcXVpcmVfaGVsZF9sb2NrcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHVuc2lnbmVkIGludCBkZXB0aCxcbiBcdFx0XHRcdCAgICBobG9jay1cdTAwM2VyZWFkLCBobG9jay1cdTAwM2VjaGVjayxcbiBcdFx0XHRcdCAgICBobG9jay1cdTAwM2VoYXJkaXJxc19vZmYsXG4gXHRcdFx0XHQgICAgaGxvY2stXHUwMDNlbmVzdF9sb2NrLCBobG9jay1cdTAwM2VhY3F1aXJlX2lwLFxuLVx0XHRcdFx0ICAgIGhsb2NrLVx1MDAzZXJlZmVyZW5jZXMsIGhsb2NrLVx1MDAzZXBpbl9jb3VudCwgMCkpIHtcbitcdFx0XHRcdCAgICBobG9jay1cdTAwM2VyZWZlcmVuY2VzLCBobG9jay1cdTAwM2VwaW5fY291bnQsIDAsIGhsb2NrLVx1MDAzZXNlcV9jb3VudCkpIHtcbiBcdFx0Y2FzZSAwOlxuIFx0XHRcdHJldHVybiAxO1xuIFx0XHRjYXNlIDE6XG5AQCAtNTY2OSwxNCArNTY3MCwxNyBAQCBzdGF0aWMgdm9pZCBfX2xvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llIGNvb2tpZVxuIFx0XHRzdHJ1Y3QgaGVsZF9sb2NrICpobG9jayA9IGN1cnItXHUwMDNlaGVsZF9sb2NrcyArIGk7XG4gXG4gXHRcdGlmIChtYXRjaF9oZWxkX2xvY2soaGxvY2ssIGxvY2spKSB7XG4rXHRcdFx0aW50IHBpbl9jb3VudDtcbitcbiBcdFx0XHRpZiAoV0FSTighaGxvY2stXHUwMDNlcGluX2NvdW50LCBcInVucGlubmluZyBhbiB1bnBpbm5lZCBsb2NrXFxuXCIpKVxuIFx0XHRcdFx0cmV0dXJuO1xuIFxuLVx0XHRcdGhsb2NrLVx1MDAzZXBpbl9jb3VudCAtPSBjb29raWUudmFsO1xuK1x0XHRcdHBpbl9jb3VudCA9IGhsb2NrLVx1MDAzZXBpbl9jb3VudCAtIGNvb2tpZS52YWw7XG4gXG4tXHRcdFx0aWYgKFdBUk4oKGludClobG9jay1cdTAwM2VwaW5fY291bnQgXHUwMDNjIDAsIFwicGluIGNvdW50IGNvcnJ1cHRlZFxcblwiKSlcbi1cdFx0XHRcdGhsb2NrLVx1MDAzZXBpbl9jb3VudCA9IDA7XG4rXHRcdFx0aWYgKFdBUk4ocGluX2NvdW50IFx1MDAzYyAwLCBcInBpbiBjb3VudCBjb3JydXB0ZWRcXG5cIikpXG4rXHRcdFx0XHRwaW5fY291bnQgPSAwO1xuIFxuK1x0XHRcdGhsb2NrLVx1MDAzZXBpbl9jb3VudCA9IHBpbl9jb3VudDtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcdH1cbkBAIC01Njg0LDYgKzU2ODgsMjQgQEAgc3RhdGljIHZvaWQgX19sb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSBjb29raWVcbiBcdFdBUk4oMSwgXCJ1bnBpbm5pbmcgYW4gdW5oZWxkIGxvY2tcXG5cIik7XG4gfVxuIFxuK3N0YXRpYyB1MzIgX19sb2NrX3NlcXVlbmNlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaylcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50O1xuK1x0aW50IGk7XG4rXG4rXHRpZiAodW5saWtlbHkoIWRlYnVnX2xvY2tzKSlcbitcdFx0cmV0dXJuIH4wO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY3Vyci1cdTAwM2Vsb2NrZGVwX2RlcHRoOyBpKyspIHtcbitcdFx0c3RydWN0IGhlbGRfbG9jayAqaGxvY2sgPSBjdXJyLVx1MDAzZWhlbGRfbG9ja3MgKyBpO1xuK1xuK1x0XHRpZiAobWF0Y2hfaGVsZF9sb2NrKGhsb2NrLCBsb2NrKSlcbitcdFx0XHRyZXR1cm4gaGxvY2stXHUwMDNlc2VxX2NvdW50O1xuK1x0fVxuK1xuK1x0cmV0dXJuIH4wO1xuK31cbitcbiAvKlxuICAqIENoZWNrIHdoZXRoZXIgd2UgZm9sbG93IHRoZSBpcnEtZmxhZ3Mgc3RhdGUgcHJlY2lzZWx5OlxuICAqL1xuQEAgLTU4NjYsNyArNTg4OCw4IEBAIHZvaWQgbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLFxuIFxuIFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XG4gXHRfX2xvY2tfYWNxdWlyZShsb2NrLCBzdWJjbGFzcywgdHJ5bG9jaywgcmVhZCwgY2hlY2ssXG4tXHRcdCAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMCk7XG4rXHRcdCAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMCxcbitcdFx0ICAgICAgICsrY3VycmVudC1cdTAwM2Vsb2NrZGVwX3NlcSk7XG4gXHRsb2NrZGVwX3JlY3Vyc2lvbl9maW5pc2goKTtcbiBcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gfVxuQEAgLTU5MTQsNyArNTkzNyw4IEBAIHZvaWQgbG9ja19zeW5jKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgc3ViY2xhc3MsIGludCByZWFkLFxuIFxuIFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XG4gXHRfX2xvY2tfYWNxdWlyZShsb2NrLCBzdWJjbGFzcywgMCwgcmVhZCwgY2hlY2ssXG4tXHRcdCAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMSk7XG4rXHRcdCAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMSxcbitcdFx0ICAgICAgICsrY3VycmVudC1cdTAwM2Vsb2NrZGVwX3NlcSk7XG4gXHRjaGVja19jaGFpbl9rZXkoY3VycmVudCk7XG4gXHRsb2NrZGVwX3JlY3Vyc2lvbl9maW5pc2goKTtcbiBcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG5AQCAtNjAwMCw2ICs2MDI0LDI2IEBAIHZvaWQgbG9ja191bnBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUgY29va2llKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChsb2NrX3VucGluX2xvY2spO1xuIFxuK3UzMiBsb2NrX3NlcXVlbmNlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaylcbit7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0dTMyIHNlcSA9IH4wO1xuK1xuK1x0aWYgKHVubGlrZWx5KCFsb2NrZGVwX2VuYWJsZWQoKSkpXG4rXHRcdHJldHVybiBzZXE7XG4rXG4rXHRyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuK1x0Y2hlY2tfZmxhZ3MoZmxhZ3MpO1xuK1xuK1x0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XG4rXHRzZXEgPSBfX2xvY2tfc2VxdWVuY2UobG9jayk7XG4rXHRsb2NrZGVwX3JlY3Vyc2lvbl9maW5pc2goKTtcbitcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4rXG4rXHRyZXR1cm4gc2VxO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChsb2NrX3NlcXVlbmNlKTtcbitcbiAjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVFxuIHN0YXRpYyB2b2lkIHByaW50X2xvY2tfY29udGVudGlvbl9idWcoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLFxuZGlmZiAtLWdpdCBhL2xpYi9tYXBsZV90cmVlLmMgYi9saWIvbWFwbGVfdHJlZS5jXG5pbmRleCBlNTI4NzY0MzViNzdmMC4uMDZjYzA1Yjc5ZmJkYzggMTAwNjQ0XG4tLS0gYS9saWIvbWFwbGVfdHJlZS5jXG4rKysgYi9saWIvbWFwbGVfdHJlZS5jXG5AQCAtMjYxLDYgKzI2MSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFzX2lzX3VuZGVyZmxvdyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiBcdHJldHVybiBtYXMtXHUwMDNlc3RhdHVzID09IG1hX3VuZGVyZmxvdztcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIG1hc19tYWtlX3dhbGthYmxlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuK3tcbitcdGlmICghbWFzX2lzX2FjdGl2ZShtYXMpIFx1MDAyNlx1MDAyNiAhbWFzX2lzX3N0YXJ0KG1hcykpXG4rXHRcdG1hcy1cdTAwM2VzdGF0dXMgPSBtYV9zdGFydDtcbit9XG4rXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgbWFwbGVfbm9kZSAqbXRlX3RvX25vZGUoXG4gXHRcdGNvbnN0IHN0cnVjdCBtYXBsZV9lbm9kZSAqZW50cnkpXG4ge1xuQEAgLTQ1NSw0NiArNDYxLDYgQEAgZW51bSBtYXBsZV90eXBlIG1hc19wYXJlbnRfdHlwZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICplbm9kZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi0vKlxuLSAqIG1hc19zZXRfcGFyZW50KCkgLSBTZXQgdGhlIHBhcmVudCBub2RlIGFuZCBlbmNvZGUgdGhlIHNsb3Rcbi0gKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGVcbi0gKiBAZW5vZGU6IFRoZSBlbmNvZGVkIG1hcGxlIG5vZGUuXG4tICogQHBhcmVudDogVGhlIGVuY29kZWQgbWFwbGUgbm9kZSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgQGVub2RlLlxuLSAqIEBzbG90OiBUaGUgc2xvdCB0aGF0IEBlbm9kZSByZXNpZGVzIGluIEBwYXJlbnQuXG4tICpcbi0gKiBTbG90IG51bWJlciBpcyBlbmNvZGVkIGluIHRoZSBlbm9kZS1cdTAwM2VwYXJlbnQgYml0IDMtNiBvciAyLTYsIGRlcGVuZGluZyBvbiB0aGVcbi0gKiBwYXJlbnQgdHlwZS5cbi0gKi9cbi1zdGF0aWMgaW5saW5lXG4tdm9pZCBtYXNfc2V0X3BhcmVudChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICplbm9kZSxcbi1cdFx0ICAgIGNvbnN0IHN0cnVjdCBtYXBsZV9lbm9kZSAqcGFyZW50LCB1bnNpZ25lZCBjaGFyIHNsb3QpXG4te1xuLVx0dW5zaWduZWQgbG9uZyB2YWwgPSAodW5zaWduZWQgbG9uZylwYXJlbnQ7XG4tXHR1bnNpZ25lZCBsb25nIHNoaWZ0O1xuLVx0dW5zaWduZWQgbG9uZyB0eXBlO1xuLVx0ZW51bSBtYXBsZV90eXBlIHBfdHlwZSA9IG10ZV9ub2RlX3R5cGUocGFyZW50KTtcbi1cbi1cdE1BU19CVUdfT04obWFzLCBwX3R5cGUgPT0gbWFwbGVfZGVuc2UpO1xuLVx0TUFTX0JVR19PTihtYXMsIHBfdHlwZSA9PSBtYXBsZV9sZWFmXzY0KTtcbi1cbi1cdHN3aXRjaCAocF90eXBlKSB7XG4tXHRjYXNlIG1hcGxlX3JhbmdlXzY0OlxuLVx0Y2FzZSBtYXBsZV9hcmFuZ2VfNjQ6XG4tXHRcdHNoaWZ0ID0gTUFQTEVfUEFSRU5UX1NMT1RfU0hJRlQ7XG4tXHRcdHR5cGUgPSBNQVBMRV9QQVJFTlRfUkFOR0U2NDtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0Y2FzZSBtYXBsZV9kZW5zZTpcbi1cdGNhc2UgbWFwbGVfbGVhZl82NDpcbi1cdFx0c2hpZnQgPSB0eXBlID0gMDtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXG4tXHR2YWwgXHUwMDI2PSB+TUFQTEVfTk9ERV9NQVNLOyAvKiBDbGVhciBhbGwgbm9kZSBtZXRhZGF0YSBpbiBwYXJlbnQgKi9cbi1cdHZhbCB8PSAoc2xvdCBcdTAwM2NcdTAwM2Mgc2hpZnQpIHwgdHlwZTtcbi1cdG10ZV90b19ub2RlKGVub2RlKS1cdTAwM2VwYXJlbnQgPSBtYV9wYXJlbnRfcHRyKHZhbCk7XG4tfVxuLVxuIC8qXG4gICogbXRlX3BhcmVudF9zbG90KCkgLSBnZXQgdGhlIHBhcmVudCBzbG90IG9mIEBlbm9kZS5cbiAgKiBAZW5vZGU6IFRoZSBlbmNvZGVkIG1hcGxlIG5vZGUuXG5AQCAtODc2LDYgKzg0Miw0MiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFfc2V0X21ldGFfZ2FwKHN0cnVjdCBtYXBsZV9ub2RlICptbiwgZW51bSBtYXBsZV90eXBlIG10LFxuIFx0bWV0YS1cdTAwM2VnYXAgPSBvZmZzZXQ7XG4gfVxuIFxuKy8qXG4rICogbWFzX3NldF9wYXJlbnRfc2xvdHMoKSAtIEJ1bGsgb3BlcmF0aW9uIHRvIHNldCBtYW55IHNsb3QgcGFyZW50IHBvaW50ZXJzXG4rICogQG1hczogVGhlIG1hcGxlIHN0YXRlXG4rICogQHBhcmVudDogVGhlIGVuY29kZWQgbWFwbGUgbm9kZSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgQGVub2RlLlxuKyAqIEBzbG90OiBUaGUgc2xvdCB0aGF0IG9mIHRoZSBAZW5vZGUuXG4rICogQHN0YXJ0X3Nsb3Q6IFRoZSBvZmZzZXQgaW50byBAc2xvdFxuKyAqIEBjb3VudDogVGhlIG51bWJlciBvZiBzbG90cyB0byBzZXQgKGVnOiBleGNsdXNpdmUpXG4rICovXG4rc3RhdGljIGlubGluZVxuK3ZvaWQgbWFzX3NldF9wYXJlbnRfc2xvdHMoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqcGFyZW50LFxuK1x0dm9pZCBfX3JjdSAqKnNsb3RzLCB1bnNpZ25lZCBjaGFyIHN0YXJ0X3Nsb3QsIHVuc2lnbmVkIGNoYXIgY291bnQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyB2YWw7XG4rXHR1bnNpZ25lZCBsb25nIHNoaWZ0O1xuK1x0dW5zaWduZWQgbG9uZyB0eXBlO1xuK1x0ZW51bSBtYXBsZV90eXBlIHBfdHlwZSA9IG10ZV9ub2RlX3R5cGUocGFyZW50KTtcbitcdHVuc2lnbmVkIGNoYXIgaTtcbitcbitcdE1BU19CVUdfT04obWFzLCBwX3R5cGUgIT0gbWFwbGVfcmFuZ2VfNjQgXHUwMDI2XHUwMDI2XG4rXHRcdFx0cF90eXBlICE9IG1hcGxlX2FyYW5nZV82NCk7XG4rXG4rXHRzaGlmdCA9IE1BUExFX1BBUkVOVF9TTE9UX1NISUZUO1xuK1x0dHlwZSA9IE1BUExFX1BBUkVOVF9SQU5HRTY0O1xuK1xuK1x0dmFsID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50O1xuK1x0dmFsIFx1MDAyNj0gfk1BUExFX05PREVfTUFTSztcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpKyspIHtcbitcdFx0dW5zaWduZWQgbG9uZyBwdmFsID0gdmFsIHwgKChzdGFydF9zbG90ICsgaSkgXHUwMDNjXHUwMDNjIHNoaWZ0KSB8IHR5cGU7XG4rXHRcdHN0cnVjdCBtYXBsZV9lbm9kZSAqY2hpbGQ7XG4rXG4rXHRcdGNoaWxkID0gbXRfc2xvdF9sb2NrZWQobWFzLVx1MDAzZXRyZWUsIHNsb3RzLCBpKTtcbitcdFx0bXRlX3RvX25vZGUoY2hpbGQpLVx1MDAzZXBhcmVudCA9IG1hX3BhcmVudF9wdHIocHZhbCk7XG4rXHR9XG4rfVxuK1xuIC8qXG4gICogbWF0X2FkZCgpIC0gQWRkIGEgQGRlYWRfZW5vZGUgdG8gdGhlIG1hX3RvcGlhcnkgb2YgYSBsaXN0IG9mIGRlYWQgbm9kZXMuXG4gICogQG1hdDogdGhlIG1hX3RvcGlhcnksIGEgbGlua2VkIGxpc3Qgb2YgZGVhZCBub2Rlcy5cbkBAIC0xMTUzLDYgKzExNTUsNzMgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19mcmVlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnVzZWQpXG4gXHRtYV9mcmVlX3JjdShtdGVfdG9fbm9kZSh1c2VkKSk7XG4gfVxuIFxuK1xuKyNpZmRlZiBDT05GSUdfTE9DS0RFUFxuK3N0YXRpYyBzdHJ1Y3QgbG9ja2RlcF9tYXAgKm1hc19sb2NrZGVwX21hcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbit7XG4rXHRzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQgPSBtYXMtXHUwMDNldHJlZTtcbitcbitcdGlmIChtdF9leHRlcm5hbF9sb2NrKG10KSlcbitcdFx0cmV0dXJuIG10LVx1MDAzZW1hX2V4dGVybmFsX2xvY2s7XG4rXG4rXHRyZXR1cm4gXHUwMDI2KG10LVx1MDAzZW1hX2xvY2spLmRlcF9tYXA7XG4rfVxuK1xuKyNlbmRpZlxuK1xuK3N0YXRpYyB2b2lkIG1hc19sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuK3tcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcbitcdHN0cnVjdCBsb2NrZGVwX21hcCAqbWFwO1xuK1x0aWYgKCFtYXNfaXNfYWN0aXZlKG1hcykpXG4rXHRcdHJldHVybjtcbitcbisjaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXG4rXHRpZiAoIW10X2xvY2tlZChtYXMtXHUwMDNldHJlZSkpIHtcbitcdFx0aWYgKG10X2luX3JjdShtYXMtXHUwMDNldHJlZSkpXG4rXHRcdFx0V0FSTl9PTl9PTkNFKHBvbGxfc3RhdGVfc3luY2hyb25pemVfcmN1KG1hcy1cdTAwM2VyY3VfZ3ApKTtcbitcdH1cbisjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXG4rXG4rXHRtYXAgPSBtYXNfbG9ja2RlcF9tYXAobWFzKTtcbitcdGlmIChtYXAgXHUwMDI2XHUwMDI2IGxvY2tfaXNfaGVsZChtYXApKVxuK1x0XHRXQVJOX09OX09OQ0UobWFzLVx1MDAzZWxkX3NlcSAhPSBsb2NrX3NlcXVlbmNlKG1hcCkpO1xuKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xuK1xuK31cbitcbitzdGF0aWMgdm9pZCBtYXNfaW5pdF9sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuK3tcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcbitcdHN0cnVjdCBsb2NrZGVwX21hcCAqbWFwO1xuKyNpZmRlZiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RcbitcdGlmICghbXRfbG9ja2VkKG1hcy1cdTAwM2V0cmVlKSkge1xuK1x0XHRpZiAobXRfaW5fcmN1KG1hcy1cdTAwM2V0cmVlKSlcbitcdFx0XHRtYXMtXHUwMDNlcmN1X2dwID0gZ2V0X3N0YXRlX3N5bmNocm9uaXplX3JjdSgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rI2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xuK1xuK1x0bWFwID0gbWFzX2xvY2tkZXBfbWFwKG1hcyk7XG4rXHRpZiAobWFwIFx1MDAyNlx1MDAyNiBsb2NrX2lzX2hlbGQobWFwKSlcbitcdFx0bWFzLVx1MDAzZWxkX3NlcSA9IGxvY2tfc2VxdWVuY2UobWFzX2xvY2tkZXBfbWFwKG1hcykpO1xuKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xuK1xuK31cbitcbitzdGF0aWMgdm9pZCBtYXNfbWF5X2luaXRfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbit7XG4rI2lmZGVmIENPTkZJR19MT0NLREVQXG4rI2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxuK1x0aWYgKG1hc19pc19zdGFydChtYXMpIHx8IG1hc19pc19wYXVzZWQobWFzKSkge1xuK1x0XHRtYXNfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4rXHRcdHJldHVybjtcbitcdH1cbisjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXG4rXHRtYXNfbG9ja19jaGVjayhtYXMpO1xuKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xuK31cbitcbiAvKlxuICAqIG1hc19zdGFydCgpIC0gU2V0cyB1cCBtYXBsZSBzdGF0ZSBmb3Igb3BlcmF0aW9ucy5cbiAgKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGUuXG5AQCAtMTE3MSw2ICsxMjQwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWFwbGVfZW5vZGUgKm1hc19zdGFydChzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiBcdGlmIChsaWtlbHkobWFzX2lzX3N0YXJ0KG1hcykpKSB7XG4gXHRcdHN0cnVjdCBtYXBsZV9lbm9kZSAqcm9vdDtcbiBcbitcdFx0bWFzX2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0XHRtYXMtXHUwMDNlbWluID0gMDtcbiBcdFx0bWFzLVx1MDAzZW1heCA9IFVMT05HX01BWDtcbiBcbkBAIC0xNTAxLDE0ICsxNTcxLDI2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfcGFyZW50X2dhcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgY2hhciBvZmZzZXQsXG4gXHRnb3RvIGFzY2VuZDtcbiB9XG4gXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1hc191cGRhdGVfZ2FwX2tub3duKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLFxuK1x0XHR1bnNpZ25lZCBsb25nIGdhcClcbit7XG4rXHR1bnNpZ25lZCBjaGFyIHBzbG90O1xuK1x0dW5zaWduZWQgbG9uZyBwX2dhcDtcbitcbitcdHBzbG90ID0gbXRlX3BhcmVudF9zbG90KG1hcy1cdTAwM2Vub2RlKTtcbitcdHBfZ2FwID0gbWFfZ2FwcyhtdGVfcGFyZW50KG1hcy1cdTAwM2Vub2RlKSxcbitcdFx0XHRtYXNfcGFyZW50X3R5cGUobWFzLCBtYXMtXHUwMDNlbm9kZSkpW3BzbG90XTtcbitcbitcdGlmIChwX2dhcCAhPSBnYXApXG4rXHRcdG1hc19wYXJlbnRfZ2FwKG1hcywgcHNsb3QsIGdhcCk7XG4rfVxuK1xuIC8qXG4gICogbWFzX3VwZGF0ZV9nYXAoKSAtIFVwZGF0ZSBhIG5vZGVzIGdhcHMgYW5kIHByb3BhZ2F0ZSB1cCBpZiBuZWNlc3NhcnkuXG4gICogQG1hczogdGhlIG1hcGxlIHN0YXRlLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfdXBkYXRlX2dhcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiB7XG4tXHR1bnNpZ25lZCBjaGFyIHBzbG90O1xuLVx0dW5zaWduZWQgbG9uZyBwX2dhcDtcbiBcdHVuc2lnbmVkIGxvbmcgbWF4X2dhcDtcbiBcbiBcdGlmICghbXRfaXNfYWxsb2MobWFzLVx1MDAzZXRyZWUpKVxuQEAgLTE1MTgsMTMgKzE2MDAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3VwZGF0ZV9nYXAoc3RydWN0IG1hX3N0YXRlICptYXMpXG4gXHRcdHJldHVybjtcbiBcbiBcdG1heF9nYXAgPSBtYXNfbWF4X2dhcChtYXMpO1xuLVxuLVx0cHNsb3QgPSBtdGVfcGFyZW50X3Nsb3QobWFzLVx1MDAzZW5vZGUpO1xuLVx0cF9nYXAgPSBtYV9nYXBzKG10ZV9wYXJlbnQobWFzLVx1MDAzZW5vZGUpLFxuLVx0XHRcdG1hc19wYXJlbnRfdHlwZShtYXMsIG1hcy1cdTAwM2Vub2RlKSlbcHNsb3RdO1xuLVxuLVx0aWYgKHBfZ2FwICE9IG1heF9nYXApXG4tXHRcdG1hc19wYXJlbnRfZ2FwKG1hcywgcHNsb3QsIG1heF9nYXApO1xuK1x0bWFzX3VwZGF0ZV9nYXBfa25vd24obWFzLCBtYXhfZ2FwKTtcbiB9XG4gXG4gLypcbkBAIC0xNTQwLDE0ICsxNjE2LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfYWRvcHRfY2hpbGRyZW4oc3RydWN0IG1hX3N0YXRlICptYXMsXG4gXHRzdHJ1Y3QgbWFwbGVfbm9kZSAqbm9kZSA9IG10ZV90b19ub2RlKHBhcmVudCk7XG4gXHR2b2lkIF9fcmN1ICoqc2xvdHMgPSBtYV9zbG90cyhub2RlLCB0eXBlKTtcbiBcdHVuc2lnbmVkIGxvbmcgKnBpdm90cyA9IG1hX3Bpdm90cyhub2RlLCB0eXBlKTtcbi1cdHN0cnVjdCBtYXBsZV9lbm9kZSAqY2hpbGQ7XG4tXHR1bnNpZ25lZCBjaGFyIG9mZnNldDtcbitcdHVuc2lnbmVkIGNoYXIgZW5kO1xuIFxuLVx0b2Zmc2V0ID0gbWFfZGF0YV9lbmQobm9kZSwgdHlwZSwgcGl2b3RzLCBtYXMtXHUwMDNlbWF4KTtcbi1cdGRvIHtcbi1cdFx0Y2hpbGQgPSBtYXNfc2xvdF9sb2NrZWQobWFzLCBzbG90cywgb2Zmc2V0KTtcbi1cdFx0bWFzX3NldF9wYXJlbnQobWFzLCBjaGlsZCwgcGFyZW50LCBvZmZzZXQpO1xuLVx0fSB3aGlsZSAob2Zmc2V0LS0pO1xuK1x0ZW5kID0gbWFfZGF0YV9lbmQobm9kZSwgdHlwZSwgcGl2b3RzLCBtYXMtXHUwMDNlbWF4KTtcbitcdG1hc19zZXRfcGFyZW50X3Nsb3RzKG1hcywgcGFyZW50LCBzbG90cywgMCwgZW5kICsgMSk7XG4gfVxuIFxuIC8qXG5AQCAtMTkyOSwxNSArMjAwMSwxMCBAQCB1bnNpZ25lZCBsb25nIG5vZGVfY29weShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX25vZGUgKnNyYyxcbiBcdHNfc2xvdHMgPSBtYV9zbG90cyhzcmMsIHNfbXQpICsgc3RhcnQ7XG4gXHRzX3Bpdm90cyA9IG1hX3Bpdm90cyhzcmMsIHNfbXQpICsgc3RhcnQ7XG4gXHRtZW1jcHkoZF9zbG90cywgc19zbG90cywgc2l6ZSAqIHNpemVvZih2b2lkIF9fcmN1ICopKTtcbi1cdGlmICghbWFfaXNfbGVhZihkX210KSBcdTAwMjZcdTAwMjYgc19tdCA9PSBtYXBsZV9jb3B5KSB7XG4tXHRcdHN0cnVjdCBtYXBsZV9lbm9kZSAqZWRzdCA9IG10X21rX25vZGUoZHN0LCBkX210KTtcbi1cbiBcbi1cdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHNpemU7IGkrKylcbi1cdFx0XHRtYXNfc2V0X3BhcmVudChtYXMsXG4tXHRcdFx0XHQgICAgICAgbXRfc2xvdF9sb2NrZWQobWFzLVx1MDAzZXRyZWUsIGRfc2xvdHMsIGkpLFxuLVx0XHRcdFx0ICAgICAgIGVkc3QsIGRfc3RhcnQgKyBpKTtcbi1cdH1cbitcdGlmICghbWFfaXNfbGVhZihkX210KSBcdTAwMjZcdTAwMjYgc19tdCA9PSBtYXBsZV9jb3B5KVxuK1x0XHRtYXNfc2V0X3BhcmVudF9zbG90cyhtYXMsIG10X21rX25vZGUoZHN0LCBkX210KSxcbitcdFx0XHRcdCAgICAgZF9zbG90cywgZF9zdGFydCwgc2l6ZSk7XG4gXG4gXHRkX2dhcHMgPSBtYV9nYXBzKGRzdCwgZF9tdCk7XG4gXHRpZiAoZF9nYXBzKSB7XG5AQCAtMjA4MSw4ICsyMTQ4LDggQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193bWJfcmVwbGFjZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2NvcHkgKmNwKVxuIFx0bWFzLVx1MDAzZW5vZGUgPSBtdF9zbG90X2xvY2tlZChtYXMtXHUwMDNldHJlZSwgY3AtXHUwMDNlc2xvdCwgMCk7XG4gXHQvKiBJbnNlcnQgdGhlIG5ldyBkYXRhIGluIHRoZSB0cmVlICovXG4gXHRtYXNfdG9waWFyeV9yZXBsYWNlKG1hcywgb2xkX2Vub2RlLCBjcC1cdTAwM2VoZWlnaHQpO1xuLVx0aWYgKCFtdGVfaXNfbGVhZihtYXMtXHUwMDNlbm9kZSkpXG4tXHRcdG1hc191cGRhdGVfZ2FwKG1hcyk7XG4rXHRpZiAobXRfaXNfYWxsb2MobWFzLVx1MDAzZXRyZWUpIFx1MDAyNlx1MDAyNiAhbXRlX2lzX3Jvb3QobWFzLVx1MDAzZW5vZGUpKVxuK1x0XHRtYXNfdXBkYXRlX2dhcF9rbm93bihtYXMsIGNwLVx1MDAzZWdhcFswXSk7XG4gXG4gXHRtdHJlZV9yYW5nZV93YWxrKG1hcyk7XG4gfVxuQEAgLTI5MjgsMTMgKzI5OTUsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX2V4dGVuZF9zcGFubmluZ19udWxsKHN0cnVjdCBtYV93cl9zdGF0ZSAqbF93cl9tYXMsXG4gXHRcdGlmIChyX21hcy1cdTAwM2VsYXN0IFx1MDAzYyByX3dyX21hcy1cdTAwM2VyX21heClcbiBcdFx0XHRyX21hcy1cdTAwM2VsYXN0ID0gcl93cl9tYXMtXHUwMDNlcl9tYXg7XG4gXHRcdHJfbWFzLVx1MDAzZW9mZnNldCsrO1xuLVx0fSBlbHNlIGlmICgocl9tYXMtXHUwMDNlbGFzdCA9PSByX3dyX21hcy1cdTAwM2VyX21heCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKHJfbWFzLVx1MDAzZWxhc3QgXHUwMDNjIHJfbWFzLVx1MDAzZW1heCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIW1hc19zbG90X2xvY2tlZChyX21hcywgcl93cl9tYXMtXHUwMDNlc2xvdHMsIHJfbWFzLVx1MDAzZW9mZnNldCArIDEpKSB7XG4tXHRcdHJfbWFzLVx1MDAzZWxhc3QgPSBtYXNfc2FmZV9waXZvdChyX21hcywgcl93cl9tYXMtXHUwMDNlcGl2b3RzLFxuLVx0XHRcdFx0XHQgICAgIHJfd3JfbWFzLVx1MDAzZXR5cGUsIHJfbWFzLVx1MDAzZW9mZnNldCArIDEpO1xuLVx0XHRyX21hcy1cdTAwM2VvZmZzZXQrKztcbi1cdFx0cl93cl9tYXMtXHUwMDNlcl9tYXggPSByX21hcy1cdTAwM2VsYXN0O1xuIFx0fVxuIH1cbiBcbkBAIC0zMTI1LDcgKzMxODUsNyBAQCBzdGF0aWMgdm9pZCBtYXNfd3Jfc3Bhbm5pbmdfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4gc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIHtcbiBcdHVuc2lnbmVkIGNoYXIgZHN0X29mZnNldCwgb2Zmc2V0X2VuZDtcbi1cdHVuc2lnbmVkIGNoYXIgY29weV9zaXplLCBub2RlX3Bpdm90cztcbitcdHVuc2lnbmVkIGNoYXIgY29weV9zaXplLCBub2RlX3Bpdm90cywgbm9kZV9zbG90cztcbiBcdHN0cnVjdCBtYXBsZV9ub2RlIHJldXNlLCAqbmV3bm9kZTtcbiBcdHVuc2lnbmVkIGxvbmcgKmRzdF9waXZvdHM7XG4gXHR2b2lkIF9fcmN1ICoqZHN0X3Nsb3RzO1xuQEAgLTMxMzgsNiArMzE5OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiBcdGluX3JjdSA9IG10X2luX3JjdShtYXMtXHUwMDNldHJlZSk7XG4gXHRvZmZzZXRfZW5kID0gd3JfbWFzLVx1MDAzZW9mZnNldF9lbmQ7XG4gXHRub2RlX3Bpdm90cyA9IG10X3Bpdm90c1t3cl9tYXMtXHUwMDNldHlwZV07XG4rXHRub2RlX3Nsb3RzID0gbXRfc2xvdHNbd3JfbWFzLVx1MDAzZXR5cGVdO1xuIFx0LyogQXNzdW1lIGxhc3QgYWRkcyBhbiBlbnRyeSAqL1xuIFx0bmV3X2VuZCA9IG1hcy1cdTAwM2VlbmQgKyAxIC0gb2Zmc2V0X2VuZCArIG1hcy1cdTAwM2VvZmZzZXQ7XG4gXHRpZiAobWFzLVx1MDAzZWxhc3QgPT0gd3JfbWFzLVx1MDAzZWVuZF9waXYpIHtcbkBAIC0zMTQ5LDcgKzMyMTAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4gXHRpZiAoaW5fcmN1KSB7XG4gXHRcdG5ld25vZGUgPSBtYXNfcG9wX25vZGUobWFzKTtcbiBcdH0gZWxzZSB7XG4tXHRcdG1lbXNldChcdTAwMjZyZXVzZSwgMCwgc2l6ZW9mKHN0cnVjdCBtYXBsZV9ub2RlKSk7XG4gXHRcdG5ld25vZGUgPSBcdTAwMjZyZXVzZTtcbiBcdH1cbiBcbkBAIC0zMTkzLDcgKzMyNTMsMjEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIFx0XHRkc3RfcGl2b3RzW25ld19lbmRdID0gbWFzLVx1MDAzZW1heDtcbiBcbiBkb25lOlxuLVx0bWFzX2xlYWZfc2V0X21ldGEobmV3bm9kZSwgbWFwbGVfbGVhZl82NCwgbmV3X2VuZCk7XG4rXHRpZiAoIWluX3JjdSBcdTAwMjZcdTAwMjYgbmV3X2VuZCArIDIgXHUwMDNjIG5vZGVfc2xvdHMpIHtcbitcdFx0dW5zaWduZWQgY2hhciBjbGVhcl9mcm9tID0gbmV3X2VuZCArIDE7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIE5vdGUgdGhhdCB0aGUgbGFzdCBzbG90IGlzIG5ldmVyIGNsZWFyZWQsIHNpbmNlIHRoZSBtZXRhZGF0YVxuK1x0XHQgKiB3aWxsIGJlIHN0b3JlZCB0aGVyZSBvciBpdCBoYXMgYSB2YWx1ZS5cbitcdFx0ICovXG4rXHRcdG1lbXNldChkc3Rfc2xvdHMgKyBjbGVhcl9mcm9tLCAwLFxuK1x0XHQgICAgICAgc2l6ZW9mKHZvaWQgX19yY3UgKikgKiAobm9kZV9zbG90cyAtIGNsZWFyX2Zyb20pKTtcbitcdFx0aWYgKGNsZWFyX2Zyb20gXHUwMDNjIG5vZGVfcGl2b3RzKVxuK1x0XHRcdG1lbXNldChkc3RfcGl2b3RzICsgY2xlYXJfZnJvbSwgMCxcbitcdFx0XHQgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogKG5vZGVfcGl2b3RzIC0gY2xlYXJfZnJvbSkpO1xuK1x0fVxuK1xuK1x0bWFzX2xlYWZfc2V0X21ldGEobmV3bm9kZSwgd3JfbWFzLVx1MDAzZXR5cGUsIG5ld19lbmQpO1xuIFx0aWYgKGluX3JjdSkge1xuIFx0XHRzdHJ1Y3QgbWFwbGVfZW5vZGUgKm9sZF9lbm9kZSA9IG1hcy1cdTAwM2Vub2RlO1xuIFxuQEAgLTMyMTgsNyArMzI5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfc2xvdF9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiBcdHZvaWQgX19yY3UgKipzbG90cyA9IHdyX21hcy1cdTAwM2VzbG90cztcbiBcdGJvb2wgZ2FwID0gZmFsc2U7XG4gXG4tXHRnYXAgfD0gIW10X3Nsb3RfbG9ja2VkKG1hcy1cdTAwM2V0cmVlLCBzbG90cywgb2Zmc2V0KTtcbitcdGdhcCB8PSAhd3JfbWFzLVx1MDAzZWNvbnRlbnQ7XG4gXHRnYXAgfD0gIW10X3Nsb3RfbG9ja2VkKG1hcy1cdTAwM2V0cmVlLCBzbG90cywgb2Zmc2V0ICsgMSk7XG4gXG4gXHRpZiAod3JfbWFzLVx1MDAzZW9mZnNldF9lbmQgLSBvZmZzZXQgPT0gMSkge1xuQEAgLTM2NjEsNiArMzczNSw5IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBzdG9yZV90eXBlIG1hc193cl9zdG9yZV90eXBlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIHtcbiBcdHN0cnVjdCBtYV9zdGF0ZSAqbWFzID0gd3JfbWFzLVx1MDAzZW1hcztcbiBcdHVuc2lnbmVkIGNoYXIgbmV3X2VuZDtcbitcdGJvb2wgYXBwZW5kaW5nO1xuK1x0Ym9vbCBvbmVfc2xvdDtcbitcdGJvb2wgaW5fcmN1O1xuIFxuIFx0aWYgKHVubGlrZWx5KG1hc19pc19ub25lKG1hcykgfHwgbWFzX2lzX3B0cihtYXMpKSlcbiBcdFx0cmV0dXJuIHdyX3N0b3JlX3Jvb3Q7XG5AQCAtMzY4MCwyMSArMzc1NywzMCBAQCBzdGF0aWMgaW5saW5lIGVudW0gc3RvcmVfdHlwZSBtYXNfd3Jfc3RvcmVfdHlwZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiBcdFx0cmV0dXJuIHdyX25ld19yb290O1xuIFxuIFx0bmV3X2VuZCA9IG1hc193cl9uZXdfZW5kKHdyX21hcyk7XG4rXHRpbl9yY3UgPSBtdF9pbl9yY3UobWFzLVx1MDAzZXRyZWUpO1xuK1x0YXBwZW5kaW5nID0gbWFzLVx1MDAzZW9mZnNldCA9PSBtYXMtXHUwMDNlZW5kO1xuK1x0b25lX3Nsb3QgPSB3cl9tYXMtXHUwMDNlb2Zmc2V0X2VuZCAtIG1hcy1cdTAwM2VvZmZzZXQgPT0gMTtcbitcbiBcdC8qIFBvdGVudGlhbCBzcGFubmluZyByZWJhbGFuY2UgY29sbGFwc2luZyBhIG5vZGUgKi9cbiBcdGlmIChuZXdfZW5kIFx1MDAzYyBtdF9taW5fc2xvdHNbd3JfbWFzLVx1MDAzZXR5cGVdKSB7XG4gXHRcdGlmICghbXRlX2lzX3Jvb3QobWFzLVx1MDAzZW5vZGUpKVxuIFx0XHRcdHJldHVybiAgd3JfcmViYWxhbmNlO1xuK1x0XHRpZiAoIWluX3JjdSkge1xuK1x0XHRcdGlmIChhcHBlbmRpbmcpXG4rXHRcdFx0XHRyZXR1cm4gd3JfYXBwZW5kO1xuK1x0XHRcdGVsc2UgaWYgKG1hcy1cdTAwM2VlbmQgPT0gbmV3X2VuZCBcdTAwMjZcdTAwMjYgb25lX3Nsb3QpXG4rXHRcdFx0XHRyZXR1cm4gd3Jfc2xvdF9zdG9yZTtcbitcdFx0fVxuIFx0XHRyZXR1cm4gd3Jfbm9kZV9zdG9yZTtcbiBcdH1cbiBcbiBcdGlmIChuZXdfZW5kIFx1MDAzZT0gbXRfc2xvdHNbd3JfbWFzLVx1MDAzZXR5cGVdKVxuIFx0XHRyZXR1cm4gd3Jfc3BsaXRfc3RvcmU7XG4gXG4tXHRpZiAoIW10X2luX3JjdShtYXMtXHUwMDNldHJlZSkgXHUwMDI2XHUwMDI2IChtYXMtXHUwMDNlb2Zmc2V0ID09IG1hcy1cdTAwM2VlbmQpKVxuK1x0aWYgKCFpbl9yY3UgXHUwMDI2XHUwMDI2IGFwcGVuZGluZylcbiBcdFx0cmV0dXJuIHdyX2FwcGVuZDtcbiBcbi1cdGlmICgobmV3X2VuZCA9PSBtYXMtXHUwMDNlZW5kKSBcdTAwMjZcdTAwMjYgKCFtdF9pbl9yY3UobWFzLVx1MDAzZXRyZWUpIHx8XG4tXHRcdCh3cl9tYXMtXHUwMDNlb2Zmc2V0X2VuZCAtIG1hcy1cdTAwM2VvZmZzZXQgPT0gMSkpKVxuK1x0aWYgKG5ld19lbmQgPT0gbWFzLVx1MDAzZWVuZCBcdTAwMjZcdTAwMjYgKCFpbl9yY3UgfHwgb25lX3Nsb3QpKVxuIFx0XHRyZXR1cm4gd3Jfc2xvdF9zdG9yZTtcbiBcbiBcdHJldHVybiB3cl9ub2RlX3N0b3JlO1xuQEAgLTM3OTMsMzUgKzM4NzksNDAgQEAgaW50IG1hc19hbGxvY19jeWNsaWMoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0cCxcbiBcdFx0dm9pZCAqZW50cnksIHVuc2lnbmVkIGxvbmcgcmFuZ2VfbG8sIHVuc2lnbmVkIGxvbmcgcmFuZ2VfaGksXG4gXHRcdHVuc2lnbmVkIGxvbmcgKm5leHQsIGdmcF90IGdmcClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG1pbiA9IHJhbmdlX2xvO1xuLVx0aW50IHJldCA9IDA7XG4tXG4tXHRyYW5nZV9sbyA9IG1heChtaW4sICpuZXh0KTtcbi1cdHJldCA9IG1hc19lbXB0eV9hcmVhKG1hcywgcmFuZ2VfbG8sIHJhbmdlX2hpLCAxKTtcbi1cdGlmICgobWFzLVx1MDAzZXRyZWUtXHUwMDNlbWFfZmxhZ3MgXHUwMDI2IE1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQpIFx1MDAyNlx1MDAyNiByZXQgPT0gMCkge1xuLVx0XHRtYXMtXHUwMDNldHJlZS1cdTAwM2VtYV9mbGFncyBcdTAwMjY9IH5NVF9GTEFHU19BTExPQ19XUkFQUEVEO1xuLVx0XHRyZXQgPSAxO1xuLVx0fVxuLVx0aWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgcmFuZ2VfbG8gXHUwMDNlIG1pbikge1xuLVx0XHRtYXNfcmVzZXQobWFzKTtcbi1cdFx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCBtaW4sIHJhbmdlX2hpLCAxKTtcbi1cdFx0aWYgKHJldCA9PSAwKVxuLVx0XHRcdHJldCA9IDE7XG4tXHR9XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0aW50IHJldDtcbitcdHVuc2lnbmVkIGxvbmcgbWluO1xuIFxuK1x0bWluID0gcmFuZ2VfbG87XG4gXHRkbyB7XG4rXHRcdHJhbmdlX2xvID0gbWF4KG1pbiwgKm5leHQpO1xuK1x0XHRyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIHJhbmdlX2xvLCByYW5nZV9oaSwgMSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHJhbmdlX2xvIFx1MDAzZSBtaW4pIHtcbitcdFx0XHRtYXNfcmVzZXQobWFzKTtcbitcdFx0XHRyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIG1pbiwgcmFuZ2VfaGksIDEpO1xuK1x0XHRcdGlmIChyZXQgPT0gMClcbitcdFx0XHRcdHJldCA9IDE7XG4rXHRcdH1cbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIG91dDtcbitcbiBcdFx0bWFzX2luc2VydChtYXMsIGVudHJ5KTtcbiBcdH0gd2hpbGUgKG1hc19ub21lbShtYXMsIGdmcCkpO1xuLVx0aWYgKG1hc19pc19lcnIobWFzKSlcbi1cdFx0cmV0dXJuIHhhX2VycihtYXMtXHUwMDNlbm9kZSk7XG4gXG4rXHRpZiAobWFzX2lzX2VycihtYXMpKSB7XG4rXHRcdHJldCA9IHhhX2VycihtYXMtXHUwMDNlbm9kZSk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0aWYgKChtYXMtXHUwMDNldHJlZS1cdTAwM2VtYV9mbGFncyBcdTAwMjYgTVRfRkxBR1NfQUxMT0NfV1JBUFBFRCkgXHUwMDI2XHUwMDI2IHJldCA9PSAwKSB7XG4rXHRcdG1hcy1cdTAwM2V0cmVlLVx1MDAzZW1hX2ZsYWdzIFx1MDAyNj0gfk1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQ7XG4rXHRcdHJldCA9IDE7XG4rXHR9XG4gXHQqc3RhcnRwID0gbWFzLVx1MDAzZWluZGV4O1xuIFx0Km5leHQgPSAqc3RhcnRwICsgMTtcbiBcdGlmICgqbmV4dCA9PSAwKVxuIFx0XHRtYXMtXHUwMDNldHJlZS1cdTAwM2VtYV9mbGFncyB8PSBNVF9GTEFHU19BTExPQ19XUkFQUEVEO1xuIFxuK291dDpcbiBcdG1hc19kZXN0cm95KG1hcyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC00MzYwLDggKzQ0NTEsOCBAQCB2b2lkICptYXNfd2FsayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiB7XG4gXHR2b2lkICplbnRyeTtcbiBcbi1cdGlmICghbWFzX2lzX2FjdGl2ZShtYXMpIFx1MDAyNlx1MDAyNiAhbWFzX2lzX3N0YXJ0KG1hcykpXG4tXHRcdG1hcy1cdTAwM2VzdGF0dXMgPSBtYV9zdGFydDtcbitcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4rXHRtYXNfbWFrZV93YWxrYWJsZShtYXMpO1xuIHJldHJ5OlxuIFx0ZW50cnkgPSBtYXNfc3RhdGVfd2FsayhtYXMpO1xuIFx0aWYgKG1hc19pc19zdGFydChtYXMpKSB7XG5AQCAtNDgzMSw2ICs0OTIyLDcgQEAgdm9pZCAqbWFzX3N0b3JlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSlcbiB7XG4gXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xuIFxuK1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdHRyYWNlX21hX3dyaXRlKFRQX0ZDVCwgbWFzLCAwLCBlbnRyeSk7XG4gI2lmZGVmIENPTkZJR19ERUJVR19NQVBMRV9UUkVFXG4gXHRpZiAoTUFTX1dBUk5fT04obWFzLCBtYXMtXHUwMDNlaW5kZXggXHUwMDNlIG1hcy1cdTAwM2VsYXN0KSlcbkBAIC00ODg5LDYgKzQ5ODEsNyBAQCBpbnQgbWFzX3N0b3JlX2dmcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnksIGdmcF90IGdmcClcbiBcdE1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBlbnRyeSk7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbitcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gcmV0cnk6XG4gXHRtYXNfd3JfcHJlYWxsb2NhdGUoXHUwMDI2d3JfbWFzLCBlbnRyeSk7XG4gXHRpZiAodW5saWtlbHkobWFzX25vbWVtKG1hcywgZ2ZwKSkpIHtcbkBAIC00OTE5LDYgKzUwMTIsNyBAQCB2b2lkIG1hc19zdG9yZV9wcmVhbGxvYyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnkpXG4ge1xuIFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIGVudHJ5KTtcbiBcbitcdG1hc19sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzLVx1MDAzZXN0b3JlX3R5cGUgPT0gd3Jfc3RvcmVfcm9vdCkge1xuIFx0XHRtYXNfd3JfcHJlYWxsb2Nfc2V0dXAoXHUwMDI2d3JfbWFzKTtcbiBcdFx0Z290byBzdG9yZTtcbkBAIC00OTUxLDYgKzUwNDUsNyBAQCBpbnQgbWFzX3ByZWFsbG9jYXRlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSwgZ2ZwX3QgZ2ZwKVxuIHtcbiBcdE1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBlbnRyeSk7XG4gXG4rXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0bWFzX3dyX3ByZWFsbG9jX3NldHVwKFx1MDAyNndyX21hcyk7XG4gXHRtYXMtXHUwMDNlc3RvcmVfdHlwZSA9IG1hc193cl9zdG9yZV90eXBlKFx1MDAyNndyX21hcyk7XG4gXHRtYXNfcHJlYWxsb2NfY2FsYyhcdTAwMjZ3cl9tYXMsIGVudHJ5KTtcbkBAIC00OTk3LDYgKzUwOTIsNyBAQCBzdGF0aWMgdm9pZCBtYXNfbWF5X2FjdGl2YXRlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIFx0XHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XG4gXHR9IGVsc2Uge1xuIFx0XHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfYWN0aXZlO1xuK1x0XHRtYXNfbG9ja19jaGVjayhtYXMpO1xuIFx0fVxuIH1cbiBcbkBAIC01MDc0LDYgKzUxNzAsNyBAQCB2b2lkICptYXNfbmV4dChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpXG4ge1xuIFx0dm9pZCAqZW50cnkgPSBOVUxMO1xuIFxuK1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfbmV4dF9zZXR1cChtYXMsIG1heCwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTA5Nyw2ICs1MTk0LDcgQEAgdm9pZCAqbWFzX25leHRfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbitcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzX25leHRfc2V0dXAobWFzLCBtYXgsIFx1MDAyNmVudHJ5KSlcbiBcdFx0cmV0dXJuIGVudHJ5O1xuIFxuQEAgLTUyMDUsNiArNTMwMyw3IEBAIHZvaWQgKm1hc19wcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbilcbiB7XG4gXHR2b2lkICplbnRyeSA9IE5VTEw7XG4gXG4rXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19wcmV2X3NldHVwKG1hcywgbWluLCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01MjI4LDYgKzUzMjcsNyBAQCB2b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pXG4ge1xuIFx0dm9pZCAqZW50cnkgPSBOVUxMO1xuIFxuK1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfcHJldl9zZXR1cChtYXMsIG1pbiwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTI3NCw2ICs1Mzc0LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwobXRfcHJldik7XG4gICovXG4gdm9pZCBtYXNfcGF1c2Uoc3RydWN0IG1hX3N0YXRlICptYXMpXG4ge1xuK1x0bWFzX2xvY2tfY2hlY2sobWFzKTtcbiBcdG1hcy1cdTAwM2VzdGF0dXMgPSBtYV9wYXVzZTtcbiBcdG1hcy1cdTAwM2Vub2RlID0gTlVMTDtcbiB9XG5AQCAtNTM4Miw2ICs1NDgzLDcgQEAgdm9pZCAqbWFzX2ZpbmQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbitcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzX2ZpbmRfc2V0dXAobWFzLCBtYXgsIFx1MDAyNmVudHJ5KSlcbiBcdFx0cmV0dXJuIGVudHJ5O1xuIFxuQEAgLTU0MDksNiArNTUxMSw3IEBAIHZvaWQgKm1hc19maW5kX3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heClcbiB7XG4gXHR2b2lkICplbnRyeSA9IE5VTEw7XG4gXG4rXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19maW5kX3NldHVwKG1hcywgbWF4LCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01NDI4LDcgKzU1MzEsNiBAQCBFWFBPUlRfU1lNQk9MX0dQTChtYXNfZmluZF9yYW5nZSk7XG4gc3RhdGljIGJvb2wgbWFzX2ZpbmRfcmV2X3NldHVwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbixcbiBcdFx0dm9pZCAqKmVudHJ5KVxuIHtcbi1cbiBcdHN3aXRjaCAobWFzLVx1MDAzZXN0YXR1cykge1xuIFx0Y2FzZSBtYV9hY3RpdmU6XG4gXHRcdGdvdG8gYWN0aXZlO1xuQEAgLTU1MjEsNiArNTYyMyw3IEBAIHZvaWQgKm1hc19maW5kX3JldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pXG4ge1xuIFx0dm9pZCAqZW50cnkgPSBOVUxMO1xuIFxuK1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfZmluZF9yZXZfc2V0dXAobWFzLCBtaW4sIFx1MDAyNmVudHJ5KSlcbiBcdFx0cmV0dXJuIGVudHJ5O1xuIFxuQEAgLTU1NDcsNiArNTY1MCw3IEBAIHZvaWQgKm1hc19maW5kX3JhbmdlX3JldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pXG4ge1xuIFx0dm9pZCAqZW50cnkgPSBOVUxMO1xuIFxuK1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfZmluZF9yZXZfc2V0dXAobWFzLCBtaW4sIFx1MDAyNmVudHJ5KSlcbiBcdFx0cmV0dXJuIGVudHJ5O1xuIFxuQEAgLTU1NjQsNiArNTY2OCwxMCBAQCBFWFBPUlRfU1lNQk9MX0dQTChtYXNfZmluZF9yYW5nZV9yZXYpO1xuICAqIFNlYXJjaGVzIGZvciBAbWFzLVx1MDAzZWluZGV4LCBzZXRzIEBtYXMtXHUwMDNlaW5kZXggYW5kIEBtYXMtXHUwMDNlbGFzdCB0byB0aGUgcmFuZ2UgYW5kXG4gICogZXJhc2VzIHRoYXQgcmFuZ2UuXG4gICpcbisgKiBOb3RlIHRoYXQgZXJhc2UgcmVxdWlyZXMgYWxsb2NhdGlvbnMgYW5kIHdpbGwgdXNlIEdGUF9LRVJORUwgdG8gZG8gc28gaWZcbisgKiBuZWNlc3NhcnkuICBJZiB0aGUgYWxsb2NhdGlvbiBmYWlscywgdGhlIGludGVybmFsIGxvY2sgd2lsbCBiZSBkcm9wcGVkIHRvXG4rICogcmV0cnkuXG4rICpcbiAgKiBSZXR1cm46IHRoZSBlbnRyeSB0aGF0IHdhcyBlcmFzZWQgb3IgJU5VTEwsIEBtYXMtXHUwMDNlaW5kZXggYW5kIEBtYXMtXHUwMDNlbGFzdCBhcmUgdXBkYXRlZC5cbiAgKi9cbiB2b2lkICptYXNfZXJhc2Uoc3RydWN0IG1hX3N0YXRlICptYXMpXG5AQCAtNTU3MiwxMyArNTY4MCwxOSBAQCB2b2lkICptYXNfZXJhc2Uoc3RydWN0IG1hX3N0YXRlICptYXMpXG4gXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gbWFzLVx1MDAzZWluZGV4O1xuIFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIE5VTEwpO1xuIFxuLVx0aWYgKCFtYXNfaXNfYWN0aXZlKG1hcykgfHwgIW1hc19pc19zdGFydChtYXMpKVxuLVx0XHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XG4rXHQvKlxuK1x0ICogSW4gbG93IG1lbW9yeSBzaXR1YXRpb25zLCB0aGUgYWxsb2NhdGlvbiBpcyByZXRyaWVkIHdpdGggdGhlIGdmcCBmbGFnXG4rXHQgKiBHRlBfS0VSTkVMLiAgVGhlIGludGVybmFsIHNwaW5sb2NrIGlzIGRyb3BwZWQgaW4gbWFzX25vbWVtKCksIGhvd2V2ZXJcbitcdCAqIHRoZSBleHRlcm5hbCBsb2NrIGlzIG5vdCBkcm9wcGVkLlxuK1x0ICovXG4rXHRpZiAobXRfZXh0ZXJuYWxfbG9jayhtYXMtXHUwMDNldHJlZSkpXG4rXHRcdG1pZ2h0X2FsbG9jKEdGUF9LRVJORUwpO1xuIFxuK1x0bWFzX21ha2Vfd2Fsa2FibGUobWFzKTtcbiB3cml0ZV9yZXRyeTpcbiBcdGVudHJ5ID0gbWFzX3N0YXRlX3dhbGsobWFzKTtcbiBcdGlmICghZW50cnkpXG4tXHRcdHJldHVybiBOVUxMO1xuK1x0XHRnb3RvIG91dDtcbiBcbiBcdC8qIE11c3QgcmVzZXQgdG8gZW5zdXJlIHNwYW5uaW5nIHdyaXRlcyBvZiBsYXN0IHNsb3QgYXJlIGRldGVjdGVkICovXG4gXHRtYXNfcmVzZXQobWFzKTtcbkBAIC01NTg5LDggKzU3MDMsMTAgQEAgdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIFx0XHRnb3RvIHdyaXRlX3JldHJ5O1xuIFx0fVxuIFxuLVx0aWYgKG1hc19pc19lcnIobWFzKSlcbitcdGlmIChtYXNfaXNfZXJyKG1hcykpIHtcbitcdFx0ZW50cnkgPSBOVUxMO1xuIFx0XHRnb3RvIG91dDtcbitcdH1cbiBcbiBcdG1hc193cl9zdG9yZV9lbnRyeShcdTAwMjZ3cl9tYXMpO1xuIG91dDpcbkBAIC01NjAxLDEwICs1NzE3LDExIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1hc19lcmFzZSk7XG4gXG4gLyoqXG4gICogbWFzX25vbWVtKCkgLSBDaGVjayBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgYWxsb2NhdGluZyBhbmQgZG8gdGhlIGFsbG9jYXRpb25cbi0gKiBpZiBuZWNlc3NhcnkgSWYgdGhlcmUgYXJlIGFsbG9jYXRpb25zLCB0aGVuIGZyZWUgdGhlbS5cbisgKiBpZiBuZWNlc3NhcnkuXG4rICpcbiAgKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGVcbiAgKiBAZ2ZwOiBUaGUgR0ZQX0ZMQUdTIHRvIHVzZSBmb3IgYWxsb2NhdGlvbnNcbi0gKiBSZXR1cm46IHRydWUgb24gYWxsb2NhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLlxuKyAqIFJldHVybjogRmFsc2Ugb24gbm8gbWVtb3J5LiAgVHJ1ZSBvdGhlcndpc2UgKHBhcnRpYWwgc3VjY2VzcyBhcyB3ZWxsKVxuICAqL1xuIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApXG4gXHRfX211c3RfaG9sZChtYXMtXHUwMDNldHJlZS1cdTAwM2VtYV9sb2NrKVxuQEAgLTU2MTIsNiArNTcyOSwxMCBAQCBib29sIG1hc19ub21lbShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgZ2ZwX3QgZ2ZwKVxuIFx0aWYgKGxpa2VseShtYXMtXHUwMDNlbm9kZSAhPSBNQV9FUlJPUigtRU5PTUVNKSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdC8qIEFsbG9jYXRpb25zIGNhbiBmYWlsLCBkb24ndCBkbyB0aGlzLiAqL1xuK1x0V0FSTl9PTl9PTkNFKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIG10X2V4dGVybmFsX2xvY2sobWFzLVx1MDAzZXRyZWUpKTtcbitcbiBcdGlmIChnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApIFx1MDAyNlx1MDAyNiAhbXRfZXh0ZXJuYWxfbG9jayhtYXMtXHUwMDNldHJlZSkpIHtcbiBcdFx0bXRyZWVfdW5sb2NrKG1hcy1cdTAwM2V0cmVlKTtcbiBcdFx0bWFzX2FsbG9jX25vZGVzKG1hcywgZ2ZwKTtcbkBAIC01NjIwLDEwICs1NzQxLDE3IEBAIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApXG4gXHRcdG1hc19hbGxvY19ub2RlcyhtYXMsIGdmcCk7XG4gXHR9XG4gXG4tXHRpZiAoIW1hcy1cdTAwM2VzaGVhZiBcdTAwMjZcdTAwMjYgIW1hcy1cdTAwM2VhbGxvYylcbitcdC8qXG4rXHQgKiBSZXR1cm4gZmFsc2Ugb24gemVybyBmb3J3YXJkIHByb2dyZXNzLiAgUGFydGlhbCBhbGxvY2F0aW9ucyBhcmUga2VwdFxuK1x0ICogc28gdGhlIHJldHJ5IHBhdGggd2lsbCBhdHRlbXB0IHRvIGdldCB0aGUgcmVzdC4gIFRoZSBmYWlsdXJlIHNob3VsZFxuK1x0ICogbm90IGhhcHBlbiBhcyB3ZSB0cnkgb3VyIGJlc3QgdG8gcmVjbGFpbS4gIFRoZSB1c2VyIHdvdWxkIG5lZWQgYW5cbitcdCAqIGV4dGVybmFsIGxvY2sgd2l0aCBhIG5vbi1ibG9ja2luZyBnZnAgaW4gYSBsb3cgbWVtb3J5IHNpdHVhdGlvbiAtXG4rXHQgKiB3aGljaCB3b3VsZCBoYXZlIHRyaWdnZXJlZCB0aGUgZmlyc3Qgd2FybmluZyBpbiB0aGlzIGZ1bmN0aW9uLlxuK1x0ICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFtYXMtXHUwMDNlc2hlYWYgXHUwMDI2XHUwMDI2ICFtYXMtXHUwMDNlYWxsb2MpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XG4rXHRtYXNfcmVzZXQobWFzKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbkBAIC01OTEzLDYgKzYwNDEsMTAgQEAgRVhQT1JUX1NZTUJPTChtdHJlZV9hbGxvY19ycmFuZ2UpO1xuICAqIEVyYXNpbmcgaXMgdGhlIHNhbWUgYXMgYSB3YWxrIHRvIGFuIGVudHJ5IHRoZW4gYSBzdG9yZSBvZiBhIE5VTEwgdG8gdGhhdFxuICAqIEVOVElSRSByYW5nZS4gIEluIGZhY3QsIGl0IGlzIGltcGxlbWVudGVkIGFzIHN1Y2ggdXNpbmcgdGhlIGFkdmFuY2VkIEFQSS5cbiAgKlxuKyAqIE5vdGUgdGhhdCBlcmFzZSByZXF1aXJlcyBhbGxvY2F0aW9ucyBhbmQgd2lsbCB1c2UgR0ZQX0tFUk5FTCB0byBkbyBzbyBpZlxuKyAqIG5lY2Vzc2FyeS4gIElmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgaW50ZXJuYWwgbG9jayB3aWxsIGJlIGRyb3BwZWQgdG9cbisgKiByZXRyeS5cbisgKlxuICAqIFJldHVybjogVGhlIGVudHJ5IHN0b3JlZCBhdCB0aGUgQGluZGV4IG9yICVOVUxMXG4gICovXG4gdm9pZCAqbXRyZWVfZXJhc2Uoc3RydWN0IG1hcGxlX3RyZWUgKm10LCB1bnNpZ25lZCBsb25nIGluZGV4KVxuQEAgLTU5MjIsNiArNjA1NCw3IEBAIHZvaWQgKm10cmVlX2VyYXNlKHN0cnVjdCBtYXBsZV90cmVlICptdCwgdW5zaWduZWQgbG9uZyBpbmRleClcbiBcdE1BX1NUQVRFKG1hcywgbXQsIGluZGV4LCBpbmRleCk7XG4gXHR0cmFjZV9tYV9vcChUUF9GQ1QsIFx1MDAyNm1hcyk7XG4gXG4rXHRtaWdodF9hbGxvYyhHRlBfS0VSTkVMKTtcbiBcdG10cmVlX2xvY2sobXQpO1xuIFx0ZW50cnkgPSBtYXNfZXJhc2UoXHUwMDI2bWFzKTtcbiBcdG10cmVlX3VubG9jayhtdCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY1xuaW5kZXggMDYwNzkxM2EzMDIyZDUuLmQ5NjdlNzZhM2MwNjUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNcbisrKyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jXG5AQCAtMzUyMzQsNyArMzUyMzQsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfcHJlYWxsb2Moc3RydWN0IG1hcGxlX3RyZWUgKm10KVxuIFx0bXRfc2V0X25vbl9rZXJuZWwoMSk7XG4gXHQvKiBTcGFubmluZyBzdG9yZSAqL1xuIFx0bWFzX3NldF9yYW5nZShcdTAwMjZtYXMsIDEsIDEwMCk7XG4tXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX0tFUk5FTCBcdTAwMjYgR0ZQX05PV0FJVCkgPT0gMCk7XG4rXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX05PV0FJVCkgPT0gMCk7XG4gXHRhbGxvY2F0ZWQgPSBtYXNfYWxsb2NhdGVkKFx1MDAyNm1hcyk7XG4gXHRoZWlnaHQgPSBtYXNfbXRfaGVpZ2h0KFx1MDAyNm1hcyk7XG4gXHRNVF9CVUdfT04obXQsIGFsbG9jYXRlZCAhPSAwKTtcbkBAIC0zNTI1Nyw3ICszNTI1Nyw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19wcmVhbGxvYyhzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQpXG4gXHRNVF9CVUdfT04obXQsIG1hc19hbGxvY2F0ZWQoXHUwMDI2bWFzKSAhPSAwKTtcbiBcdG1hc19zZXRfcmFuZ2UoXHUwMDI2bWFzLCAwLCAyMDApO1xuIFx0bXRfc2V0X25vbl9rZXJuZWwoMSk7XG4tXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX0tFUk5FTCBcdTAwMjYgR0ZQX05PV0FJVCkgPT0gMCk7XG4rXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX05PV0FJVCkgPT0gMCk7XG4gXHRhbGxvY2F0ZWQgPSBtYXNfYWxsb2NhdGVkKFx1MDAyNm1hcyk7XG4gXHRoZWlnaHQgPSBtYXNfbXRfaGVpZ2h0KFx1MDAyNm1hcyk7XG4gXHRNVF9CVUdfT04obXQsIGFsbG9jYXRlZCAhPSAwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI0OjU1LjM4OTM3NTY5N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5ODU0MDE2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCdzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIHN0dWZmIOKAkyB0aGUgTWFwbGUgVHJlZSwgbG9ja2RlcCwgYW5kIHRoZSBkb2N1bWVudGF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBmYWlybHkgc3Vic3RhbnRpYWwgY2hhbmdlLiBJIHNlZSB0aGV5J3JlIGludHJvZHVjaW5nIGBsb2NrX3NlcXVlbmNlYCBpbnRvIGxvY2tkZXAsIGFkZGluZyBgbGRfc2VxYCB0byB0aGUgYHN0cnVjdCBtYV9zdGF0ZWAgd2l0aGluIHRoZSBtYXBsZSB0cmVlIGNvZGUsIGFuZCBpbXBvcnRhbnRseSwgdGhleSdyZSBlbWJlZGRpbmcgbG9ja2RlcCBjaGVja3Mgd2l0aGluIGNvcmUgTWFwbGUgVHJlZSBvcGVyYXRpb25zIGxpa2UgYG1hc19sb2NrX2NoZWNrYCwgYG1hc19pbml0X2xvY2tfY2hlY2tgLCBhbmQgYG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrYC4gSSBub3RlIHRoZSBjaGFuZ2VzIHRvIGBtYXNfZXJhc2VgIHRvIGhhbmRsZSBwb3RlbnRpYWwgbG93LW1lbW9yeSBzY2VuYXJpb3MsIGluY2x1ZGluZyB0aGUgaW50cm9kdWN0aW9uIG9mIGBtaWdodF9hbGxvYyhHRlBfS0VSTkVMKWAgd2hlbiBhbiBleHRlcm5hbCBsb2NrIGlzIGluIHBsYXkuIEkgYWxzbyBzZWUgbW9kaWZpY2F0aW9ucyB0byBgbWFzX3dyX25vZGVfc3RvcmVgIGFuZCBgbWFzX3dyX3N0b3JlX3R5cGVgLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHJlcXVpcmVzIGNhcmVmdWwgc2NydXRpbnkuIFNpbmNlIHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSB0aGUgTWFwbGUgVHJlZSBpbXBsZW1lbnRhdGlvbiBhbmQgbG9ja2RlcCwgSSBrbm93IGZ1enppbmcgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbC4gV2UgbmVlZCB0byBleHBvc2UgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgbWVtb3J5IHByb2JsZW1zIGVhcmx5LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aG9zZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gRm9yIGxvY2tkZXAsIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYENPTkZJR19MT0NLREVQYCBpcyB0aGUga2V5LiBXaXRoIHRoZSBNYXBsZSBUcmVlLCBpdCdzIGJha2VkIGludG8gdGhlIGtlcm5lbC4gQWx0aG91Z2ggYWx3YXlzIGVuYWJsZWQsIEkga25vdyBgQ09ORklHX0RFQlVHX01BUExFX1RSRUVgIHdvdWxkIGJlIGhlbHBmdWwgd2hlbiBkZWJ1Z2dpbmcuIEkgc2hvdWxkIHByb2JhYmx5IGRvIGEgcXVpY2sgYGdpdCBncmVwYCBvbiB0aGUgY29uZmlncyB0byBjb25maXJtIGFueSBzcGVjaWZpYyBjb25maWdzIHRoYXQgYXBwbHkgdG8gdGhlIE1hcGxlIFRyZWUgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NjgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMjoyNTowMS4zNzQ3ODI5MDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1MDE2NTYwMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BUExFX1RSRUVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI1OjAzLjgyNDk2MDIxOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3ODEyOTc5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipLY29uZmlnIEluc3BlY3Rpb24gZm9yIE1hcGxlIFRyZWUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE1hcGxlIFRyZWUgaXMgYmVpbmcgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBzeXN0ZW0uIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgbGliL0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIG1hbnkga2VybmVsIHN1YnN5c3RlbXMgYXJlIGRlZmluZWQuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGlzIGZpbGUgd2lsbCBsaWtlbHkgY29udGFpbiB0aGUgb3B0aW9ucyByZWxhdGVkIHRvIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgTWFwbGUgVHJlZSBmZWF0dXJlLCBtYXliZSBzb21lIGFzc29jaWF0ZWQgcGFyYW1ldGVycywgYW5kIHBvdGVudGlhbGx5IGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGNvbXBvbmVudHMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBjb25maWd1cmF0aW9uIGNvbnRyb2xzIGFyZSBpbiBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE1OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI1OjA5LjYwNjI2MjE0OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTI2OTg0NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFQTEVfVFJFRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6MjU6MDkuNjcxNTQ3OTEyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2NzgzNDcwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkxvY2tpbmcgQ29uZmlndXJhdGlvbnMgaW4gdGhlIEtlcm5lbCoqXG5cblJpZ2h0LCBzbyB0aGUgTWFwbGUgdHJlZSBpcyBhbHdheXMgZW5hYmxlZCwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGBDT05GSUdfTE9DS0RFUGAuIFNpbmNlIGBQUk9WRV9MT0NLSU5HYCBpcyBtZW50aW9uZWQsIEkga25vdyBgTE9DS0RFUGAgaXMgYmVpbmcgaW5kaXJlY3RseSBlbmFibGVkLiBNYWtlcyBzZW5zZS4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhlIGxvY2tpbmcgcmVxdWlyZW1lbnRzIHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBjaGFuZ2UgYmVpbmcgZGlzY3Vzc2VkLiBBbmQgc2luY2UgdGhlIHBhdGNoIG1lbnRpb25zIGBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RgIHNwZWNpZmljYWxseSwgdGhhdCB3YXJyYW50cyBhIGRlZXBlciBsb29rLiBJJ2xsIG5lZWQgdG8gcmVjYWxsIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBzZXR0aW5nLiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBncmFjZSBwZXJpb2QgaGFuZGxpbmcsIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBuZXcgTWFwbGUgdHJlZSBpbXBsZW1lbnRhdGlvbiBpcyBwcm9iYWJseSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2guIExldCdzIHNlZSBob3cgdGhhdCBjb21lcyBpbnRvIHBsYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzMzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6MjU6MTMuMDM5Mzg1Nzk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzkzODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlJDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9tYXBsZV90cmVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL21hcGxlX3RyZWUuYz0xMTcyPXN0YXRpYyB2b2lkIG1hc19sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbi0tXFxubGliL21hcGxlX3RyZWUuYy0xMTc4LVxcbmxpYi9tYXBsZV90cmVlLmM6MTE3OTojaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXFxubGliL21hcGxlX3RyZWUuYy0xMTgwLVxcdGlmICghbXRfbG9ja2VkKG1hcy1cXHUwMDNldHJlZSkpIHtcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmMtMTE4My1cXHR9XFxubGliL21hcGxlX3RyZWUuYzoxMTg0OiNlbmRpZiAvKiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QgKi9cXG5saWIvbWFwbGVfdHJlZS5jLTExODUtXFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jPTExOTM9c3RhdGljIHZvaWQgbWFzX2luaXRfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmMtMTE5Ni1cXHRzdHJ1Y3QgbG9ja2RlcF9tYXAgKm1hcDtcXG5saWIvbWFwbGVfdHJlZS5jOjExOTc6I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxcbmxpYi9tYXBsZV90cmVlLmMtMTE5OC1cXHRpZiAoIW10X2xvY2tlZChtYXMtXFx1MDAzZXRyZWUpKSB7XFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jLTEyMDItXFx0fVxcbmxpYi9tYXBsZV90cmVlLmM6MTIwMzojZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXFxubGliL21hcGxlX3RyZWUuYy0xMjA0LVxcbi0tXFxubGliL21hcGxlX3RyZWUuYz0xMjEyPXN0YXRpYyB2b2lkIG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbi0tXFxubGliL21hcGxlX3RyZWUuYy0xMjE0LSNpZmRlZiBDT05GSUdfTE9DS0RFUFxcbmxpYi9tYXBsZV90cmVlLmM6MTIxNTojaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXFxubGliL21hcGxlX3RyZWUuYy0xMjE2LVxcdGlmIChtYXNfaXNfc3RhcnQobWFzKSB8fCBtYXNfaXNfcGF1c2VkKG1hcykpIHtcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmMtMTIxOS1cXHR9XFxubGliL21hcGxlX3RyZWUuYzoxMjIwOiNlbmRpZiAvKiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QgKi9cXG5saWIvbWFwbGVfdHJlZS5jLTEyMjEtXFx0bWFzX2xvY2tfY2hlY2sobWFzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6MjU6MTMuMTAxMTg3MjU5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3MTQxODI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgUkNVIGFuZCBMb2NraW5nIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RgIGlzIGRlZmluaXRlbHkgaW4gcGxheS4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIHBvc3NpYmlsaXRpZXMgYSBiaXQgd2hlbiBjb25zaWRlcmluZyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIGFuZCBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIHRoZSBiYWNrIG9mIG15IG1pbmQuIFRoZW4sICpvZiBjb3Vyc2UqIGBDT05GSUdfTE9DS0RFUGAgaXMgZW5hYmxlZC4gVGhhdCdzIGdvb2Q7IGl0IG1lYW5zIHdlIGhhdmUgZXh0cmEgc2FmZXR5IGNoZWNrcywgd2hpY2ggaXMgYWx3YXlzIHdlbGNvbWUsIGV2ZW4gaWYgaXQgbWlnaHQgYWRkIHNvbWUgb3ZlcmhlYWQuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoZXNlIGRlYnVnIGNvbmZpZ3VyYXRpb25zIGNhbiBhZmZlY3QgcGVyZm9ybWFuY2Ugd2hlbiBJJ20gbG9va2luZyBhdCB0aW1pbmcgcHJvZmlsZXMgbGF0ZXIgb24uIE9rYXksIHdoYXQgZWxzZSBpcyBpbiBwbGF5PyBMZXQncyBhbHNvIHZlcmlmeSB3aGV0aGVyIGBDT05GSUdfREVCVUdfTUFQTEVfVFJFRWAgaXMgZW5hYmxlZC4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUgYXQgaGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMjoyNToxNi43NzI2MTA3MTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDk5NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFQlVHX01BUExFX1RSRUVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL21hcGxlX3RyZWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvbWFwbGVfdHJlZS5jPTk2PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbWFwbGVfbm9kZV9jYWNoZTtcXG5saWIvbWFwbGVfdHJlZS5jLTk3LVxcbmxpYi9tYXBsZV90cmVlLmM6OTg6I2lmZGVmIENPTkZJR19ERUJVR19NQVBMRV9UUkVFXFxubGliL21hcGxlX3RyZWUuYy05OS1zdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBtdF9tYXhbXSA9IHtcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmM9NDkyMT12b2lkICptYXNfc3RvcmUoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5KVxcbi0tXFxubGliL21hcGxlX3RyZWUuYy00OTI2LVxcdHRyYWNlX21hX3dyaXRlKFRQX0ZDVCwgbWFzLCAwLCBlbnRyeSk7XFxubGliL21hcGxlX3RyZWUuYzo0OTI3OiNpZmRlZiBDT05GSUdfREVCVUdfTUFQTEVfVFJFRVxcbmxpYi9tYXBsZV90cmVlLmMtNDkyOC1cXHRpZiAoTUFTX1dBUk5fT04obWFzLCBtYXMtXFx1MDAzZWluZGV4IFxcdTAwM2UgbWFzLVxcdTAwM2VsYXN0KSlcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmM9NjM5Mj12b2lkICptdF9maW5kKHN0cnVjdCBtYXBsZV90cmVlICptdCwgdW5zaWduZWQgbG9uZyAqaW5kZXgsIHVuc2lnbmVkIGxvbmcgbWF4KVxcbi0tXFxubGliL21hcGxlX3RyZWUuYy02Mzk1LVxcdHZvaWQgKmVudHJ5O1xcbmxpYi9tYXBsZV90cmVlLmM6NjM5NjojaWZkZWYgQ09ORklHX0RFQlVHX01BUExFX1RSRUVcXG5saWIvbWFwbGVfdHJlZS5jLTYzOTctXFx0dW5zaWduZWQgbG9uZyBjb3B5ID0gKmluZGV4O1xcbi0tXFxubGliL21hcGxlX3RyZWUuYy02NDI4LVxcdFxcdCppbmRleCA9IG1hcy5sYXN0ICsgMTtcXG5saWIvbWFwbGVfdHJlZS5jOjY0Mjk6I2lmZGVmIENPTkZJR19ERUJVR19NQVBMRV9UUkVFXFxubGliL21hcGxlX3RyZWUuYy02NDMwLVxcdFxcdGlmIChNVF9XQVJOX09OKG10LCAoKmluZGV4KSBcXHUwMDI2XFx1MDAyNiAoKCppbmRleCkgXFx1MDAzYz0gY29weSkpKVxcbi0tXFxubGliL21hcGxlX3RyZWUuYz02NDYwPUVYUE9SVF9TWU1CT0wobXRfZmluZF9hZnRlcik7XFxubGliL21hcGxlX3RyZWUuYy02NDYxLVxcbmxpYi9tYXBsZV90cmVlLmM6NjQ2MjojaWZkZWYgQ09ORklHX0RFQlVHX01BUExFX1RSRUVcXG5saWIvbWFwbGVfdHJlZS5jLTY0NjMtYXRvbWljX3QgbWFwbGVfdHJlZV90ZXN0c19ydW47XFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jPTcxNzY9RVhQT1JUX1NZTUJPTF9HUEwobWFzX3dyX2R1bXApO1xcbmxpYi9tYXBsZV90cmVlLmMtNzE3Ny1cXG5saWIvbWFwbGVfdHJlZS5jOjcxNzg6I2VuZGlmIC8qIENPTkZJR19ERUJVR19NQVBMRV9UUkVFICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI1OjE2LjgzNTEyMzk2N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTYzNzUyNDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWFwbGUgVHJlZSBQYXRjaCBmb3IgUG90ZW50aWFsIElzc3VlcyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIE1hcGxlIFRyZWUgY29kZS4gRW5hYmxpbmcgYERFQlVHX01BUExFX1RSRUVgIGlzIGEgZ29vZCBmaXJzdCBzdGVwIHRvIGhlbHAgd2l0aCBkZWJ1Z2dpbmcuIEkgc2hvdWxkIGFsc28gY2hlY2sgYFBST1ZFX0xPQ0tJTkdgIHRvIGVuYWJsZSBgTE9DS0RFUGAsIHdoaWNoIHdpbGwgYmUgY3J1Y2lhbCBmb3IgYW5hbHl6aW5nIGFueSBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gdGhlIHNwZWNpZmljcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYSByYW5nZSBvZiBNYXBsZSBUcmVlIGZ1bmN0aW9uczogYG1hc19lcmFzZWAsIGBtYXNfbm9tZW1gLCBgbWFzX2FsbG9jX2N5Y2xpY2AsIGBtYXNfd3Jfbm9kZV9zdG9yZWAsIGBtYXNfd3Jfc3RvcmVfdHlwZWAsIGBtYXNfc3RvcmVgLCBgbWFzX3N0b3JlX2dmcGAsIGBtYXNfc3RvcmVfcHJlYWxsb2NgLCBgbWFzX3ByZWFsbG9jYXRlYCwgYG1hc19uZXh0YCwgYG1hc19uZXh0X3JhbmdlYCwgYG1hc19wcmV2YCwgYG1hc19wcmV2X3JhbmdlYCwgYG1hc19maW5kYCwgYG1hc19maW5kX3JhbmdlYCwgYG1hc19maW5kX3JldmAsIGBtYXNfZmluZF9yYW5nZV9yZXZgLCBhbmQgYG10cmVlX2VyYXNlYC4gR2l2ZW4gdGhlIE1hcGxlIFRyZWUncyBpbXBvcnRhbmNlIGluIHRoZSBrZXJuZWwsIGVzcGVjaWFsbHkgZm9yIHRoaW5ncyBsaWtlIFZNQSBtYW5hZ2VtZW50LCBJIHNob3VsZCBjYXJlZnVsbHkgZXZhbHVhdGUgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgd2hpY2ggc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBtb3N0IGxpa2VseSB0byBiZSBwcm9ibGVtYXRpYy4gYG1hc19lcmFzZWAsIGBtYXNfbm9tZW1gLCBgbWFzX2FsbG9jX2N5Y2xpY2AsIGBtYXNfd3Jfbm9kZV9zdG9yZWAsIGBtYXNfd3Jfc3RvcmVfdHlwZWAsIGBtYXNfc3RvcmVfZ2ZwYCwgYG1hc19zdG9yZV9wcmVhbGxvY2AsIGBtYXNfcHJlYWxsb2NhdGVgLCBhbmQgYG10cmVlX2VyYXNlYCBzZWVtIGxpa2UgdGhleSBtaWdodCBiZSBtb3JlIGludGVyZXN0aW5nIHRoYW4gdGhlIGdlbmVyYWwgcGF0aCBvbmVzIGxpa2UgYG1hc19uZXh0YCwgYG1hc19wcmV2YCwgYW5kIGBtYXNfZmluZGAgd2hpY2ggYXJlIHByb2JhYmx5IHdlbGwtdGVzdGVkIGFuZCBmcmVxdWVudGx5IHVzZWQuIEknbGwgZm9jdXMgb24gdGhlIGZpcnN0IGdyb3VwLiBJdCdzIGxpa2VseSB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMgd2lsbCBuZWVkIG1vcmUgaW4tZGVwdGggcmV2aWV3LlxuXG5PaCwgYW5kIEkgYWxzbyBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYGxvY2tfc2VxdWVuY2VgIGluIGBsb2NrZGVwLmNgLiBUaGF0J3MgZGVmaW5pdGVseSByZWxhdGVkIHRvIHRoaXMsIGdpdmVuIHRoZSBgTE9DS0RFUGAgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwMDAsIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI1OjI0LjM5ODg5MDAzNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NzE3ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19NQVBMRV9UUkVFXCIsXG4gICAgXCJMT0NLREVQXCIsXG4gICAgXCJQUk9WRV9MT0NLSU5HXCIsXG4gICAgXCJSQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hc19lcmFzZVwiLFxuICAgIFwibWFzX25vbWVtXCIsXG4gICAgXCJtYXNfYWxsb2NfY3ljbGljXCIsXG4gICAgXCJtYXNfd3Jfbm9kZV9zdG9yZVwiLFxuICAgIFwibWFzX3dyX3N0b3JlX3R5cGVcIixcbiAgICBcIm1hc19zdG9yZV9nZnBcIixcbiAgICBcIm1hc19zdG9yZV9wcmVhbGxvY1wiLFxuICAgIFwibWFzX3ByZWFsbG9jYXRlXCIsXG4gICAgXCJtdHJlZV9lcmFzZVwiLFxuICAgIFwibG9ja19zZXF1ZW5jZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWFwbGUgdHJlZSBsb2dpYywgaW5jbHVkaW5nIGVyYXNlLCBhbGxvY2F0aW9uLCBhbmQgc3RvcmUgb3BlcmF0aW9ucywgYW5kIGludHJvZHVjZXMgbG9jayBzZXF1ZW5jZSB0cmFja2luZyBpbiBsb2NrZGVwIHRvIHZlcmlmeSBtYXBsZSB0cmVlIGxvY2tpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIGFyZSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVCVUdfTUFQTEVfVFJFRVwiLFxuICAgIFwiTE9DS0RFUFwiLFxuICAgIFwiUFJPVkVfTE9DS0lOR1wiLFxuICAgIFwiUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYXNfZXJhc2VcIixcbiAgICBcIm1hc19ub21lbVwiLFxuICAgIFwibWFzX2FsbG9jX2N5Y2xpY1wiLFxuICAgIFwibWFzX3dyX25vZGVfc3RvcmVcIixcbiAgICBcIm1hc193cl9zdG9yZV90eXBlXCIsXG4gICAgXCJtYXNfc3RvcmVfZ2ZwXCIsXG4gICAgXCJtYXNfc3RvcmVfcHJlYWxsb2NcIixcbiAgICBcIm1hc19wcmVhbGxvY2F0ZVwiLFxuICAgIFwibXRyZWVfZXJhc2VcIixcbiAgICBcImxvY2tfc2VxdWVuY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1hcGxlIHRyZWUgbG9naWMsIGluY2x1ZGluZyBlcmFzZSwgYWxsb2NhdGlvbiwgYW5kIHN0b3JlIG9wZXJhdGlvbnMsIGFuZCBpbnRyb2R1Y2VzIGxvY2sgc2VxdWVuY2UgdHJhY2tpbmcgaW4gbG9ja2RlcCB0byB2ZXJpZnkgbWFwbGUgdHJlZSBsb2NraW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGRhdGEgc3RydWN0dXJlcyBhbmQgbG9ja2luZyB2YWxpZGF0aW9uLCB3aGljaCBhcmUgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowsc2pt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 02:13:26 +0000 UTC FinishedAt: 2026-07-01 02:25:26 +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": "15654b0268cd65b4e673510c0377774e61b86397", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_MAPLE_TREE", "LOCKDEP", "PROVE_LOCKING", "RCU_STRICT_GRACE_PERIOD" ], "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": "15654b0268cd65b4e673510c0377774e61b86397", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEBUG_MAPLE_TREE", "LOCKDEP", "PROVE_LOCKING", "RCU_STRICT_GRACE_PERIOD" ], "series_id": "900befcc-c517-4d2e-b865-ae24029c312a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mas_erase", "mas_nomem", "mas_alloc_cyclic", "mas_wr_node_store", "mas_wr_store_type", "mas_store_gfp", "mas_store_prealloc", "mas_preallocate", "mtree_erase", "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+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX01BUExFX1RSRUUmIzM0OywKICAgICYjMzQ7TE9DS0RFUCYjMzQ7LAogICAgJiMzNDtQUk9WRV9MT0NLSU5HJiMzNDssCiAgICAmIzM0O1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFzX2VyYXNlJiMzNDssCiAgICAmIzM0O21hc19ub21lbSYjMzQ7LAogICAgJiMzNDttYXNfYWxsb2NfY3ljbGljJiMzNDssCiAgICAmIzM0O21hc193cl9ub2RlX3N0b3JlJiMzNDssCiAgICAmIzM0O21hc193cl9zdG9yZV90eXBlJiMzNDssCiAgICAmIzM0O21hc19zdG9yZV9nZnAmIzM0OywKICAgICYjMzQ7bWFzX3N0b3JlX3ByZWFsbG9jJiMzNDssCiAgICAmIzM0O21hc19wcmVhbGxvY2F0ZSYjMzQ7LAogICAgJiMzNDttdHJlZV9lcmFzZSYjMzQ7LAogICAgJiMzNDtsb2NrX3NlcXVlbmNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWFwbGUgdHJlZSBsb2dpYywgaW5jbHVkaW5nIGVyYXNlLCBhbGxvY2F0aW9uLCBhbmQgc3RvcmUgb3BlcmF0aW9ucywgYW5kIGludHJvZHVjZXMgbG9jayBzZXF1ZW5jZSB0cmFja2luZyBpbiBsb2NrZGVwIHRvIHZlcmlmeSBtYXBsZSB0cmVlIGxvY2tpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIGFyZSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNmFlNGNiNGI5OGVmNmQ1Njk0N2Q1YzMyNDcwZTljYzU4OGVkMWNlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwMjoyNDo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdFxuaW5kZXggY2NkZDE2MTVjZjk3NGYuLjFlYWUyNGE5YzE4YjRhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdFxuQEAgLTE3LDcgJiM0MzsxNyw4IEBAIHN1cHBvcnRzIGl0ZXJhdGluZyBvdmVyIGEgcmFuZ2Ugb2YgZW50cmllcyBhbmQgZ29pbmcgdG8gdGhlIHByZXZpb3VzIG9yIG5leHRcbiBlbnRyeSBpbiBhIGNhY2hlLWVmZmljaWVudCBtYW5uZXIuICBUaGUgdHJlZSBjYW4gYWxzbyBiZSBwdXQgaW50byBhbiBSQ1Utc2FmZVxuIG1vZGUgb2Ygb3BlcmF0aW9uIHdoaWNoIGFsbG93cyByZWFkaW5nIGFuZCB3cml0aW5nIGNvbmN1cnJlbnRseS4gIFdyaXRlcnMgbXVzdFxuIHN5bmNocm9uaXplIG9uIGEgbG9jaywgd2hpY2ggY2FuIGJlIHRoZSBkZWZhdWx0IHNwaW5sb2NrLCBvciB0aGUgdXNlciBjYW4gc2V0XG4tdGhlIGxvY2sgdG8gYW4gZXh0ZXJuYWwgbG9jayBvZiBhIGRpZmZlcmVudCB0eXBlLlxuJiM0Mzt0aGUgbG9jayB0byBhbiBleHRlcm5hbCBsb2NrIG9mIGEgZGlmZmVyZW50IHR5cGUuICBOb3RlIHRoYXQgZXh0ZXJuYWwgbG9ja3MgbWF5XG4mIzQzO2ludGVyZmVyZSB3aXRoIGFsbG9jYXRpb25zIGluIGEgbG93IG1lbW9yeSBzaXR1YXRpb24uXG4gXG4gVGhlIE1hcGxlIFRyZWUgbWFpbnRhaW5zIGEgc21hbGwgbWVtb3J5IGZvb3RwcmludCBhbmQgd2FzIGRlc2lnbmVkIHRvIHVzZVxuIG1vZGVybiBwcm9jZXNzb3IgY2FjaGUgZWZmaWNpZW50bHkuICBUaGUgbWFqb3JpdHkgb2YgdGhlIHVzZXJzIHdpbGwgYmUgYWJsZSB0b1xuQEAgLTQyLDYgJiM0Mzs0MywxNSBAQCBzdWNjZXNzZnVsIHN0b3JlIG9wZXJhdGlvbiB3aXRoaW4gYSBnaXZlblxuIGNvZGUgc2VnbWVudCB3aGVuIGFsbG9jYXRpbmcgY2Fubm90IGJlIGRvbmUuICBBbGxvY2F0aW9ucyBvZiBub2RlcyBhcmVcbiByZWxhdGl2ZWx5IHNtYWxsIGF0IGFyb3VuZCAyNTYgYnl0ZXMuXG4gXG4mIzQzO1NpbmNlIHRoZSBtYXBsZSB0cmVlIHVzZXMgaW50ZXJuYWwgbm9kZXMgdGhhdCBhcmUgYWxsb2NhdGVkIGFuZCBoYXMgcnVsZXMgb25cbiYjNDM7ZGF0YSBkZW5zaXR5LCBlcmFzaW5nIGFuIGVudHJ5IG1heSBjYXVzZSBhbGxvY2F0aW9ucyB0byBvY2N1ci4gIFRoYXQgaXMsXG4mIzQzO2VyYXNpbmcgYW4gZW50cnkgbWF5IGNvbnN1bWUgbWVtb3J5LiAgVXNlcnMgbXVzdCB0YWtlIGNhcmUgdG8gZW5zdXJlIHRoYXQgdGhleVxuJiM0MztkbyBub3QgdmlvbGF0ZSB0aGUgbGFyZ2VyIHN5c3RlbSBjb25zdHJhaW50cyBvbiB3aGVuIGFuZCBob3cgbWVtb3J5IGlzXG4mIzQzO2FsbG9jYXRlZC4gIE1vc3Qgc2l0dWF0aW9ucyBhcmUgZmluZSB0byBhbGxvY2F0ZSwgYnV0IHRoZSBwcmUtYWxsb2NhdGlvblxuJiM0MztzdXBwb3J0IGlzIHByb3ZpZGVkIGFzIGEgbWVjaGFuaXNtIHRvIGF2b2lkIHRyaWNraWVyIHNpdHVhdGlvbnMuICBUaGVyZSBpcyBhbHNvXG4mIzQzO3RoZSBwb3NzaWJpbGl0eSBvZiB1c2luZyBzcGVjaWFsIGVudHJpZXMgYW5kIGNsZWFuIHVwIHRoZSB0cmVlIGxhdGVyLCBpblxuJiM0MztleHRyZW1lIGNpcmN1bXN0YW5jZXMuXG4mIzQzO1xuIC4uIF9tYXBsZS10cmVlLW5vcm1hbC1hcGk6XG4gXG4gTm9ybWFsIEFQSVxuQEAgLTYzLDcgJiM0Mzs3Myw4IEBAIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UuICBtdHJlZV9zdG9yZV9yYW5nZSgpIHdvcmtzIGluIHRoZSBzYW1lIHdheVxuIGJ1dCB0YWtlcyBhIHJhbmdlLiAgbXRyZWVfbG9hZCgpIGlzIHVzZWQgdG8gcmV0cmlldmUgdGhlIGVudHJ5IHN0b3JlZCBhdCBhXG4gZ2l2ZW4gaW5kZXguICBZb3UgY2FuIHVzZSBtdHJlZV9lcmFzZSgpIHRvIGVyYXNlIGFuIGVudGlyZSByYW5nZSBieSBvbmx5XG4ga25vd2luZyBvbmUgdmFsdWUgd2l0aGluIHRoYXQgcmFuZ2UsIG9yIG10cmVlX3N0b3JlKCkgY2FsbCB3aXRoIGFuIGVudHJ5IG9mXG4tTlVMTCBtYXkgYmUgdXNlZCB0byBwYXJ0aWFsbHkgZXJhc2UgYSByYW5nZSBvciBtYW55IHJhbmdlcyBhdCBvbmNlLlxuJiM0MztOVUxMIG1heSBiZSB1c2VkIHRvIHBhcnRpYWxseSBlcmFzZSBhIHJhbmdlIG9yIG1hbnkgcmFuZ2VzIGF0IG9uY2UuICBOb3RlIHRoYXRcbiYjNDM7bXRyZWVfZXJhc2UoKSBtYXkgdXNlIEdGUF9LRVJORUwgb24gYWxsb2NhdGlvbnMuXG4gXG4gSWYgeW91IHdhbnQgdG8gb25seSBzdG9yZSBhIG5ldyBlbnRyeSB0byBhIHJhbmdlIChvciBpbmRleCkgaWYgdGhhdCByYW5nZSBpc1xuIGN1cnJlbnRseSBgYE5VTExgYCwgeW91IGNhbiB1c2UgbXRyZWVfaW5zZXJ0X3JhbmdlKCkgb3IgbXRyZWVfaW5zZXJ0KCkgd2hpY2hcbkBAIC0xNjMsNyAmIzQzOzE3NCw5IEBAIFlvdSBjYW4gdXNlIG1hc19lcmFzZSgpIHRvIGVyYXNlIGFuIGVudGlyZSByYW5nZSBieSBzZXR0aW5nIGluZGV4IGFuZFxuIGxhc3Qgb2YgdGhlIG1hcGxlIHN0YXRlIHRvIHRoZSBkZXNpcmVkIHJhbmdlIHRvIGVyYXNlLiAgVGhpcyB3aWxsIGVyYXNlXG4gdGhlIGZpcnN0IHJhbmdlIHRoYXQgaXMgZm91bmQgaW4gdGhhdCByYW5nZSwgc2V0IHRoZSBtYXBsZSBzdGF0ZSBpbmRleFxuIGFuZCBsYXN0IGFzIHRoZSByYW5nZSB0aGF0IHdhcyBlcmFzZWQgYW5kIHJldHVybiB0aGUgZW50cnkgdGhhdCBleGlzdGVkXG4tYXQgdGhhdCBsb2NhdGlvbi5cbiYjNDM7YXQgdGhhdCBsb2NhdGlvbi4gIE5vdGUgdGhhdCBtYXNfZXJhc2UoKSBtYXkgYWxsb2NhdGUgd2l0aCB0aGUgR0ZQX0tFUk5FTCBmbGFnLlxuJiM0MztJZiB0aGlzIGlzIG5vdCBva2F5LCBjb25zaWRlciB1c2luZyBtYXNfc3RvcmVfZ2ZwKCkgYW5kIHBhc3MgaXQgYSBgYE5VTExgYCxcbiYjNDM7YWZ0ZXIgc2V0dGluZyB1cCB0aGUgY29ycmVjdCByYW5nZSBieSB3YWxraW5nIHRvIHRoZSBlbnRyeS5cbiBcbiBZb3UgY2FuIHdhbGsgZWFjaCBlbnRyeSB3aXRoaW4gYSByYW5nZSBieSB1c2luZyBtYXNfZm9yX2VhY2goKS4gIElmIHlvdSB3YW50XG4gdG8gd2FsayBlYWNoIGVsZW1lbnQgb2YgdGhlIHRyZWUgdGhlbiBgYDBgYCBhbmQgYGBVTE9OR19NQVhgYCBtYXkgYmUgdXNlZCBhc1xuQEAgLTIxMSw3ICYjNDM7MjI0LDcgQEAgQWR2YW5jZWQgTG9ja2luZ1xuIFxuIFRoZSBtYXBsZSB0cmVlIHVzZXMgYSBzcGlubG9jayBieSBkZWZhdWx0LCBidXQgZXh0ZXJuYWwgbG9ja3MgY2FuIGJlIHVzZWQgZm9yXG4gdHJlZSB1cGRhdGVzIGFzIHdlbGwuICBUbyB1c2UgYW4gZXh0ZXJuYWwgbG9jaywgdGhlIHRyZWUgbXVzdCBiZSBpbml0aWFsaXplZFxuLXdpdGggdGhlIGBgTVRfRkxBR1NfTE9DS19FWFRFUk4gZmxhZ2BgLCB0aGlzIGlzIHVzdWFsbHkgZG9uZSB3aXRoIHRoZVxuJiM0Mzt3aXRoIHRoZSBgYE1UX0ZMQUdTX0xPQ0tfRVhURVJOYGAgZmxhZywgdGhpcyBpcyB1c3VhbGx5IGRvbmUgd2l0aCB0aGVcbiBNVFJFRV9JTklUX0VYVCgpICNkZWZpbmUsIHdoaWNoIHRha2VzIGFuIGV4dGVybmFsIGxvY2sgYXMgYW4gYXJndW1lbnQuXG4gXG4gRnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFxuaW5kZXggNjIxNTY2MzQ1NDA2ZGQuLmE2NDUxZWNiYmU5YTA1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oXG5AQCAtMjczLDYgJiM0MzsyNzMsOSBAQCBleHRlcm4gc3RydWN0IHBpbl9jb29raWUgbG9ja19waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spO1xuIGV4dGVybiB2b2lkIGxvY2tfcmVwaW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llKTtcbiBleHRlcm4gdm9pZCBsb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSk7XG4gXG4mIzQzO2V4dGVybiB1MzIgbG9ja19zZXF1ZW5jZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spO1xuJiM0MzsjZGVmaW5lIGxvY2tkZXBfc2VxdWVuY2UobG9jaylcdGxvY2tfc2VxdWVuY2UoXHUwMDI2KGxvY2spLVx1MDAzZWRlcF9tYXApXG4mIzQzO1xuICNkZWZpbmUgbG9ja2RlcF9kZXB0aCh0c2spXHQoZGVidWdfbG9ja3MgPyAodHNrKS1cdTAwM2Vsb2NrZGVwX2RlcHRoIDogMClcbiBcbiAjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0KGNvbmQpXHRcdFxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaFxuaW5kZXggZWFlMTE1YTI2NDg4NTYuLjU1YzRiMTUyZmVkZjdjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oXG5AQCAtMjUzLDcgJiM0MzsyNTMsOCBAQCBzdHJ1Y3QgaGVsZF9sb2NrIHtcbiBcdHVuc2lnbmVkIGludCBoYXJkaXJxc19vZmY6MTtcbiBcdHVuc2lnbmVkIGludCBzeW5jOjE7XG4gXHR1bnNpZ25lZCBpbnQgcmVmZXJlbmNlczoxMTtcdFx0XHRcdFx0LyogMzIgYml0cyAqL1xuLVx0dW5zaWduZWQgaW50IHBpbl9jb3VudDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcGluX2NvdW50OjI0O1xuJiM0MztcdHVuc2lnbmVkIGludCBzZXFfY291bnQ6ODtcbiB9O1xuIFxuICNlbHNlIC8qICFDT05GSUdfTE9DS0RFUCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oIGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcbmluZGV4IDRhNTYzMTkwNmFmZmI1Li41ZTBiZDI4NTdkOTQxZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaFxuQEAgLTI5LDEzICYjNDM7MjksMTEgQEBcbiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFNcdDMxXHQvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC1cdTAwM2VwYXJlbnQgKi9cbiAjZGVmaW5lIE1BUExFX1JBTkdFNjRfU0xPVFNcdDE2XHQvKiAyNTYgYnl0ZXMgKi9cbiAjZGVmaW5lIE1BUExFX0FSQU5HRTY0X1NMT1RTXHQxMFx0LyogMjQwIGJ5dGVzICovXG4tI2RlZmluZSBNQVBMRV9BTExPQ19TTE9UU1x0KE1BUExFX05PREVfU0xPVFMgLSAxKVxuICNlbHNlXG4gLyogMzJiaXQgc2l6ZXMgKi9cbiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFNcdDYzXHQvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC1cdTAwM2VwYXJlbnQgKi9cbiAjZGVmaW5lIE1BUExFX1JBTkdFNjRfU0xPVFNcdDMyXHQvKiAyNTYgYnl0ZXMgKi9cbiAjZGVmaW5lIE1BUExFX0FSQU5HRTY0X1NMT1RTXHQyMVx0LyogMjQwIGJ5dGVzICovXG4tI2RlZmluZSBNQVBMRV9BTExPQ19TTE9UU1x0KE1BUExFX05PREVfU0xPVFMgLSAyKVxuICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR182NEJJVCkgfHwgZGVmaW5lZChCVUlMRF9WRFNPMzJfNjQpICovXG4gXG4gI2RlZmluZSBNQVBMRV9OT0RFX01BU0tcdFx0MjU1VUxcbkBAIC00ODUsNiAmIzQzOzQ4MywxMiBAQCBzdHJ1Y3QgbWFfc3RhdGUge1xuIFx0dW5zaWduZWQgY2hhciBtYXNfZmxhZ3M7XG4gXHR1bnNpZ25lZCBjaGFyIGVuZDtcdFx0LyogVGhlIGVuZCBvZiB0aGUgbm9kZSAqL1xuIFx0ZW51bSBzdG9yZV90eXBlIHN0b3JlX3R5cGU7XHQvKiBUaGUgdHlwZSBvZiBzdG9yZSBuZWVkZWQgZm9yIHRoaXMgb3BlcmF0aW9uICovXG4mIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUFxuJiM0MztcdHUzMiBsZF9zZXE7XG4mIzQzOyNpZmRlZiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHJjdV9ncDtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi9cbiB9O1xuIFxuIHN0cnVjdCBtYV93cl9zdGF0ZSB7XG5AQCAtNTcyLDcgJiM0Mzs1NzYsNyBAQCB2b2lkIG1hcGxlX3RyZWVfaW5pdCh2b2lkKTtcbiB2b2lkIG1hc19kZXN0cm95KHN0cnVjdCBtYV9zdGF0ZSAqbWFzKTtcbiBcbiB2b2lkICptYXNfcHJldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pO1xuLXZvaWQgKm1hc19wcmV2X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heCk7XG4mIzQzO3ZvaWQgKm1hc19wcmV2X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbik7XG4gdm9pZCAqbWFzX25leHQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KTtcbiB2b2lkICptYXNfbmV4dF9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuaW5kZXggMzczYmNjMDU5OGQxMGIuLjE0ZDVjZThkZDYxMzY1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbkBAIC0xMjg4LDYgJiM0MzsxMjg4LDcgQEAgc3RydWN0IHRhc2tfc3RydWN0IHtcbiBcdHU2NFx0XHRcdFx0Y3Vycl9jaGFpbl9rZXk7XG4gXHRpbnRcdFx0XHRcdGxvY2tkZXBfZGVwdGg7XG4gXHR1bnNpZ25lZCBpbnRcdFx0XHRsb2NrZGVwX3JlY3Vyc2lvbjtcbiYjNDM7XHR1bnNpZ25lZCBpbnRcdFx0XHRsb2NrZGVwX3NlcTtcbiBcdHN0cnVjdCBoZWxkX2xvY2tcdFx0aGVsZF9sb2Nrc1tNQVhfTE9DS19ERVBUSF07XG4gI2VuZGlmXG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG5pbmRleCAyZDRjNWJhYjVhZjg4Ny4uYTY5NTY3YmRkNzkxMmUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuQEAgLTUwNzcsNyAmIzQzOzUwNzcsNyBAQCBzdGF0aWMgaW50IF9fbG9ja19pc19oZWxkKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgaW50IHJlYWQpO1xuIHN0YXRpYyBpbnQgX19sb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsXG4gXHRcdFx0ICBpbnQgdHJ5bG9jaywgaW50IHJlYWQsIGludCBjaGVjaywgaW50IGhhcmRpcnFzX29mZixcbiBcdFx0XHQgIHN0cnVjdCBsb2NrZGVwX21hcCAqbmVzdF9sb2NrLCB1bnNpZ25lZCBsb25nIGlwLFxuLVx0XHRcdCAgaW50IHJlZmVyZW5jZXMsIGludCBwaW5fY291bnQsIGludCBzeW5jKVxuJiM0MztcdFx0XHQgIGludCByZWZlcmVuY2VzLCBpbnQgcGluX2NvdW50LCBpbnQgc3luYywgaW50IHNlcSlcbiB7XG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50O1xuIFx0c3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gTlVMTDtcbkBAIC01MTgzLDYgJiM0Mzs1MTgzLDcgQEAgc3RhdGljIGludCBfX2xvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcyxcbiBcdGhsb2NrLVx1MDAzZWhvbGR0aW1lX3N0YW1wID0gbG9ja3N0YXRfY2xvY2soKTtcbiAjZW5kaWZcbiBcdGhsb2NrLVx1MDAzZXBpbl9jb3VudCA9IHBpbl9jb3VudDtcbiYjNDM7XHRobG9jay1cdTAwM2VzZXFfY291bnQgPSBzZXE7XG4gXG4gXHRpZiAoY2hlY2tfd2FpdF9jb250ZXh0KGN1cnIsIGhsb2NrKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNTM4OCw3ICYjNDM7NTM4OSw3IEBAIHN0YXRpYyBpbnQgcmVhY3F1aXJlX2hlbGRfbG9ja3Moc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCB1bnNpZ25lZCBpbnQgZGVwdGgsXG4gXHRcdFx0XHQgICAgaGxvY2stXHUwMDNlcmVhZCwgaGxvY2stXHUwMDNlY2hlY2ssXG4gXHRcdFx0XHQgICAgaGxvY2stXHUwMDNlaGFyZGlycXNfb2ZmLFxuIFx0XHRcdFx0ICAgIGhsb2NrLVx1MDAzZW5lc3RfbG9jaywgaGxvY2stXHUwMDNlYWNxdWlyZV9pcCxcbi1cdFx0XHRcdCAgICBobG9jay1cdTAwM2VyZWZlcmVuY2VzLCBobG9jay1cdTAwM2VwaW5fY291bnQsIDApKSB7XG4mIzQzO1x0XHRcdFx0ICAgIGhsb2NrLVx1MDAzZXJlZmVyZW5jZXMsIGhsb2NrLVx1MDAzZXBpbl9jb3VudCwgMCwgaGxvY2stXHUwMDNlc2VxX2NvdW50KSkge1xuIFx0XHRjYXNlIDA6XG4gXHRcdFx0cmV0dXJuIDE7XG4gXHRcdGNhc2UgMTpcbkBAIC01NjY5LDE0ICYjNDM7NTY3MCwxNyBAQCBzdGF0aWMgdm9pZCBfX2xvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llIGNvb2tpZVxuIFx0XHRzdHJ1Y3QgaGVsZF9sb2NrICpobG9jayA9IGN1cnItXHUwMDNlaGVsZF9sb2NrcyAmIzQzOyBpO1xuIFxuIFx0XHRpZiAobWF0Y2hfaGVsZF9sb2NrKGhsb2NrLCBsb2NrKSkge1xuJiM0MztcdFx0XHRpbnQgcGluX2NvdW50O1xuJiM0MztcbiBcdFx0XHRpZiAoV0FSTighaGxvY2stXHUwMDNlcGluX2NvdW50LCBcJiMzNDt1bnBpbm5pbmcgYW4gdW5waW5uZWQgbG9ja1xcblwmIzM0OykpXG4gXHRcdFx0XHRyZXR1cm47XG4gXG4tXHRcdFx0aGxvY2stXHUwMDNlcGluX2NvdW50IC09IGNvb2tpZS52YWw7XG4mIzQzO1x0XHRcdHBpbl9jb3VudCA9IGhsb2NrLVx1MDAzZXBpbl9jb3VudCAtIGNvb2tpZS52YWw7XG4gXG4tXHRcdFx0aWYgKFdBUk4oKGludClobG9jay1cdTAwM2VwaW5fY291bnQgXHUwMDNjIDAsIFwmIzM0O3BpbiBjb3VudCBjb3JydXB0ZWRcXG5cJiMzNDspKVxuLVx0XHRcdFx0aGxvY2stXHUwMDNlcGluX2NvdW50ID0gMDtcbiYjNDM7XHRcdFx0aWYgKFdBUk4ocGluX2NvdW50IFx1MDAzYyAwLCBcJiMzNDtwaW4gY291bnQgY29ycnVwdGVkXFxuXCYjMzQ7KSlcbiYjNDM7XHRcdFx0XHRwaW5fY291bnQgPSAwO1xuIFxuJiM0MztcdFx0XHRobG9jay1cdTAwM2VwaW5fY291bnQgPSBwaW5fY291bnQ7XG4gXHRcdFx0cmV0dXJuO1xuIFx0XHR9XG4gXHR9XG5AQCAtNTY4NCw2ICYjNDM7NTY4OCwyNCBAQCBzdGF0aWMgdm9pZCBfX2xvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llIGNvb2tpZVxuIFx0V0FSTigxLCBcJiMzNDt1bnBpbm5pbmcgYW4gdW5oZWxkIGxvY2tcXG5cJiMzNDspO1xuIH1cbiBcbiYjNDM7c3RhdGljIHUzMiBfX2xvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFkZWJ1Z19sb2NrcykpXG4mIzQzO1x0XHRyZXR1cm4gfjA7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGN1cnItXHUwMDNlbG9ja2RlcF9kZXB0aDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrID0gY3Vyci1cdTAwM2VoZWxkX2xvY2tzICYjNDM7IGk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1hdGNoX2hlbGRfbG9jayhobG9jaywgbG9jaykpXG4mIzQzO1x0XHRcdHJldHVybiBobG9jay1cdTAwM2VzZXFfY291bnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gfjA7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBDaGVjayB3aGV0aGVyIHdlIGZvbGxvdyB0aGUgaXJxLWZsYWdzIHN0YXRlIHByZWNpc2VseTpcbiAgKi9cbkBAIC01ODY2LDcgJiM0Mzs1ODg4LDggQEAgdm9pZCBsb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsXG4gXG4gXHRsb2NrZGVwX3JlY3Vyc2lvbl9pbmMoKTtcbiBcdF9fbG9ja19hY3F1aXJlKGxvY2ssIHN1YmNsYXNzLCB0cnlsb2NrLCByZWFkLCBjaGVjayxcbi1cdFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAwKTtcbiYjNDM7XHRcdCAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMCxcbiYjNDM7XHRcdCAgICAgICAmIzQzOyYjNDM7Y3VycmVudC1cdTAwM2Vsb2NrZGVwX3NlcSk7XG4gXHRsb2NrZGVwX3JlY3Vyc2lvbl9maW5pc2goKTtcbiBcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gfVxuQEAgLTU5MTQsNyAmIzQzOzU5MzcsOCBAQCB2b2lkIGxvY2tfc3luYyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIHN1YmNsYXNzLCBpbnQgcmVhZCxcbiBcbiBcdGxvY2tkZXBfcmVjdXJzaW9uX2luYygpO1xuIFx0X19sb2NrX2FjcXVpcmUobG9jaywgc3ViY2xhc3MsIDAsIHJlYWQsIGNoZWNrLFxuLVx0XHQgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDAsIDAsIDEpO1xuJiM0MztcdFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAxLFxuJiM0MztcdFx0ICAgICAgICYjNDM7JiM0MztjdXJyZW50LVx1MDAzZWxvY2tkZXBfc2VxKTtcbiBcdGNoZWNrX2NoYWluX2tleShjdXJyZW50KTtcbiBcdGxvY2tkZXBfcmVjdXJzaW9uX2ZpbmlzaCgpO1xuIFx0cmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTtcbkBAIC02MDAwLDYgJiM0Mzs2MDI0LDI2IEBAIHZvaWQgbG9ja191bnBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUgY29va2llKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChsb2NrX3VucGluX2xvY2spO1xuIFxuJiM0Mzt1MzIgbG9ja19zZXF1ZW5jZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHUzMiBzZXEgPSB+MDtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFsb2NrZGVwX2VuYWJsZWQoKSkpXG4mIzQzO1x0XHRyZXR1cm4gc2VxO1xuJiM0MztcbiYjNDM7XHRyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuJiM0MztcdGNoZWNrX2ZsYWdzKGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XG4mIzQzO1x0c2VxID0gX19sb2NrX3NlcXVlbmNlKGxvY2spO1xuJiM0MztcdGxvY2tkZXBfcmVjdXJzaW9uX2ZpbmlzaCgpO1xuJiM0MztcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBzZXE7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwobG9ja19zZXF1ZW5jZSk7XG4mIzQzO1xuICNpZmRlZiBDT05GSUdfTE9DS19TVEFUXG4gc3RhdGljIHZvaWQgcHJpbnRfbG9ja19jb250ZW50aW9uX2J1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsXG4gXHRcdFx0XHQgICAgICBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssXG5kaWZmIC0tZ2l0IGEvbGliL21hcGxlX3RyZWUuYyBiL2xpYi9tYXBsZV90cmVlLmNcbmluZGV4IGU1Mjg3NjQzNWI3N2YwLi4wNmNjMDViNzlmYmRjOCAxMDA2NDRcbi0tLSBhL2xpYi9tYXBsZV90cmVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9tYXBsZV90cmVlLmNcbkBAIC0yNjEsNiAmIzQzOzI2MSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFzX2lzX3VuZGVyZmxvdyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiBcdHJldHVybiBtYXMtXHUwMDNlc3RhdHVzID09IG1hX3VuZGVyZmxvdztcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtYXNfbWFrZV93YWxrYWJsZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiYjNDM7e1xuJiM0MztcdGlmICghbWFzX2lzX2FjdGl2ZShtYXMpIFx1MDAyNlx1MDAyNiAhbWFzX2lzX3N0YXJ0KG1hcykpXG4mIzQzO1x0XHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgbWFwbGVfbm9kZSAqbXRlX3RvX25vZGUoXG4gXHRcdGNvbnN0IHN0cnVjdCBtYXBsZV9lbm9kZSAqZW50cnkpXG4ge1xuQEAgLTQ1NSw0NiAmIzQzOzQ2MSw2IEBAIGVudW0gbWFwbGVfdHlwZSBtYXNfcGFyZW50X3R5cGUoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLypcbi0gKiBtYXNfc2V0X3BhcmVudCgpIC0gU2V0IHRoZSBwYXJlbnQgbm9kZSBhbmQgZW5jb2RlIHRoZSBzbG90XG4tICogQG1hczogVGhlIG1hcGxlIHN0YXRlXG4tICogQGVub2RlOiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlLlxuLSAqIEBwYXJlbnQ6IFRoZSBlbmNvZGVkIG1hcGxlIG5vZGUgdGhhdCBpcyB0aGUgcGFyZW50IG9mIEBlbm9kZS5cbi0gKiBAc2xvdDogVGhlIHNsb3QgdGhhdCBAZW5vZGUgcmVzaWRlcyBpbiBAcGFyZW50LlxuLSAqXG4tICogU2xvdCBudW1iZXIgaXMgZW5jb2RlZCBpbiB0aGUgZW5vZGUtXHUwMDNlcGFyZW50IGJpdCAzLTYgb3IgMi02LCBkZXBlbmRpbmcgb24gdGhlXG4tICogcGFyZW50IHR5cGUuXG4tICovXG4tc3RhdGljIGlubGluZVxuLXZvaWQgbWFzX3NldF9wYXJlbnQoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUsXG4tXHRcdCAgICBjb25zdCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnBhcmVudCwgdW5zaWduZWQgY2hhciBzbG90KVxuLXtcbi1cdHVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50O1xuLVx0dW5zaWduZWQgbG9uZyBzaGlmdDtcbi1cdHVuc2lnbmVkIGxvbmcgdHlwZTtcbi1cdGVudW0gbWFwbGVfdHlwZSBwX3R5cGUgPSBtdGVfbm9kZV90eXBlKHBhcmVudCk7XG4tXG4tXHRNQVNfQlVHX09OKG1hcywgcF90eXBlID09IG1hcGxlX2RlbnNlKTtcbi1cdE1BU19CVUdfT04obWFzLCBwX3R5cGUgPT0gbWFwbGVfbGVhZl82NCk7XG4tXG4tXHRzd2l0Y2ggKHBfdHlwZSkge1xuLVx0Y2FzZSBtYXBsZV9yYW5nZV82NDpcbi1cdGNhc2UgbWFwbGVfYXJhbmdlXzY0OlxuLVx0XHRzaGlmdCA9IE1BUExFX1BBUkVOVF9TTE9UX1NISUZUO1xuLVx0XHR0eXBlID0gTUFQTEVfUEFSRU5UX1JBTkdFNjQ7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdGNhc2UgbWFwbGVfZGVuc2U6XG4tXHRjYXNlIG1hcGxlX2xlYWZfNjQ6XG4tXHRcdHNoaWZ0ID0gdHlwZSA9IDA7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0dmFsIFx1MDAyNj0gfk1BUExFX05PREVfTUFTSzsgLyogQ2xlYXIgYWxsIG5vZGUgbWV0YWRhdGEgaW4gcGFyZW50ICovXG4tXHR2YWwgfD0gKHNsb3QgXHUwMDNjXHUwMDNjIHNoaWZ0KSB8IHR5cGU7XG4tXHRtdGVfdG9fbm9kZShlbm9kZSktXHUwMDNlcGFyZW50ID0gbWFfcGFyZW50X3B0cih2YWwpO1xuLX1cbi1cbiAvKlxuICAqIG10ZV9wYXJlbnRfc2xvdCgpIC0gZ2V0IHRoZSBwYXJlbnQgc2xvdCBvZiBAZW5vZGUuXG4gICogQGVub2RlOiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlLlxuQEAgLTg3Niw2ICYjNDM7ODQyLDQyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYV9zZXRfbWV0YV9nYXAoc3RydWN0IG1hcGxlX25vZGUgKm1uLCBlbnVtIG1hcGxlX3R5cGUgbXQsXG4gXHRtZXRhLVx1MDAzZWdhcCA9IG9mZnNldDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIG1hc19zZXRfcGFyZW50X3Nsb3RzKCkgLSBCdWxrIG9wZXJhdGlvbiB0byBzZXQgbWFueSBzbG90IHBhcmVudCBwb2ludGVyc1xuJiM0MzsgKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGVcbiYjNDM7ICogQHBhcmVudDogVGhlIGVuY29kZWQgbWFwbGUgbm9kZSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgQGVub2RlLlxuJiM0MzsgKiBAc2xvdDogVGhlIHNsb3QgdGhhdCBvZiB0aGUgQGVub2RlLlxuJiM0MzsgKiBAc3RhcnRfc2xvdDogVGhlIG9mZnNldCBpbnRvIEBzbG90XG4mIzQzOyAqIEBjb3VudDogVGhlIG51bWJlciBvZiBzbG90cyB0byBzZXQgKGVnOiBleGNsdXNpdmUpXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lXG4mIzQzO3ZvaWQgbWFzX3NldF9wYXJlbnRfc2xvdHMoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqcGFyZW50LFxuJiM0MztcdHZvaWQgX19yY3UgKipzbG90cywgdW5zaWduZWQgY2hhciBzdGFydF9zbG90LCB1bnNpZ25lZCBjaGFyIGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB2YWw7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzaGlmdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHR5cGU7XG4mIzQzO1x0ZW51bSBtYXBsZV90eXBlIHBfdHlwZSA9IG10ZV9ub2RlX3R5cGUocGFyZW50KTtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGk7XG4mIzQzO1xuJiM0MztcdE1BU19CVUdfT04obWFzLCBwX3R5cGUgIT0gbWFwbGVfcmFuZ2VfNjQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdHBfdHlwZSAhPSBtYXBsZV9hcmFuZ2VfNjQpO1xuJiM0MztcbiYjNDM7XHRzaGlmdCA9IE1BUExFX1BBUkVOVF9TTE9UX1NISUZUO1xuJiM0MztcdHR5cGUgPSBNQVBMRV9QQVJFTlRfUkFOR0U2NDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50O1xuJiM0MztcdHZhbCBcdTAwMjY9IH5NQVBMRV9OT0RFX01BU0s7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwdmFsID0gdmFsIHwgKChzdGFydF9zbG90ICYjNDM7IGkpIFx1MDAzY1x1MDAzYyBzaGlmdCkgfCB0eXBlO1xuJiM0MztcdFx0c3RydWN0IG1hcGxlX2Vub2RlICpjaGlsZDtcbiYjNDM7XG4mIzQzO1x0XHRjaGlsZCA9IG10X3Nsb3RfbG9ja2VkKG1hcy1cdTAwM2V0cmVlLCBzbG90cywgaSk7XG4mIzQzO1x0XHRtdGVfdG9fbm9kZShjaGlsZCktXHUwMDNlcGFyZW50ID0gbWFfcGFyZW50X3B0cihwdmFsKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBtYXRfYWRkKCkgLSBBZGQgYSBAZGVhZF9lbm9kZSB0byB0aGUgbWFfdG9waWFyeSBvZiBhIGxpc3Qgb2YgZGVhZCBub2Rlcy5cbiAgKiBAbWF0OiB0aGUgbWFfdG9waWFyeSwgYSBsaW5rZWQgbGlzdCBvZiBkZWFkIG5vZGVzLlxuQEAgLTExNTMsNiAmIzQzOzExNTUsNzMgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19mcmVlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnVzZWQpXG4gXHRtYV9mcmVlX3JjdShtdGVfdG9fbm9kZSh1c2VkKSk7XG4gfVxuIFxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19MT0NLREVQXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgbG9ja2RlcF9tYXAgKm1hc19sb2NrZGVwX21hcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtYXBsZV90cmVlICptdCA9IG1hcy1cdTAwM2V0cmVlO1xuJiM0MztcbiYjNDM7XHRpZiAobXRfZXh0ZXJuYWxfbG9jayhtdCkpXG4mIzQzO1x0XHRyZXR1cm4gbXQtXHUwMDNlbWFfZXh0ZXJuYWxfbG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNihtdC1cdTAwM2VtYV9sb2NrKS5kZXBfbWFwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG1hc19sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUFxuJiM0MztcdHN0cnVjdCBsb2NrZGVwX21hcCAqbWFwO1xuJiM0MztcdGlmICghbWFzX2lzX2FjdGl2ZShtYXMpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxuJiM0MztcdGlmICghbXRfbG9ja2VkKG1hcy1cdTAwM2V0cmVlKSkge1xuJiM0MztcdFx0aWYgKG10X2luX3JjdShtYXMtXHUwMDNldHJlZSkpXG4mIzQzO1x0XHRcdFdBUk5fT05fT05DRShwb2xsX3N0YXRlX3N5bmNocm9uaXplX3JjdShtYXMtXHUwMDNlcmN1X2dwKSk7XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXG4mIzQzO1xuJiM0MztcdG1hcCA9IG1hc19sb2NrZGVwX21hcChtYXMpO1xuJiM0MztcdGlmIChtYXAgXHUwMDI2XHUwMDI2IGxvY2tfaXNfaGVsZChtYXApKVxuJiM0MztcdFx0V0FSTl9PTl9PTkNFKG1hcy1cdTAwM2VsZF9zZXEgIT0gbG9ja19zZXF1ZW5jZShtYXApKTtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19MT0NLREVQICovXG4mIzQzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBtYXNfaW5pdF9sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUFxuJiM0MztcdHN0cnVjdCBsb2NrZGVwX21hcCAqbWFwO1xuJiM0MzsjaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXG4mIzQzO1x0aWYgKCFtdF9sb2NrZWQobWFzLVx1MDAzZXRyZWUpKSB7XG4mIzQzO1x0XHRpZiAobXRfaW5fcmN1KG1hcy1cdTAwM2V0cmVlKSlcbiYjNDM7XHRcdFx0bWFzLVx1MDAzZXJjdV9ncCA9IGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9yY3UoKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QgKi9cbiYjNDM7XG4mIzQzO1x0bWFwID0gbWFzX2xvY2tkZXBfbWFwKG1hcyk7XG4mIzQzO1x0aWYgKG1hcCBcdTAwMjZcdTAwMjYgbG9ja19pc19oZWxkKG1hcCkpXG4mIzQzO1x0XHRtYXMtXHUwMDNlbGRfc2VxID0gbG9ja19zZXF1ZW5jZShtYXNfbG9ja2RlcF9tYXAobWFzKSk7XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xuJiM0MztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbWFzX21heV9pbml0X2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpXG4mIzQzO3tcbiYjNDM7I2lmZGVmIENPTkZJR19MT0NLREVQXG4mIzQzOyNpZmRlZiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RcbiYjNDM7XHRpZiAobWFzX2lzX3N0YXJ0KG1hcykgfHwgbWFzX2lzX3BhdXNlZChtYXMpKSB7XG4mIzQzO1x0XHRtYXNfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXG4mIzQzO1x0bWFzX2xvY2tfY2hlY2sobWFzKTtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19MT0NLREVQICovXG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBtYXNfc3RhcnQoKSAtIFNldHMgdXAgbWFwbGUgc3RhdGUgZm9yIG9wZXJhdGlvbnMuXG4gICogQG1hczogVGhlIG1hcGxlIHN0YXRlLlxuQEAgLTExNzEsNiAmIzQzOzEyNDAsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXBsZV9lbm9kZSAqbWFzX3N0YXJ0KHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIFx0aWYgKGxpa2VseShtYXNfaXNfc3RhcnQobWFzKSkpIHtcbiBcdFx0c3RydWN0IG1hcGxlX2Vub2RlICpyb290O1xuIFxuJiM0MztcdFx0bWFzX2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0XHRtYXMtXHUwMDNlbWluID0gMDtcbiBcdFx0bWFzLVx1MDAzZW1heCA9IFVMT05HX01BWDtcbiBcbkBAIC0xNTAxLDE0ICYjNDM7MTU3MSwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3BhcmVudF9nYXAoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGNoYXIgb2Zmc2V0LFxuIFx0Z290byBhc2NlbmQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgbWFzX3VwZGF0ZV9nYXBfa25vd24oc3RydWN0IG1hX3N0YXRlICptYXMsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGdhcClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGNoYXIgcHNsb3Q7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwX2dhcDtcbiYjNDM7XG4mIzQzO1x0cHNsb3QgPSBtdGVfcGFyZW50X3Nsb3QobWFzLVx1MDAzZW5vZGUpO1xuJiM0MztcdHBfZ2FwID0gbWFfZ2FwcyhtdGVfcGFyZW50KG1hcy1cdTAwM2Vub2RlKSxcbiYjNDM7XHRcdFx0bWFzX3BhcmVudF90eXBlKG1hcywgbWFzLVx1MDAzZW5vZGUpKVtwc2xvdF07XG4mIzQzO1xuJiM0MztcdGlmIChwX2dhcCAhPSBnYXApXG4mIzQzO1x0XHRtYXNfcGFyZW50X2dhcChtYXMsIHBzbG90LCBnYXApO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogbWFzX3VwZGF0ZV9nYXAoKSAtIFVwZGF0ZSBhIG5vZGVzIGdhcHMgYW5kIHByb3BhZ2F0ZSB1cCBpZiBuZWNlc3NhcnkuXG4gICogQG1hczogdGhlIG1hcGxlIHN0YXRlLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfdXBkYXRlX2dhcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiB7XG4tXHR1bnNpZ25lZCBjaGFyIHBzbG90O1xuLVx0dW5zaWduZWQgbG9uZyBwX2dhcDtcbiBcdHVuc2lnbmVkIGxvbmcgbWF4X2dhcDtcbiBcbiBcdGlmICghbXRfaXNfYWxsb2MobWFzLVx1MDAzZXRyZWUpKVxuQEAgLTE1MTgsMTMgJiM0MzsxNjAwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc191cGRhdGVfZ2FwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRtYXhfZ2FwID0gbWFzX21heF9nYXAobWFzKTtcbi1cbi1cdHBzbG90ID0gbXRlX3BhcmVudF9zbG90KG1hcy1cdTAwM2Vub2RlKTtcbi1cdHBfZ2FwID0gbWFfZ2FwcyhtdGVfcGFyZW50KG1hcy1cdTAwM2Vub2RlKSxcbi1cdFx0XHRtYXNfcGFyZW50X3R5cGUobWFzLCBtYXMtXHUwMDNlbm9kZSkpW3BzbG90XTtcbi1cbi1cdGlmIChwX2dhcCAhPSBtYXhfZ2FwKVxuLVx0XHRtYXNfcGFyZW50X2dhcChtYXMsIHBzbG90LCBtYXhfZ2FwKTtcbiYjNDM7XHRtYXNfdXBkYXRlX2dhcF9rbm93bihtYXMsIG1heF9nYXApO1xuIH1cbiBcbiAvKlxuQEAgLTE1NDAsMTQgJiM0MzsxNjE2LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfYWRvcHRfY2hpbGRyZW4oc3RydWN0IG1hX3N0YXRlICptYXMsXG4gXHRzdHJ1Y3QgbWFwbGVfbm9kZSAqbm9kZSA9IG10ZV90b19ub2RlKHBhcmVudCk7XG4gXHR2b2lkIF9fcmN1ICoqc2xvdHMgPSBtYV9zbG90cyhub2RlLCB0eXBlKTtcbiBcdHVuc2lnbmVkIGxvbmcgKnBpdm90cyA9IG1hX3Bpdm90cyhub2RlLCB0eXBlKTtcbi1cdHN0cnVjdCBtYXBsZV9lbm9kZSAqY2hpbGQ7XG4tXHR1bnNpZ25lZCBjaGFyIG9mZnNldDtcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGVuZDtcbiBcbi1cdG9mZnNldCA9IG1hX2RhdGFfZW5kKG5vZGUsIHR5cGUsIHBpdm90cywgbWFzLVx1MDAzZW1heCk7XG4tXHRkbyB7XG4tXHRcdGNoaWxkID0gbWFzX3Nsb3RfbG9ja2VkKG1hcywgc2xvdHMsIG9mZnNldCk7XG4tXHRcdG1hc19zZXRfcGFyZW50KG1hcywgY2hpbGQsIHBhcmVudCwgb2Zmc2V0KTtcbi1cdH0gd2hpbGUgKG9mZnNldC0tKTtcbiYjNDM7XHRlbmQgPSBtYV9kYXRhX2VuZChub2RlLCB0eXBlLCBwaXZvdHMsIG1hcy1cdTAwM2VtYXgpO1xuJiM0MztcdG1hc19zZXRfcGFyZW50X3Nsb3RzKG1hcywgcGFyZW50LCBzbG90cywgMCwgZW5kICYjNDM7IDEpO1xuIH1cbiBcbiAvKlxuQEAgLTE5MjksMTUgJiM0MzsyMDAxLDEwIEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9jb3B5KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfbm9kZSAqc3JjLFxuIFx0c19zbG90cyA9IG1hX3Nsb3RzKHNyYywgc19tdCkgJiM0Mzsgc3RhcnQ7XG4gXHRzX3Bpdm90cyA9IG1hX3Bpdm90cyhzcmMsIHNfbXQpICYjNDM7IHN0YXJ0O1xuIFx0bWVtY3B5KGRfc2xvdHMsIHNfc2xvdHMsIHNpemUgKiBzaXplb2Yodm9pZCBfX3JjdSAqKSk7XG4tXHRpZiAoIW1hX2lzX2xlYWYoZF9tdCkgXHUwMDI2XHUwMDI2IHNfbXQgPT0gbWFwbGVfY29weSkge1xuLVx0XHRzdHJ1Y3QgbWFwbGVfZW5vZGUgKmVkc3QgPSBtdF9ta19ub2RlKGRzdCwgZF9tdCk7XG4tXG4gXG4tXHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBzaXplOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRtYXNfc2V0X3BhcmVudChtYXMsXG4tXHRcdFx0XHQgICAgICAgbXRfc2xvdF9sb2NrZWQobWFzLVx1MDAzZXRyZWUsIGRfc2xvdHMsIGkpLFxuLVx0XHRcdFx0ICAgICAgIGVkc3QsIGRfc3RhcnQgJiM0MzsgaSk7XG4tXHR9XG4mIzQzO1x0aWYgKCFtYV9pc19sZWFmKGRfbXQpIFx1MDAyNlx1MDAyNiBzX210ID09IG1hcGxlX2NvcHkpXG4mIzQzO1x0XHRtYXNfc2V0X3BhcmVudF9zbG90cyhtYXMsIG10X21rX25vZGUoZHN0LCBkX210KSxcbiYjNDM7XHRcdFx0XHQgICAgIGRfc2xvdHMsIGRfc3RhcnQsIHNpemUpO1xuIFxuIFx0ZF9nYXBzID0gbWFfZ2Fwcyhkc3QsIGRfbXQpO1xuIFx0aWYgKGRfZ2Fwcykge1xuQEAgLTIwODEsOCAmIzQzOzIxNDgsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dtYl9yZXBsYWNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfY29weSAqY3ApXG4gXHRtYXMtXHUwMDNlbm9kZSA9IG10X3Nsb3RfbG9ja2VkKG1hcy1cdTAwM2V0cmVlLCBjcC1cdTAwM2VzbG90LCAwKTtcbiBcdC8qIEluc2VydCB0aGUgbmV3IGRhdGEgaW4gdGhlIHRyZWUgKi9cbiBcdG1hc190b3BpYXJ5X3JlcGxhY2UobWFzLCBvbGRfZW5vZGUsIGNwLVx1MDAzZWhlaWdodCk7XG4tXHRpZiAoIW10ZV9pc19sZWFmKG1hcy1cdTAwM2Vub2RlKSlcbi1cdFx0bWFzX3VwZGF0ZV9nYXAobWFzKTtcbiYjNDM7XHRpZiAobXRfaXNfYWxsb2MobWFzLVx1MDAzZXRyZWUpIFx1MDAyNlx1MDAyNiAhbXRlX2lzX3Jvb3QobWFzLVx1MDAzZW5vZGUpKVxuJiM0MztcdFx0bWFzX3VwZGF0ZV9nYXBfa25vd24obWFzLCBjcC1cdTAwM2VnYXBbMF0pO1xuIFxuIFx0bXRyZWVfcmFuZ2Vfd2FsayhtYXMpO1xuIH1cbkBAIC0yOTI4LDEzICYjNDM7Mjk5NSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfZXh0ZW5kX3NwYW5uaW5nX251bGwoc3RydWN0IG1hX3dyX3N0YXRlICpsX3dyX21hcyxcbiBcdFx0aWYgKHJfbWFzLVx1MDAzZWxhc3QgXHUwMDNjIHJfd3JfbWFzLVx1MDAzZXJfbWF4KVxuIFx0XHRcdHJfbWFzLVx1MDAzZWxhc3QgPSByX3dyX21hcy1cdTAwM2VyX21heDtcbiBcdFx0cl9tYXMtXHUwMDNlb2Zmc2V0JiM0MzsmIzQzOztcbi1cdH0gZWxzZSBpZiAoKHJfbWFzLVx1MDAzZWxhc3QgPT0gcl93cl9tYXMtXHUwMDNlcl9tYXgpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIChyX21hcy1cdTAwM2VsYXN0IFx1MDAzYyByX21hcy1cdTAwM2VtYXgpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFtYXNfc2xvdF9sb2NrZWQocl9tYXMsIHJfd3JfbWFzLVx1MDAzZXNsb3RzLCByX21hcy1cdTAwM2VvZmZzZXQgJiM0MzsgMSkpIHtcbi1cdFx0cl9tYXMtXHUwMDNlbGFzdCA9IG1hc19zYWZlX3Bpdm90KHJfbWFzLCByX3dyX21hcy1cdTAwM2VwaXZvdHMsXG4tXHRcdFx0XHRcdCAgICAgcl93cl9tYXMtXHUwMDNldHlwZSwgcl9tYXMtXHUwMDNlb2Zmc2V0ICYjNDM7IDEpO1xuLVx0XHRyX21hcy1cdTAwM2VvZmZzZXQmIzQzOyYjNDM7O1xuLVx0XHRyX3dyX21hcy1cdTAwM2VyX21heCA9IHJfbWFzLVx1MDAzZWxhc3Q7XG4gXHR9XG4gfVxuIFxuQEAgLTMxMjUsNyAmIzQzOzMxODUsNyBAQCBzdGF0aWMgdm9pZCBtYXNfd3Jfc3Bhbm5pbmdfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4gc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIHtcbiBcdHVuc2lnbmVkIGNoYXIgZHN0X29mZnNldCwgb2Zmc2V0X2VuZDtcbi1cdHVuc2lnbmVkIGNoYXIgY29weV9zaXplLCBub2RlX3Bpdm90cztcbiYjNDM7XHR1bnNpZ25lZCBjaGFyIGNvcHlfc2l6ZSwgbm9kZV9waXZvdHMsIG5vZGVfc2xvdHM7XG4gXHRzdHJ1Y3QgbWFwbGVfbm9kZSByZXVzZSwgKm5ld25vZGU7XG4gXHR1bnNpZ25lZCBsb25nICpkc3RfcGl2b3RzO1xuIFx0dm9pZCBfX3JjdSAqKmRzdF9zbG90cztcbkBAIC0zMTM4LDYgJiM0MzszMTk4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIFx0aW5fcmN1ID0gbXRfaW5fcmN1KG1hcy1cdTAwM2V0cmVlKTtcbiBcdG9mZnNldF9lbmQgPSB3cl9tYXMtXHUwMDNlb2Zmc2V0X2VuZDtcbiBcdG5vZGVfcGl2b3RzID0gbXRfcGl2b3RzW3dyX21hcy1cdTAwM2V0eXBlXTtcbiYjNDM7XHRub2RlX3Nsb3RzID0gbXRfc2xvdHNbd3JfbWFzLVx1MDAzZXR5cGVdO1xuIFx0LyogQXNzdW1lIGxhc3QgYWRkcyBhbiBlbnRyeSAqL1xuIFx0bmV3X2VuZCA9IG1hcy1cdTAwM2VlbmQgJiM0MzsgMSAtIG9mZnNldF9lbmQgJiM0MzsgbWFzLVx1MDAzZW9mZnNldDtcbiBcdGlmIChtYXMtXHUwMDNlbGFzdCA9PSB3cl9tYXMtXHUwMDNlZW5kX3Bpdikge1xuQEAgLTMxNDksNyAmIzQzOzMyMTAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4gXHRpZiAoaW5fcmN1KSB7XG4gXHRcdG5ld25vZGUgPSBtYXNfcG9wX25vZGUobWFzKTtcbiBcdH0gZWxzZSB7XG4tXHRcdG1lbXNldChcdTAwMjZyZXVzZSwgMCwgc2l6ZW9mKHN0cnVjdCBtYXBsZV9ub2RlKSk7XG4gXHRcdG5ld25vZGUgPSBcdTAwMjZyZXVzZTtcbiBcdH1cbiBcbkBAIC0zMTkzLDcgJiM0MzszMjUzLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiBcdFx0ZHN0X3Bpdm90c1tuZXdfZW5kXSA9IG1hcy1cdTAwM2VtYXg7XG4gXG4gZG9uZTpcbi1cdG1hc19sZWFmX3NldF9tZXRhKG5ld25vZGUsIG1hcGxlX2xlYWZfNjQsIG5ld19lbmQpO1xuJiM0MztcdGlmICghaW5fcmN1IFx1MDAyNlx1MDAyNiBuZXdfZW5kICYjNDM7IDIgXHUwMDNjIG5vZGVfc2xvdHMpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGNoYXIgY2xlYXJfZnJvbSA9IG5ld19lbmQgJiM0MzsgMTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogTm90ZSB0aGF0IHRoZSBsYXN0IHNsb3QgaXMgbmV2ZXIgY2xlYXJlZCwgc2luY2UgdGhlIG1ldGFkYXRhXG4mIzQzO1x0XHQgKiB3aWxsIGJlIHN0b3JlZCB0aGVyZSBvciBpdCBoYXMgYSB2YWx1ZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0bWVtc2V0KGRzdF9zbG90cyAmIzQzOyBjbGVhcl9mcm9tLCAwLFxuJiM0MztcdFx0ICAgICAgIHNpemVvZih2b2lkIF9fcmN1ICopICogKG5vZGVfc2xvdHMgLSBjbGVhcl9mcm9tKSk7XG4mIzQzO1x0XHRpZiAoY2xlYXJfZnJvbSBcdTAwM2Mgbm9kZV9waXZvdHMpXG4mIzQzO1x0XHRcdG1lbXNldChkc3RfcGl2b3RzICYjNDM7IGNsZWFyX2Zyb20sIDAsXG4mIzQzO1x0XHRcdCAgICAgICBzaXplb2YodW5zaWduZWQgbG9uZykgKiAobm9kZV9waXZvdHMgLSBjbGVhcl9mcm9tKSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtYXNfbGVhZl9zZXRfbWV0YShuZXdub2RlLCB3cl9tYXMtXHUwMDNldHlwZSwgbmV3X2VuZCk7XG4gXHRpZiAoaW5fcmN1KSB7XG4gXHRcdHN0cnVjdCBtYXBsZV9lbm9kZSAqb2xkX2Vub2RlID0gbWFzLVx1MDAzZW5vZGU7XG4gXG5AQCAtMzIxOCw3ICYjNDM7MzI5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfc2xvdF9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiBcdHZvaWQgX19yY3UgKipzbG90cyA9IHdyX21hcy1cdTAwM2VzbG90cztcbiBcdGJvb2wgZ2FwID0gZmFsc2U7XG4gXG4tXHRnYXAgfD0gIW10X3Nsb3RfbG9ja2VkKG1hcy1cdTAwM2V0cmVlLCBzbG90cywgb2Zmc2V0KTtcbiYjNDM7XHRnYXAgfD0gIXdyX21hcy1cdTAwM2Vjb250ZW50O1xuIFx0Z2FwIHw9ICFtdF9zbG90X2xvY2tlZChtYXMtXHUwMDNldHJlZSwgc2xvdHMsIG9mZnNldCAmIzQzOyAxKTtcbiBcbiBcdGlmICh3cl9tYXMtXHUwMDNlb2Zmc2V0X2VuZCAtIG9mZnNldCA9PSAxKSB7XG5AQCAtMzY2MSw2ICYjNDM7MzczNSw5IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBzdG9yZV90eXBlIG1hc193cl9zdG9yZV90eXBlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIHtcbiBcdHN0cnVjdCBtYV9zdGF0ZSAqbWFzID0gd3JfbWFzLVx1MDAzZW1hcztcbiBcdHVuc2lnbmVkIGNoYXIgbmV3X2VuZDtcbiYjNDM7XHRib29sIGFwcGVuZGluZztcbiYjNDM7XHRib29sIG9uZV9zbG90O1xuJiM0MztcdGJvb2wgaW5fcmN1O1xuIFxuIFx0aWYgKHVubGlrZWx5KG1hc19pc19ub25lKG1hcykgfHwgbWFzX2lzX3B0cihtYXMpKSlcbiBcdFx0cmV0dXJuIHdyX3N0b3JlX3Jvb3Q7XG5AQCAtMzY4MCwyMSAmIzQzOzM3NTcsMzAgQEAgc3RhdGljIGlubGluZSBlbnVtIHN0b3JlX3R5cGUgbWFzX3dyX3N0b3JlX3R5cGUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4gXHRcdHJldHVybiB3cl9uZXdfcm9vdDtcbiBcbiBcdG5ld19lbmQgPSBtYXNfd3JfbmV3X2VuZCh3cl9tYXMpO1xuJiM0MztcdGluX3JjdSA9IG10X2luX3JjdShtYXMtXHUwMDNldHJlZSk7XG4mIzQzO1x0YXBwZW5kaW5nID0gbWFzLVx1MDAzZW9mZnNldCA9PSBtYXMtXHUwMDNlZW5kO1xuJiM0MztcdG9uZV9zbG90ID0gd3JfbWFzLVx1MDAzZW9mZnNldF9lbmQgLSBtYXMtXHUwMDNlb2Zmc2V0ID09IDE7XG4mIzQzO1xuIFx0LyogUG90ZW50aWFsIHNwYW5uaW5nIHJlYmFsYW5jZSBjb2xsYXBzaW5nIGEgbm9kZSAqL1xuIFx0aWYgKG5ld19lbmQgXHUwMDNjIG10X21pbl9zbG90c1t3cl9tYXMtXHUwMDNldHlwZV0pIHtcbiBcdFx0aWYgKCFtdGVfaXNfcm9vdChtYXMtXHUwMDNlbm9kZSkpXG4gXHRcdFx0cmV0dXJuICB3cl9yZWJhbGFuY2U7XG4mIzQzO1x0XHRpZiAoIWluX3JjdSkge1xuJiM0MztcdFx0XHRpZiAoYXBwZW5kaW5nKVxuJiM0MztcdFx0XHRcdHJldHVybiB3cl9hcHBlbmQ7XG4mIzQzO1x0XHRcdGVsc2UgaWYgKG1hcy1cdTAwM2VlbmQgPT0gbmV3X2VuZCBcdTAwMjZcdTAwMjYgb25lX3Nsb3QpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHdyX3Nsb3Rfc3RvcmU7XG4mIzQzO1x0XHR9XG4gXHRcdHJldHVybiB3cl9ub2RlX3N0b3JlO1xuIFx0fVxuIFxuIFx0aWYgKG5ld19lbmQgXHUwMDNlPSBtdF9zbG90c1t3cl9tYXMtXHUwMDNldHlwZV0pXG4gXHRcdHJldHVybiB3cl9zcGxpdF9zdG9yZTtcbiBcbi1cdGlmICghbXRfaW5fcmN1KG1hcy1cdTAwM2V0cmVlKSBcdTAwMjZcdTAwMjYgKG1hcy1cdTAwM2VvZmZzZXQgPT0gbWFzLVx1MDAzZWVuZCkpXG4mIzQzO1x0aWYgKCFpbl9yY3UgXHUwMDI2XHUwMDI2IGFwcGVuZGluZylcbiBcdFx0cmV0dXJuIHdyX2FwcGVuZDtcbiBcbi1cdGlmICgobmV3X2VuZCA9PSBtYXMtXHUwMDNlZW5kKSBcdTAwMjZcdTAwMjYgKCFtdF9pbl9yY3UobWFzLVx1MDAzZXRyZWUpIHx8XG4tXHRcdCh3cl9tYXMtXHUwMDNlb2Zmc2V0X2VuZCAtIG1hcy1cdTAwM2VvZmZzZXQgPT0gMSkpKVxuJiM0MztcdGlmIChuZXdfZW5kID09IG1hcy1cdTAwM2VlbmQgXHUwMDI2XHUwMDI2ICghaW5fcmN1IHx8IG9uZV9zbG90KSlcbiBcdFx0cmV0dXJuIHdyX3Nsb3Rfc3RvcmU7XG4gXG4gXHRyZXR1cm4gd3Jfbm9kZV9zdG9yZTtcbkBAIC0zNzkzLDM1ICYjNDM7Mzg3OSw0MCBAQCBpbnQgbWFzX2FsbG9jX2N5Y2xpYyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyAqc3RhcnRwLFxuIFx0XHR2b2lkICplbnRyeSwgdW5zaWduZWQgbG9uZyByYW5nZV9sbywgdW5zaWduZWQgbG9uZyByYW5nZV9oaSxcbiBcdFx0dW5zaWduZWQgbG9uZyAqbmV4dCwgZ2ZwX3QgZ2ZwKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgbWluID0gcmFuZ2VfbG87XG4tXHRpbnQgcmV0ID0gMDtcbi1cbi1cdHJhbmdlX2xvID0gbWF4KG1pbiwgKm5leHQpO1xuLVx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCByYW5nZV9sbywgcmFuZ2VfaGksIDEpO1xuLVx0aWYgKChtYXMtXHUwMDNldHJlZS1cdTAwM2VtYV9mbGFncyBcdTAwMjYgTVRfRkxBR1NfQUxMT0NfV1JBUFBFRCkgXHUwMDI2XHUwMDI2IHJldCA9PSAwKSB7XG4tXHRcdG1hcy1cdTAwM2V0cmVlLVx1MDAzZW1hX2ZsYWdzIFx1MDAyNj0gfk1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQ7XG4tXHRcdHJldCA9IDE7XG4tXHR9XG4tXHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByYW5nZV9sbyBcdTAwM2UgbWluKSB7XG4tXHRcdG1hc19yZXNldChtYXMpO1xuLVx0XHRyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIG1pbiwgcmFuZ2VfaGksIDEpO1xuLVx0XHRpZiAocmV0ID09IDApXG4tXHRcdFx0cmV0ID0gMTtcbi1cdH1cbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1pbjtcbiBcbiYjNDM7XHRtaW4gPSByYW5nZV9sbztcbiBcdGRvIHtcbiYjNDM7XHRcdHJhbmdlX2xvID0gbWF4KG1pbiwgKm5leHQpO1xuJiM0MztcdFx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCByYW5nZV9sbywgcmFuZ2VfaGksIDEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgcmFuZ2VfbG8gXHUwMDNlIG1pbikge1xuJiM0MztcdFx0XHRtYXNfcmVzZXQobWFzKTtcbiYjNDM7XHRcdFx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCBtaW4sIHJhbmdlX2hpLCAxKTtcbiYjNDM7XHRcdFx0aWYgKHJldCA9PSAwKVxuJiM0MztcdFx0XHRcdHJldCA9IDE7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRcdG1hc19pbnNlcnQobWFzLCBlbnRyeSk7XG4gXHR9IHdoaWxlIChtYXNfbm9tZW0obWFzLCBnZnApKTtcbi1cdGlmIChtYXNfaXNfZXJyKG1hcykpXG4tXHRcdHJldHVybiB4YV9lcnIobWFzLVx1MDAzZW5vZGUpO1xuIFxuJiM0MztcdGlmIChtYXNfaXNfZXJyKG1hcykpIHtcbiYjNDM7XHRcdHJldCA9IHhhX2VycihtYXMtXHUwMDNlbm9kZSk7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICgobWFzLVx1MDAzZXRyZWUtXHUwMDNlbWFfZmxhZ3MgXHUwMDI2IE1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQpIFx1MDAyNlx1MDAyNiByZXQgPT0gMCkge1xuJiM0MztcdFx0bWFzLVx1MDAzZXRyZWUtXHUwMDNlbWFfZmxhZ3MgXHUwMDI2PSB+TVRfRkxBR1NfQUxMT0NfV1JBUFBFRDtcbiYjNDM7XHRcdHJldCA9IDE7XG4mIzQzO1x0fVxuIFx0KnN0YXJ0cCA9IG1hcy1cdTAwM2VpbmRleDtcbiBcdCpuZXh0ID0gKnN0YXJ0cCAmIzQzOyAxO1xuIFx0aWYgKCpuZXh0ID09IDApXG4gXHRcdG1hcy1cdTAwM2V0cmVlLVx1MDAzZW1hX2ZsYWdzIHw9IE1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQ7XG4gXG4mIzQzO291dDpcbiBcdG1hc19kZXN0cm95KG1hcyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC00MzYwLDggJiM0Mzs0NDUxLDggQEAgdm9pZCAqbWFzX3dhbGsoc3RydWN0IG1hX3N0YXRlICptYXMpXG4ge1xuIFx0dm9pZCAqZW50cnk7XG4gXG4tXHRpZiAoIW1hc19pc19hY3RpdmUobWFzKSBcdTAwMjZcdTAwMjYgIW1hc19pc19zdGFydChtYXMpKVxuLVx0XHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XG4mIzQzO1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiYjNDM7XHRtYXNfbWFrZV93YWxrYWJsZShtYXMpO1xuIHJldHJ5OlxuIFx0ZW50cnkgPSBtYXNfc3RhdGVfd2FsayhtYXMpO1xuIFx0aWYgKG1hc19pc19zdGFydChtYXMpKSB7XG5AQCAtNDgzMSw2ICYjNDM7NDkyMiw3IEBAIHZvaWQgKm1hc19zdG9yZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnkpXG4ge1xuIFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIGVudHJ5KTtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0dHJhY2VfbWFfd3JpdGUoVFBfRkNULCBtYXMsIDAsIGVudHJ5KTtcbiAjaWZkZWYgQ09ORklHX0RFQlVHX01BUExFX1RSRUVcbiBcdGlmIChNQVNfV0FSTl9PTihtYXMsIG1hcy1cdTAwM2VpbmRleCBcdTAwM2UgbWFzLVx1MDAzZWxhc3QpKVxuQEAgLTQ4ODksNiAmIzQzOzQ5ODEsNyBAQCBpbnQgbWFzX3N0b3JlX2dmcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnksIGdmcF90IGdmcClcbiBcdE1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBlbnRyeSk7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIHJldHJ5OlxuIFx0bWFzX3dyX3ByZWFsbG9jYXRlKFx1MDAyNndyX21hcywgZW50cnkpO1xuIFx0aWYgKHVubGlrZWx5KG1hc19ub21lbShtYXMsIGdmcCkpKSB7XG5AQCAtNDkxOSw2ICYjNDM7NTAxMiw3IEBAIHZvaWQgbWFzX3N0b3JlX3ByZWFsbG9jKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSlcbiB7XG4gXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xuIFxuJiM0MztcdG1hc19sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzLVx1MDAzZXN0b3JlX3R5cGUgPT0gd3Jfc3RvcmVfcm9vdCkge1xuIFx0XHRtYXNfd3JfcHJlYWxsb2Nfc2V0dXAoXHUwMDI2d3JfbWFzKTtcbiBcdFx0Z290byBzdG9yZTtcbkBAIC00OTUxLDYgJiM0Mzs1MDQ1LDcgQEAgaW50IG1hc19wcmVhbGxvY2F0ZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnksIGdmcF90IGdmcClcbiB7XG4gXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xuIFxuJiM0MztcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRtYXNfd3JfcHJlYWxsb2Nfc2V0dXAoXHUwMDI2d3JfbWFzKTtcbiBcdG1hcy1cdTAwM2VzdG9yZV90eXBlID0gbWFzX3dyX3N0b3JlX3R5cGUoXHUwMDI2d3JfbWFzKTtcbiBcdG1hc19wcmVhbGxvY19jYWxjKFx1MDAyNndyX21hcywgZW50cnkpO1xuQEAgLTQ5OTcsNiAmIzQzOzUwOTIsNyBAQCBzdGF0aWMgdm9pZCBtYXNfbWF5X2FjdGl2YXRlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIFx0XHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XG4gXHR9IGVsc2Uge1xuIFx0XHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfYWN0aXZlO1xuJiM0MztcdFx0bWFzX2xvY2tfY2hlY2sobWFzKTtcbiBcdH1cbiB9XG4gXG5AQCAtNTA3NCw2ICYjNDM7NTE3MCw3IEBAIHZvaWQgKm1hc19uZXh0KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heClcbiB7XG4gXHR2b2lkICplbnRyeSA9IE5VTEw7XG4gXG4mIzQzO1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfbmV4dF9zZXR1cChtYXMsIG1heCwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTA5Nyw2ICYjNDM7NTE5NCw3IEBAIHZvaWQgKm1hc19uZXh0X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heClcbiB7XG4gXHR2b2lkICplbnRyeSA9IE5VTEw7XG4gXG4mIzQzO1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfbmV4dF9zZXR1cChtYXMsIG1heCwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTIwNSw2ICYjNDM7NTMwMyw3IEBAIHZvaWQgKm1hc19wcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbilcbiB7XG4gXHR2b2lkICplbnRyeSA9IE5VTEw7XG4gXG4mIzQzO1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfcHJldl9zZXR1cChtYXMsIG1pbiwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTIyOCw2ICYjNDM7NTMyNyw3IEBAIHZvaWQgKm1hc19wcmV2X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbilcbiB7XG4gXHR2b2lkICplbnRyeSA9IE5VTEw7XG4gXG4mIzQzO1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfcHJldl9zZXR1cChtYXMsIG1pbiwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTI3NCw2ICYjNDM7NTM3NCw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG10X3ByZXYpO1xuICAqL1xuIHZvaWQgbWFzX3BhdXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIHtcbiYjNDM7XHRtYXNfbG9ja19jaGVjayhtYXMpO1xuIFx0bWFzLVx1MDAzZXN0YXR1cyA9IG1hX3BhdXNlO1xuIFx0bWFzLVx1MDAzZW5vZGUgPSBOVUxMO1xuIH1cbkBAIC01MzgyLDYgJiM0Mzs1NDgzLDcgQEAgdm9pZCAqbWFzX2ZpbmQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19maW5kX3NldHVwKG1hcywgbWF4LCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01NDA5LDYgJiM0Mzs1NTExLDcgQEAgdm9pZCAqbWFzX2ZpbmRfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19maW5kX3NldHVwKG1hcywgbWF4LCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01NDI4LDcgJiM0Mzs1NTMxLDYgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWFzX2ZpbmRfcmFuZ2UpO1xuIHN0YXRpYyBib29sIG1hc19maW5kX3Jldl9zZXR1cChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4sXG4gXHRcdHZvaWQgKiplbnRyeSlcbiB7XG4tXG4gXHRzd2l0Y2ggKG1hcy1cdTAwM2VzdGF0dXMpIHtcbiBcdGNhc2UgbWFfYWN0aXZlOlxuIFx0XHRnb3RvIGFjdGl2ZTtcbkBAIC01NTIxLDYgJiM0Mzs1NjIzLDcgQEAgdm9pZCAqbWFzX2ZpbmRfcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbilcbiB7XG4gXHR2b2lkICplbnRyeSA9IE5VTEw7XG4gXG4mIzQzO1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfZmluZF9yZXZfc2V0dXAobWFzLCBtaW4sIFx1MDAyNmVudHJ5KSlcbiBcdFx0cmV0dXJuIGVudHJ5O1xuIFxuQEAgLTU1NDcsNiAmIzQzOzU2NTAsNyBAQCB2b2lkICptYXNfZmluZF9yYW5nZV9yZXYoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbiYjNDM7XHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19maW5kX3Jldl9zZXR1cChtYXMsIG1pbiwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTU2NCw2ICYjNDM7NTY2OCwxMCBAQCBFWFBPUlRfU1lNQk9MX0dQTChtYXNfZmluZF9yYW5nZV9yZXYpO1xuICAqIFNlYXJjaGVzIGZvciBAbWFzLVx1MDAzZWluZGV4LCBzZXRzIEBtYXMtXHUwMDNlaW5kZXggYW5kIEBtYXMtXHUwMDNlbGFzdCB0byB0aGUgcmFuZ2UgYW5kXG4gICogZXJhc2VzIHRoYXQgcmFuZ2UuXG4gICpcbiYjNDM7ICogTm90ZSB0aGF0IGVyYXNlIHJlcXVpcmVzIGFsbG9jYXRpb25zIGFuZCB3aWxsIHVzZSBHRlBfS0VSTkVMIHRvIGRvIHNvIGlmXG4mIzQzOyAqIG5lY2Vzc2FyeS4gIElmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgaW50ZXJuYWwgbG9jayB3aWxsIGJlIGRyb3BwZWQgdG9cbiYjNDM7ICogcmV0cnkuXG4mIzQzOyAqXG4gICogUmV0dXJuOiB0aGUgZW50cnkgdGhhdCB3YXMgZXJhc2VkIG9yICVOVUxMLCBAbWFzLVx1MDAzZWluZGV4IGFuZCBAbWFzLVx1MDAzZWxhc3QgYXJlIHVwZGF0ZWQuXG4gICovXG4gdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuQEAgLTU1NzIsMTMgJiM0Mzs1NjgwLDE5IEBAIHZvaWQgKm1hc19lcmFzZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiBcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBtYXMtXHUwMDNlaW5kZXg7XG4gXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgTlVMTCk7XG4gXG4tXHRpZiAoIW1hc19pc19hY3RpdmUobWFzKSB8fCAhbWFzX2lzX3N0YXJ0KG1hcykpXG4tXHRcdG1hcy1cdTAwM2VzdGF0dXMgPSBtYV9zdGFydDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEluIGxvdyBtZW1vcnkgc2l0dWF0aW9ucywgdGhlIGFsbG9jYXRpb24gaXMgcmV0cmllZCB3aXRoIHRoZSBnZnAgZmxhZ1xuJiM0MztcdCAqIEdGUF9LRVJORUwuICBUaGUgaW50ZXJuYWwgc3BpbmxvY2sgaXMgZHJvcHBlZCBpbiBtYXNfbm9tZW0oKSwgaG93ZXZlclxuJiM0MztcdCAqIHRoZSBleHRlcm5hbCBsb2NrIGlzIG5vdCBkcm9wcGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChtdF9leHRlcm5hbF9sb2NrKG1hcy1cdTAwM2V0cmVlKSlcbiYjNDM7XHRcdG1pZ2h0X2FsbG9jKEdGUF9LRVJORUwpO1xuIFxuJiM0MztcdG1hc19tYWtlX3dhbGthYmxlKG1hcyk7XG4gd3JpdGVfcmV0cnk6XG4gXHRlbnRyeSA9IG1hc19zdGF0ZV93YWxrKG1hcyk7XG4gXHRpZiAoIWVudHJ5KVxuLVx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuIFxuIFx0LyogTXVzdCByZXNldCB0byBlbnN1cmUgc3Bhbm5pbmcgd3JpdGVzIG9mIGxhc3Qgc2xvdCBhcmUgZGV0ZWN0ZWQgKi9cbiBcdG1hc19yZXNldChtYXMpO1xuQEAgLTU1ODksOCAmIzQzOzU3MDMsMTAgQEAgdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIFx0XHRnb3RvIHdyaXRlX3JldHJ5O1xuIFx0fVxuIFxuLVx0aWYgKG1hc19pc19lcnIobWFzKSlcbiYjNDM7XHRpZiAobWFzX2lzX2VycihtYXMpKSB7XG4mIzQzO1x0XHRlbnRyeSA9IE5VTEw7XG4gXHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiBcbiBcdG1hc193cl9zdG9yZV9lbnRyeShcdTAwMjZ3cl9tYXMpO1xuIG91dDpcbkBAIC01NjAxLDEwICYjNDM7NTcxNywxMSBAQCBFWFBPUlRfU1lNQk9MX0dQTChtYXNfZXJhc2UpO1xuIFxuIC8qKlxuICAqIG1hc19ub21lbSgpIC0gQ2hlY2sgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGFsbG9jYXRpbmcgYW5kIGRvIHRoZSBhbGxvY2F0aW9uXG4tICogaWYgbmVjZXNzYXJ5IElmIHRoZXJlIGFyZSBhbGxvY2F0aW9ucywgdGhlbiBmcmVlIHRoZW0uXG4mIzQzOyAqIGlmIG5lY2Vzc2FyeS5cbiYjNDM7ICpcbiAgKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGVcbiAgKiBAZ2ZwOiBUaGUgR0ZQX0ZMQUdTIHRvIHVzZSBmb3IgYWxsb2NhdGlvbnNcbi0gKiBSZXR1cm46IHRydWUgb24gYWxsb2NhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLlxuJiM0MzsgKiBSZXR1cm46IEZhbHNlIG9uIG5vIG1lbW9yeS4gIFRydWUgb3RoZXJ3aXNlIChwYXJ0aWFsIHN1Y2Nlc3MgYXMgd2VsbClcbiAgKi9cbiBib29sIG1hc19ub21lbShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgZ2ZwX3QgZ2ZwKVxuIFx0X19tdXN0X2hvbGQobWFzLVx1MDAzZXRyZWUtXHUwMDNlbWFfbG9jaylcbkBAIC01NjEyLDYgJiM0Mzs1NzI5LDEwIEBAIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApXG4gXHRpZiAobGlrZWx5KG1hcy1cdTAwM2Vub2RlICE9IE1BX0VSUk9SKC1FTk9NRU0pKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuJiM0MztcdC8qIEFsbG9jYXRpb25zIGNhbiBmYWlsLCBkb24mIzM5O3QgZG8gdGhpcy4gKi9cbiYjNDM7XHRXQVJOX09OX09OQ0UoIWdmcGZsYWdzX2FsbG93X2Jsb2NraW5nKGdmcCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIG10X2V4dGVybmFsX2xvY2sobWFzLVx1MDAzZXRyZWUpKTtcbiYjNDM7XG4gXHRpZiAoZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwKSBcdTAwMjZcdTAwMjYgIW10X2V4dGVybmFsX2xvY2sobWFzLVx1MDAzZXRyZWUpKSB7XG4gXHRcdG10cmVlX3VubG9jayhtYXMtXHUwMDNldHJlZSk7XG4gXHRcdG1hc19hbGxvY19ub2RlcyhtYXMsIGdmcCk7XG5AQCAtNTYyMCwxMCAmIzQzOzU3NDEsMTcgQEAgYm9vbCBtYXNfbm9tZW0oc3RydWN0IG1hX3N0YXRlICptYXMsIGdmcF90IGdmcClcbiBcdFx0bWFzX2FsbG9jX25vZGVzKG1hcywgZ2ZwKTtcbiBcdH1cbiBcbi1cdGlmICghbWFzLVx1MDAzZXNoZWFmIFx1MDAyNlx1MDAyNiAhbWFzLVx1MDAzZWFsbG9jKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogUmV0dXJuIGZhbHNlIG9uIHplcm8gZm9yd2FyZCBwcm9ncmVzcy4gIFBhcnRpYWwgYWxsb2NhdGlvbnMgYXJlIGtlcHRcbiYjNDM7XHQgKiBzbyB0aGUgcmV0cnkgcGF0aCB3aWxsIGF0dGVtcHQgdG8gZ2V0IHRoZSByZXN0LiAgVGhlIGZhaWx1cmUgc2hvdWxkXG4mIzQzO1x0ICogbm90IGhhcHBlbiBhcyB3ZSB0cnkgb3VyIGJlc3QgdG8gcmVjbGFpbS4gIFRoZSB1c2VyIHdvdWxkIG5lZWQgYW5cbiYjNDM7XHQgKiBleHRlcm5hbCBsb2NrIHdpdGggYSBub24tYmxvY2tpbmcgZ2ZwIGluIGEgbG93IG1lbW9yeSBzaXR1YXRpb24gLVxuJiM0MztcdCAqIHdoaWNoIHdvdWxkIGhhdmUgdHJpZ2dlcmVkIHRoZSBmaXJzdCB3YXJuaW5nIGluIHRoaXMgZnVuY3Rpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghbWFzLVx1MDAzZXNoZWFmIFx1MDAyNlx1MDAyNiAhbWFzLVx1MDAzZWFsbG9jKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0bWFzLVx1MDAzZXN0YXR1cyA9IG1hX3N0YXJ0O1xuJiM0MztcdG1hc19yZXNldChtYXMpO1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuQEAgLTU5MTMsNiAmIzQzOzYwNDEsMTAgQEAgRVhQT1JUX1NZTUJPTChtdHJlZV9hbGxvY19ycmFuZ2UpO1xuICAqIEVyYXNpbmcgaXMgdGhlIHNhbWUgYXMgYSB3YWxrIHRvIGFuIGVudHJ5IHRoZW4gYSBzdG9yZSBvZiBhIE5VTEwgdG8gdGhhdFxuICAqIEVOVElSRSByYW5nZS4gIEluIGZhY3QsIGl0IGlzIGltcGxlbWVudGVkIGFzIHN1Y2ggdXNpbmcgdGhlIGFkdmFuY2VkIEFQSS5cbiAgKlxuJiM0MzsgKiBOb3RlIHRoYXQgZXJhc2UgcmVxdWlyZXMgYWxsb2NhdGlvbnMgYW5kIHdpbGwgdXNlIEdGUF9LRVJORUwgdG8gZG8gc28gaWZcbiYjNDM7ICogbmVjZXNzYXJ5LiAgSWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBpbnRlcm5hbCBsb2NrIHdpbGwgYmUgZHJvcHBlZCB0b1xuJiM0MzsgKiByZXRyeS5cbiYjNDM7ICpcbiAgKiBSZXR1cm46IFRoZSBlbnRyeSBzdG9yZWQgYXQgdGhlIEBpbmRleCBvciAlTlVMTFxuICAqL1xuIHZvaWQgKm10cmVlX2VyYXNlKHN0cnVjdCBtYXBsZV90cmVlICptdCwgdW5zaWduZWQgbG9uZyBpbmRleClcbkBAIC01OTIyLDYgJiM0Mzs2MDU0LDcgQEAgdm9pZCAqbXRyZWVfZXJhc2Uoc3RydWN0IG1hcGxlX3RyZWUgKm10LCB1bnNpZ25lZCBsb25nIGluZGV4KVxuIFx0TUFfU1RBVEUobWFzLCBtdCwgaW5kZXgsIGluZGV4KTtcbiBcdHRyYWNlX21hX29wKFRQX0ZDVCwgXHUwMDI2bWFzKTtcbiBcbiYjNDM7XHRtaWdodF9hbGxvYyhHRlBfS0VSTkVMKTtcbiBcdG10cmVlX2xvY2sobXQpO1xuIFx0ZW50cnkgPSBtYXNfZXJhc2UoXHUwMDI2bWFzKTtcbiBcdG10cmVlX3VubG9jayhtdCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY1xuaW5kZXggMDYwNzkxM2EzMDIyZDUuLmQ5NjdlNzZhM2MwNjUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jXG5AQCAtMzUyMzQsNyAmIzQzOzM1MjM0LDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGNoZWNrX3ByZWFsbG9jKHN0cnVjdCBtYXBsZV90cmVlICptdClcbiBcdG10X3NldF9ub25fa2VybmVsKDEpO1xuIFx0LyogU3Bhbm5pbmcgc3RvcmUgKi9cbiBcdG1hc19zZXRfcmFuZ2UoXHUwMDI2bWFzLCAxLCAxMDApO1xuLVx0TVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoXHUwMDI2bWFzLCBwdHIsIEdGUF9LRVJORUwgXHUwMDI2IEdGUF9OT1dBSVQpID09IDApO1xuJiM0MztcdE1UX0JVR19PTihtdCwgbWFzX3ByZWFsbG9jYXRlKFx1MDAyNm1hcywgcHRyLCBHRlBfTk9XQUlUKSA9PSAwKTtcbiBcdGFsbG9jYXRlZCA9IG1hc19hbGxvY2F0ZWQoXHUwMDI2bWFzKTtcbiBcdGhlaWdodCA9IG1hc19tdF9oZWlnaHQoXHUwMDI2bWFzKTtcbiBcdE1UX0JVR19PTihtdCwgYWxsb2NhdGVkICE9IDApO1xuQEAgLTM1MjU3LDcgJiM0MzszNTI1Nyw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19wcmVhbGxvYyhzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQpXG4gXHRNVF9CVUdfT04obXQsIG1hc19hbGxvY2F0ZWQoXHUwMDI2bWFzKSAhPSAwKTtcbiBcdG1hc19zZXRfcmFuZ2UoXHUwMDI2bWFzLCAwLCAyMDApO1xuIFx0bXRfc2V0X25vbl9rZXJuZWwoMSk7XG4tXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX0tFUk5FTCBcdTAwMjYgR0ZQX05PV0FJVCkgPT0gMCk7XG4mIzQzO1x0TVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoXHUwMDI2bWFzLCBwdHIsIEdGUF9OT1dBSVQpID09IDApO1xuIFx0YWxsb2NhdGVkID0gbWFzX2FsbG9jYXRlZChcdTAwMjZtYXMpO1xuIFx0aGVpZ2h0ID0gbWFzX210X2hlaWdodChcdTAwMjZtYXMpO1xuIFx0TVRfQlVHX09OKG10LCBhbGxvY2F0ZWQgIT0gMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REVCVUdfTUFQTEVfVFJFRSYjMzQ7LAogICAgJiMzNDtMT0NLREVQJiMzNDssCiAgICAmIzM0O1BST1ZFX0xPQ0tJTkcmIzM0OywKICAgICYjMzQ7UkNVX1NUUklDVF9HUkFDRV9QRVJJT0QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYXNfZXJhc2UmIzM0OywKICAgICYjMzQ7bWFzX25vbWVtJiMzNDssCiAgICAmIzM0O21hc19hbGxvY19jeWNsaWMmIzM0OywKICAgICYjMzQ7bWFzX3dyX25vZGVfc3RvcmUmIzM0OywKICAgICYjMzQ7bWFzX3dyX3N0b3JlX3R5cGUmIzM0OywKICAgICYjMzQ7bWFzX3N0b3JlX2dmcCYjMzQ7LAogICAgJiMzNDttYXNfc3RvcmVfcHJlYWxsb2MmIzM0OywKICAgICYjMzQ7bWFzX3ByZWFsbG9jYXRlJiMzNDssCiAgICAmIzM0O210cmVlX2VyYXNlJiMzNDssCiAgICAmIzM0O2xvY2tfc2VxdWVuY2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtYXBsZSB0cmVlIGxvZ2ljLCBpbmNsdWRpbmcgZXJhc2UsIGFsbG9jYXRpb24sIGFuZCBzdG9yZSBvcGVyYXRpb25zLCBhbmQgaW50cm9kdWNlcyBsb2NrIHNlcXVlbmNlIHRyYWNraW5nIGluIGxvY2tkZXAgdG8gdmVyaWZ5IG1hcGxlIHRyZWUgbG9ja2luZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvY2tpbmcgdmFsaWRhdGlvbiwgd2hpY2ggYXJlIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzZhZTRjYjRiOThlZjZkNTY5NDdkNWMzMjQ3MGU5Y2M1ODhlZDFjZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMDI6MjQ6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdAppbmRleCBjY2RkMTYxNWNmOTc0Zi4uMWVhZTI0YTljMThiNGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdApAQCAtMTcsNyAmIzQzOzE3LDggQEAgc3VwcG9ydHMgaXRlcmF0aW5nIG92ZXIgYSByYW5nZSBvZiBlbnRyaWVzIGFuZCBnb2luZyB0byB0aGUgcHJldmlvdXMgb3IgbmV4dAogZW50cnkgaW4gYSBjYWNoZS1lZmZpY2llbnQgbWFubmVyLiAgVGhlIHRyZWUgY2FuIGFsc28gYmUgcHV0IGludG8gYW4gUkNVLXNhZmUKIG1vZGUgb2Ygb3BlcmF0aW9uIHdoaWNoIGFsbG93cyByZWFkaW5nIGFuZCB3cml0aW5nIGNvbmN1cnJlbnRseS4gIFdyaXRlcnMgbXVzdAogc3luY2hyb25pemUgb24gYSBsb2NrLCB3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQgc3BpbmxvY2ssIG9yIHRoZSB1c2VyIGNhbiBzZXQKLXRoZSBsb2NrIHRvIGFuIGV4dGVybmFsIGxvY2sgb2YgYSBkaWZmZXJlbnQgdHlwZS4KJiM0Mzt0aGUgbG9jayB0byBhbiBleHRlcm5hbCBsb2NrIG9mIGEgZGlmZmVyZW50IHR5cGUuICBOb3RlIHRoYXQgZXh0ZXJuYWwgbG9ja3MgbWF5CiYjNDM7aW50ZXJmZXJlIHdpdGggYWxsb2NhdGlvbnMgaW4gYSBsb3cgbWVtb3J5IHNpdHVhdGlvbi4KIAogVGhlIE1hcGxlIFRyZWUgbWFpbnRhaW5zIGEgc21hbGwgbWVtb3J5IGZvb3RwcmludCBhbmQgd2FzIGRlc2lnbmVkIHRvIHVzZQogbW9kZXJuIHByb2Nlc3NvciBjYWNoZSBlZmZpY2llbnRseS4gIFRoZSBtYWpvcml0eSBvZiB0aGUgdXNlcnMgd2lsbCBiZSBhYmxlIHRvCkBAIC00Miw2ICYjNDM7NDMsMTUgQEAgc3VjY2Vzc2Z1bCBzdG9yZSBvcGVyYXRpb24gd2l0aGluIGEgZ2l2ZW4KIGNvZGUgc2VnbWVudCB3aGVuIGFsbG9jYXRpbmcgY2Fubm90IGJlIGRvbmUuICBBbGxvY2F0aW9ucyBvZiBub2RlcyBhcmUKIHJlbGF0aXZlbHkgc21hbGwgYXQgYXJvdW5kIDI1NiBieXRlcy4KIAomIzQzO1NpbmNlIHRoZSBtYXBsZSB0cmVlIHVzZXMgaW50ZXJuYWwgbm9kZXMgdGhhdCBhcmUgYWxsb2NhdGVkIGFuZCBoYXMgcnVsZXMgb24KJiM0MztkYXRhIGRlbnNpdHksIGVyYXNpbmcgYW4gZW50cnkgbWF5IGNhdXNlIGFsbG9jYXRpb25zIHRvIG9jY3VyLiAgVGhhdCBpcywKJiM0MztlcmFzaW5nIGFuIGVudHJ5IG1heSBjb25zdW1lIG1lbW9yeS4gIFVzZXJzIG11c3QgdGFrZSBjYXJlIHRvIGVuc3VyZSB0aGF0IHRoZXkKJiM0MztkbyBub3QgdmlvbGF0ZSB0aGUgbGFyZ2VyIHN5c3RlbSBjb25zdHJhaW50cyBvbiB3aGVuIGFuZCBob3cgbWVtb3J5IGlzCiYjNDM7YWxsb2NhdGVkLiAgTW9zdCBzaXR1YXRpb25zIGFyZSBmaW5lIHRvIGFsbG9jYXRlLCBidXQgdGhlIHByZS1hbGxvY2F0aW9uCiYjNDM7c3VwcG9ydCBpcyBwcm92aWRlZCBhcyBhIG1lY2hhbmlzbSB0byBhdm9pZCB0cmlja2llciBzaXR1YXRpb25zLiAgVGhlcmUgaXMgYWxzbwomIzQzO3RoZSBwb3NzaWJpbGl0eSBvZiB1c2luZyBzcGVjaWFsIGVudHJpZXMgYW5kIGNsZWFuIHVwIHRoZSB0cmVlIGxhdGVyLCBpbgomIzQzO2V4dHJlbWUgY2lyY3Vtc3RhbmNlcy4KJiM0MzsKIC4uIF9tYXBsZS10cmVlLW5vcm1hbC1hcGk6CiAKIE5vcm1hbCBBUEkKQEAgLTYzLDcgJiM0Mzs3Myw4IEBAIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UuICBtdHJlZV9zdG9yZV9yYW5nZSgpIHdvcmtzIGluIHRoZSBzYW1lIHdheQogYnV0IHRha2VzIGEgcmFuZ2UuICBtdHJlZV9sb2FkKCkgaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgZW50cnkgc3RvcmVkIGF0IGEKIGdpdmVuIGluZGV4LiAgWW91IGNhbiB1c2UgbXRyZWVfZXJhc2UoKSB0byBlcmFzZSBhbiBlbnRpcmUgcmFuZ2UgYnkgb25seQoga25vd2luZyBvbmUgdmFsdWUgd2l0aGluIHRoYXQgcmFuZ2UsIG9yIG10cmVlX3N0b3JlKCkgY2FsbCB3aXRoIGFuIGVudHJ5IG9mCi1OVUxMIG1heSBiZSB1c2VkIHRvIHBhcnRpYWxseSBlcmFzZSBhIHJhbmdlIG9yIG1hbnkgcmFuZ2VzIGF0IG9uY2UuCiYjNDM7TlVMTCBtYXkgYmUgdXNlZCB0byBwYXJ0aWFsbHkgZXJhc2UgYSByYW5nZSBvciBtYW55IHJhbmdlcyBhdCBvbmNlLiAgTm90ZSB0aGF0CiYjNDM7bXRyZWVfZXJhc2UoKSBtYXkgdXNlIEdGUF9LRVJORUwgb24gYWxsb2NhdGlvbnMuCiAKIElmIHlvdSB3YW50IHRvIG9ubHkgc3RvcmUgYSBuZXcgZW50cnkgdG8gYSByYW5nZSAob3IgaW5kZXgpIGlmIHRoYXQgcmFuZ2UgaXMKIGN1cnJlbnRseSBgYE5VTExgYCwgeW91IGNhbiB1c2UgbXRyZWVfaW5zZXJ0X3JhbmdlKCkgb3IgbXRyZWVfaW5zZXJ0KCkgd2hpY2gKQEAgLTE2Myw3ICYjNDM7MTc0LDkgQEAgWW91IGNhbiB1c2UgbWFzX2VyYXNlKCkgdG8gZXJhc2UgYW4gZW50aXJlIHJhbmdlIGJ5IHNldHRpbmcgaW5kZXggYW5kCiBsYXN0IG9mIHRoZSBtYXBsZSBzdGF0ZSB0byB0aGUgZGVzaXJlZCByYW5nZSB0byBlcmFzZS4gIFRoaXMgd2lsbCBlcmFzZQogdGhlIGZpcnN0IHJhbmdlIHRoYXQgaXMgZm91bmQgaW4gdGhhdCByYW5nZSwgc2V0IHRoZSBtYXBsZSBzdGF0ZSBpbmRleAogYW5kIGxhc3QgYXMgdGhlIHJhbmdlIHRoYXQgd2FzIGVyYXNlZCBhbmQgcmV0dXJuIHRoZSBlbnRyeSB0aGF0IGV4aXN0ZWQKLWF0IHRoYXQgbG9jYXRpb24uCiYjNDM7YXQgdGhhdCBsb2NhdGlvbi4gIE5vdGUgdGhhdCBtYXNfZXJhc2UoKSBtYXkgYWxsb2NhdGUgd2l0aCB0aGUgR0ZQX0tFUk5FTCBmbGFnLgomIzQzO0lmIHRoaXMgaXMgbm90IG9rYXksIGNvbnNpZGVyIHVzaW5nIG1hc19zdG9yZV9nZnAoKSBhbmQgcGFzcyBpdCBhIGBgTlVMTGBgLAomIzQzO2FmdGVyIHNldHRpbmcgdXAgdGhlIGNvcnJlY3QgcmFuZ2UgYnkgd2Fsa2luZyB0byB0aGUgZW50cnkuCiAKIFlvdSBjYW4gd2FsayBlYWNoIGVudHJ5IHdpdGhpbiBhIHJhbmdlIGJ5IHVzaW5nIG1hc19mb3JfZWFjaCgpLiAgSWYgeW91IHdhbnQKIHRvIHdhbGsgZWFjaCBlbGVtZW50IG9mIHRoZSB0cmVlIHRoZW4gYGAwYGAgYW5kIGBgVUxPTkdfTUFYYGAgbWF5IGJlIHVzZWQgYXMKQEAgLTIxMSw3ICYjNDM7MjI0LDcgQEAgQWR2YW5jZWQgTG9ja2luZwogCiBUaGUgbWFwbGUgdHJlZSB1c2VzIGEgc3BpbmxvY2sgYnkgZGVmYXVsdCwgYnV0IGV4dGVybmFsIGxvY2tzIGNhbiBiZSB1c2VkIGZvcgogdHJlZSB1cGRhdGVzIGFzIHdlbGwuICBUbyB1c2UgYW4gZXh0ZXJuYWwgbG9jaywgdGhlIHRyZWUgbXVzdCBiZSBpbml0aWFsaXplZAotd2l0aCB0aGUgYGBNVF9GTEFHU19MT0NLX0VYVEVSTiBmbGFnYGAsIHRoaXMgaXMgdXN1YWxseSBkb25lIHdpdGggdGhlCiYjNDM7d2l0aCB0aGUgYGBNVF9GTEFHU19MT0NLX0VYVEVSTmBgIGZsYWcsIHRoaXMgaXMgdXN1YWxseSBkb25lIHdpdGggdGhlCiBNVFJFRV9JTklUX0VYVCgpICNkZWZpbmUsIHdoaWNoIHRha2VzIGFuIGV4dGVybmFsIGxvY2sgYXMgYW4gYXJndW1lbnQuCiAKIEZ1bmN0aW9ucyBhbmQgc3RydWN0dXJlcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaAppbmRleCA2MjE1NjYzNDU0MDZkZC4uYTY0NTFlY2JiZTlhMDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCkBAIC0yNzMsNiAmIzQzOzI3Myw5IEBAIGV4dGVybiBzdHJ1Y3QgcGluX2Nvb2tpZSBsb2NrX3Bpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jayk7CiBleHRlcm4gdm9pZCBsb2NrX3JlcGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSk7CiBleHRlcm4gdm9pZCBsb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSk7CiAKJiM0MztleHRlcm4gdTMyIGxvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKTsKJiM0MzsjZGVmaW5lIGxvY2tkZXBfc2VxdWVuY2UobG9jaykJbG9ja19zZXF1ZW5jZSgmYW1wOyhsb2NrKS0mZ3Q7ZGVwX21hcCkKJiM0MzsKICNkZWZpbmUgbG9ja2RlcF9kZXB0aCh0c2spCShkZWJ1Z19sb2NrcyA/ICh0c2spLSZndDtsb2NrZGVwX2RlcHRoIDogMCkKIAogI2RlZmluZSBsb2NrZGVwX2Fzc2VydChjb25kKQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaAppbmRleCBlYWUxMTVhMjY0ODg1Ni4uNTVjNGIxNTJmZWRmN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oCkBAIC0yNTMsNyAmIzQzOzI1Myw4IEBAIHN0cnVjdCBoZWxkX2xvY2sgewogCXVuc2lnbmVkIGludCBoYXJkaXJxc19vZmY6MTsKIAl1bnNpZ25lZCBpbnQgc3luYzoxOwogCXVuc2lnbmVkIGludCByZWZlcmVuY2VzOjExOwkJCQkJLyogMzIgYml0cyAqLwotCXVuc2lnbmVkIGludCBwaW5fY291bnQ7CiYjNDM7CXVuc2lnbmVkIGludCBwaW5fY291bnQ6MjQ7CiYjNDM7CXVuc2lnbmVkIGludCBzZXFfY291bnQ6ODsKIH07CiAKICNlbHNlIC8qICFDT05GSUdfTE9DS0RFUCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmggYi9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaAppbmRleCA0YTU2MzE5MDZhZmZiNS4uNWUwYmQyODU3ZDk0MWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oCkBAIC0yOSwxMyAmIzQzOzI5LDExIEBACiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFMJMzEJLyogMjU2IGJ5dGVzIGluY2x1ZGluZyAtJmd0O3BhcmVudCAqLwogI2RlZmluZSBNQVBMRV9SQU5HRTY0X1NMT1RTCTE2CS8qIDI1NiBieXRlcyAqLwogI2RlZmluZSBNQVBMRV9BUkFOR0U2NF9TTE9UUwkxMAkvKiAyNDAgYnl0ZXMgKi8KLSNkZWZpbmUgTUFQTEVfQUxMT0NfU0xPVFMJKE1BUExFX05PREVfU0xPVFMgLSAxKQogI2Vsc2UKIC8qIDMyYml0IHNpemVzICovCiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFMJNjMJLyogMjU2IGJ5dGVzIGluY2x1ZGluZyAtJmd0O3BhcmVudCAqLwogI2RlZmluZSBNQVBMRV9SQU5HRTY0X1NMT1RTCTMyCS8qIDI1NiBieXRlcyAqLwogI2RlZmluZSBNQVBMRV9BUkFOR0U2NF9TTE9UUwkyMQkvKiAyNDAgYnl0ZXMgKi8KLSNkZWZpbmUgTUFQTEVfQUxMT0NfU0xPVFMJKE1BUExFX05PREVfU0xPVFMgLSAyKQogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHXzY0QklUKSB8fCBkZWZpbmVkKEJVSUxEX1ZEU08zMl82NCkgKi8KIAogI2RlZmluZSBNQVBMRV9OT0RFX01BU0sJCTI1NVVMCkBAIC00ODUsNiAmIzQzOzQ4MywxMiBAQCBzdHJ1Y3QgbWFfc3RhdGUgewogCXVuc2lnbmVkIGNoYXIgbWFzX2ZsYWdzOwogCXVuc2lnbmVkIGNoYXIgZW5kOwkJLyogVGhlIGVuZCBvZiB0aGUgbm9kZSAqLwogCWVudW0gc3RvcmVfdHlwZSBzdG9yZV90eXBlOwkvKiBUaGUgdHlwZSBvZiBzdG9yZSBuZWVkZWQgZm9yIHRoaXMgb3BlcmF0aW9uICovCiYjNDM7I2lmZGVmIENPTkZJR19MT0NLREVQCiYjNDM7CXUzMiBsZF9zZXE7CiYjNDM7I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRAomIzQzOwl1bnNpZ25lZCBsb25nIHJjdV9ncDsKJiM0MzsjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovCiYjNDM7I2VuZGlmIC8qIENPTkZJR19MT0NLREVQICovCiB9OwogCiBzdHJ1Y3QgbWFfd3Jfc3RhdGUgewpAQCAtNTcyLDcgJiM0Mzs1NzYsNyBAQCB2b2lkIG1hcGxlX3RyZWVfaW5pdCh2b2lkKTsKIHZvaWQgbWFzX2Rlc3Ryb3koc3RydWN0IG1hX3N0YXRlICptYXMpOwogCiB2b2lkICptYXNfcHJldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pOwotdm9pZCAqbWFzX3ByZXZfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KTsKJiM0Mzt2b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pOwogdm9pZCAqbWFzX25leHQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KTsKIHZvaWQgKm1hc19uZXh0X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCAzNzNiY2MwNTk4ZDEwYi4uMTRkNWNlOGRkNjEzNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTEyODgsNiAmIzQzOzEyODgsNyBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3QgewogCXU2NAkJCQljdXJyX2NoYWluX2tleTsKIAlpbnQJCQkJbG9ja2RlcF9kZXB0aDsKIAl1bnNpZ25lZCBpbnQJCQlsb2NrZGVwX3JlY3Vyc2lvbjsKJiM0MzsJdW5zaWduZWQgaW50CQkJbG9ja2RlcF9zZXE7CiAJc3RydWN0IGhlbGRfbG9jawkJaGVsZF9sb2Nrc1tNQVhfTE9DS19ERVBUSF07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jCmluZGV4IDJkNGM1YmFiNWFmODg3Li5hNjk1NjdiZGQ3OTEyZSAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYwpAQCAtNTA3Nyw3ICYjNDM7NTA3Nyw3IEBAIHN0YXRpYyBpbnQgX19sb2NrX2lzX2hlbGQoY29uc3Qgc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBpbnQgcmVhZCk7CiBzdGF0aWMgaW50IF9fbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLAogCQkJICBpbnQgdHJ5bG9jaywgaW50IHJlYWQsIGludCBjaGVjaywgaW50IGhhcmRpcnFzX29mZiwKIAkJCSAgc3RydWN0IGxvY2tkZXBfbWFwICpuZXN0X2xvY2ssIHVuc2lnbmVkIGxvbmcgaXAsCi0JCQkgIGludCByZWZlcmVuY2VzLCBpbnQgcGluX2NvdW50LCBpbnQgc3luYykKJiM0MzsJCQkgIGludCByZWZlcmVuY2VzLCBpbnQgcGluX2NvdW50LCBpbnQgc3luYywgaW50IHNlcSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50OwogCXN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IE5VTEw7CkBAIC01MTgzLDYgJiM0Mzs1MTgzLDcgQEAgc3RhdGljIGludCBfX2xvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcywKIAlobG9jay0mZ3Q7aG9sZHRpbWVfc3RhbXAgPSBsb2Nrc3RhdF9jbG9jaygpOwogI2VuZGlmCiAJaGxvY2stJmd0O3Bpbl9jb3VudCA9IHBpbl9jb3VudDsKJiM0MzsJaGxvY2stJmd0O3NlcV9jb3VudCA9IHNlcTsKIAogCWlmIChjaGVja193YWl0X2NvbnRleHQoY3VyciwgaGxvY2spKQogCQlyZXR1cm4gMDsKQEAgLTUzODgsNyAmIzQzOzUzODksNyBAQCBzdGF0aWMgaW50IHJlYWNxdWlyZV9oZWxkX2xvY2tzKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwgdW5zaWduZWQgaW50IGRlcHRoLAogCQkJCSAgICBobG9jay0mZ3Q7cmVhZCwgaGxvY2stJmd0O2NoZWNrLAogCQkJCSAgICBobG9jay0mZ3Q7aGFyZGlycXNfb2ZmLAogCQkJCSAgICBobG9jay0mZ3Q7bmVzdF9sb2NrLCBobG9jay0mZ3Q7YWNxdWlyZV9pcCwKLQkJCQkgICAgaGxvY2stJmd0O3JlZmVyZW5jZXMsIGhsb2NrLSZndDtwaW5fY291bnQsIDApKSB7CiYjNDM7CQkJCSAgICBobG9jay0mZ3Q7cmVmZXJlbmNlcywgaGxvY2stJmd0O3Bpbl9jb3VudCwgMCwgaGxvY2stJmd0O3NlcV9jb3VudCkpIHsKIAkJY2FzZSAwOgogCQkJcmV0dXJuIDE7CiAJCWNhc2UgMToKQEAgLTU2NjksMTQgJiM0Mzs1NjcwLDE3IEBAIHN0YXRpYyB2b2lkIF9fbG9ja191bnBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUgY29va2llCiAJCXN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrID0gY3Vyci0mZ3Q7aGVsZF9sb2NrcyAmIzQzOyBpOwogCiAJCWlmIChtYXRjaF9oZWxkX2xvY2soaGxvY2ssIGxvY2spKSB7CiYjNDM7CQkJaW50IHBpbl9jb3VudDsKJiM0MzsKIAkJCWlmIChXQVJOKCFobG9jay0mZ3Q7cGluX2NvdW50LCAmIzM0O3VucGlubmluZyBhbiB1bnBpbm5lZCBsb2NrXG4mIzM0OykpCiAJCQkJcmV0dXJuOwogCi0JCQlobG9jay0mZ3Q7cGluX2NvdW50IC09IGNvb2tpZS52YWw7CiYjNDM7CQkJcGluX2NvdW50ID0gaGxvY2stJmd0O3Bpbl9jb3VudCAtIGNvb2tpZS52YWw7CiAKLQkJCWlmIChXQVJOKChpbnQpaGxvY2stJmd0O3Bpbl9jb3VudCAmbHQ7IDAsICYjMzQ7cGluIGNvdW50IGNvcnJ1cHRlZFxuJiMzNDspKQotCQkJCWhsb2NrLSZndDtwaW5fY291bnQgPSAwOwomIzQzOwkJCWlmIChXQVJOKHBpbl9jb3VudCAmbHQ7IDAsICYjMzQ7cGluIGNvdW50IGNvcnJ1cHRlZFxuJiMzNDspKQomIzQzOwkJCQlwaW5fY291bnQgPSAwOwogCiYjNDM7CQkJaGxvY2stJmd0O3Bpbl9jb3VudCA9IHBpbl9jb3VudDsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTU2ODQsNiAmIzQzOzU2ODgsMjQgQEAgc3RhdGljIHZvaWQgX19sb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSBjb29raWUKIAlXQVJOKDEsICYjMzQ7dW5waW5uaW5nIGFuIHVuaGVsZCBsb2NrXG4mIzM0Oyk7CiB9CiAKJiM0MztzdGF0aWMgdTMyIF9fbG9ja19zZXF1ZW5jZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50OwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KCFkZWJ1Z19sb2NrcykpCiYjNDM7CQlyZXR1cm4gfjA7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjdXJyLSZndDtsb2NrZGVwX2RlcHRoOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IGhlbGRfbG9jayAqaGxvY2sgPSBjdXJyLSZndDtoZWxkX2xvY2tzICYjNDM7IGk7CiYjNDM7CiYjNDM7CQlpZiAobWF0Y2hfaGVsZF9sb2NrKGhsb2NrLCBsb2NrKSkKJiM0MzsJCQlyZXR1cm4gaGxvY2stJmd0O3NlcV9jb3VudDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gfjA7CiYjNDM7fQomIzQzOwogLyoKICAqIENoZWNrIHdoZXRoZXIgd2UgZm9sbG93IHRoZSBpcnEtZmxhZ3Mgc3RhdGUgcHJlY2lzZWx5OgogICovCkBAIC01ODY2LDcgJiM0Mzs1ODg4LDggQEAgdm9pZCBsb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsCiAKIAlsb2NrZGVwX3JlY3Vyc2lvbl9pbmMoKTsKIAlfX2xvY2tfYWNxdWlyZShsb2NrLCBzdWJjbGFzcywgdHJ5bG9jaywgcmVhZCwgY2hlY2ssCi0JCSAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMCk7CiYjNDM7CQkgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDAsIDAsIDAsCiYjNDM7CQkgICAgICAgJiM0MzsmIzQzO2N1cnJlbnQtJmd0O2xvY2tkZXBfc2VxKTsKIAlsb2NrZGVwX3JlY3Vyc2lvbl9maW5pc2goKTsKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQpAQCAtNTkxNCw3ICYjNDM7NTkzNyw4IEBAIHZvaWQgbG9ja19zeW5jKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgc3ViY2xhc3MsIGludCByZWFkLAogCiAJbG9ja2RlcF9yZWN1cnNpb25faW5jKCk7CiAJX19sb2NrX2FjcXVpcmUobG9jaywgc3ViY2xhc3MsIDAsIHJlYWQsIGNoZWNrLAotCQkgICAgICAgaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncyksIG5lc3RfbG9jaywgaXAsIDAsIDAsIDEpOwomIzQzOwkJICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAxLAomIzQzOwkJICAgICAgICYjNDM7JiM0MztjdXJyZW50LSZndDtsb2NrZGVwX3NlcSk7CiAJY2hlY2tfY2hhaW5fa2V5KGN1cnJlbnQpOwogCWxvY2tkZXBfcmVjdXJzaW9uX2ZpbmlzaCgpOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC02MDAwLDYgJiM0Mzs2MDI0LDI2IEBAIHZvaWQgbG9ja191bnBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUgY29va2llKQogfQogRVhQT1JUX1NZTUJPTF9HUEwobG9ja191bnBpbl9sb2NrKTsKIAomIzQzO3UzMiBsb2NrX3NlcXVlbmNlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXUzMiBzZXEgPSB+MDsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KCFsb2NrZGVwX2VuYWJsZWQoKSkpCiYjNDM7CQlyZXR1cm4gc2VxOwomIzQzOwomIzQzOwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwomIzQzOwljaGVja19mbGFncyhmbGFncyk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfcmVjdXJzaW9uX2luYygpOwomIzQzOwlzZXEgPSBfX2xvY2tfc2VxdWVuY2UobG9jayk7CiYjNDM7CWxvY2tkZXBfcmVjdXJzaW9uX2ZpbmlzaCgpOwomIzQzOwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwomIzQzOwomIzQzOwlyZXR1cm4gc2VxOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChsb2NrX3NlcXVlbmNlKTsKJiM0MzsKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCiBzdGF0aWMgdm9pZCBwcmludF9sb2NrX2NvbnRlbnRpb25fYnVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwKIAkJCQkgICAgICBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssCmRpZmYgLS1naXQgYS9saWIvbWFwbGVfdHJlZS5jIGIvbGliL21hcGxlX3RyZWUuYwppbmRleCBlNTI4NzY0MzViNzdmMC4uMDZjYzA1Yjc5ZmJkYzggMTAwNjQ0Ci0tLSBhL2xpYi9tYXBsZV90cmVlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL21hcGxlX3RyZWUuYwpAQCAtMjYxLDYgJiM0MzsyNjEsMTIgQEAgc3RhdGljIGlubGluZSBib29sIG1hc19pc191bmRlcmZsb3coc3RydWN0IG1hX3N0YXRlICptYXMpCiAJcmV0dXJuIG1hcy0mZ3Q7c3RhdHVzID09IG1hX3VuZGVyZmxvdzsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBtYXNfbWFrZV93YWxrYWJsZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcykKJiM0Mzt7CiYjNDM7CWlmICghbWFzX2lzX2FjdGl2ZShtYXMpICZhbXA7JmFtcDsgIW1hc19pc19zdGFydChtYXMpKQomIzQzOwkJbWFzLSZndDtzdGF0dXMgPSBtYV9zdGFydDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBtYXBsZV9ub2RlICptdGVfdG9fbm9kZSgKIAkJY29uc3Qgc3RydWN0IG1hcGxlX2Vub2RlICplbnRyeSkKIHsKQEAgLTQ1NSw0NiAmIzQzOzQ2MSw2IEBAIGVudW0gbWFwbGVfdHlwZSBtYXNfcGFyZW50X3R5cGUoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUpCiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBtYXNfc2V0X3BhcmVudCgpIC0gU2V0IHRoZSBwYXJlbnQgbm9kZSBhbmQgZW5jb2RlIHRoZSBzbG90Ci0gKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGUKLSAqIEBlbm9kZTogVGhlIGVuY29kZWQgbWFwbGUgbm9kZS4KLSAqIEBwYXJlbnQ6IFRoZSBlbmNvZGVkIG1hcGxlIG5vZGUgdGhhdCBpcyB0aGUgcGFyZW50IG9mIEBlbm9kZS4KLSAqIEBzbG90OiBUaGUgc2xvdCB0aGF0IEBlbm9kZSByZXNpZGVzIGluIEBwYXJlbnQuCi0gKgotICogU2xvdCBudW1iZXIgaXMgZW5jb2RlZCBpbiB0aGUgZW5vZGUtJmd0O3BhcmVudCBiaXQgMy02IG9yIDItNiwgZGVwZW5kaW5nIG9uIHRoZQotICogcGFyZW50IHR5cGUuCi0gKi8KLXN0YXRpYyBpbmxpbmUKLXZvaWQgbWFzX3NldF9wYXJlbnQoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUsCi0JCSAgICBjb25zdCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnBhcmVudCwgdW5zaWduZWQgY2hhciBzbG90KQotewotCXVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50OwotCXVuc2lnbmVkIGxvbmcgc2hpZnQ7Ci0JdW5zaWduZWQgbG9uZyB0eXBlOwotCWVudW0gbWFwbGVfdHlwZSBwX3R5cGUgPSBtdGVfbm9kZV90eXBlKHBhcmVudCk7Ci0KLQlNQVNfQlVHX09OKG1hcywgcF90eXBlID09IG1hcGxlX2RlbnNlKTsKLQlNQVNfQlVHX09OKG1hcywgcF90eXBlID09IG1hcGxlX2xlYWZfNjQpOwotCi0Jc3dpdGNoIChwX3R5cGUpIHsKLQljYXNlIG1hcGxlX3JhbmdlXzY0OgotCWNhc2UgbWFwbGVfYXJhbmdlXzY0OgotCQlzaGlmdCA9IE1BUExFX1BBUkVOVF9TTE9UX1NISUZUOwotCQl0eXBlID0gTUFQTEVfUEFSRU5UX1JBTkdFNjQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JY2FzZSBtYXBsZV9kZW5zZToKLQljYXNlIG1hcGxlX2xlYWZfNjQ6Ci0JCXNoaWZ0ID0gdHlwZSA9IDA7Ci0JCWJyZWFrOwotCX0KLQotCXZhbCAmYW1wOz0gfk1BUExFX05PREVfTUFTSzsgLyogQ2xlYXIgYWxsIG5vZGUgbWV0YWRhdGEgaW4gcGFyZW50ICovCi0JdmFsIHw9IChzbG90ICZsdDsmbHQ7IHNoaWZ0KSB8IHR5cGU7Ci0JbXRlX3RvX25vZGUoZW5vZGUpLSZndDtwYXJlbnQgPSBtYV9wYXJlbnRfcHRyKHZhbCk7Ci19Ci0KIC8qCiAgKiBtdGVfcGFyZW50X3Nsb3QoKSAtIGdldCB0aGUgcGFyZW50IHNsb3Qgb2YgQGVub2RlLgogICogQGVub2RlOiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlLgpAQCAtODc2LDYgJiM0Mzs4NDIsNDIgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hX3NldF9tZXRhX2dhcChzdHJ1Y3QgbWFwbGVfbm9kZSAqbW4sIGVudW0gbWFwbGVfdHlwZSBtdCwKIAltZXRhLSZndDtnYXAgPSBvZmZzZXQ7CiB9CiAKJiM0MzsvKgomIzQzOyAqIG1hc19zZXRfcGFyZW50X3Nsb3RzKCkgLSBCdWxrIG9wZXJhdGlvbiB0byBzZXQgbWFueSBzbG90IHBhcmVudCBwb2ludGVycwomIzQzOyAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZQomIzQzOyAqIEBwYXJlbnQ6IFRoZSBlbmNvZGVkIG1hcGxlIG5vZGUgdGhhdCBpcyB0aGUgcGFyZW50IG9mIEBlbm9kZS4KJiM0MzsgKiBAc2xvdDogVGhlIHNsb3QgdGhhdCBvZiB0aGUgQGVub2RlLgomIzQzOyAqIEBzdGFydF9zbG90OiBUaGUgb2Zmc2V0IGludG8gQHNsb3QKJiM0MzsgKiBAY291bnQ6IFRoZSBudW1iZXIgb2Ygc2xvdHMgdG8gc2V0IChlZzogZXhjbHVzaXZlKQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUKJiM0Mzt2b2lkIG1hc19zZXRfcGFyZW50X3Nsb3RzKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnBhcmVudCwKJiM0MzsJdm9pZCBfX3JjdSAqKnNsb3RzLCB1bnNpZ25lZCBjaGFyIHN0YXJ0X3Nsb3QsIHVuc2lnbmVkIGNoYXIgY291bnQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHZhbDsKJiM0MzsJdW5zaWduZWQgbG9uZyBzaGlmdDsKJiM0MzsJdW5zaWduZWQgbG9uZyB0eXBlOwomIzQzOwllbnVtIG1hcGxlX3R5cGUgcF90eXBlID0gbXRlX25vZGVfdHlwZShwYXJlbnQpOwomIzQzOwl1bnNpZ25lZCBjaGFyIGk7CiYjNDM7CiYjNDM7CU1BU19CVUdfT04obWFzLCBwX3R5cGUgIT0gbWFwbGVfcmFuZ2VfNjQgJmFtcDsmYW1wOwomIzQzOwkJCXBfdHlwZSAhPSBtYXBsZV9hcmFuZ2VfNjQpOwomIzQzOwomIzQzOwlzaGlmdCA9IE1BUExFX1BBUkVOVF9TTE9UX1NISUZUOwomIzQzOwl0eXBlID0gTUFQTEVfUEFSRU5UX1JBTkdFNjQ7CiYjNDM7CiYjNDM7CXZhbCA9ICh1bnNpZ25lZCBsb25nKXBhcmVudDsKJiM0MzsJdmFsICZhbXA7PSB+TUFQTEVfTk9ERV9NQVNLOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIHB2YWwgPSB2YWwgfCAoKHN0YXJ0X3Nsb3QgJiM0MzsgaSkgJmx0OyZsdDsgc2hpZnQpIHwgdHlwZTsKJiM0MzsJCXN0cnVjdCBtYXBsZV9lbm9kZSAqY2hpbGQ7CiYjNDM7CiYjNDM7CQljaGlsZCA9IG10X3Nsb3RfbG9ja2VkKG1hcy0mZ3Q7dHJlZSwgc2xvdHMsIGkpOwomIzQzOwkJbXRlX3RvX25vZGUoY2hpbGQpLSZndDtwYXJlbnQgPSBtYV9wYXJlbnRfcHRyKHB2YWwpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoKICAqIG1hdF9hZGQoKSAtIEFkZCBhIEBkZWFkX2Vub2RlIHRvIHRoZSBtYV90b3BpYXJ5IG9mIGEgbGlzdCBvZiBkZWFkIG5vZGVzLgogICogQG1hdDogdGhlIG1hX3RvcGlhcnksIGEgbGlua2VkIGxpc3Qgb2YgZGVhZCBub2Rlcy4KQEAgLTExNTMsNiAmIzQzOzExNTUsNzMgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19mcmVlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnVzZWQpCiAJbWFfZnJlZV9yY3UobXRlX3RvX25vZGUodXNlZCkpOwogfQogCiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19MT0NLREVQCiYjNDM7c3RhdGljIHN0cnVjdCBsb2NrZGVwX21hcCAqbWFzX2xvY2tkZXBfbWFwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQomIzQzO3sKJiM0MzsJc3RydWN0IG1hcGxlX3RyZWUgKm10ID0gbWFzLSZndDt0cmVlOwomIzQzOwomIzQzOwlpZiAobXRfZXh0ZXJuYWxfbG9jayhtdCkpCiYjNDM7CQlyZXR1cm4gbXQtJmd0O21hX2V4dGVybmFsX2xvY2s7CiYjNDM7CiYjNDM7CXJldHVybiAmYW1wOyhtdC0mZ3Q7bWFfbG9jaykuZGVwX21hcDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWFzX2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUAomIzQzOwlzdHJ1Y3QgbG9ja2RlcF9tYXAgKm1hcDsKJiM0MzsJaWYgKCFtYXNfaXNfYWN0aXZlKG1hcykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRAomIzQzOwlpZiAoIW10X2xvY2tlZChtYXMtJmd0O3RyZWUpKSB7CiYjNDM7CQlpZiAobXRfaW5fcmN1KG1hcy0mZ3Q7dHJlZSkpCiYjNDM7CQkJV0FSTl9PTl9PTkNFKHBvbGxfc3RhdGVfc3luY2hyb25pemVfcmN1KG1hcy0mZ3Q7cmN1X2dwKSk7CiYjNDM7CX0KJiM0MzsjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovCiYjNDM7CiYjNDM7CW1hcCA9IG1hc19sb2NrZGVwX21hcChtYXMpOwomIzQzOwlpZiAobWFwICZhbXA7JmFtcDsgbG9ja19pc19oZWxkKG1hcCkpCiYjNDM7CQlXQVJOX09OX09OQ0UobWFzLSZndDtsZF9zZXEgIT0gbG9ja19zZXF1ZW5jZShtYXApKTsKJiM0MzsjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi8KJiM0MzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWFzX2luaXRfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcykKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19MT0NLREVQCiYjNDM7CXN0cnVjdCBsb2NrZGVwX21hcCAqbWFwOwomIzQzOyNpZmRlZiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QKJiM0MzsJaWYgKCFtdF9sb2NrZWQobWFzLSZndDt0cmVlKSkgewomIzQzOwkJaWYgKG10X2luX3JjdShtYXMtJmd0O3RyZWUpKQomIzQzOwkJCW1hcy0mZ3Q7cmN1X2dwID0gZ2V0X3N0YXRlX3N5bmNocm9uaXplX3JjdSgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqLwomIzQzOwomIzQzOwltYXAgPSBtYXNfbG9ja2RlcF9tYXAobWFzKTsKJiM0MzsJaWYgKG1hcCAmYW1wOyZhbXA7IGxvY2tfaXNfaGVsZChtYXApKQomIzQzOwkJbWFzLSZndDtsZF9zZXEgPSBsb2NrX3NlcXVlbmNlKG1hc19sb2NrZGVwX21hcChtYXMpKTsKJiM0MzsjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi8KJiM0MzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbWFzX21heV9pbml0X2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpCiYjNDM7ewomIzQzOyNpZmRlZiBDT05GSUdfTE9DS0RFUAomIzQzOyNpZmRlZiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QKJiM0MzsJaWYgKG1hc19pc19zdGFydChtYXMpIHx8IG1hc19pc19wYXVzZWQobWFzKSkgewomIzQzOwkJbWFzX2luaXRfbG9ja19jaGVjayhtYXMpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqLwomIzQzOwltYXNfbG9ja19jaGVjayhtYXMpOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqLwomIzQzO30KJiM0MzsKIC8qCiAgKiBtYXNfc3RhcnQoKSAtIFNldHMgdXAgbWFwbGUgc3RhdGUgZm9yIG9wZXJhdGlvbnMuCiAgKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGUuCkBAIC0xMTcxLDYgJiM0MzsxMjQwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWFwbGVfZW5vZGUgKm1hc19zdGFydChzdHJ1Y3QgbWFfc3RhdGUgKm1hcykKIAlpZiAobGlrZWx5KG1hc19pc19zdGFydChtYXMpKSkgewogCQlzdHJ1Y3QgbWFwbGVfZW5vZGUgKnJvb3Q7CiAKJiM0MzsJCW1hc19pbml0X2xvY2tfY2hlY2sobWFzKTsKIAkJbWFzLSZndDttaW4gPSAwOwogCQltYXMtJmd0O21heCA9IFVMT05HX01BWDsKIApAQCAtMTUwMSwxNCAmIzQzOzE1NzEsMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19wYXJlbnRfZ2FwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBjaGFyIG9mZnNldCwKIAlnb3RvIGFzY2VuZDsKIH0KIAomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtYXNfdXBkYXRlX2dhcF9rbm93bihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywKJiM0MzsJCXVuc2lnbmVkIGxvbmcgZ2FwKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgY2hhciBwc2xvdDsKJiM0MzsJdW5zaWduZWQgbG9uZyBwX2dhcDsKJiM0MzsKJiM0MzsJcHNsb3QgPSBtdGVfcGFyZW50X3Nsb3QobWFzLSZndDtub2RlKTsKJiM0MzsJcF9nYXAgPSBtYV9nYXBzKG10ZV9wYXJlbnQobWFzLSZndDtub2RlKSwKJiM0MzsJCQltYXNfcGFyZW50X3R5cGUobWFzLCBtYXMtJmd0O25vZGUpKVtwc2xvdF07CiYjNDM7CiYjNDM7CWlmIChwX2dhcCAhPSBnYXApCiYjNDM7CQltYXNfcGFyZW50X2dhcChtYXMsIHBzbG90LCBnYXApOwomIzQzO30KJiM0MzsKIC8qCiAgKiBtYXNfdXBkYXRlX2dhcCgpIC0gVXBkYXRlIGEgbm9kZXMgZ2FwcyBhbmQgcHJvcGFnYXRlIHVwIGlmIG5lY2Vzc2FyeS4KICAqIEBtYXM6IHRoZSBtYXBsZSBzdGF0ZS4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIG1hc191cGRhdGVfZ2FwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQogewotCXVuc2lnbmVkIGNoYXIgcHNsb3Q7Ci0JdW5zaWduZWQgbG9uZyBwX2dhcDsKIAl1bnNpZ25lZCBsb25nIG1heF9nYXA7CiAKIAlpZiAoIW10X2lzX2FsbG9jKG1hcy0mZ3Q7dHJlZSkpCkBAIC0xNTE4LDEzICYjNDM7MTYwMCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfdXBkYXRlX2dhcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcykKIAkJcmV0dXJuOwogCiAJbWF4X2dhcCA9IG1hc19tYXhfZ2FwKG1hcyk7Ci0KLQlwc2xvdCA9IG10ZV9wYXJlbnRfc2xvdChtYXMtJmd0O25vZGUpOwotCXBfZ2FwID0gbWFfZ2FwcyhtdGVfcGFyZW50KG1hcy0mZ3Q7bm9kZSksCi0JCQltYXNfcGFyZW50X3R5cGUobWFzLCBtYXMtJmd0O25vZGUpKVtwc2xvdF07Ci0KLQlpZiAocF9nYXAgIT0gbWF4X2dhcCkKLQkJbWFzX3BhcmVudF9nYXAobWFzLCBwc2xvdCwgbWF4X2dhcCk7CiYjNDM7CW1hc191cGRhdGVfZ2FwX2tub3duKG1hcywgbWF4X2dhcCk7CiB9CiAKIC8qCkBAIC0xNTQwLDE0ICYjNDM7MTYxNiwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX2Fkb3B0X2NoaWxkcmVuKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLAogCXN0cnVjdCBtYXBsZV9ub2RlICpub2RlID0gbXRlX3RvX25vZGUocGFyZW50KTsKIAl2b2lkIF9fcmN1ICoqc2xvdHMgPSBtYV9zbG90cyhub2RlLCB0eXBlKTsKIAl1bnNpZ25lZCBsb25nICpwaXZvdHMgPSBtYV9waXZvdHMobm9kZSwgdHlwZSk7Ci0Jc3RydWN0IG1hcGxlX2Vub2RlICpjaGlsZDsKLQl1bnNpZ25lZCBjaGFyIG9mZnNldDsKJiM0MzsJdW5zaWduZWQgY2hhciBlbmQ7CiAKLQlvZmZzZXQgPSBtYV9kYXRhX2VuZChub2RlLCB0eXBlLCBwaXZvdHMsIG1hcy0mZ3Q7bWF4KTsKLQlkbyB7Ci0JCWNoaWxkID0gbWFzX3Nsb3RfbG9ja2VkKG1hcywgc2xvdHMsIG9mZnNldCk7Ci0JCW1hc19zZXRfcGFyZW50KG1hcywgY2hpbGQsIHBhcmVudCwgb2Zmc2V0KTsKLQl9IHdoaWxlIChvZmZzZXQtLSk7CiYjNDM7CWVuZCA9IG1hX2RhdGFfZW5kKG5vZGUsIHR5cGUsIHBpdm90cywgbWFzLSZndDttYXgpOwomIzQzOwltYXNfc2V0X3BhcmVudF9zbG90cyhtYXMsIHBhcmVudCwgc2xvdHMsIDAsIGVuZCAmIzQzOyAxKTsKIH0KIAogLyoKQEAgLTE5MjksMTUgJiM0MzsyMDAxLDEwIEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9jb3B5KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfbm9kZSAqc3JjLAogCXNfc2xvdHMgPSBtYV9zbG90cyhzcmMsIHNfbXQpICYjNDM7IHN0YXJ0OwogCXNfcGl2b3RzID0gbWFfcGl2b3RzKHNyYywgc19tdCkgJiM0Mzsgc3RhcnQ7CiAJbWVtY3B5KGRfc2xvdHMsIHNfc2xvdHMsIHNpemUgKiBzaXplb2Yodm9pZCBfX3JjdSAqKSk7Ci0JaWYgKCFtYV9pc19sZWFmKGRfbXQpICZhbXA7JmFtcDsgc19tdCA9PSBtYXBsZV9jb3B5KSB7Ci0JCXN0cnVjdCBtYXBsZV9lbm9kZSAqZWRzdCA9IG10X21rX25vZGUoZHN0LCBkX210KTsKLQogCi0JCWZvciAoaW50IGkgPSAwOyBpICZsdDsgc2l6ZTsgaSYjNDM7JiM0MzspCi0JCQltYXNfc2V0X3BhcmVudChtYXMsCi0JCQkJICAgICAgIG10X3Nsb3RfbG9ja2VkKG1hcy0mZ3Q7dHJlZSwgZF9zbG90cywgaSksCi0JCQkJICAgICAgIGVkc3QsIGRfc3RhcnQgJiM0MzsgaSk7Ci0JfQomIzQzOwlpZiAoIW1hX2lzX2xlYWYoZF9tdCkgJmFtcDsmYW1wOyBzX210ID09IG1hcGxlX2NvcHkpCiYjNDM7CQltYXNfc2V0X3BhcmVudF9zbG90cyhtYXMsIG10X21rX25vZGUoZHN0LCBkX210KSwKJiM0MzsJCQkJICAgICBkX3Nsb3RzLCBkX3N0YXJ0LCBzaXplKTsKIAogCWRfZ2FwcyA9IG1hX2dhcHMoZHN0LCBkX210KTsKIAlpZiAoZF9nYXBzKSB7CkBAIC0yMDgxLDggJiM0MzsyMTQ4LDggQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193bWJfcmVwbGFjZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2NvcHkgKmNwKQogCW1hcy0mZ3Q7bm9kZSA9IG10X3Nsb3RfbG9ja2VkKG1hcy0mZ3Q7dHJlZSwgY3AtJmd0O3Nsb3QsIDApOwogCS8qIEluc2VydCB0aGUgbmV3IGRhdGEgaW4gdGhlIHRyZWUgKi8KIAltYXNfdG9waWFyeV9yZXBsYWNlKG1hcywgb2xkX2Vub2RlLCBjcC0mZ3Q7aGVpZ2h0KTsKLQlpZiAoIW10ZV9pc19sZWFmKG1hcy0mZ3Q7bm9kZSkpCi0JCW1hc191cGRhdGVfZ2FwKG1hcyk7CiYjNDM7CWlmIChtdF9pc19hbGxvYyhtYXMtJmd0O3RyZWUpICZhbXA7JmFtcDsgIW10ZV9pc19yb290KG1hcy0mZ3Q7bm9kZSkpCiYjNDM7CQltYXNfdXBkYXRlX2dhcF9rbm93bihtYXMsIGNwLSZndDtnYXBbMF0pOwogCiAJbXRyZWVfcmFuZ2Vfd2FsayhtYXMpOwogfQpAQCAtMjkyOCwxMyAmIzQzOzI5OTUsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX2V4dGVuZF9zcGFubmluZ19udWxsKHN0cnVjdCBtYV93cl9zdGF0ZSAqbF93cl9tYXMsCiAJCWlmIChyX21hcy0mZ3Q7bGFzdCAmbHQ7IHJfd3JfbWFzLSZndDtyX21heCkKIAkJCXJfbWFzLSZndDtsYXN0ID0gcl93cl9tYXMtJmd0O3JfbWF4OwogCQlyX21hcy0mZ3Q7b2Zmc2V0JiM0MzsmIzQzOzsKLQl9IGVsc2UgaWYgKChyX21hcy0mZ3Q7bGFzdCA9PSByX3dyX21hcy0mZ3Q7cl9tYXgpICZhbXA7JmFtcDsKLQkgICAgKHJfbWFzLSZndDtsYXN0ICZsdDsgcl9tYXMtJmd0O21heCkgJmFtcDsmYW1wOwotCSAgICAhbWFzX3Nsb3RfbG9ja2VkKHJfbWFzLCByX3dyX21hcy0mZ3Q7c2xvdHMsIHJfbWFzLSZndDtvZmZzZXQgJiM0MzsgMSkpIHsKLQkJcl9tYXMtJmd0O2xhc3QgPSBtYXNfc2FmZV9waXZvdChyX21hcywgcl93cl9tYXMtJmd0O3Bpdm90cywKLQkJCQkJICAgICByX3dyX21hcy0mZ3Q7dHlwZSwgcl9tYXMtJmd0O29mZnNldCAmIzQzOyAxKTsKLQkJcl9tYXMtJmd0O29mZnNldCYjNDM7JiM0Mzs7Ci0JCXJfd3JfbWFzLSZndDtyX21heCA9IHJfbWFzLSZndDtsYXN0OwogCX0KIH0KIApAQCAtMzEyNSw3ICYjNDM7MzE4NSw3IEBAIHN0YXRpYyB2b2lkIG1hc193cl9zcGFubmluZ19zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcykKIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcykKIHsKIAl1bnNpZ25lZCBjaGFyIGRzdF9vZmZzZXQsIG9mZnNldF9lbmQ7Ci0JdW5zaWduZWQgY2hhciBjb3B5X3NpemUsIG5vZGVfcGl2b3RzOwomIzQzOwl1bnNpZ25lZCBjaGFyIGNvcHlfc2l6ZSwgbm9kZV9waXZvdHMsIG5vZGVfc2xvdHM7CiAJc3RydWN0IG1hcGxlX25vZGUgcmV1c2UsICpuZXdub2RlOwogCXVuc2lnbmVkIGxvbmcgKmRzdF9waXZvdHM7CiAJdm9pZCBfX3JjdSAqKmRzdF9zbG90czsKQEAgLTMxMzgsNiAmIzQzOzMxOTgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpCiAJaW5fcmN1ID0gbXRfaW5fcmN1KG1hcy0mZ3Q7dHJlZSk7CiAJb2Zmc2V0X2VuZCA9IHdyX21hcy0mZ3Q7b2Zmc2V0X2VuZDsKIAlub2RlX3Bpdm90cyA9IG10X3Bpdm90c1t3cl9tYXMtJmd0O3R5cGVdOwomIzQzOwlub2RlX3Nsb3RzID0gbXRfc2xvdHNbd3JfbWFzLSZndDt0eXBlXTsKIAkvKiBBc3N1bWUgbGFzdCBhZGRzIGFuIGVudHJ5ICovCiAJbmV3X2VuZCA9IG1hcy0mZ3Q7ZW5kICYjNDM7IDEgLSBvZmZzZXRfZW5kICYjNDM7IG1hcy0mZ3Q7b2Zmc2V0OwogCWlmIChtYXMtJmd0O2xhc3QgPT0gd3JfbWFzLSZndDtlbmRfcGl2KSB7CkBAIC0zMTQ5LDcgJiM0MzszMjEwLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKQogCWlmIChpbl9yY3UpIHsKIAkJbmV3bm9kZSA9IG1hc19wb3Bfbm9kZShtYXMpOwogCX0gZWxzZSB7Ci0JCW1lbXNldCgmYW1wO3JldXNlLCAwLCBzaXplb2Yoc3RydWN0IG1hcGxlX25vZGUpKTsKIAkJbmV3bm9kZSA9ICZhbXA7cmV1c2U7CiAJfQogCkBAIC0zMTkzLDcgJiM0MzszMjUzLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcykKIAkJZHN0X3Bpdm90c1tuZXdfZW5kXSA9IG1hcy0mZ3Q7bWF4OwogCiBkb25lOgotCW1hc19sZWFmX3NldF9tZXRhKG5ld25vZGUsIG1hcGxlX2xlYWZfNjQsIG5ld19lbmQpOwomIzQzOwlpZiAoIWluX3JjdSAmYW1wOyZhbXA7IG5ld19lbmQgJiM0MzsgMiAmbHQ7IG5vZGVfc2xvdHMpIHsKJiM0MzsJCXVuc2lnbmVkIGNoYXIgY2xlYXJfZnJvbSA9IG5ld19lbmQgJiM0MzsgMTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBOb3RlIHRoYXQgdGhlIGxhc3Qgc2xvdCBpcyBuZXZlciBjbGVhcmVkLCBzaW5jZSB0aGUgbWV0YWRhdGEKJiM0MzsJCSAqIHdpbGwgYmUgc3RvcmVkIHRoZXJlIG9yIGl0IGhhcyBhIHZhbHVlLgomIzQzOwkJICovCiYjNDM7CQltZW1zZXQoZHN0X3Nsb3RzICYjNDM7IGNsZWFyX2Zyb20sIDAsCiYjNDM7CQkgICAgICAgc2l6ZW9mKHZvaWQgX19yY3UgKikgKiAobm9kZV9zbG90cyAtIGNsZWFyX2Zyb20pKTsKJiM0MzsJCWlmIChjbGVhcl9mcm9tICZsdDsgbm9kZV9waXZvdHMpCiYjNDM7CQkJbWVtc2V0KGRzdF9waXZvdHMgJiM0MzsgY2xlYXJfZnJvbSwgMCwKJiM0MzsJCQkgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogKG5vZGVfcGl2b3RzIC0gY2xlYXJfZnJvbSkpOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1hc19sZWFmX3NldF9tZXRhKG5ld25vZGUsIHdyX21hcy0mZ3Q7dHlwZSwgbmV3X2VuZCk7CiAJaWYgKGluX3JjdSkgewogCQlzdHJ1Y3QgbWFwbGVfZW5vZGUgKm9sZF9lbm9kZSA9IG1hcy0mZ3Q7bm9kZTsKIApAQCAtMzIxOCw3ICYjNDM7MzI5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfc2xvdF9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcykKIAl2b2lkIF9fcmN1ICoqc2xvdHMgPSB3cl9tYXMtJmd0O3Nsb3RzOwogCWJvb2wgZ2FwID0gZmFsc2U7CiAKLQlnYXAgfD0gIW10X3Nsb3RfbG9ja2VkKG1hcy0mZ3Q7dHJlZSwgc2xvdHMsIG9mZnNldCk7CiYjNDM7CWdhcCB8PSAhd3JfbWFzLSZndDtjb250ZW50OwogCWdhcCB8PSAhbXRfc2xvdF9sb2NrZWQobWFzLSZndDt0cmVlLCBzbG90cywgb2Zmc2V0ICYjNDM7IDEpOwogCiAJaWYgKHdyX21hcy0mZ3Q7b2Zmc2V0X2VuZCAtIG9mZnNldCA9PSAxKSB7CkBAIC0zNjYxLDYgJiM0MzszNzM1LDkgQEAgc3RhdGljIGlubGluZSBlbnVtIHN0b3JlX3R5cGUgbWFzX3dyX3N0b3JlX3R5cGUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpCiB7CiAJc3RydWN0IG1hX3N0YXRlICptYXMgPSB3cl9tYXMtJmd0O21hczsKIAl1bnNpZ25lZCBjaGFyIG5ld19lbmQ7CiYjNDM7CWJvb2wgYXBwZW5kaW5nOwomIzQzOwlib29sIG9uZV9zbG90OwomIzQzOwlib29sIGluX3JjdTsKIAogCWlmICh1bmxpa2VseShtYXNfaXNfbm9uZShtYXMpIHx8IG1hc19pc19wdHIobWFzKSkpCiAJCXJldHVybiB3cl9zdG9yZV9yb290OwpAQCAtMzY4MCwyMSAmIzQzOzM3NTcsMzAgQEAgc3RhdGljIGlubGluZSBlbnVtIHN0b3JlX3R5cGUgbWFzX3dyX3N0b3JlX3R5cGUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpCiAJCXJldHVybiB3cl9uZXdfcm9vdDsKIAogCW5ld19lbmQgPSBtYXNfd3JfbmV3X2VuZCh3cl9tYXMpOwomIzQzOwlpbl9yY3UgPSBtdF9pbl9yY3UobWFzLSZndDt0cmVlKTsKJiM0MzsJYXBwZW5kaW5nID0gbWFzLSZndDtvZmZzZXQgPT0gbWFzLSZndDtlbmQ7CiYjNDM7CW9uZV9zbG90ID0gd3JfbWFzLSZndDtvZmZzZXRfZW5kIC0gbWFzLSZndDtvZmZzZXQgPT0gMTsKJiM0MzsKIAkvKiBQb3RlbnRpYWwgc3Bhbm5pbmcgcmViYWxhbmNlIGNvbGxhcHNpbmcgYSBub2RlICovCiAJaWYgKG5ld19lbmQgJmx0OyBtdF9taW5fc2xvdHNbd3JfbWFzLSZndDt0eXBlXSkgewogCQlpZiAoIW10ZV9pc19yb290KG1hcy0mZ3Q7bm9kZSkpCiAJCQlyZXR1cm4gIHdyX3JlYmFsYW5jZTsKJiM0MzsJCWlmICghaW5fcmN1KSB7CiYjNDM7CQkJaWYgKGFwcGVuZGluZykKJiM0MzsJCQkJcmV0dXJuIHdyX2FwcGVuZDsKJiM0MzsJCQllbHNlIGlmIChtYXMtJmd0O2VuZCA9PSBuZXdfZW5kICZhbXA7JmFtcDsgb25lX3Nsb3QpCiYjNDM7CQkJCXJldHVybiB3cl9zbG90X3N0b3JlOwomIzQzOwkJfQogCQlyZXR1cm4gd3Jfbm9kZV9zdG9yZTsKIAl9CiAKIAlpZiAobmV3X2VuZCAmZ3Q7PSBtdF9zbG90c1t3cl9tYXMtJmd0O3R5cGVdKQogCQlyZXR1cm4gd3Jfc3BsaXRfc3RvcmU7CiAKLQlpZiAoIW10X2luX3JjdShtYXMtJmd0O3RyZWUpICZhbXA7JmFtcDsgKG1hcy0mZ3Q7b2Zmc2V0ID09IG1hcy0mZ3Q7ZW5kKSkKJiM0MzsJaWYgKCFpbl9yY3UgJmFtcDsmYW1wOyBhcHBlbmRpbmcpCiAJCXJldHVybiB3cl9hcHBlbmQ7CiAKLQlpZiAoKG5ld19lbmQgPT0gbWFzLSZndDtlbmQpICZhbXA7JmFtcDsgKCFtdF9pbl9yY3UobWFzLSZndDt0cmVlKSB8fAotCQkod3JfbWFzLSZndDtvZmZzZXRfZW5kIC0gbWFzLSZndDtvZmZzZXQgPT0gMSkpKQomIzQzOwlpZiAobmV3X2VuZCA9PSBtYXMtJmd0O2VuZCAmYW1wOyZhbXA7ICghaW5fcmN1IHx8IG9uZV9zbG90KSkKIAkJcmV0dXJuIHdyX3Nsb3Rfc3RvcmU7CiAKIAlyZXR1cm4gd3Jfbm9kZV9zdG9yZTsKQEAgLTM3OTMsMzUgJiM0MzszODc5LDQwIEBAIGludCBtYXNfYWxsb2NfY3ljbGljKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nICpzdGFydHAsCiAJCXZvaWQgKmVudHJ5LCB1bnNpZ25lZCBsb25nIHJhbmdlX2xvLCB1bnNpZ25lZCBsb25nIHJhbmdlX2hpLAogCQl1bnNpZ25lZCBsb25nICpuZXh0LCBnZnBfdCBnZnApCiB7Ci0JdW5zaWduZWQgbG9uZyBtaW4gPSByYW5nZV9sbzsKLQlpbnQgcmV0ID0gMDsKLQotCXJhbmdlX2xvID0gbWF4KG1pbiwgKm5leHQpOwotCXJldCA9IG1hc19lbXB0eV9hcmVhKG1hcywgcmFuZ2VfbG8sIHJhbmdlX2hpLCAxKTsKLQlpZiAoKG1hcy0mZ3Q7dHJlZS0mZ3Q7bWFfZmxhZ3MgJmFtcDsgTVRfRkxBR1NfQUxMT0NfV1JBUFBFRCkgJmFtcDsmYW1wOyByZXQgPT0gMCkgewotCQltYXMtJmd0O3RyZWUtJmd0O21hX2ZsYWdzICZhbXA7PSB+TVRfRkxBR1NfQUxMT0NfV1JBUFBFRDsKLQkJcmV0ID0gMTsKLQl9Ci0JaWYgKHJldCAmbHQ7IDAgJmFtcDsmYW1wOyByYW5nZV9sbyAmZ3Q7IG1pbikgewotCQltYXNfcmVzZXQobWFzKTsKLQkJcmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCBtaW4sIHJhbmdlX2hpLCAxKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gMTsKLQl9Ci0JaWYgKHJldCAmbHQ7IDApCi0JCXJldHVybiByZXQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgbWluOwogCiYjNDM7CW1pbiA9IHJhbmdlX2xvOwogCWRvIHsKJiM0MzsJCXJhbmdlX2xvID0gbWF4KG1pbiwgKm5leHQpOwomIzQzOwkJcmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCByYW5nZV9sbywgcmFuZ2VfaGksIDEpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDAgJmFtcDsmYW1wOyByYW5nZV9sbyAmZ3Q7IG1pbikgewomIzQzOwkJCW1hc19yZXNldChtYXMpOwomIzQzOwkJCXJldCA9IG1hc19lbXB0eV9hcmVhKG1hcywgbWluLCByYW5nZV9oaSwgMSk7CiYjNDM7CQkJaWYgKHJldCA9PSAwKQomIzQzOwkJCQlyZXQgPSAxOwomIzQzOwkJfQomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiAJCW1hc19pbnNlcnQobWFzLCBlbnRyeSk7CiAJfSB3aGlsZSAobWFzX25vbWVtKG1hcywgZ2ZwKSk7Ci0JaWYgKG1hc19pc19lcnIobWFzKSkKLQkJcmV0dXJuIHhhX2VycihtYXMtJmd0O25vZGUpOwogCiYjNDM7CWlmIChtYXNfaXNfZXJyKG1hcykpIHsKJiM0MzsJCXJldCA9IHhhX2VycihtYXMtJmd0O25vZGUpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKChtYXMtJmd0O3RyZWUtJmd0O21hX2ZsYWdzICZhbXA7IE1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQpICZhbXA7JmFtcDsgcmV0ID09IDApIHsKJiM0MzsJCW1hcy0mZ3Q7dHJlZS0mZ3Q7bWFfZmxhZ3MgJmFtcDs9IH5NVF9GTEFHU19BTExPQ19XUkFQUEVEOwomIzQzOwkJcmV0ID0gMTsKJiM0MzsJfQogCSpzdGFydHAgPSBtYXMtJmd0O2luZGV4OwogCSpuZXh0ID0gKnN0YXJ0cCAmIzQzOyAxOwogCWlmICgqbmV4dCA9PSAwKQogCQltYXMtJmd0O3RyZWUtJmd0O21hX2ZsYWdzIHw9IE1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQ7CiAKJiM0MztvdXQ6CiAJbWFzX2Rlc3Ryb3kobWFzKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDM2MCw4ICYjNDM7NDQ1MSw4IEBAIHZvaWQgKm1hc193YWxrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQogewogCXZvaWQgKmVudHJ5OwogCi0JaWYgKCFtYXNfaXNfYWN0aXZlKG1hcykgJmFtcDsmYW1wOyAhbWFzX2lzX3N0YXJ0KG1hcykpCi0JCW1hcy0mZ3Q7c3RhdHVzID0gbWFfc3RhcnQ7CiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiYjNDM7CW1hc19tYWtlX3dhbGthYmxlKG1hcyk7CiByZXRyeToKIAllbnRyeSA9IG1hc19zdGF0ZV93YWxrKG1hcyk7CiAJaWYgKG1hc19pc19zdGFydChtYXMpKSB7CkBAIC00ODMxLDYgJiM0Mzs0OTIyLDcgQEAgdm9pZCAqbWFzX3N0b3JlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSkKIHsKIAlNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpOwogCiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiAJdHJhY2VfbWFfd3JpdGUoVFBfRkNULCBtYXMsIDAsIGVudHJ5KTsKICNpZmRlZiBDT05GSUdfREVCVUdfTUFQTEVfVFJFRQogCWlmIChNQVNfV0FSTl9PTihtYXMsIG1hcy0mZ3Q7aW5kZXggJmd0OyBtYXMtJmd0O2xhc3QpKQpAQCAtNDg4OSw2ICYjNDM7NDk4MSw3IEBAIGludCBtYXNfc3RvcmVfZ2ZwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSwgZ2ZwX3QgZ2ZwKQogCU1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBlbnRyeSk7CiAJaW50IHJldCA9IDA7CiAKJiM0MzsJbWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTsKIHJldHJ5OgogCW1hc193cl9wcmVhbGxvY2F0ZSgmYW1wO3dyX21hcywgZW50cnkpOwogCWlmICh1bmxpa2VseShtYXNfbm9tZW0obWFzLCBnZnApKSkgewpAQCAtNDkxOSw2ICYjNDM7NTAxMiw3IEBAIHZvaWQgbWFzX3N0b3JlX3ByZWFsbG9jKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSkKIHsKIAlNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpOwogCiYjNDM7CW1hc19sb2NrX2NoZWNrKG1hcyk7CiAJaWYgKG1hcy0mZ3Q7c3RvcmVfdHlwZSA9PSB3cl9zdG9yZV9yb290KSB7CiAJCW1hc193cl9wcmVhbGxvY19zZXR1cCgmYW1wO3dyX21hcyk7CiAJCWdvdG8gc3RvcmU7CkBAIC00OTUxLDYgJiM0Mzs1MDQ1LDcgQEAgaW50IG1hc19wcmVhbGxvY2F0ZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnksIGdmcF90IGdmcCkKIHsKIAlNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpOwogCiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiAJbWFzX3dyX3ByZWFsbG9jX3NldHVwKCZhbXA7d3JfbWFzKTsKIAltYXMtJmd0O3N0b3JlX3R5cGUgPSBtYXNfd3Jfc3RvcmVfdHlwZSgmYW1wO3dyX21hcyk7CiAJbWFzX3ByZWFsbG9jX2NhbGMoJmFtcDt3cl9tYXMsIGVudHJ5KTsKQEAgLTQ5OTcsNiAmIzQzOzUwOTIsNyBAQCBzdGF0aWMgdm9pZCBtYXNfbWF5X2FjdGl2YXRlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQogCQltYXMtJmd0O3N0YXR1cyA9IG1hX3N0YXJ0OwogCX0gZWxzZSB7CiAJCW1hcy0mZ3Q7c3RhdHVzID0gbWFfYWN0aXZlOwomIzQzOwkJbWFzX2xvY2tfY2hlY2sobWFzKTsKIAl9CiB9CiAKQEAgLTUwNzQsNiAmIzQzOzUxNzAsNyBAQCB2b2lkICptYXNfbmV4dChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpCiB7CiAJdm9pZCAqZW50cnkgPSBOVUxMOwogCiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiAJaWYgKG1hc19uZXh0X3NldHVwKG1hcywgbWF4LCAmYW1wO2VudHJ5KSkKIAkJcmV0dXJuIGVudHJ5OwogCkBAIC01MDk3LDYgJiM0Mzs1MTk0LDcgQEAgdm9pZCAqbWFzX25leHRfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KQogewogCXZvaWQgKmVudHJ5ID0gTlVMTDsKIAomIzQzOwltYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpOwogCWlmIChtYXNfbmV4dF9zZXR1cChtYXMsIG1heCwgJmFtcDtlbnRyeSkpCiAJCXJldHVybiBlbnRyeTsKIApAQCAtNTIwNSw2ICYjNDM7NTMwMyw3IEBAIHZvaWQgKm1hc19wcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbikKIHsKIAl2b2lkICplbnRyeSA9IE5VTEw7CiAKJiM0MzsJbWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTsKIAlpZiAobWFzX3ByZXZfc2V0dXAobWFzLCBtaW4sICZhbXA7ZW50cnkpKQogCQlyZXR1cm4gZW50cnk7CiAKQEAgLTUyMjgsNiAmIzQzOzUzMjcsNyBAQCB2b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pCiB7CiAJdm9pZCAqZW50cnkgPSBOVUxMOwogCiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiAJaWYgKG1hc19wcmV2X3NldHVwKG1hcywgbWluLCAmYW1wO2VudHJ5KSkKIAkJcmV0dXJuIGVudHJ5OwogCkBAIC01Mjc0LDYgJiM0Mzs1Mzc0LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwobXRfcHJldik7CiAgKi8KIHZvaWQgbWFzX3BhdXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQogewomIzQzOwltYXNfbG9ja19jaGVjayhtYXMpOwogCW1hcy0mZ3Q7c3RhdHVzID0gbWFfcGF1c2U7CiAJbWFzLSZndDtub2RlID0gTlVMTDsKIH0KQEAgLTUzODIsNiAmIzQzOzU0ODMsNyBAQCB2b2lkICptYXNfZmluZChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpCiB7CiAJdm9pZCAqZW50cnkgPSBOVUxMOwogCiYjNDM7CW1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7CiAJaWYgKG1hc19maW5kX3NldHVwKG1hcywgbWF4LCAmYW1wO2VudHJ5KSkKIAkJcmV0dXJuIGVudHJ5OwogCkBAIC01NDA5LDYgJiM0Mzs1NTExLDcgQEAgdm9pZCAqbWFzX2ZpbmRfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KQogewogCXZvaWQgKmVudHJ5ID0gTlVMTDsKIAomIzQzOwltYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpOwogCWlmIChtYXNfZmluZF9zZXR1cChtYXMsIG1heCwgJmFtcDtlbnRyeSkpCiAJCXJldHVybiBlbnRyeTsKIApAQCAtNTQyOCw3ICYjNDM7NTUzMSw2IEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1hc19maW5kX3JhbmdlKTsKIHN0YXRpYyBib29sIG1hc19maW5kX3Jldl9zZXR1cChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4sCiAJCXZvaWQgKiplbnRyeSkKIHsKLQogCXN3aXRjaCAobWFzLSZndDtzdGF0dXMpIHsKIAljYXNlIG1hX2FjdGl2ZToKIAkJZ290byBhY3RpdmU7CkBAIC01NTIxLDYgJiM0Mzs1NjIzLDcgQEAgdm9pZCAqbWFzX2ZpbmRfcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbikKIHsKIAl2b2lkICplbnRyeSA9IE5VTEw7CiAKJiM0MzsJbWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTsKIAlpZiAobWFzX2ZpbmRfcmV2X3NldHVwKG1hcywgbWluLCAmYW1wO2VudHJ5KSkKIAkJcmV0dXJuIGVudHJ5OwogCkBAIC01NTQ3LDYgJiM0Mzs1NjUwLDcgQEAgdm9pZCAqbWFzX2ZpbmRfcmFuZ2VfcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbikKIHsKIAl2b2lkICplbnRyeSA9IE5VTEw7CiAKJiM0MzsJbWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTsKIAlpZiAobWFzX2ZpbmRfcmV2X3NldHVwKG1hcywgbWluLCAmYW1wO2VudHJ5KSkKIAkJcmV0dXJuIGVudHJ5OwogCkBAIC01NTY0LDYgJiM0Mzs1NjY4LDEwIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1hc19maW5kX3JhbmdlX3Jldik7CiAgKiBTZWFyY2hlcyBmb3IgQG1hcy0mZ3Q7aW5kZXgsIHNldHMgQG1hcy0mZ3Q7aW5kZXggYW5kIEBtYXMtJmd0O2xhc3QgdG8gdGhlIHJhbmdlIGFuZAogICogZXJhc2VzIHRoYXQgcmFuZ2UuCiAgKgomIzQzOyAqIE5vdGUgdGhhdCBlcmFzZSByZXF1aXJlcyBhbGxvY2F0aW9ucyBhbmQgd2lsbCB1c2UgR0ZQX0tFUk5FTCB0byBkbyBzbyBpZgomIzQzOyAqIG5lY2Vzc2FyeS4gIElmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgaW50ZXJuYWwgbG9jayB3aWxsIGJlIGRyb3BwZWQgdG8KJiM0MzsgKiByZXRyeS4KJiM0MzsgKgogICogUmV0dXJuOiB0aGUgZW50cnkgdGhhdCB3YXMgZXJhc2VkIG9yICVOVUxMLCBAbWFzLSZndDtpbmRleCBhbmQgQG1hcy0mZ3Q7bGFzdCBhcmUgdXBkYXRlZC4KICAqLwogdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQpAQCAtNTU3MiwxMyAmIzQzOzU2ODAsMTkgQEAgdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKQogCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBtYXMtJmd0O2luZGV4OwogCU1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBOVUxMKTsKIAotCWlmICghbWFzX2lzX2FjdGl2ZShtYXMpIHx8ICFtYXNfaXNfc3RhcnQobWFzKSkKLQkJbWFzLSZndDtzdGF0dXMgPSBtYV9zdGFydDsKJiM0MzsJLyoKJiM0MzsJICogSW4gbG93IG1lbW9yeSBzaXR1YXRpb25zLCB0aGUgYWxsb2NhdGlvbiBpcyByZXRyaWVkIHdpdGggdGhlIGdmcCBmbGFnCiYjNDM7CSAqIEdGUF9LRVJORUwuICBUaGUgaW50ZXJuYWwgc3BpbmxvY2sgaXMgZHJvcHBlZCBpbiBtYXNfbm9tZW0oKSwgaG93ZXZlcgomIzQzOwkgKiB0aGUgZXh0ZXJuYWwgbG9jayBpcyBub3QgZHJvcHBlZC4KJiM0MzsJICovCiYjNDM7CWlmIChtdF9leHRlcm5hbF9sb2NrKG1hcy0mZ3Q7dHJlZSkpCiYjNDM7CQltaWdodF9hbGxvYyhHRlBfS0VSTkVMKTsKIAomIzQzOwltYXNfbWFrZV93YWxrYWJsZShtYXMpOwogd3JpdGVfcmV0cnk6CiAJZW50cnkgPSBtYXNfc3RhdGVfd2FsayhtYXMpOwogCWlmICghZW50cnkpCi0JCXJldHVybiBOVUxMOwomIzQzOwkJZ290byBvdXQ7CiAKIAkvKiBNdXN0IHJlc2V0IHRvIGVuc3VyZSBzcGFubmluZyB3cml0ZXMgb2YgbGFzdCBzbG90IGFyZSBkZXRlY3RlZCAqLwogCW1hc19yZXNldChtYXMpOwpAQCAtNTU4OSw4ICYjNDM7NTcwMywxMCBAQCB2b2lkICptYXNfZXJhc2Uoc3RydWN0IG1hX3N0YXRlICptYXMpCiAJCWdvdG8gd3JpdGVfcmV0cnk7CiAJfQogCi0JaWYgKG1hc19pc19lcnIobWFzKSkKJiM0MzsJaWYgKG1hc19pc19lcnIobWFzKSkgewomIzQzOwkJZW50cnkgPSBOVUxMOwogCQlnb3RvIG91dDsKJiM0MzsJfQogCiAJbWFzX3dyX3N0b3JlX2VudHJ5KCZhbXA7d3JfbWFzKTsKIG91dDoKQEAgLTU2MDEsMTAgJiM0Mzs1NzE3LDExIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1hc19lcmFzZSk7CiAKIC8qKgogICogbWFzX25vbWVtKCkgLSBDaGVjayBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgYWxsb2NhdGluZyBhbmQgZG8gdGhlIGFsbG9jYXRpb24KLSAqIGlmIG5lY2Vzc2FyeSBJZiB0aGVyZSBhcmUgYWxsb2NhdGlvbnMsIHRoZW4gZnJlZSB0aGVtLgomIzQzOyAqIGlmIG5lY2Vzc2FyeS4KJiM0MzsgKgogICogQG1hczogVGhlIG1hcGxlIHN0YXRlCiAgKiBAZ2ZwOiBUaGUgR0ZQX0ZMQUdTIHRvIHVzZSBmb3IgYWxsb2NhdGlvbnMKLSAqIFJldHVybjogdHJ1ZSBvbiBhbGxvY2F0aW9uLCBmYWxzZSBvdGhlcndpc2UuCiYjNDM7ICogUmV0dXJuOiBGYWxzZSBvbiBubyBtZW1vcnkuICBUcnVlIG90aGVyd2lzZSAocGFydGlhbCBzdWNjZXNzIGFzIHdlbGwpCiAgKi8KIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApCiAJX19tdXN0X2hvbGQobWFzLSZndDt0cmVlLSZndDttYV9sb2NrKQpAQCAtNTYxMiw2ICYjNDM7NTcyOSwxMCBAQCBib29sIG1hc19ub21lbShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgZ2ZwX3QgZ2ZwKQogCWlmIChsaWtlbHkobWFzLSZndDtub2RlICE9IE1BX0VSUk9SKC1FTk9NRU0pKSkKIAkJcmV0dXJuIGZhbHNlOwogCiYjNDM7CS8qIEFsbG9jYXRpb25zIGNhbiBmYWlsLCBkb24mIzM5O3QgZG8gdGhpcy4gKi8KJiM0MzsJV0FSTl9PTl9PTkNFKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgbXRfZXh0ZXJuYWxfbG9jayhtYXMtJmd0O3RyZWUpKTsKJiM0MzsKIAlpZiAoZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwKSAmYW1wOyZhbXA7ICFtdF9leHRlcm5hbF9sb2NrKG1hcy0mZ3Q7dHJlZSkpIHsKIAkJbXRyZWVfdW5sb2NrKG1hcy0mZ3Q7dHJlZSk7CiAJCW1hc19hbGxvY19ub2RlcyhtYXMsIGdmcCk7CkBAIC01NjIwLDEwICYjNDM7NTc0MSwxNyBAQCBib29sIG1hc19ub21lbShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgZ2ZwX3QgZ2ZwKQogCQltYXNfYWxsb2Nfbm9kZXMobWFzLCBnZnApOwogCX0KIAotCWlmICghbWFzLSZndDtzaGVhZiAmYW1wOyZhbXA7ICFtYXMtJmd0O2FsbG9jKQomIzQzOwkvKgomIzQzOwkgKiBSZXR1cm4gZmFsc2Ugb24gemVybyBmb3J3YXJkIHByb2dyZXNzLiAgUGFydGlhbCBhbGxvY2F0aW9ucyBhcmUga2VwdAomIzQzOwkgKiBzbyB0aGUgcmV0cnkgcGF0aCB3aWxsIGF0dGVtcHQgdG8gZ2V0IHRoZSByZXN0LiAgVGhlIGZhaWx1cmUgc2hvdWxkCiYjNDM7CSAqIG5vdCBoYXBwZW4gYXMgd2UgdHJ5IG91ciBiZXN0IHRvIHJlY2xhaW0uICBUaGUgdXNlciB3b3VsZCBuZWVkIGFuCiYjNDM7CSAqIGV4dGVybmFsIGxvY2sgd2l0aCBhIG5vbi1ibG9ja2luZyBnZnAgaW4gYSBsb3cgbWVtb3J5IHNpdHVhdGlvbiAtCiYjNDM7CSAqIHdoaWNoIHdvdWxkIGhhdmUgdHJpZ2dlcmVkIHRoZSBmaXJzdCB3YXJuaW5nIGluIHRoaXMgZnVuY3Rpb24uCiYjNDM7CSAqLwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFtYXMtJmd0O3NoZWFmICZhbXA7JmFtcDsgIW1hcy0mZ3Q7YWxsb2MpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQltYXMtJmd0O3N0YXR1cyA9IG1hX3N0YXJ0OwomIzQzOwltYXNfcmVzZXQobWFzKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNTkxMyw2ICYjNDM7NjA0MSwxMCBAQCBFWFBPUlRfU1lNQk9MKG10cmVlX2FsbG9jX3JyYW5nZSk7CiAgKiBFcmFzaW5nIGlzIHRoZSBzYW1lIGFzIGEgd2FsayB0byBhbiBlbnRyeSB0aGVuIGEgc3RvcmUgb2YgYSBOVUxMIHRvIHRoYXQKICAqIEVOVElSRSByYW5nZS4gIEluIGZhY3QsIGl0IGlzIGltcGxlbWVudGVkIGFzIHN1Y2ggdXNpbmcgdGhlIGFkdmFuY2VkIEFQSS4KICAqCiYjNDM7ICogTm90ZSB0aGF0IGVyYXNlIHJlcXVpcmVzIGFsbG9jYXRpb25zIGFuZCB3aWxsIHVzZSBHRlBfS0VSTkVMIHRvIGRvIHNvIGlmCiYjNDM7ICogbmVjZXNzYXJ5LiAgSWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBpbnRlcm5hbCBsb2NrIHdpbGwgYmUgZHJvcHBlZCB0bwomIzQzOyAqIHJldHJ5LgomIzQzOyAqCiAgKiBSZXR1cm46IFRoZSBlbnRyeSBzdG9yZWQgYXQgdGhlIEBpbmRleCBvciAlTlVMTAogICovCiB2b2lkICptdHJlZV9lcmFzZShzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQsIHVuc2lnbmVkIGxvbmcgaW5kZXgpCkBAIC01OTIyLDYgJiM0Mzs2MDU0LDcgQEAgdm9pZCAqbXRyZWVfZXJhc2Uoc3RydWN0IG1hcGxlX3RyZWUgKm10LCB1bnNpZ25lZCBsb25nIGluZGV4KQogCU1BX1NUQVRFKG1hcywgbXQsIGluZGV4LCBpbmRleCk7CiAJdHJhY2VfbWFfb3AoVFBfRkNULCAmYW1wO21hcyk7CiAKJiM0MzsJbWlnaHRfYWxsb2MoR0ZQX0tFUk5FTCk7CiAJbXRyZWVfbG9jayhtdCk7CiAJZW50cnkgPSBtYXNfZXJhc2UoJmFtcDttYXMpOwogCW10cmVlX3VubG9jayhtdCk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuYyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jCmluZGV4IDA2MDc5MTNhMzAyMmQ1Li5kOTY3ZTc2YTNjMDY1MCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMKQEAgLTM1MjM0LDcgJiM0MzszNTIzNCw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19wcmVhbGxvYyhzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQpCiAJbXRfc2V0X25vbl9rZXJuZWwoMSk7CiAJLyogU3Bhbm5pbmcgc3RvcmUgKi8KIAltYXNfc2V0X3JhbmdlKCZhbXA7bWFzLCAxLCAxMDApOwotCU1UX0JVR19PTihtdCwgbWFzX3ByZWFsbG9jYXRlKCZhbXA7bWFzLCBwdHIsIEdGUF9LRVJORUwgJmFtcDsgR0ZQX05PV0FJVCkgPT0gMCk7CiYjNDM7CU1UX0JVR19PTihtdCwgbWFzX3ByZWFsbG9jYXRlKCZhbXA7bWFzLCBwdHIsIEdGUF9OT1dBSVQpID09IDApOwogCWFsbG9jYXRlZCA9IG1hc19hbGxvY2F0ZWQoJmFtcDttYXMpOwogCWhlaWdodCA9IG1hc19tdF9oZWlnaHQoJmFtcDttYXMpOwogCU1UX0JVR19PTihtdCwgYWxsb2NhdGVkICE9IDApOwpAQCAtMzUyNTcsNyAmIzQzOzM1MjU3LDcgQEAgc3RhdGljIG5vaW5saW5lIHZvaWQgX19pbml0IGNoZWNrX3ByZWFsbG9jKHN0cnVjdCBtYXBsZV90cmVlICptdCkKIAlNVF9CVUdfT04obXQsIG1hc19hbGxvY2F0ZWQoJmFtcDttYXMpICE9IDApOwogCW1hc19zZXRfcmFuZ2UoJmFtcDttYXMsIDAsIDIwMCk7CiAJbXRfc2V0X25vbl9rZXJuZWwoMSk7Ci0JTVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoJmFtcDttYXMsIHB0ciwgR0ZQX0tFUk5FTCAmYW1wOyBHRlBfTk9XQUlUKSA9PSAwKTsKJiM0MzsJTVRfQlVHX09OKG10LCBtYXNfcHJlYWxsb2NhdGUoJmFtcDttYXMsIHB0ciwgR0ZQX05PV0FJVCkgPT0gMCk7CiAJYWxsb2NhdGVkID0gbWFzX2FsbG9jYXRlZCgmYW1wO21hcyk7CiAJaGVpZ2h0ID0gbWFzX210X2hlaWdodCgmYW1wO21hcyk7CiAJTVRfQlVHX09OKG10LCBhbGxvY2F0ZWQgIT0gMCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDY4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBzdHVmZiDigJMgdGhlIE1hcGxlIFRyZWUsIGxvY2tkZXAsIGFuZCB0aGUgZG9jdW1lbnRhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgZmFpcmx5IHN1YnN0YW50aWFsIGNoYW5nZS4gSSBzZWUgdGhleSYjMzk7cmUgaW50cm9kdWNpbmcgYGxvY2tfc2VxdWVuY2VgIGludG8gbG9ja2RlcCwgYWRkaW5nIGBsZF9zZXFgIHRvIHRoZSBgc3RydWN0IG1hX3N0YXRlYCB3aXRoaW4gdGhlIG1hcGxlIHRyZWUgY29kZSwgYW5kIGltcG9ydGFudGx5LCB0aGV5JiMzOTtyZSBlbWJlZGRpbmcgbG9ja2RlcCBjaGVja3Mgd2l0aGluIGNvcmUgTWFwbGUgVHJlZSBvcGVyYXRpb25zIGxpa2UgYG1hc19sb2NrX2NoZWNrYCwgYG1hc19pbml0X2xvY2tfY2hlY2tgLCBhbmQgYG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrYC4gSSBub3RlIHRoZSBjaGFuZ2VzIHRvIGBtYXNfZXJhc2VgIHRvIGhhbmRsZSBwb3RlbnRpYWwgbG93LW1lbW9yeSBzY2VuYXJpb3MsIGluY2x1ZGluZyB0aGUgaW50cm9kdWN0aW9uIG9mIGBtaWdodF9hbGxvYyhHRlBfS0VSTkVMKWAgd2hlbiBhbiBleHRlcm5hbCBsb2NrIGlzIGluIHBsYXkuIEkgYWxzbyBzZWUgbW9kaWZpY2F0aW9ucyB0byBgbWFzX3dyX25vZGVfc3RvcmVgIGFuZCBgbWFzX3dyX3N0b3JlX3R5cGVgLgoKVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCByZXF1aXJlcyBjYXJlZnVsIHNjcnV0aW55LiBTaW5jZSB0aGlzIHBhdGNoIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhlIE1hcGxlIFRyZWUgaW1wbGVtZW50YXRpb24gYW5kIGxvY2tkZXAsIEkga25vdyBmdXp6aW5nIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwuIFdlIG5lZWQgdG8gZXhwb3NlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIG9yIG1lbW9yeSBwcm9ibGVtcyBlYXJseS4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aG9zZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gRm9yIGxvY2tkZXAsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGBDT05GSUdfTE9DS0RFUGAgaXMgdGhlIGtleS4gV2l0aCB0aGUgTWFwbGUgVHJlZSwgaXQmIzM5O3MgYmFrZWQgaW50byB0aGUga2VybmVsLiBBbHRob3VnaCBhbHdheXMgZW5hYmxlZCwgSSBrbm93IGBDT05GSUdfREVCVUdfTUFQTEVfVFJFRWAgd291bGQgYmUgaGVscGZ1bCB3aGVuIGRlYnVnZ2luZy4gSSBzaG91bGQgcHJvYmFibHkgZG8gYSBxdWljayBgZ2l0IGdyZXBgIG9uIHRoZSBjb25maWdzIHRvIGNvbmZpcm0gYW55IHNwZWNpZmljIGNvbmZpZ3MgdGhhdCBhcHBseSB0byB0aGUgTWFwbGUgVHJlZSB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQVBMRV9UUkVFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE1OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipLY29uZmlnIEluc3BlY3Rpb24gZm9yIE1hcGxlIFRyZWUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNYXBsZSBUcmVlIGlzIGJlaW5nIGNvbmZpZ3VyZWQgd2l0aGluIHRoaXMgc3lzdGVtLiBUaGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBpcyB0aGUgYGxpYi9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgbWFueSBrZXJuZWwgc3Vic3lzdGVtcyBhcmUgZGVmaW5lZC4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoaXMgZmlsZSB3aWxsIGxpa2VseSBjb250YWluIHRoZSBvcHRpb25zIHJlbGF0ZWQgdG8gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoZSBNYXBsZSBUcmVlIGZlYXR1cmUsIG1heWJlIHNvbWUgYXNzb2NpYXRlZCBwYXJhbWV0ZXJzLCBhbmQgcG90ZW50aWFsbHkgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgY29tcG9uZW50cy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IGNvbmZpZ3VyYXRpb24gY29udHJvbHMgYXJlIGluIHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNQVBMRV9UUkVFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzMzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkxvY2tpbmcgQ29uZmlndXJhdGlvbnMgaW4gdGhlIEtlcm5lbCoqCgpSaWdodCwgc28gdGhlIE1hcGxlIHRyZWUgaXMgYWx3YXlzIGVuYWJsZWQsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBJIG5lZWQgdG8gY29uc2lkZXIgYENPTkZJR19MT0NLREVQYC4gU2luY2UgYFBST1ZFX0xPQ0tJTkdgIGlzIG1lbnRpb25lZCwgSSBrbm93IGBMT0NLREVQYCBpcyBiZWluZyBpbmRpcmVjdGx5IGVuYWJsZWQuIE1ha2VzIHNlbnNlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhlIGxvY2tpbmcgcmVxdWlyZW1lbnRzIHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBjaGFuZ2UgYmVpbmcgZGlzY3Vzc2VkLiBBbmQgc2luY2UgdGhlIHBhdGNoIG1lbnRpb25zIGBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RgIHNwZWNpZmljYWxseSwgdGhhdCB3YXJyYW50cyBhIGRlZXBlciBsb29rLiBJJiMzOTtsbCBuZWVkIHRvIHJlY2FsbCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgc2V0dGluZy4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGdyYWNlIHBlcmlvZCBoYW5kbGluZywgYW5kIGl0cyBpbXBhY3Qgb24gdGhlIG5ldyBNYXBsZSB0cmVlIGltcGxlbWVudGF0aW9uIGlzIHByb2JhYmx5IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXRjaC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBjb21lcyBpbnRvIHBsYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UkNVX1NUUklDVF9HUkFDRV9QRVJJT0QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvbWFwbGVfdHJlZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9tYXBsZV90cmVlLmM9MTE3Mj1zdGF0aWMgdm9pZCBtYXNfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTExNzgtXG5saWIvbWFwbGVfdHJlZS5jOjExNzk6I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxubGliL21hcGxlX3RyZWUuYy0xMTgwLVx0aWYgKCFtdF9sb2NrZWQobWFzLVx1MDAzZXRyZWUpKSB7XG4tLVxubGliL21hcGxlX3RyZWUuYy0xMTgzLVx0fVxubGliL21hcGxlX3RyZWUuYzoxMTg0OiNlbmRpZiAvKiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QgKi9cbmxpYi9tYXBsZV90cmVlLmMtMTE4NS1cbi0tXG5saWIvbWFwbGVfdHJlZS5jPTExOTM9c3RhdGljIHZvaWQgbWFzX2luaXRfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTExOTYtXHRzdHJ1Y3QgbG9ja2RlcF9tYXAgKm1hcDtcbmxpYi9tYXBsZV90cmVlLmM6MTE5NzojaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXG5saWIvbWFwbGVfdHJlZS5jLTExOTgtXHRpZiAoIW10X2xvY2tlZChtYXMtXHUwMDNldHJlZSkpIHtcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTEyMDItXHR9XG5saWIvbWFwbGVfdHJlZS5jOjEyMDM6I2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xubGliL21hcGxlX3RyZWUuYy0xMjA0LVxuLS1cbmxpYi9tYXBsZV90cmVlLmM9MTIxMj1zdGF0aWMgdm9pZCBtYXNfbWF5X2luaXRfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTEyMTQtI2lmZGVmIENPTkZJR19MT0NLREVQXG5saWIvbWFwbGVfdHJlZS5jOjEyMTU6I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxubGliL21hcGxlX3RyZWUuYy0xMjE2LVx0aWYgKG1hc19pc19zdGFydChtYXMpIHx8IG1hc19pc19wYXVzZWQobWFzKSkge1xuLS1cbmxpYi9tYXBsZV90cmVlLmMtMTIxOS1cdH1cbmxpYi9tYXBsZV90cmVlLmM6MTIyMDojZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXG5saWIvbWFwbGVfdHJlZS5jLTEyMjEtXHRtYXNfbG9ja19jaGVjayhtYXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAyOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTUwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgUkNVIGFuZCBMb2NraW5nIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gYFJDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EYCBpcyBkZWZpbml0ZWx5IGluIHBsYXkuIFRoYXQgbmFycm93cyBkb3duIHRoZSBwb3NzaWJpbGl0aWVzIGEgYml0IHdoZW4gY29uc2lkZXJpbmcgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBhbmQgSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiB0aGUgYmFjayBvZiBteSBtaW5kLiBUaGVuLCAqb2YgY291cnNlKiBgQ09ORklHX0xPQ0tERVBgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgZ29vZDsgaXQgbWVhbnMgd2UgaGF2ZSBleHRyYSBzYWZldHkgY2hlY2tzLCB3aGljaCBpcyBhbHdheXMgd2VsY29tZSwgZXZlbiBpZiBpdCBtaWdodCBhZGQgc29tZSBvdmVyaGVhZC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgdGhlc2UgZGVidWcgY29uZmlndXJhdGlvbnMgY2FuIGFmZmVjdCBwZXJmb3JtYW5jZSB3aGVuIEkmIzM5O20gbG9va2luZyBhdCB0aW1pbmcgcHJvZmlsZXMgbGF0ZXIgb24uIE9rYXksIHdoYXQgZWxzZSBpcyBpbiBwbGF5PyBMZXQmIzM5O3MgYWxzbyB2ZXJpZnkgd2hldGhlciBgQ09ORklHX0RFQlVHX01BUExFX1RSRUVgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZSBhdCBoYW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtERUJVR19NQVBMRV9UUkVFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL21hcGxlX3RyZWUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvbWFwbGVfdHJlZS5jPTk2PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbWFwbGVfbm9kZV9jYWNoZTtcbmxpYi9tYXBsZV90cmVlLmMtOTctXG5saWIvbWFwbGVfdHJlZS5jOjk4OiNpZmRlZiBDT05GSUdfREVCVUdfTUFQTEVfVFJFRVxubGliL21hcGxlX3RyZWUuYy05OS1zdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBtdF9tYXhbXSA9IHtcbi0tXG5saWIvbWFwbGVfdHJlZS5jPTQ5MjE9dm9pZCAqbWFzX3N0b3JlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSlcbi0tXG5saWIvbWFwbGVfdHJlZS5jLTQ5MjYtXHR0cmFjZV9tYV93cml0ZShUUF9GQ1QsIG1hcywgMCwgZW50cnkpO1xubGliL21hcGxlX3RyZWUuYzo0OTI3OiNpZmRlZiBDT05GSUdfREVCVUdfTUFQTEVfVFJFRVxubGliL21hcGxlX3RyZWUuYy00OTI4LVx0aWYgKE1BU19XQVJOX09OKG1hcywgbWFzLVx1MDAzZWluZGV4IFx1MDAzZSBtYXMtXHUwMDNlbGFzdCkpXG4tLVxubGliL21hcGxlX3RyZWUuYz02MzkyPXZvaWQgKm10X2ZpbmQoc3RydWN0IG1hcGxlX3RyZWUgKm10LCB1bnNpZ25lZCBsb25nICppbmRleCwgdW5zaWduZWQgbG9uZyBtYXgpXG4tLVxubGliL21hcGxlX3RyZWUuYy02Mzk1LVx0dm9pZCAqZW50cnk7XG5saWIvbWFwbGVfdHJlZS5jOjYzOTY6I2lmZGVmIENPTkZJR19ERUJVR19NQVBMRV9UUkVFXG5saWIvbWFwbGVfdHJlZS5jLTYzOTctXHR1bnNpZ25lZCBsb25nIGNvcHkgPSAqaW5kZXg7XG4tLVxubGliL21hcGxlX3RyZWUuYy02NDI4LVx0XHQqaW5kZXggPSBtYXMubGFzdCAmIzQzOyAxO1xubGliL21hcGxlX3RyZWUuYzo2NDI5OiNpZmRlZiBDT05GSUdfREVCVUdfTUFQTEVfVFJFRVxubGliL21hcGxlX3RyZWUuYy02NDMwLVx0XHRpZiAoTVRfV0FSTl9PTihtdCwgKCppbmRleCkgXHUwMDI2XHUwMDI2ICgoKmluZGV4KSBcdTAwM2M9IGNvcHkpKSlcbi0tXG5saWIvbWFwbGVfdHJlZS5jPTY0NjA9RVhQT1JUX1NZTUJPTChtdF9maW5kX2FmdGVyKTtcbmxpYi9tYXBsZV90cmVlLmMtNjQ2MS1cbmxpYi9tYXBsZV90cmVlLmM6NjQ2MjojaWZkZWYgQ09ORklHX0RFQlVHX01BUExFX1RSRUVcbmxpYi9tYXBsZV90cmVlLmMtNjQ2My1hdG9taWNfdCBtYXBsZV90cmVlX3Rlc3RzX3J1bjtcbi0tXG5saWIvbWFwbGVfdHJlZS5jPTcxNzY9RVhQT1JUX1NZTUJPTF9HUEwobWFzX3dyX2R1bXApO1xubGliL21hcGxlX3RyZWUuYy03MTc3LVxubGliL21hcGxlX3RyZWUuYzo3MTc4OiNlbmRpZiAvKiBDT05GSUdfREVCVUdfTUFQTEVfVFJFRSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAwMAoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiA0MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNYXBsZSBUcmVlIFBhdGNoIGZvciBQb3RlbnRpYWwgSXNzdWVzKioKCk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIE1hcGxlIFRyZWUgY29kZS4gRW5hYmxpbmcgYERFQlVHX01BUExFX1RSRUVgIGlzIGEgZ29vZCBmaXJzdCBzdGVwIHRvIGhlbHAgd2l0aCBkZWJ1Z2dpbmcuIEkgc2hvdWxkIGFsc28gY2hlY2sgYFBST1ZFX0xPQ0tJTkdgIHRvIGVuYWJsZSBgTE9DS0RFUGAsIHdoaWNoIHdpbGwgYmUgY3J1Y2lhbCBmb3IgYW5hbHl6aW5nIGFueSBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMuCgpOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgc3BlY2lmaWNzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIFRoZSBwYXRjaCBtb2RpZmllcyBhIHJhbmdlIG9mIE1hcGxlIFRyZWUgZnVuY3Rpb25zOiBgbWFzX2VyYXNlYCwgYG1hc19ub21lbWAsIGBtYXNfYWxsb2NfY3ljbGljYCwgYG1hc193cl9ub2RlX3N0b3JlYCwgYG1hc193cl9zdG9yZV90eXBlYCwgYG1hc19zdG9yZWAsIGBtYXNfc3RvcmVfZ2ZwYCwgYG1hc19zdG9yZV9wcmVhbGxvY2AsIGBtYXNfcHJlYWxsb2NhdGVgLCBgbWFzX25leHRgLCBgbWFzX25leHRfcmFuZ2VgLCBgbWFzX3ByZXZgLCBgbWFzX3ByZXZfcmFuZ2VgLCBgbWFzX2ZpbmRgLCBgbWFzX2ZpbmRfcmFuZ2VgLCBgbWFzX2ZpbmRfcmV2YCwgYG1hc19maW5kX3JhbmdlX3JldmAsIGFuZCBgbXRyZWVfZXJhc2VgLiBHaXZlbiB0aGUgTWFwbGUgVHJlZSYjMzk7cyBpbXBvcnRhbmNlIGluIHRoZSBrZXJuZWwsIGVzcGVjaWFsbHkgZm9yIHRoaW5ncyBsaWtlIFZNQSBtYW5hZ2VtZW50LCBJIHNob3VsZCBjYXJlZnVsbHkgZXZhbHVhdGUgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGljaCBzcGVjaWZpYyBmdW5jdGlvbnMgYXJlIG1vc3QgbGlrZWx5IHRvIGJlIHByb2JsZW1hdGljLiBgbWFzX2VyYXNlYCwgYG1hc19ub21lbWAsIGBtYXNfYWxsb2NfY3ljbGljYCwgYG1hc193cl9ub2RlX3N0b3JlYCwgYG1hc193cl9zdG9yZV90eXBlYCwgYG1hc19zdG9yZV9nZnBgLCBgbWFzX3N0b3JlX3ByZWFsbG9jYCwgYG1hc19wcmVhbGxvY2F0ZWAsIGFuZCBgbXRyZWVfZXJhc2VgIHNlZW0gbGlrZSB0aGV5IG1pZ2h0IGJlIG1vcmUgaW50ZXJlc3RpbmcgdGhhbiB0aGUgZ2VuZXJhbCBwYXRoIG9uZXMgbGlrZSBgbWFzX25leHRgLCBgbWFzX3ByZXZgLCBhbmQgYG1hc19maW5kYCB3aGljaCBhcmUgcHJvYmFibHkgd2VsbC10ZXN0ZWQgYW5kIGZyZXF1ZW50bHkgdXNlZC4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGZpcnN0IGdyb3VwLiBJdCYjMzk7cyBsaWtlbHkgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIHdpbGwgbmVlZCBtb3JlIGluLWRlcHRoIHJldmlldy4KCk9oLCBhbmQgSSBhbHNvIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBgbG9ja19zZXF1ZW5jZWAgaW4gYGxvY2tkZXAuY2AuIFRoYXQmIzM5O3MgZGVmaW5pdGVseSByZWxhdGVkIHRvIHRoaXMsIGdpdmVuIHRoZSBgTE9DS0RFUGAgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX01BUExFX1RSRUUmIzM0OywKICAgICYjMzQ7TE9DS0RFUCYjMzQ7LAogICAgJiMzNDtQUk9WRV9MT0NLSU5HJiMzNDssCiAgICAmIzM0O1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFzX2VyYXNlJiMzNDssCiAgICAmIzM0O21hc19ub21lbSYjMzQ7LAogICAgJiMzNDttYXNfYWxsb2NfY3ljbGljJiMzNDssCiAgICAmIzM0O21hc193cl9ub2RlX3N0b3JlJiMzNDssCiAgICAmIzM0O21hc193cl9zdG9yZV90eXBlJiMzNDssCiAgICAmIzM0O21hc19zdG9yZV9nZnAmIzM0OywKICAgICYjMzQ7bWFzX3N0b3JlX3ByZWFsbG9jJiMzNDssCiAgICAmIzM0O21hc19wcmVhbGxvY2F0ZSYjMzQ7LAogICAgJiMzNDttdHJlZV9lcmFzZSYjMzQ7LAogICAgJiMzNDtsb2NrX3NlcXVlbmNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWFwbGUgdHJlZSBsb2dpYywgaW5jbHVkaW5nIGVyYXNlLCBhbGxvY2F0aW9uLCBhbmQgc3RvcmUgb3BlcmF0aW9ucywgYW5kIGludHJvZHVjZXMgbG9jayBzZXF1ZW5jZSB0cmFja2luZyBpbiBsb2NrZGVwIHRvIHZlcmlmeSBtYXBsZSB0cmVlIGxvY2tpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIGFyZSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFQlVHX01BUExFX1RSRUUmIzM0OywKICAgICYjMzQ7TE9DS0RFUCYjMzQ7LAogICAgJiMzNDtQUk9WRV9MT0NLSU5HJiMzNDssCiAgICAmIzM0O1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFzX2VyYXNlJiMzNDssCiAgICAmIzM0O21hc19ub21lbSYjMzQ7LAogICAgJiMzNDttYXNfYWxsb2NfY3ljbGljJiMzNDssCiAgICAmIzM0O21hc193cl9ub2RlX3N0b3JlJiMzNDssCiAgICAmIzM0O21hc193cl9zdG9yZV90eXBlJiMzNDssCiAgICAmIzM0O21hc19zdG9yZV9nZnAmIzM0OywKICAgICYjMzQ7bWFzX3N0b3JlX3ByZWFsbG9jJiMzNDssCiAgICAmIzM0O21hc19wcmVhbGxvY2F0ZSYjMzQ7LAogICAgJiMzNDttdHJlZV9lcmFzZSYjMzQ7LAogICAgJiMzNDtsb2NrX3NlcXVlbmNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWFwbGUgdHJlZSBsb2dpYywgaW5jbHVkaW5nIGVyYXNlLCBhbGxvY2F0aW9uLCBhbmQgc3RvcmUgb3BlcmF0aW9ucywgYW5kIGludHJvZHVjZXMgbG9jayBzZXF1ZW5jZSB0cmFja2luZyBpbiBsb2NrZGVwIHRvIHZlcmlmeSBtYXBsZSB0cmVlIGxvY2tpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIGFyZSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMjoyNDo1NC45MTM0NTExNjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTU3MDE4OTcyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19NQVBMRV9UUkVFXCIsXG4gICAgXCJMT0NLREVQXCIsXG4gICAgXCJQUk9WRV9MT0NLSU5HXCIsXG4gICAgXCJSQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hc19lcmFzZVwiLFxuICAgIFwibWFzX25vbWVtXCIsXG4gICAgXCJtYXNfYWxsb2NfY3ljbGljXCIsXG4gICAgXCJtYXNfd3Jfbm9kZV9zdG9yZVwiLFxuICAgIFwibWFzX3dyX3N0b3JlX3R5cGVcIixcbiAgICBcIm1hc19zdG9yZV9nZnBcIixcbiAgICBcIm1hc19zdG9yZV9wcmVhbGxvY1wiLFxuICAgIFwibWFzX3ByZWFsbG9jYXRlXCIsXG4gICAgXCJtdHJlZV9lcmFzZVwiLFxuICAgIFwibG9ja19zZXF1ZW5jZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWFwbGUgdHJlZSBsb2dpYywgaW5jbHVkaW5nIGVyYXNlLCBhbGxvY2F0aW9uLCBhbmQgc3RvcmUgb3BlcmF0aW9ucywgYW5kIGludHJvZHVjZXMgbG9jayBzZXF1ZW5jZSB0cmFja2luZyBpbiBsb2NrZGVwIHRvIHZlcmlmeSBtYXBsZSB0cmVlIGxvY2tpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIGFyZSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI0OjU0LjkxMzQ1OTAwM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MTg2MTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzZhZTRjYjRiOThlZjZkNTY5NDdkNWMzMjQ3MGU5Y2M1ODhlZDFjZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxIDAyOjI0OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0XFxuaW5kZXggY2NkZDE2MTVjZjk3NGYuLjFlYWUyNGE5YzE4YjRhIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbWFwbGVfdHJlZS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0XFxuQEAgLTE3LDcgKzE3LDggQEAgc3VwcG9ydHMgaXRlcmF0aW5nIG92ZXIgYSByYW5nZSBvZiBlbnRyaWVzIGFuZCBnb2luZyB0byB0aGUgcHJldmlvdXMgb3IgbmV4dFxcbiBlbnRyeSBpbiBhIGNhY2hlLWVmZmljaWVudCBtYW5uZXIuICBUaGUgdHJlZSBjYW4gYWxzbyBiZSBwdXQgaW50byBhbiBSQ1Utc2FmZVxcbiBtb2RlIG9mIG9wZXJhdGlvbiB3aGljaCBhbGxvd3MgcmVhZGluZyBhbmQgd3JpdGluZyBjb25jdXJyZW50bHkuICBXcml0ZXJzIG11c3RcXG4gc3luY2hyb25pemUgb24gYSBsb2NrLCB3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQgc3BpbmxvY2ssIG9yIHRoZSB1c2VyIGNhbiBzZXRcXG4tdGhlIGxvY2sgdG8gYW4gZXh0ZXJuYWwgbG9jayBvZiBhIGRpZmZlcmVudCB0eXBlLlxcbit0aGUgbG9jayB0byBhbiBleHRlcm5hbCBsb2NrIG9mIGEgZGlmZmVyZW50IHR5cGUuICBOb3RlIHRoYXQgZXh0ZXJuYWwgbG9ja3MgbWF5XFxuK2ludGVyZmVyZSB3aXRoIGFsbG9jYXRpb25zIGluIGEgbG93IG1lbW9yeSBzaXR1YXRpb24uXFxuIFxcbiBUaGUgTWFwbGUgVHJlZSBtYWludGFpbnMgYSBzbWFsbCBtZW1vcnkgZm9vdHByaW50IGFuZCB3YXMgZGVzaWduZWQgdG8gdXNlXFxuIG1vZGVybiBwcm9jZXNzb3IgY2FjaGUgZWZmaWNpZW50bHkuICBUaGUgbWFqb3JpdHkgb2YgdGhlIHVzZXJzIHdpbGwgYmUgYWJsZSB0b1xcbkBAIC00Miw2ICs0MywxNSBAQCBzdWNjZXNzZnVsIHN0b3JlIG9wZXJhdGlvbiB3aXRoaW4gYSBnaXZlblxcbiBjb2RlIHNlZ21lbnQgd2hlbiBhbGxvY2F0aW5nIGNhbm5vdCBiZSBkb25lLiAgQWxsb2NhdGlvbnMgb2Ygbm9kZXMgYXJlXFxuIHJlbGF0aXZlbHkgc21hbGwgYXQgYXJvdW5kIDI1NiBieXRlcy5cXG4gXFxuK1NpbmNlIHRoZSBtYXBsZSB0cmVlIHVzZXMgaW50ZXJuYWwgbm9kZXMgdGhhdCBhcmUgYWxsb2NhdGVkIGFuZCBoYXMgcnVsZXMgb25cXG4rZGF0YSBkZW5zaXR5LCBlcmFzaW5nIGFuIGVudHJ5IG1heSBjYXVzZSBhbGxvY2F0aW9ucyB0byBvY2N1ci4gIFRoYXQgaXMsXFxuK2VyYXNpbmcgYW4gZW50cnkgbWF5IGNvbnN1bWUgbWVtb3J5LiAgVXNlcnMgbXVzdCB0YWtlIGNhcmUgdG8gZW5zdXJlIHRoYXQgdGhleVxcbitkbyBub3QgdmlvbGF0ZSB0aGUgbGFyZ2VyIHN5c3RlbSBjb25zdHJhaW50cyBvbiB3aGVuIGFuZCBob3cgbWVtb3J5IGlzXFxuK2FsbG9jYXRlZC4gIE1vc3Qgc2l0dWF0aW9ucyBhcmUgZmluZSB0byBhbGxvY2F0ZSwgYnV0IHRoZSBwcmUtYWxsb2NhdGlvblxcbitzdXBwb3J0IGlzIHByb3ZpZGVkIGFzIGEgbWVjaGFuaXNtIHRvIGF2b2lkIHRyaWNraWVyIHNpdHVhdGlvbnMuICBUaGVyZSBpcyBhbHNvXFxuK3RoZSBwb3NzaWJpbGl0eSBvZiB1c2luZyBzcGVjaWFsIGVudHJpZXMgYW5kIGNsZWFuIHVwIHRoZSB0cmVlIGxhdGVyLCBpblxcbitleHRyZW1lIGNpcmN1bXN0YW5jZXMuXFxuK1xcbiAuLiBfbWFwbGUtdHJlZS1ub3JtYWwtYXBpOlxcbiBcXG4gTm9ybWFsIEFQSVxcbkBAIC02Myw3ICs3Myw4IEBAIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZSBvdGhlcndpc2UuICBtdHJlZV9zdG9yZV9yYW5nZSgpIHdvcmtzIGluIHRoZSBzYW1lIHdheVxcbiBidXQgdGFrZXMgYSByYW5nZS4gIG10cmVlX2xvYWQoKSBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBlbnRyeSBzdG9yZWQgYXQgYVxcbiBnaXZlbiBpbmRleC4gIFlvdSBjYW4gdXNlIG10cmVlX2VyYXNlKCkgdG8gZXJhc2UgYW4gZW50aXJlIHJhbmdlIGJ5IG9ubHlcXG4ga25vd2luZyBvbmUgdmFsdWUgd2l0aGluIHRoYXQgcmFuZ2UsIG9yIG10cmVlX3N0b3JlKCkgY2FsbCB3aXRoIGFuIGVudHJ5IG9mXFxuLU5VTEwgbWF5IGJlIHVzZWQgdG8gcGFydGlhbGx5IGVyYXNlIGEgcmFuZ2Ugb3IgbWFueSByYW5nZXMgYXQgb25jZS5cXG4rTlVMTCBtYXkgYmUgdXNlZCB0byBwYXJ0aWFsbHkgZXJhc2UgYSByYW5nZSBvciBtYW55IHJhbmdlcyBhdCBvbmNlLiAgTm90ZSB0aGF0XFxuK210cmVlX2VyYXNlKCkgbWF5IHVzZSBHRlBfS0VSTkVMIG9uIGFsbG9jYXRpb25zLlxcbiBcXG4gSWYgeW91IHdhbnQgdG8gb25seSBzdG9yZSBhIG5ldyBlbnRyeSB0byBhIHJhbmdlIChvciBpbmRleCkgaWYgdGhhdCByYW5nZSBpc1xcbiBjdXJyZW50bHkgYGBOVUxMYGAsIHlvdSBjYW4gdXNlIG10cmVlX2luc2VydF9yYW5nZSgpIG9yIG10cmVlX2luc2VydCgpIHdoaWNoXFxuQEAgLTE2Myw3ICsxNzQsOSBAQCBZb3UgY2FuIHVzZSBtYXNfZXJhc2UoKSB0byBlcmFzZSBhbiBlbnRpcmUgcmFuZ2UgYnkgc2V0dGluZyBpbmRleCBhbmRcXG4gbGFzdCBvZiB0aGUgbWFwbGUgc3RhdGUgdG8gdGhlIGRlc2lyZWQgcmFuZ2UgdG8gZXJhc2UuICBUaGlzIHdpbGwgZXJhc2VcXG4gdGhlIGZpcnN0IHJhbmdlIHRoYXQgaXMgZm91bmQgaW4gdGhhdCByYW5nZSwgc2V0IHRoZSBtYXBsZSBzdGF0ZSBpbmRleFxcbiBhbmQgbGFzdCBhcyB0aGUgcmFuZ2UgdGhhdCB3YXMgZXJhc2VkIGFuZCByZXR1cm4gdGhlIGVudHJ5IHRoYXQgZXhpc3RlZFxcbi1hdCB0aGF0IGxvY2F0aW9uLlxcbithdCB0aGF0IGxvY2F0aW9uLiAgTm90ZSB0aGF0IG1hc19lcmFzZSgpIG1heSBhbGxvY2F0ZSB3aXRoIHRoZSBHRlBfS0VSTkVMIGZsYWcuXFxuK0lmIHRoaXMgaXMgbm90IG9rYXksIGNvbnNpZGVyIHVzaW5nIG1hc19zdG9yZV9nZnAoKSBhbmQgcGFzcyBpdCBhIGBgTlVMTGBgLFxcbithZnRlciBzZXR0aW5nIHVwIHRoZSBjb3JyZWN0IHJhbmdlIGJ5IHdhbGtpbmcgdG8gdGhlIGVudHJ5LlxcbiBcXG4gWW91IGNhbiB3YWxrIGVhY2ggZW50cnkgd2l0aGluIGEgcmFuZ2UgYnkgdXNpbmcgbWFzX2Zvcl9lYWNoKCkuICBJZiB5b3Ugd2FudFxcbiB0byB3YWxrIGVhY2ggZWxlbWVudCBvZiB0aGUgdHJlZSB0aGVuIGBgMGBgIGFuZCBgYFVMT05HX01BWGBgIG1heSBiZSB1c2VkIGFzXFxuQEAgLTIxMSw3ICsyMjQsNyBAQCBBZHZhbmNlZCBMb2NraW5nXFxuIFxcbiBUaGUgbWFwbGUgdHJlZSB1c2VzIGEgc3BpbmxvY2sgYnkgZGVmYXVsdCwgYnV0IGV4dGVybmFsIGxvY2tzIGNhbiBiZSB1c2VkIGZvclxcbiB0cmVlIHVwZGF0ZXMgYXMgd2VsbC4gIFRvIHVzZSBhbiBleHRlcm5hbCBsb2NrLCB0aGUgdHJlZSBtdXN0IGJlIGluaXRpYWxpemVkXFxuLXdpdGggdGhlIGBgTVRfRkxBR1NfTE9DS19FWFRFUk4gZmxhZ2BgLCB0aGlzIGlzIHVzdWFsbHkgZG9uZSB3aXRoIHRoZVxcbit3aXRoIHRoZSBgYE1UX0ZMQUdTX0xPQ0tfRVhURVJOYGAgZmxhZywgdGhpcyBpcyB1c3VhbGx5IGRvbmUgd2l0aCB0aGVcXG4gTVRSRUVfSU5JVF9FWFQoKSAjZGVmaW5lLCB3aGljaCB0YWtlcyBhbiBleHRlcm5hbCBsb2NrIGFzIGFuIGFyZ3VtZW50LlxcbiBcXG4gRnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcXG5pbmRleCA2MjE1NjYzNDU0MDZkZC4uYTY0NTFlY2JiZTlhMDUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFxcbkBAIC0yNzMsNiArMjczLDkgQEAgZXh0ZXJuIHN0cnVjdCBwaW5fY29va2llIGxvY2tfcGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKTtcXG4gZXh0ZXJuIHZvaWQgbG9ja19yZXBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUpO1xcbiBleHRlcm4gdm9pZCBsb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSk7XFxuIFxcbitleHRlcm4gdTMyIGxvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKTtcXG4rI2RlZmluZSBsb2NrZGVwX3NlcXVlbmNlKGxvY2spXFx0bG9ja19zZXF1ZW5jZShcXHUwMDI2KGxvY2spLVxcdTAwM2VkZXBfbWFwKVxcbitcXG4gI2RlZmluZSBsb2NrZGVwX2RlcHRoKHRzaylcXHQoZGVidWdfbG9ja3MgPyAodHNrKS1cXHUwMDNlbG9ja2RlcF9kZXB0aCA6IDApXFxuIFxcbiAjZGVmaW5lIGxvY2tkZXBfYXNzZXJ0KGNvbmQpXFx0XFx0XFxcXFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oXFxuaW5kZXggZWFlMTE1YTI2NDg4NTYuLjU1YzRiMTUyZmVkZjdjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmhcXG5AQCAtMjUzLDcgKzI1Myw4IEBAIHN0cnVjdCBoZWxkX2xvY2sge1xcbiBcXHR1bnNpZ25lZCBpbnQgaGFyZGlycXNfb2ZmOjE7XFxuIFxcdHVuc2lnbmVkIGludCBzeW5jOjE7XFxuIFxcdHVuc2lnbmVkIGludCByZWZlcmVuY2VzOjExO1xcdFxcdFxcdFxcdFxcdC8qIDMyIGJpdHMgKi9cXG4tXFx0dW5zaWduZWQgaW50IHBpbl9jb3VudDtcXG4rXFx0dW5zaWduZWQgaW50IHBpbl9jb3VudDoyNDtcXG4rXFx0dW5zaWduZWQgaW50IHNlcV9jb3VudDo4O1xcbiB9O1xcbiBcXG4gI2Vsc2UgLyogIUNPTkZJR19MT0NLREVQICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oIGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcXG5pbmRleCA0YTU2MzE5MDZhZmZiNS4uNWUwYmQyODU3ZDk0MWUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaFxcbkBAIC0yOSwxMyArMjksMTEgQEBcXG4gI2RlZmluZSBNQVBMRV9OT0RFX1NMT1RTXFx0MzFcXHQvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC1cXHUwMDNlcGFyZW50ICovXFxuICNkZWZpbmUgTUFQTEVfUkFOR0U2NF9TTE9UU1xcdDE2XFx0LyogMjU2IGJ5dGVzICovXFxuICNkZWZpbmUgTUFQTEVfQVJBTkdFNjRfU0xPVFNcXHQxMFxcdC8qIDI0MCBieXRlcyAqL1xcbi0jZGVmaW5lIE1BUExFX0FMTE9DX1NMT1RTXFx0KE1BUExFX05PREVfU0xPVFMgLSAxKVxcbiAjZWxzZVxcbiAvKiAzMmJpdCBzaXplcyAqL1xcbiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFNcXHQ2M1xcdC8qIDI1NiBieXRlcyBpbmNsdWRpbmcgLVxcdTAwM2VwYXJlbnQgKi9cXG4gI2RlZmluZSBNQVBMRV9SQU5HRTY0X1NMT1RTXFx0MzJcXHQvKiAyNTYgYnl0ZXMgKi9cXG4gI2RlZmluZSBNQVBMRV9BUkFOR0U2NF9TTE9UU1xcdDIxXFx0LyogMjQwIGJ5dGVzICovXFxuLSNkZWZpbmUgTUFQTEVfQUxMT0NfU0xPVFNcXHQoTUFQTEVfTk9ERV9TTE9UUyAtIDIpXFxuICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR182NEJJVCkgfHwgZGVmaW5lZChCVUlMRF9WRFNPMzJfNjQpICovXFxuIFxcbiAjZGVmaW5lIE1BUExFX05PREVfTUFTS1xcdFxcdDI1NVVMXFxuQEAgLTQ4NSw2ICs0ODMsMTIgQEAgc3RydWN0IG1hX3N0YXRlIHtcXG4gXFx0dW5zaWduZWQgY2hhciBtYXNfZmxhZ3M7XFxuIFxcdHVuc2lnbmVkIGNoYXIgZW5kO1xcdFxcdC8qIFRoZSBlbmQgb2YgdGhlIG5vZGUgKi9cXG4gXFx0ZW51bSBzdG9yZV90eXBlIHN0b3JlX3R5cGU7XFx0LyogVGhlIHR5cGUgb2Ygc3RvcmUgbmVlZGVkIGZvciB0aGlzIG9wZXJhdGlvbiAqL1xcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4rXFx0dTMyIGxkX3NlcTtcXG4rI2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxcbitcXHR1bnNpZ25lZCBsb25nIHJjdV9ncDtcXG4rI2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xcbisjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi9cXG4gfTtcXG4gXFxuIHN0cnVjdCBtYV93cl9zdGF0ZSB7XFxuQEAgLTU3Miw3ICs1NzYsNyBAQCB2b2lkIG1hcGxlX3RyZWVfaW5pdCh2b2lkKTtcXG4gdm9pZCBtYXNfZGVzdHJveShzdHJ1Y3QgbWFfc3RhdGUgKm1hcyk7XFxuIFxcbiB2b2lkICptYXNfcHJldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pO1xcbi12b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xcbit2b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pO1xcbiB2b2lkICptYXNfbmV4dChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xcbiB2b2lkICptYXNfbmV4dF9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXFxuaW5kZXggMzczYmNjMDU5OGQxMGIuLjE0ZDVjZThkZDYxMzY1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxcbkBAIC0xMjg4LDYgKzEyODgsNyBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3Qge1xcbiBcXHR1NjRcXHRcXHRcXHRcXHRjdXJyX2NoYWluX2tleTtcXG4gXFx0aW50XFx0XFx0XFx0XFx0bG9ja2RlcF9kZXB0aDtcXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0XFx0bG9ja2RlcF9yZWN1cnNpb247XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdFxcdGxvY2tkZXBfc2VxO1xcbiBcXHRzdHJ1Y3QgaGVsZF9sb2NrXFx0XFx0aGVsZF9sb2Nrc1tNQVhfTE9DS19ERVBUSF07XFxuICNlbmRpZlxcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXFxuaW5kZXggMmQ0YzViYWI1YWY4ODcuLmE2OTU2N2JkZDc5MTJlIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xcbisrKyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xcbkBAIC01MDc3LDcgKzUwNzcsNyBAQCBzdGF0aWMgaW50IF9fbG9ja19pc19oZWxkKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgaW50IHJlYWQpO1xcbiBzdGF0aWMgaW50IF9fbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLFxcbiBcXHRcXHRcXHQgIGludCB0cnlsb2NrLCBpbnQgcmVhZCwgaW50IGNoZWNrLCBpbnQgaGFyZGlycXNfb2ZmLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBsb2NrZGVwX21hcCAqbmVzdF9sb2NrLCB1bnNpZ25lZCBsb25nIGlwLFxcbi1cXHRcXHRcXHQgIGludCByZWZlcmVuY2VzLCBpbnQgcGluX2NvdW50LCBpbnQgc3luYylcXG4rXFx0XFx0XFx0ICBpbnQgcmVmZXJlbmNlcywgaW50IHBpbl9jb3VudCwgaW50IHN5bmMsIGludCBzZXEpXFxuIHtcXG4gXFx0c3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDtcXG4gXFx0c3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gTlVMTDtcXG5AQCAtNTE4Myw2ICs1MTgzLDcgQEAgc3RhdGljIGludCBfX2xvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcyxcXG4gXFx0aGxvY2stXFx1MDAzZWhvbGR0aW1lX3N0YW1wID0gbG9ja3N0YXRfY2xvY2soKTtcXG4gI2VuZGlmXFxuIFxcdGhsb2NrLVxcdTAwM2VwaW5fY291bnQgPSBwaW5fY291bnQ7XFxuK1xcdGhsb2NrLVxcdTAwM2VzZXFfY291bnQgPSBzZXE7XFxuIFxcbiBcXHRpZiAoY2hlY2tfd2FpdF9jb250ZXh0KGN1cnIsIGhsb2NrKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuQEAgLTUzODgsNyArNTM4OSw3IEBAIHN0YXRpYyBpbnQgcmVhY3F1aXJlX2hlbGRfbG9ja3Moc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCB1bnNpZ25lZCBpbnQgZGVwdGgsXFxuIFxcdFxcdFxcdFxcdCAgICBobG9jay1cXHUwMDNlcmVhZCwgaGxvY2stXFx1MDAzZWNoZWNrLFxcbiBcXHRcXHRcXHRcXHQgICAgaGxvY2stXFx1MDAzZWhhcmRpcnFzX29mZixcXG4gXFx0XFx0XFx0XFx0ICAgIGhsb2NrLVxcdTAwM2VuZXN0X2xvY2ssIGhsb2NrLVxcdTAwM2VhY3F1aXJlX2lwLFxcbi1cXHRcXHRcXHRcXHQgICAgaGxvY2stXFx1MDAzZXJlZmVyZW5jZXMsIGhsb2NrLVxcdTAwM2VwaW5fY291bnQsIDApKSB7XFxuK1xcdFxcdFxcdFxcdCAgICBobG9jay1cXHUwMDNlcmVmZXJlbmNlcywgaGxvY2stXFx1MDAzZXBpbl9jb3VudCwgMCwgaGxvY2stXFx1MDAzZXNlcV9jb3VudCkpIHtcXG4gXFx0XFx0Y2FzZSAwOlxcbiBcXHRcXHRcXHRyZXR1cm4gMTtcXG4gXFx0XFx0Y2FzZSAxOlxcbkBAIC01NjY5LDE0ICs1NjcwLDE3IEBAIHN0YXRpYyB2b2lkIF9fbG9ja191bnBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUgY29va2llXFxuIFxcdFxcdHN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrID0gY3Vyci1cXHUwMDNlaGVsZF9sb2NrcyArIGk7XFxuIFxcbiBcXHRcXHRpZiAobWF0Y2hfaGVsZF9sb2NrKGhsb2NrLCBsb2NrKSkge1xcbitcXHRcXHRcXHRpbnQgcGluX2NvdW50O1xcbitcXG4gXFx0XFx0XFx0aWYgKFdBUk4oIWhsb2NrLVxcdTAwM2VwaW5fY291bnQsIFxcXCJ1bnBpbm5pbmcgYW4gdW5waW5uZWQgbG9ja1xcXFxuXFxcIikpXFxuIFxcdFxcdFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdFxcdFxcdGhsb2NrLVxcdTAwM2VwaW5fY291bnQgLT0gY29va2llLnZhbDtcXG4rXFx0XFx0XFx0cGluX2NvdW50ID0gaGxvY2stXFx1MDAzZXBpbl9jb3VudCAtIGNvb2tpZS52YWw7XFxuIFxcbi1cXHRcXHRcXHRpZiAoV0FSTigoaW50KWhsb2NrLVxcdTAwM2VwaW5fY291bnQgXFx1MDAzYyAwLCBcXFwicGluIGNvdW50IGNvcnJ1cHRlZFxcXFxuXFxcIikpXFxuLVxcdFxcdFxcdFxcdGhsb2NrLVxcdTAwM2VwaW5fY291bnQgPSAwO1xcbitcXHRcXHRcXHRpZiAoV0FSTihwaW5fY291bnQgXFx1MDAzYyAwLCBcXFwicGluIGNvdW50IGNvcnJ1cHRlZFxcXFxuXFxcIikpXFxuK1xcdFxcdFxcdFxcdHBpbl9jb3VudCA9IDA7XFxuIFxcbitcXHRcXHRcXHRobG9jay1cXHUwMDNlcGluX2NvdW50ID0gcGluX2NvdW50O1xcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdFxcdH1cXG4gXFx0fVxcbkBAIC01Njg0LDYgKzU2ODgsMjQgQEAgc3RhdGljIHZvaWQgX19sb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSBjb29raWVcXG4gXFx0V0FSTigxLCBcXFwidW5waW5uaW5nIGFuIHVuaGVsZCBsb2NrXFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4rc3RhdGljIHUzMiBfX2xvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKVxcbit7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KCFkZWJ1Z19sb2NrcykpXFxuK1xcdFxcdHJldHVybiB+MDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjdXJyLVxcdTAwM2Vsb2NrZGVwX2RlcHRoOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IGhlbGRfbG9jayAqaGxvY2sgPSBjdXJyLVxcdTAwM2VoZWxkX2xvY2tzICsgaTtcXG4rXFxuK1xcdFxcdGlmIChtYXRjaF9oZWxkX2xvY2soaGxvY2ssIGxvY2spKVxcbitcXHRcXHRcXHRyZXR1cm4gaGxvY2stXFx1MDAzZXNlcV9jb3VudDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIH4wO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBDaGVjayB3aGV0aGVyIHdlIGZvbGxvdyB0aGUgaXJxLWZsYWdzIHN0YXRlIHByZWNpc2VseTpcXG4gICovXFxuQEAgLTU4NjYsNyArNTg4OCw4IEBAIHZvaWQgbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLFxcbiBcXG4gXFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XFxuIFxcdF9fbG9ja19hY3F1aXJlKGxvY2ssIHN1YmNsYXNzLCB0cnlsb2NrLCByZWFkLCBjaGVjayxcXG4tXFx0XFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAwKTtcXG4rXFx0XFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAwLFxcbitcXHRcXHQgICAgICAgKytjdXJyZW50LVxcdTAwM2Vsb2NrZGVwX3NlcSk7XFxuIFxcdGxvY2tkZXBfcmVjdXJzaW9uX2ZpbmlzaCgpO1xcbiBcXHRyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpO1xcbiB9XFxuQEAgLTU5MTQsNyArNTkzNyw4IEBAIHZvaWQgbG9ja19zeW5jKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgc3ViY2xhc3MsIGludCByZWFkLFxcbiBcXG4gXFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XFxuIFxcdF9fbG9ja19hY3F1aXJlKGxvY2ssIHN1YmNsYXNzLCAwLCByZWFkLCBjaGVjayxcXG4tXFx0XFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAxKTtcXG4rXFx0XFx0ICAgICAgIGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpLCBuZXN0X2xvY2ssIGlwLCAwLCAwLCAxLFxcbitcXHRcXHQgICAgICAgKytjdXJyZW50LVxcdTAwM2Vsb2NrZGVwX3NlcSk7XFxuIFxcdGNoZWNrX2NoYWluX2tleShjdXJyZW50KTtcXG4gXFx0bG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7XFxuIFxcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuQEAgLTYwMDAsNiArNjAyNCwyNiBAQCB2b2lkIGxvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llIGNvb2tpZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChsb2NrX3VucGluX2xvY2spO1xcbiBcXG4rdTMyIGxvY2tfc2VxdWVuY2Uoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHUzMiBzZXEgPSB+MDtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghbG9ja2RlcF9lbmFibGVkKCkpKVxcbitcXHRcXHRyZXR1cm4gc2VxO1xcbitcXG4rXFx0cmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTtcXG4rXFx0Y2hlY2tfZmxhZ3MoZmxhZ3MpO1xcbitcXG4rXFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XFxuK1xcdHNlcSA9IF9fbG9ja19zZXF1ZW5jZShsb2NrKTtcXG4rXFx0bG9ja2RlcF9yZWN1cnNpb25fZmluaXNoKCk7XFxuK1xcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XFxuK1xcbitcXHRyZXR1cm4gc2VxO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGxvY2tfc2VxdWVuY2UpO1xcbitcXG4gI2lmZGVmIENPTkZJR19MT0NLX1NUQVRcXG4gc3RhdGljIHZvaWQgcHJpbnRfbG9ja19jb250ZW50aW9uX2J1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jayxcXG5kaWZmIC0tZ2l0IGEvbGliL21hcGxlX3RyZWUuYyBiL2xpYi9tYXBsZV90cmVlLmNcXG5pbmRleCBlNTI4NzY0MzViNzdmMC4uMDZjYzA1Yjc5ZmJkYzggMTAwNjQ0XFxuLS0tIGEvbGliL21hcGxlX3RyZWUuY1xcbisrKyBiL2xpYi9tYXBsZV90cmVlLmNcXG5AQCAtMjYxLDYgKzI2MSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFzX2lzX3VuZGVyZmxvdyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcXG4gXFx0cmV0dXJuIG1hcy1cXHUwMDNlc3RhdHVzID09IG1hX3VuZGVyZmxvdztcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIG1hc19tYWtlX3dhbGthYmxlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbit7XFxuK1xcdGlmICghbWFzX2lzX2FjdGl2ZShtYXMpIFxcdTAwMjZcXHUwMDI2ICFtYXNfaXNfc3RhcnQobWFzKSlcXG4rXFx0XFx0bWFzLVxcdTAwM2VzdGF0dXMgPSBtYV9zdGFydDtcXG4rfVxcbitcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgbWFwbGVfbm9kZSAqbXRlX3RvX25vZGUoXFxuIFxcdFxcdGNvbnN0IHN0cnVjdCBtYXBsZV9lbm9kZSAqZW50cnkpXFxuIHtcXG5AQCAtNDU1LDQ2ICs0NjEsNiBAQCBlbnVtIG1hcGxlX3R5cGUgbWFzX3BhcmVudF90eXBlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKmVub2RlKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tLypcXG4tICogbWFzX3NldF9wYXJlbnQoKSAtIFNldCB0aGUgcGFyZW50IG5vZGUgYW5kIGVuY29kZSB0aGUgc2xvdFxcbi0gKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGVcXG4tICogQGVub2RlOiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlLlxcbi0gKiBAcGFyZW50OiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlIHRoYXQgaXMgdGhlIHBhcmVudCBvZiBAZW5vZGUuXFxuLSAqIEBzbG90OiBUaGUgc2xvdCB0aGF0IEBlbm9kZSByZXNpZGVzIGluIEBwYXJlbnQuXFxuLSAqXFxuLSAqIFNsb3QgbnVtYmVyIGlzIGVuY29kZWQgaW4gdGhlIGVub2RlLVxcdTAwM2VwYXJlbnQgYml0IDMtNiBvciAyLTYsIGRlcGVuZGluZyBvbiB0aGVcXG4tICogcGFyZW50IHR5cGUuXFxuLSAqL1xcbi1zdGF0aWMgaW5saW5lXFxuLXZvaWQgbWFzX3NldF9wYXJlbnQoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqZW5vZGUsXFxuLVxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnBhcmVudCwgdW5zaWduZWQgY2hhciBzbG90KVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50O1xcbi1cXHR1bnNpZ25lZCBsb25nIHNoaWZ0O1xcbi1cXHR1bnNpZ25lZCBsb25nIHR5cGU7XFxuLVxcdGVudW0gbWFwbGVfdHlwZSBwX3R5cGUgPSBtdGVfbm9kZV90eXBlKHBhcmVudCk7XFxuLVxcbi1cXHRNQVNfQlVHX09OKG1hcywgcF90eXBlID09IG1hcGxlX2RlbnNlKTtcXG4tXFx0TUFTX0JVR19PTihtYXMsIHBfdHlwZSA9PSBtYXBsZV9sZWFmXzY0KTtcXG4tXFxuLVxcdHN3aXRjaCAocF90eXBlKSB7XFxuLVxcdGNhc2UgbWFwbGVfcmFuZ2VfNjQ6XFxuLVxcdGNhc2UgbWFwbGVfYXJhbmdlXzY0Olxcbi1cXHRcXHRzaGlmdCA9IE1BUExFX1BBUkVOVF9TTE9UX1NISUZUO1xcbi1cXHRcXHR0eXBlID0gTUFQTEVfUEFSRU5UX1JBTkdFNjQ7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRjYXNlIG1hcGxlX2RlbnNlOlxcbi1cXHRjYXNlIG1hcGxlX2xlYWZfNjQ6XFxuLVxcdFxcdHNoaWZ0ID0gdHlwZSA9IDA7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuLVxcbi1cXHR2YWwgXFx1MDAyNj0gfk1BUExFX05PREVfTUFTSzsgLyogQ2xlYXIgYWxsIG5vZGUgbWV0YWRhdGEgaW4gcGFyZW50ICovXFxuLVxcdHZhbCB8PSAoc2xvdCBcXHUwMDNjXFx1MDAzYyBzaGlmdCkgfCB0eXBlO1xcbi1cXHRtdGVfdG9fbm9kZShlbm9kZSktXFx1MDAzZXBhcmVudCA9IG1hX3BhcmVudF9wdHIodmFsKTtcXG4tfVxcbi1cXG4gLypcXG4gICogbXRlX3BhcmVudF9zbG90KCkgLSBnZXQgdGhlIHBhcmVudCBzbG90IG9mIEBlbm9kZS5cXG4gICogQGVub2RlOiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlLlxcbkBAIC04NzYsNiArODQyLDQyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYV9zZXRfbWV0YV9nYXAoc3RydWN0IG1hcGxlX25vZGUgKm1uLCBlbnVtIG1hcGxlX3R5cGUgbXQsXFxuIFxcdG1ldGEtXFx1MDAzZWdhcCA9IG9mZnNldDtcXG4gfVxcbiBcXG4rLypcXG4rICogbWFzX3NldF9wYXJlbnRfc2xvdHMoKSAtIEJ1bGsgb3BlcmF0aW9uIHRvIHNldCBtYW55IHNsb3QgcGFyZW50IHBvaW50ZXJzXFxuKyAqIEBtYXM6IFRoZSBtYXBsZSBzdGF0ZVxcbisgKiBAcGFyZW50OiBUaGUgZW5jb2RlZCBtYXBsZSBub2RlIHRoYXQgaXMgdGhlIHBhcmVudCBvZiBAZW5vZGUuXFxuKyAqIEBzbG90OiBUaGUgc2xvdCB0aGF0IG9mIHRoZSBAZW5vZGUuXFxuKyAqIEBzdGFydF9zbG90OiBUaGUgb2Zmc2V0IGludG8gQHNsb3RcXG4rICogQGNvdW50OiBUaGUgbnVtYmVyIG9mIHNsb3RzIHRvIHNldCAoZWc6IGV4Y2x1c2l2ZSlcXG4rICovXFxuK3N0YXRpYyBpbmxpbmVcXG4rdm9pZCBtYXNfc2V0X3BhcmVudF9zbG90cyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICpwYXJlbnQsXFxuK1xcdHZvaWQgX19yY3UgKipzbG90cywgdW5zaWduZWQgY2hhciBzdGFydF9zbG90LCB1bnNpZ25lZCBjaGFyIGNvdW50KVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdmFsO1xcbitcXHR1bnNpZ25lZCBsb25nIHNoaWZ0O1xcbitcXHR1bnNpZ25lZCBsb25nIHR5cGU7XFxuK1xcdGVudW0gbWFwbGVfdHlwZSBwX3R5cGUgPSBtdGVfbm9kZV90eXBlKHBhcmVudCk7XFxuK1xcdHVuc2lnbmVkIGNoYXIgaTtcXG4rXFxuK1xcdE1BU19CVUdfT04obWFzLCBwX3R5cGUgIT0gbWFwbGVfcmFuZ2VfNjQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0cF90eXBlICE9IG1hcGxlX2FyYW5nZV82NCk7XFxuK1xcbitcXHRzaGlmdCA9IE1BUExFX1BBUkVOVF9TTE9UX1NISUZUO1xcbitcXHR0eXBlID0gTUFQTEVfUEFSRU5UX1JBTkdFNjQ7XFxuK1xcbitcXHR2YWwgPSAodW5zaWduZWQgbG9uZylwYXJlbnQ7XFxuK1xcdHZhbCBcXHUwMDI2PSB+TUFQTEVfTk9ERV9NQVNLO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwdmFsID0gdmFsIHwgKChzdGFydF9zbG90ICsgaSkgXFx1MDAzY1xcdTAwM2Mgc2hpZnQpIHwgdHlwZTtcXG4rXFx0XFx0c3RydWN0IG1hcGxlX2Vub2RlICpjaGlsZDtcXG4rXFxuK1xcdFxcdGNoaWxkID0gbXRfc2xvdF9sb2NrZWQobWFzLVxcdTAwM2V0cmVlLCBzbG90cywgaSk7XFxuK1xcdFxcdG10ZV90b19ub2RlKGNoaWxkKS1cXHUwMDNlcGFyZW50ID0gbWFfcGFyZW50X3B0cihwdmFsKTtcXG4rXFx0fVxcbit9XFxuK1xcbiAvKlxcbiAgKiBtYXRfYWRkKCkgLSBBZGQgYSBAZGVhZF9lbm9kZSB0byB0aGUgbWFfdG9waWFyeSBvZiBhIGxpc3Qgb2YgZGVhZCBub2Rlcy5cXG4gICogQG1hdDogdGhlIG1hX3RvcGlhcnksIGEgbGlua2VkIGxpc3Qgb2YgZGVhZCBub2Rlcy5cXG5AQCAtMTE1Myw2ICsxMTU1LDczIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfZnJlZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICp1c2VkKVxcbiBcXHRtYV9mcmVlX3JjdShtdGVfdG9fbm9kZSh1c2VkKSk7XFxuIH1cXG4gXFxuK1xcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4rc3RhdGljIHN0cnVjdCBsb2NrZGVwX21hcCAqbWFzX2xvY2tkZXBfbWFwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbit7XFxuK1xcdHN0cnVjdCBtYXBsZV90cmVlICptdCA9IG1hcy1cXHUwMDNldHJlZTtcXG4rXFxuK1xcdGlmIChtdF9leHRlcm5hbF9sb2NrKG10KSlcXG4rXFx0XFx0cmV0dXJuIG10LVxcdTAwM2VtYV9leHRlcm5hbF9sb2NrO1xcbitcXG4rXFx0cmV0dXJuIFxcdTAwMjYobXQtXFx1MDAzZW1hX2xvY2spLmRlcF9tYXA7XFxuK31cXG4rXFxuKyNlbmRpZlxcbitcXG4rc3RhdGljIHZvaWQgbWFzX2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19MT0NLREVQXFxuK1xcdHN0cnVjdCBsb2NrZGVwX21hcCAqbWFwO1xcbitcXHRpZiAoIW1hc19pc19hY3RpdmUobWFzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rI2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxcbitcXHRpZiAoIW10X2xvY2tlZChtYXMtXFx1MDAzZXRyZWUpKSB7XFxuK1xcdFxcdGlmIChtdF9pbl9yY3UobWFzLVxcdTAwM2V0cmVlKSlcXG4rXFx0XFx0XFx0V0FSTl9PTl9PTkNFKHBvbGxfc3RhdGVfc3luY2hyb25pemVfcmN1KG1hcy1cXHUwMDNlcmN1X2dwKSk7XFxuK1xcdH1cXG4rI2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xcbitcXG4rXFx0bWFwID0gbWFzX2xvY2tkZXBfbWFwKG1hcyk7XFxuK1xcdGlmIChtYXAgXFx1MDAyNlxcdTAwMjYgbG9ja19pc19oZWxkKG1hcCkpXFxuK1xcdFxcdFdBUk5fT05fT05DRShtYXMtXFx1MDAzZWxkX3NlcSAhPSBsb2NrX3NlcXVlbmNlKG1hcCkpO1xcbisjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi9cXG4rXFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1hc19pbml0X2xvY2tfY2hlY2soc3RydWN0IG1hX3N0YXRlICptYXMpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19MT0NLREVQXFxuK1xcdHN0cnVjdCBsb2NrZGVwX21hcCAqbWFwO1xcbisjaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXFxuK1xcdGlmICghbXRfbG9ja2VkKG1hcy1cXHUwMDNldHJlZSkpIHtcXG4rXFx0XFx0aWYgKG10X2luX3JjdShtYXMtXFx1MDAzZXRyZWUpKVxcbitcXHRcXHRcXHRtYXMtXFx1MDAzZXJjdV9ncCA9IGdldF9zdGF0ZV9zeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuKyNlbmRpZiAvKiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QgKi9cXG4rXFxuK1xcdG1hcCA9IG1hc19sb2NrZGVwX21hcChtYXMpO1xcbitcXHRpZiAobWFwIFxcdTAwMjZcXHUwMDI2IGxvY2tfaXNfaGVsZChtYXApKVxcbitcXHRcXHRtYXMtXFx1MDAzZWxkX3NlcSA9IGxvY2tfc2VxdWVuY2UobWFzX2xvY2tkZXBfbWFwKG1hcykpO1xcbisjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi9cXG4rXFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbit7XFxuKyNpZmRlZiBDT05GSUdfTE9DS0RFUFxcbisjaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXFxuK1xcdGlmIChtYXNfaXNfc3RhcnQobWFzKSB8fCBtYXNfaXNfcGF1c2VkKG1hcykpIHtcXG4rXFx0XFx0bWFzX2luaXRfbG9ja19jaGVjayhtYXMpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rI2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xcbitcXHRtYXNfbG9ja19jaGVjayhtYXMpO1xcbisjZW5kaWYgLyogQ09ORklHX0xPQ0tERVAgKi9cXG4rfVxcbitcXG4gLypcXG4gICogbWFzX3N0YXJ0KCkgLSBTZXRzIHVwIG1hcGxlIHN0YXRlIGZvciBvcGVyYXRpb25zLlxcbiAgKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGUuXFxuQEAgLTExNzEsNiArMTI0MCw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1hcGxlX2Vub2RlICptYXNfc3RhcnQoc3RydWN0IG1hX3N0YXRlICptYXMpXFxuIFxcdGlmIChsaWtlbHkobWFzX2lzX3N0YXJ0KG1hcykpKSB7XFxuIFxcdFxcdHN0cnVjdCBtYXBsZV9lbm9kZSAqcm9vdDtcXG4gXFxuK1xcdFxcdG1hc19pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0XFx0bWFzLVxcdTAwM2VtaW4gPSAwO1xcbiBcXHRcXHRtYXMtXFx1MDAzZW1heCA9IFVMT05HX01BWDtcXG4gXFxuQEAgLTE1MDEsMTQgKzE1NzEsMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19wYXJlbnRfZ2FwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBjaGFyIG9mZnNldCxcXG4gXFx0Z290byBhc2NlbmQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBtYXNfdXBkYXRlX2dhcF9rbm93bihzdHJ1Y3QgbWFfc3RhdGUgKm1hcyxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBnYXApXFxuK3tcXG4rXFx0dW5zaWduZWQgY2hhciBwc2xvdDtcXG4rXFx0dW5zaWduZWQgbG9uZyBwX2dhcDtcXG4rXFxuK1xcdHBzbG90ID0gbXRlX3BhcmVudF9zbG90KG1hcy1cXHUwMDNlbm9kZSk7XFxuK1xcdHBfZ2FwID0gbWFfZ2FwcyhtdGVfcGFyZW50KG1hcy1cXHUwMDNlbm9kZSksXFxuK1xcdFxcdFxcdG1hc19wYXJlbnRfdHlwZShtYXMsIG1hcy1cXHUwMDNlbm9kZSkpW3BzbG90XTtcXG4rXFxuK1xcdGlmIChwX2dhcCAhPSBnYXApXFxuK1xcdFxcdG1hc19wYXJlbnRfZ2FwKG1hcywgcHNsb3QsIGdhcCk7XFxuK31cXG4rXFxuIC8qXFxuICAqIG1hc191cGRhdGVfZ2FwKCkgLSBVcGRhdGUgYSBub2RlcyBnYXBzIGFuZCBwcm9wYWdhdGUgdXAgaWYgbmVjZXNzYXJ5LlxcbiAgKiBAbWFzOiB0aGUgbWFwbGUgc3RhdGUuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3VwZGF0ZV9nYXAoc3RydWN0IG1hX3N0YXRlICptYXMpXFxuIHtcXG4tXFx0dW5zaWduZWQgY2hhciBwc2xvdDtcXG4tXFx0dW5zaWduZWQgbG9uZyBwX2dhcDtcXG4gXFx0dW5zaWduZWQgbG9uZyBtYXhfZ2FwO1xcbiBcXG4gXFx0aWYgKCFtdF9pc19hbGxvYyhtYXMtXFx1MDAzZXRyZWUpKVxcbkBAIC0xNTE4LDEzICsxNjAwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc191cGRhdGVfZ2FwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRtYXhfZ2FwID0gbWFzX21heF9nYXAobWFzKTtcXG4tXFxuLVxcdHBzbG90ID0gbXRlX3BhcmVudF9zbG90KG1hcy1cXHUwMDNlbm9kZSk7XFxuLVxcdHBfZ2FwID0gbWFfZ2FwcyhtdGVfcGFyZW50KG1hcy1cXHUwMDNlbm9kZSksXFxuLVxcdFxcdFxcdG1hc19wYXJlbnRfdHlwZShtYXMsIG1hcy1cXHUwMDNlbm9kZSkpW3BzbG90XTtcXG4tXFxuLVxcdGlmIChwX2dhcCAhPSBtYXhfZ2FwKVxcbi1cXHRcXHRtYXNfcGFyZW50X2dhcChtYXMsIHBzbG90LCBtYXhfZ2FwKTtcXG4rXFx0bWFzX3VwZGF0ZV9nYXBfa25vd24obWFzLCBtYXhfZ2FwKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMTU0MCwxNCArMTYxNiwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX2Fkb3B0X2NoaWxkcmVuKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLFxcbiBcXHRzdHJ1Y3QgbWFwbGVfbm9kZSAqbm9kZSA9IG10ZV90b19ub2RlKHBhcmVudCk7XFxuIFxcdHZvaWQgX19yY3UgKipzbG90cyA9IG1hX3Nsb3RzKG5vZGUsIHR5cGUpO1xcbiBcXHR1bnNpZ25lZCBsb25nICpwaXZvdHMgPSBtYV9waXZvdHMobm9kZSwgdHlwZSk7XFxuLVxcdHN0cnVjdCBtYXBsZV9lbm9kZSAqY2hpbGQ7XFxuLVxcdHVuc2lnbmVkIGNoYXIgb2Zmc2V0O1xcbitcXHR1bnNpZ25lZCBjaGFyIGVuZDtcXG4gXFxuLVxcdG9mZnNldCA9IG1hX2RhdGFfZW5kKG5vZGUsIHR5cGUsIHBpdm90cywgbWFzLVxcdTAwM2VtYXgpO1xcbi1cXHRkbyB7XFxuLVxcdFxcdGNoaWxkID0gbWFzX3Nsb3RfbG9ja2VkKG1hcywgc2xvdHMsIG9mZnNldCk7XFxuLVxcdFxcdG1hc19zZXRfcGFyZW50KG1hcywgY2hpbGQsIHBhcmVudCwgb2Zmc2V0KTtcXG4tXFx0fSB3aGlsZSAob2Zmc2V0LS0pO1xcbitcXHRlbmQgPSBtYV9kYXRhX2VuZChub2RlLCB0eXBlLCBwaXZvdHMsIG1hcy1cXHUwMDNlbWF4KTtcXG4rXFx0bWFzX3NldF9wYXJlbnRfc2xvdHMobWFzLCBwYXJlbnQsIHNsb3RzLCAwLCBlbmQgKyAxKTtcXG4gfVxcbiBcXG4gLypcXG5AQCAtMTkyOSwxNSArMjAwMSwxMCBAQCB1bnNpZ25lZCBsb25nIG5vZGVfY29weShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX25vZGUgKnNyYyxcXG4gXFx0c19zbG90cyA9IG1hX3Nsb3RzKHNyYywgc19tdCkgKyBzdGFydDtcXG4gXFx0c19waXZvdHMgPSBtYV9waXZvdHMoc3JjLCBzX210KSArIHN0YXJ0O1xcbiBcXHRtZW1jcHkoZF9zbG90cywgc19zbG90cywgc2l6ZSAqIHNpemVvZih2b2lkIF9fcmN1ICopKTtcXG4tXFx0aWYgKCFtYV9pc19sZWFmKGRfbXQpIFxcdTAwMjZcXHUwMDI2IHNfbXQgPT0gbWFwbGVfY29weSkge1xcbi1cXHRcXHRzdHJ1Y3QgbWFwbGVfZW5vZGUgKmVkc3QgPSBtdF9ta19ub2RlKGRzdCwgZF9tdCk7XFxuLVxcbiBcXG4tXFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBzaXplOyBpKyspXFxuLVxcdFxcdFxcdG1hc19zZXRfcGFyZW50KG1hcyxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIG10X3Nsb3RfbG9ja2VkKG1hcy1cXHUwMDNldHJlZSwgZF9zbG90cywgaSksXFxuLVxcdFxcdFxcdFxcdCAgICAgICBlZHN0LCBkX3N0YXJ0ICsgaSk7XFxuLVxcdH1cXG4rXFx0aWYgKCFtYV9pc19sZWFmKGRfbXQpIFxcdTAwMjZcXHUwMDI2IHNfbXQgPT0gbWFwbGVfY29weSlcXG4rXFx0XFx0bWFzX3NldF9wYXJlbnRfc2xvdHMobWFzLCBtdF9ta19ub2RlKGRzdCwgZF9tdCksXFxuK1xcdFxcdFxcdFxcdCAgICAgZF9zbG90cywgZF9zdGFydCwgc2l6ZSk7XFxuIFxcbiBcXHRkX2dhcHMgPSBtYV9nYXBzKGRzdCwgZF9tdCk7XFxuIFxcdGlmIChkX2dhcHMpIHtcXG5AQCAtMjA4MSw4ICsyMTQ4LDggQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193bWJfcmVwbGFjZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2NvcHkgKmNwKVxcbiBcXHRtYXMtXFx1MDAzZW5vZGUgPSBtdF9zbG90X2xvY2tlZChtYXMtXFx1MDAzZXRyZWUsIGNwLVxcdTAwM2VzbG90LCAwKTtcXG4gXFx0LyogSW5zZXJ0IHRoZSBuZXcgZGF0YSBpbiB0aGUgdHJlZSAqL1xcbiBcXHRtYXNfdG9waWFyeV9yZXBsYWNlKG1hcywgb2xkX2Vub2RlLCBjcC1cXHUwMDNlaGVpZ2h0KTtcXG4tXFx0aWYgKCFtdGVfaXNfbGVhZihtYXMtXFx1MDAzZW5vZGUpKVxcbi1cXHRcXHRtYXNfdXBkYXRlX2dhcChtYXMpO1xcbitcXHRpZiAobXRfaXNfYWxsb2MobWFzLVxcdTAwM2V0cmVlKSBcXHUwMDI2XFx1MDAyNiAhbXRlX2lzX3Jvb3QobWFzLVxcdTAwM2Vub2RlKSlcXG4rXFx0XFx0bWFzX3VwZGF0ZV9nYXBfa25vd24obWFzLCBjcC1cXHUwMDNlZ2FwWzBdKTtcXG4gXFxuIFxcdG10cmVlX3JhbmdlX3dhbGsobWFzKTtcXG4gfVxcbkBAIC0yOTI4LDEzICsyOTk1LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19leHRlbmRfc3Bhbm5pbmdfbnVsbChzdHJ1Y3QgbWFfd3Jfc3RhdGUgKmxfd3JfbWFzLFxcbiBcXHRcXHRpZiAocl9tYXMtXFx1MDAzZWxhc3QgXFx1MDAzYyByX3dyX21hcy1cXHUwMDNlcl9tYXgpXFxuIFxcdFxcdFxcdHJfbWFzLVxcdTAwM2VsYXN0ID0gcl93cl9tYXMtXFx1MDAzZXJfbWF4O1xcbiBcXHRcXHRyX21hcy1cXHUwMDNlb2Zmc2V0Kys7XFxuLVxcdH0gZWxzZSBpZiAoKHJfbWFzLVxcdTAwM2VsYXN0ID09IHJfd3JfbWFzLVxcdTAwM2VyX21heCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIChyX21hcy1cXHUwMDNlbGFzdCBcXHUwMDNjIHJfbWFzLVxcdTAwM2VtYXgpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhbWFzX3Nsb3RfbG9ja2VkKHJfbWFzLCByX3dyX21hcy1cXHUwMDNlc2xvdHMsIHJfbWFzLVxcdTAwM2VvZmZzZXQgKyAxKSkge1xcbi1cXHRcXHRyX21hcy1cXHUwMDNlbGFzdCA9IG1hc19zYWZlX3Bpdm90KHJfbWFzLCByX3dyX21hcy1cXHUwMDNlcGl2b3RzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHJfd3JfbWFzLVxcdTAwM2V0eXBlLCByX21hcy1cXHUwMDNlb2Zmc2V0ICsgMSk7XFxuLVxcdFxcdHJfbWFzLVxcdTAwM2VvZmZzZXQrKztcXG4tXFx0XFx0cl93cl9tYXMtXFx1MDAzZXJfbWF4ID0gcl9tYXMtXFx1MDAzZWxhc3Q7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMzEyNSw3ICszMTg1LDcgQEAgc3RhdGljIHZvaWQgbWFzX3dyX3NwYW5uaW5nX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXFxuIHtcXG4gXFx0dW5zaWduZWQgY2hhciBkc3Rfb2Zmc2V0LCBvZmZzZXRfZW5kO1xcbi1cXHR1bnNpZ25lZCBjaGFyIGNvcHlfc2l6ZSwgbm9kZV9waXZvdHM7XFxuK1xcdHVuc2lnbmVkIGNoYXIgY29weV9zaXplLCBub2RlX3Bpdm90cywgbm9kZV9zbG90cztcXG4gXFx0c3RydWN0IG1hcGxlX25vZGUgcmV1c2UsICpuZXdub2RlO1xcbiBcXHR1bnNpZ25lZCBsb25nICpkc3RfcGl2b3RzO1xcbiBcXHR2b2lkIF9fcmN1ICoqZHN0X3Nsb3RzO1xcbkBAIC0zMTM4LDYgKzMxOTgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXFxuIFxcdGluX3JjdSA9IG10X2luX3JjdShtYXMtXFx1MDAzZXRyZWUpO1xcbiBcXHRvZmZzZXRfZW5kID0gd3JfbWFzLVxcdTAwM2VvZmZzZXRfZW5kO1xcbiBcXHRub2RlX3Bpdm90cyA9IG10X3Bpdm90c1t3cl9tYXMtXFx1MDAzZXR5cGVdO1xcbitcXHRub2RlX3Nsb3RzID0gbXRfc2xvdHNbd3JfbWFzLVxcdTAwM2V0eXBlXTtcXG4gXFx0LyogQXNzdW1lIGxhc3QgYWRkcyBhbiBlbnRyeSAqL1xcbiBcXHRuZXdfZW5kID0gbWFzLVxcdTAwM2VlbmQgKyAxIC0gb2Zmc2V0X2VuZCArIG1hcy1cXHUwMDNlb2Zmc2V0O1xcbiBcXHRpZiAobWFzLVxcdTAwM2VsYXN0ID09IHdyX21hcy1cXHUwMDNlZW5kX3Bpdikge1xcbkBAIC0zMTQ5LDcgKzMyMTAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXFxuIFxcdGlmIChpbl9yY3UpIHtcXG4gXFx0XFx0bmV3bm9kZSA9IG1hc19wb3Bfbm9kZShtYXMpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRtZW1zZXQoXFx1MDAyNnJldXNlLCAwLCBzaXplb2Yoc3RydWN0IG1hcGxlX25vZGUpKTtcXG4gXFx0XFx0bmV3bm9kZSA9IFxcdTAwMjZyZXVzZTtcXG4gXFx0fVxcbiBcXG5AQCAtMzE5Myw3ICszMjUzLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcXG4gXFx0XFx0ZHN0X3Bpdm90c1tuZXdfZW5kXSA9IG1hcy1cXHUwMDNlbWF4O1xcbiBcXG4gZG9uZTpcXG4tXFx0bWFzX2xlYWZfc2V0X21ldGEobmV3bm9kZSwgbWFwbGVfbGVhZl82NCwgbmV3X2VuZCk7XFxuK1xcdGlmICghaW5fcmN1IFxcdTAwMjZcXHUwMDI2IG5ld19lbmQgKyAyIFxcdTAwM2Mgbm9kZV9zbG90cykge1xcbitcXHRcXHR1bnNpZ25lZCBjaGFyIGNsZWFyX2Zyb20gPSBuZXdfZW5kICsgMTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIE5vdGUgdGhhdCB0aGUgbGFzdCBzbG90IGlzIG5ldmVyIGNsZWFyZWQsIHNpbmNlIHRoZSBtZXRhZGF0YVxcbitcXHRcXHQgKiB3aWxsIGJlIHN0b3JlZCB0aGVyZSBvciBpdCBoYXMgYSB2YWx1ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdG1lbXNldChkc3Rfc2xvdHMgKyBjbGVhcl9mcm9tLCAwLFxcbitcXHRcXHQgICAgICAgc2l6ZW9mKHZvaWQgX19yY3UgKikgKiAobm9kZV9zbG90cyAtIGNsZWFyX2Zyb20pKTtcXG4rXFx0XFx0aWYgKGNsZWFyX2Zyb20gXFx1MDAzYyBub2RlX3Bpdm90cylcXG4rXFx0XFx0XFx0bWVtc2V0KGRzdF9waXZvdHMgKyBjbGVhcl9mcm9tLCAwLFxcbitcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogKG5vZGVfcGl2b3RzIC0gY2xlYXJfZnJvbSkpO1xcbitcXHR9XFxuK1xcbitcXHRtYXNfbGVhZl9zZXRfbWV0YShuZXdub2RlLCB3cl9tYXMtXFx1MDAzZXR5cGUsIG5ld19lbmQpO1xcbiBcXHRpZiAoaW5fcmN1KSB7XFxuIFxcdFxcdHN0cnVjdCBtYXBsZV9lbm9kZSAqb2xkX2Vub2RlID0gbWFzLVxcdTAwM2Vub2RlO1xcbiBcXG5AQCAtMzIxOCw3ICszMjkyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9zbG90X3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxcbiBcXHR2b2lkIF9fcmN1ICoqc2xvdHMgPSB3cl9tYXMtXFx1MDAzZXNsb3RzO1xcbiBcXHRib29sIGdhcCA9IGZhbHNlO1xcbiBcXG4tXFx0Z2FwIHw9ICFtdF9zbG90X2xvY2tlZChtYXMtXFx1MDAzZXRyZWUsIHNsb3RzLCBvZmZzZXQpO1xcbitcXHRnYXAgfD0gIXdyX21hcy1cXHUwMDNlY29udGVudDtcXG4gXFx0Z2FwIHw9ICFtdF9zbG90X2xvY2tlZChtYXMtXFx1MDAzZXRyZWUsIHNsb3RzLCBvZmZzZXQgKyAxKTtcXG4gXFxuIFxcdGlmICh3cl9tYXMtXFx1MDAzZW9mZnNldF9lbmQgLSBvZmZzZXQgPT0gMSkge1xcbkBAIC0zNjYxLDYgKzM3MzUsOSBAQCBzdGF0aWMgaW5saW5lIGVudW0gc3RvcmVfdHlwZSBtYXNfd3Jfc3RvcmVfdHlwZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWFfc3RhdGUgKm1hcyA9IHdyX21hcy1cXHUwMDNlbWFzO1xcbiBcXHR1bnNpZ25lZCBjaGFyIG5ld19lbmQ7XFxuK1xcdGJvb2wgYXBwZW5kaW5nO1xcbitcXHRib29sIG9uZV9zbG90O1xcbitcXHRib29sIGluX3JjdTtcXG4gXFxuIFxcdGlmICh1bmxpa2VseShtYXNfaXNfbm9uZShtYXMpIHx8IG1hc19pc19wdHIobWFzKSkpXFxuIFxcdFxcdHJldHVybiB3cl9zdG9yZV9yb290O1xcbkBAIC0zNjgwLDIxICszNzU3LDMwIEBAIHN0YXRpYyBpbmxpbmUgZW51bSBzdG9yZV90eXBlIG1hc193cl9zdG9yZV90eXBlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxcbiBcXHRcXHRyZXR1cm4gd3JfbmV3X3Jvb3Q7XFxuIFxcbiBcXHRuZXdfZW5kID0gbWFzX3dyX25ld19lbmQod3JfbWFzKTtcXG4rXFx0aW5fcmN1ID0gbXRfaW5fcmN1KG1hcy1cXHUwMDNldHJlZSk7XFxuK1xcdGFwcGVuZGluZyA9IG1hcy1cXHUwMDNlb2Zmc2V0ID09IG1hcy1cXHUwMDNlZW5kO1xcbitcXHRvbmVfc2xvdCA9IHdyX21hcy1cXHUwMDNlb2Zmc2V0X2VuZCAtIG1hcy1cXHUwMDNlb2Zmc2V0ID09IDE7XFxuK1xcbiBcXHQvKiBQb3RlbnRpYWwgc3Bhbm5pbmcgcmViYWxhbmNlIGNvbGxhcHNpbmcgYSBub2RlICovXFxuIFxcdGlmIChuZXdfZW5kIFxcdTAwM2MgbXRfbWluX3Nsb3RzW3dyX21hcy1cXHUwMDNldHlwZV0pIHtcXG4gXFx0XFx0aWYgKCFtdGVfaXNfcm9vdChtYXMtXFx1MDAzZW5vZGUpKVxcbiBcXHRcXHRcXHRyZXR1cm4gIHdyX3JlYmFsYW5jZTtcXG4rXFx0XFx0aWYgKCFpbl9yY3UpIHtcXG4rXFx0XFx0XFx0aWYgKGFwcGVuZGluZylcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHdyX2FwcGVuZDtcXG4rXFx0XFx0XFx0ZWxzZSBpZiAobWFzLVxcdTAwM2VlbmQgPT0gbmV3X2VuZCBcXHUwMDI2XFx1MDAyNiBvbmVfc2xvdClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHdyX3Nsb3Rfc3RvcmU7XFxuK1xcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIHdyX25vZGVfc3RvcmU7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChuZXdfZW5kIFxcdTAwM2U9IG10X3Nsb3RzW3dyX21hcy1cXHUwMDNldHlwZV0pXFxuIFxcdFxcdHJldHVybiB3cl9zcGxpdF9zdG9yZTtcXG4gXFxuLVxcdGlmICghbXRfaW5fcmN1KG1hcy1cXHUwMDNldHJlZSkgXFx1MDAyNlxcdTAwMjYgKG1hcy1cXHUwMDNlb2Zmc2V0ID09IG1hcy1cXHUwMDNlZW5kKSlcXG4rXFx0aWYgKCFpbl9yY3UgXFx1MDAyNlxcdTAwMjYgYXBwZW5kaW5nKVxcbiBcXHRcXHRyZXR1cm4gd3JfYXBwZW5kO1xcbiBcXG4tXFx0aWYgKChuZXdfZW5kID09IG1hcy1cXHUwMDNlZW5kKSBcXHUwMDI2XFx1MDAyNiAoIW10X2luX3JjdShtYXMtXFx1MDAzZXRyZWUpIHx8XFxuLVxcdFxcdCh3cl9tYXMtXFx1MDAzZW9mZnNldF9lbmQgLSBtYXMtXFx1MDAzZW9mZnNldCA9PSAxKSkpXFxuK1xcdGlmIChuZXdfZW5kID09IG1hcy1cXHUwMDNlZW5kIFxcdTAwMjZcXHUwMDI2ICghaW5fcmN1IHx8IG9uZV9zbG90KSlcXG4gXFx0XFx0cmV0dXJuIHdyX3Nsb3Rfc3RvcmU7XFxuIFxcbiBcXHRyZXR1cm4gd3Jfbm9kZV9zdG9yZTtcXG5AQCAtMzc5MywzNSArMzg3OSw0MCBAQCBpbnQgbWFzX2FsbG9jX2N5Y2xpYyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyAqc3RhcnRwLFxcbiBcXHRcXHR2b2lkICplbnRyeSwgdW5zaWduZWQgbG9uZyByYW5nZV9sbywgdW5zaWduZWQgbG9uZyByYW5nZV9oaSxcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyAqbmV4dCwgZ2ZwX3QgZ2ZwKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgbWluID0gcmFuZ2VfbG87XFxuLVxcdGludCByZXQgPSAwO1xcbi1cXG4tXFx0cmFuZ2VfbG8gPSBtYXgobWluLCAqbmV4dCk7XFxuLVxcdHJldCA9IG1hc19lbXB0eV9hcmVhKG1hcywgcmFuZ2VfbG8sIHJhbmdlX2hpLCAxKTtcXG4tXFx0aWYgKChtYXMtXFx1MDAzZXRyZWUtXFx1MDAzZW1hX2ZsYWdzIFxcdTAwMjYgTVRfRkxBR1NfQUxMT0NfV1JBUFBFRCkgXFx1MDAyNlxcdTAwMjYgcmV0ID09IDApIHtcXG4tXFx0XFx0bWFzLVxcdTAwM2V0cmVlLVxcdTAwM2VtYV9mbGFncyBcXHUwMDI2PSB+TVRfRkxBR1NfQUxMT0NfV1JBUFBFRDtcXG4tXFx0XFx0cmV0ID0gMTtcXG4tXFx0fVxcbi1cXHRpZiAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiByYW5nZV9sbyBcXHUwMDNlIG1pbikge1xcbi1cXHRcXHRtYXNfcmVzZXQobWFzKTtcXG4tXFx0XFx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCBtaW4sIHJhbmdlX2hpLCAxKTtcXG4tXFx0XFx0aWYgKHJldCA9PSAwKVxcbi1cXHRcXHRcXHRyZXQgPSAxO1xcbi1cXHR9XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRpbnQgcmV0O1xcbitcXHR1bnNpZ25lZCBsb25nIG1pbjtcXG4gXFxuK1xcdG1pbiA9IHJhbmdlX2xvO1xcbiBcXHRkbyB7XFxuK1xcdFxcdHJhbmdlX2xvID0gbWF4KG1pbiwgKm5leHQpO1xcbitcXHRcXHRyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIHJhbmdlX2xvLCByYW5nZV9oaSwgMSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IHJhbmdlX2xvIFxcdTAwM2UgbWluKSB7XFxuK1xcdFxcdFxcdG1hc19yZXNldChtYXMpO1xcbitcXHRcXHRcXHRyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIG1pbiwgcmFuZ2VfaGksIDEpO1xcbitcXHRcXHRcXHRpZiAocmV0ID09IDApXFxuK1xcdFxcdFxcdFxcdHJldCA9IDE7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0XFx0bWFzX2luc2VydChtYXMsIGVudHJ5KTtcXG4gXFx0fSB3aGlsZSAobWFzX25vbWVtKG1hcywgZ2ZwKSk7XFxuLVxcdGlmIChtYXNfaXNfZXJyKG1hcykpXFxuLVxcdFxcdHJldHVybiB4YV9lcnIobWFzLVxcdTAwM2Vub2RlKTtcXG4gXFxuK1xcdGlmIChtYXNfaXNfZXJyKG1hcykpIHtcXG4rXFx0XFx0cmV0ID0geGFfZXJyKG1hcy1cXHUwMDNlbm9kZSk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoKG1hcy1cXHUwMDNldHJlZS1cXHUwMDNlbWFfZmxhZ3MgXFx1MDAyNiBNVF9GTEFHU19BTExPQ19XUkFQUEVEKSBcXHUwMDI2XFx1MDAyNiByZXQgPT0gMCkge1xcbitcXHRcXHRtYXMtXFx1MDAzZXRyZWUtXFx1MDAzZW1hX2ZsYWdzIFxcdTAwMjY9IH5NVF9GTEFHU19BTExPQ19XUkFQUEVEO1xcbitcXHRcXHRyZXQgPSAxO1xcbitcXHR9XFxuIFxcdCpzdGFydHAgPSBtYXMtXFx1MDAzZWluZGV4O1xcbiBcXHQqbmV4dCA9ICpzdGFydHAgKyAxO1xcbiBcXHRpZiAoKm5leHQgPT0gMClcXG4gXFx0XFx0bWFzLVxcdTAwM2V0cmVlLVxcdTAwM2VtYV9mbGFncyB8PSBNVF9GTEFHU19BTExPQ19XUkFQUEVEO1xcbiBcXG4rb3V0OlxcbiBcXHRtYXNfZGVzdHJveShtYXMpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTQzNjAsOCArNDQ1MSw4IEBAIHZvaWQgKm1hc193YWxrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbiB7XFxuIFxcdHZvaWQgKmVudHJ5O1xcbiBcXG4tXFx0aWYgKCFtYXNfaXNfYWN0aXZlKG1hcykgXFx1MDAyNlxcdTAwMjYgIW1hc19pc19zdGFydChtYXMpKVxcbi1cXHRcXHRtYXMtXFx1MDAzZXN0YXR1cyA9IG1hX3N0YXJ0O1xcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbitcXHRtYXNfbWFrZV93YWxrYWJsZShtYXMpO1xcbiByZXRyeTpcXG4gXFx0ZW50cnkgPSBtYXNfc3RhdGVfd2FsayhtYXMpO1xcbiBcXHRpZiAobWFzX2lzX3N0YXJ0KG1hcykpIHtcXG5AQCAtNDgzMSw2ICs0OTIyLDcgQEAgdm9pZCAqbWFzX3N0b3JlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSlcXG4ge1xcbiBcXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0dHJhY2VfbWFfd3JpdGUoVFBfRkNULCBtYXMsIDAsIGVudHJ5KTtcXG4gI2lmZGVmIENPTkZJR19ERUJVR19NQVBMRV9UUkVFXFxuIFxcdGlmIChNQVNfV0FSTl9PTihtYXMsIG1hcy1cXHUwMDNlaW5kZXggXFx1MDAzZSBtYXMtXFx1MDAzZWxhc3QpKVxcbkBAIC00ODg5LDYgKzQ5ODEsNyBAQCBpbnQgbWFzX3N0b3JlX2dmcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnksIGdmcF90IGdmcClcXG4gXFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIGVudHJ5KTtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbitcXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xcbiByZXRyeTpcXG4gXFx0bWFzX3dyX3ByZWFsbG9jYXRlKFxcdTAwMjZ3cl9tYXMsIGVudHJ5KTtcXG4gXFx0aWYgKHVubGlrZWx5KG1hc19ub21lbShtYXMsIGdmcCkpKSB7XFxuQEAgLTQ5MTksNiArNTAxMiw3IEBAIHZvaWQgbWFzX3N0b3JlX3ByZWFsbG9jKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSlcXG4ge1xcbiBcXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xcbiBcXG4rXFx0bWFzX2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0aWYgKG1hcy1cXHUwMDNlc3RvcmVfdHlwZSA9PSB3cl9zdG9yZV9yb290KSB7XFxuIFxcdFxcdG1hc193cl9wcmVhbGxvY19zZXR1cChcXHUwMDI2d3JfbWFzKTtcXG4gXFx0XFx0Z290byBzdG9yZTtcXG5AQCAtNDk1MSw2ICs1MDQ1LDcgQEAgaW50IG1hc19wcmVhbGxvY2F0ZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnksIGdmcF90IGdmcClcXG4ge1xcbiBcXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0bWFzX3dyX3ByZWFsbG9jX3NldHVwKFxcdTAwMjZ3cl9tYXMpO1xcbiBcXHRtYXMtXFx1MDAzZXN0b3JlX3R5cGUgPSBtYXNfd3Jfc3RvcmVfdHlwZShcXHUwMDI2d3JfbWFzKTtcXG4gXFx0bWFzX3ByZWFsbG9jX2NhbGMoXFx1MDAyNndyX21hcywgZW50cnkpO1xcbkBAIC00OTk3LDYgKzUwOTIsNyBAQCBzdGF0aWMgdm9pZCBtYXNfbWF5X2FjdGl2YXRlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbiBcXHRcXHRtYXMtXFx1MDAzZXN0YXR1cyA9IG1hX3N0YXJ0O1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRtYXMtXFx1MDAzZXN0YXR1cyA9IG1hX2FjdGl2ZTtcXG4rXFx0XFx0bWFzX2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC01MDc0LDYgKzUxNzAsNyBAQCB2b2lkICptYXNfbmV4dChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpXFxuIHtcXG4gXFx0dm9pZCAqZW50cnkgPSBOVUxMO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0aWYgKG1hc19uZXh0X3NldHVwKG1hcywgbWF4LCBcXHUwMDI2ZW50cnkpKVxcbiBcXHRcXHRyZXR1cm4gZW50cnk7XFxuIFxcbkBAIC01MDk3LDYgKzUxOTQsNyBAQCB2b2lkICptYXNfbmV4dF9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpXFxuIHtcXG4gXFx0dm9pZCAqZW50cnkgPSBOVUxMO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0aWYgKG1hc19uZXh0X3NldHVwKG1hcywgbWF4LCBcXHUwMDI2ZW50cnkpKVxcbiBcXHRcXHRyZXR1cm4gZW50cnk7XFxuIFxcbkBAIC01MjA1LDYgKzUzMDMsNyBAQCB2b2lkICptYXNfcHJldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pXFxuIHtcXG4gXFx0dm9pZCAqZW50cnkgPSBOVUxMO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0aWYgKG1hc19wcmV2X3NldHVwKG1hcywgbWluLCBcXHUwMDI2ZW50cnkpKVxcbiBcXHRcXHRyZXR1cm4gZW50cnk7XFxuIFxcbkBAIC01MjI4LDYgKzUzMjcsNyBAQCB2b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pXFxuIHtcXG4gXFx0dm9pZCAqZW50cnkgPSBOVUxMO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0aWYgKG1hc19wcmV2X3NldHVwKG1hcywgbWluLCBcXHUwMDI2ZW50cnkpKVxcbiBcXHRcXHRyZXR1cm4gZW50cnk7XFxuIFxcbkBAIC01Mjc0LDYgKzUzNzQsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChtdF9wcmV2KTtcXG4gICovXFxuIHZvaWQgbWFzX3BhdXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbiB7XFxuK1xcdG1hc19sb2NrX2NoZWNrKG1hcyk7XFxuIFxcdG1hcy1cXHUwMDNlc3RhdHVzID0gbWFfcGF1c2U7XFxuIFxcdG1hcy1cXHUwMDNlbm9kZSA9IE5VTEw7XFxuIH1cXG5AQCAtNTM4Miw2ICs1NDgzLDcgQEAgdm9pZCAqbWFzX2ZpbmQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxcbiB7XFxuIFxcdHZvaWQgKmVudHJ5ID0gTlVMTDtcXG4gXFxuK1xcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XFxuIFxcdGlmIChtYXNfZmluZF9zZXR1cChtYXMsIG1heCwgXFx1MDAyNmVudHJ5KSlcXG4gXFx0XFx0cmV0dXJuIGVudHJ5O1xcbiBcXG5AQCAtNTQwOSw2ICs1NTExLDcgQEAgdm9pZCAqbWFzX2ZpbmRfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxcbiB7XFxuIFxcdHZvaWQgKmVudHJ5ID0gTlVMTDtcXG4gXFxuK1xcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XFxuIFxcdGlmIChtYXNfZmluZF9zZXR1cChtYXMsIG1heCwgXFx1MDAyNmVudHJ5KSlcXG4gXFx0XFx0cmV0dXJuIGVudHJ5O1xcbiBcXG5AQCAtNTQyOCw3ICs1NTMxLDYgQEAgRVhQT1JUX1NZTUJPTF9HUEwobWFzX2ZpbmRfcmFuZ2UpO1xcbiBzdGF0aWMgYm9vbCBtYXNfZmluZF9yZXZfc2V0dXAoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluLFxcbiBcXHRcXHR2b2lkICoqZW50cnkpXFxuIHtcXG4tXFxuIFxcdHN3aXRjaCAobWFzLVxcdTAwM2VzdGF0dXMpIHtcXG4gXFx0Y2FzZSBtYV9hY3RpdmU6XFxuIFxcdFxcdGdvdG8gYWN0aXZlO1xcbkBAIC01NTIxLDYgKzU2MjMsNyBAQCB2b2lkICptYXNfZmluZF9yZXYoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKVxcbiB7XFxuIFxcdHZvaWQgKmVudHJ5ID0gTlVMTDtcXG4gXFxuK1xcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XFxuIFxcdGlmIChtYXNfZmluZF9yZXZfc2V0dXAobWFzLCBtaW4sIFxcdTAwMjZlbnRyeSkpXFxuIFxcdFxcdHJldHVybiBlbnRyeTtcXG4gXFxuQEAgLTU1NDcsNiArNTY1MCw3IEBAIHZvaWQgKm1hc19maW5kX3JhbmdlX3JldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pXFxuIHtcXG4gXFx0dm9pZCAqZW50cnkgPSBOVUxMO1xcbiBcXG4rXFx0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcXG4gXFx0aWYgKG1hc19maW5kX3Jldl9zZXR1cChtYXMsIG1pbiwgXFx1MDAyNmVudHJ5KSlcXG4gXFx0XFx0cmV0dXJuIGVudHJ5O1xcbiBcXG5AQCAtNTU2NCw2ICs1NjY4LDEwIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1hc19maW5kX3JhbmdlX3Jldik7XFxuICAqIFNlYXJjaGVzIGZvciBAbWFzLVxcdTAwM2VpbmRleCwgc2V0cyBAbWFzLVxcdTAwM2VpbmRleCBhbmQgQG1hcy1cXHUwMDNlbGFzdCB0byB0aGUgcmFuZ2UgYW5kXFxuICAqIGVyYXNlcyB0aGF0IHJhbmdlLlxcbiAgKlxcbisgKiBOb3RlIHRoYXQgZXJhc2UgcmVxdWlyZXMgYWxsb2NhdGlvbnMgYW5kIHdpbGwgdXNlIEdGUF9LRVJORUwgdG8gZG8gc28gaWZcXG4rICogbmVjZXNzYXJ5LiAgSWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIHRoZSBpbnRlcm5hbCBsb2NrIHdpbGwgYmUgZHJvcHBlZCB0b1xcbisgKiByZXRyeS5cXG4rICpcXG4gICogUmV0dXJuOiB0aGUgZW50cnkgdGhhdCB3YXMgZXJhc2VkIG9yICVOVUxMLCBAbWFzLVxcdTAwM2VpbmRleCBhbmQgQG1hcy1cXHUwMDNlbGFzdCBhcmUgdXBkYXRlZC5cXG4gICovXFxuIHZvaWQgKm1hc19lcmFzZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcXG5AQCAtNTU3MiwxMyArNTY4MCwxOSBAQCB2b2lkICptYXNfZXJhc2Uoc3RydWN0IG1hX3N0YXRlICptYXMpXFxuIFxcdHVuc2lnbmVkIGxvbmcgaW5kZXggPSBtYXMtXFx1MDAzZWluZGV4O1xcbiBcXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgTlVMTCk7XFxuIFxcbi1cXHRpZiAoIW1hc19pc19hY3RpdmUobWFzKSB8fCAhbWFzX2lzX3N0YXJ0KG1hcykpXFxuLVxcdFxcdG1hcy1cXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XFxuK1xcdC8qXFxuK1xcdCAqIEluIGxvdyBtZW1vcnkgc2l0dWF0aW9ucywgdGhlIGFsbG9jYXRpb24gaXMgcmV0cmllZCB3aXRoIHRoZSBnZnAgZmxhZ1xcbitcXHQgKiBHRlBfS0VSTkVMLiAgVGhlIGludGVybmFsIHNwaW5sb2NrIGlzIGRyb3BwZWQgaW4gbWFzX25vbWVtKCksIGhvd2V2ZXJcXG4rXFx0ICogdGhlIGV4dGVybmFsIGxvY2sgaXMgbm90IGRyb3BwZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAobXRfZXh0ZXJuYWxfbG9jayhtYXMtXFx1MDAzZXRyZWUpKVxcbitcXHRcXHRtaWdodF9hbGxvYyhHRlBfS0VSTkVMKTtcXG4gXFxuK1xcdG1hc19tYWtlX3dhbGthYmxlKG1hcyk7XFxuIHdyaXRlX3JldHJ5OlxcbiBcXHRlbnRyeSA9IG1hc19zdGF0ZV93YWxrKG1hcyk7XFxuIFxcdGlmICghZW50cnkpXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdC8qIE11c3QgcmVzZXQgdG8gZW5zdXJlIHNwYW5uaW5nIHdyaXRlcyBvZiBsYXN0IHNsb3QgYXJlIGRldGVjdGVkICovXFxuIFxcdG1hc19yZXNldChtYXMpO1xcbkBAIC01NTg5LDggKzU3MDMsMTAgQEAgdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbiBcXHRcXHRnb3RvIHdyaXRlX3JldHJ5O1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAobWFzX2lzX2VycihtYXMpKVxcbitcXHRpZiAobWFzX2lzX2VycihtYXMpKSB7XFxuK1xcdFxcdGVudHJ5ID0gTlVMTDtcXG4gXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4gXFxuIFxcdG1hc193cl9zdG9yZV9lbnRyeShcXHUwMDI2d3JfbWFzKTtcXG4gb3V0OlxcbkBAIC01NjAxLDEwICs1NzE3LDExIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1hc19lcmFzZSk7XFxuIFxcbiAvKipcXG4gICogbWFzX25vbWVtKCkgLSBDaGVjayBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgYWxsb2NhdGluZyBhbmQgZG8gdGhlIGFsbG9jYXRpb25cXG4tICogaWYgbmVjZXNzYXJ5IElmIHRoZXJlIGFyZSBhbGxvY2F0aW9ucywgdGhlbiBmcmVlIHRoZW0uXFxuKyAqIGlmIG5lY2Vzc2FyeS5cXG4rICpcXG4gICogQG1hczogVGhlIG1hcGxlIHN0YXRlXFxuICAqIEBnZnA6IFRoZSBHRlBfRkxBR1MgdG8gdXNlIGZvciBhbGxvY2F0aW9uc1xcbi0gKiBSZXR1cm46IHRydWUgb24gYWxsb2NhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLlxcbisgKiBSZXR1cm46IEZhbHNlIG9uIG5vIG1lbW9yeS4gIFRydWUgb3RoZXJ3aXNlIChwYXJ0aWFsIHN1Y2Nlc3MgYXMgd2VsbClcXG4gICovXFxuIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApXFxuIFxcdF9fbXVzdF9ob2xkKG1hcy1cXHUwMDNldHJlZS1cXHUwMDNlbWFfbG9jaylcXG5AQCAtNTYxMiw2ICs1NzI5LDEwIEBAIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApXFxuIFxcdGlmIChsaWtlbHkobWFzLVxcdTAwM2Vub2RlICE9IE1BX0VSUk9SKC1FTk9NRU0pKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0LyogQWxsb2NhdGlvbnMgY2FuIGZhaWwsIGRvbid0IGRvIHRoaXMuICovXFxuK1xcdFdBUk5fT05fT05DRSghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIG10X2V4dGVybmFsX2xvY2sobWFzLVxcdTAwM2V0cmVlKSk7XFxuK1xcbiBcXHRpZiAoZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwKSBcXHUwMDI2XFx1MDAyNiAhbXRfZXh0ZXJuYWxfbG9jayhtYXMtXFx1MDAzZXRyZWUpKSB7XFxuIFxcdFxcdG10cmVlX3VubG9jayhtYXMtXFx1MDAzZXRyZWUpO1xcbiBcXHRcXHRtYXNfYWxsb2Nfbm9kZXMobWFzLCBnZnApO1xcbkBAIC01NjIwLDEwICs1NzQxLDE3IEBAIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApXFxuIFxcdFxcdG1hc19hbGxvY19ub2RlcyhtYXMsIGdmcCk7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghbWFzLVxcdTAwM2VzaGVhZiBcXHUwMDI2XFx1MDAyNiAhbWFzLVxcdTAwM2VhbGxvYylcXG4rXFx0LypcXG4rXFx0ICogUmV0dXJuIGZhbHNlIG9uIHplcm8gZm9yd2FyZCBwcm9ncmVzcy4gIFBhcnRpYWwgYWxsb2NhdGlvbnMgYXJlIGtlcHRcXG4rXFx0ICogc28gdGhlIHJldHJ5IHBhdGggd2lsbCBhdHRlbXB0IHRvIGdldCB0aGUgcmVzdC4gIFRoZSBmYWlsdXJlIHNob3VsZFxcbitcXHQgKiBub3QgaGFwcGVuIGFzIHdlIHRyeSBvdXIgYmVzdCB0byByZWNsYWltLiAgVGhlIHVzZXIgd291bGQgbmVlZCBhblxcbitcXHQgKiBleHRlcm5hbCBsb2NrIHdpdGggYSBub24tYmxvY2tpbmcgZ2ZwIGluIGEgbG93IG1lbW9yeSBzaXR1YXRpb24gLVxcbitcXHQgKiB3aGljaCB3b3VsZCBoYXZlIHRyaWdnZXJlZCB0aGUgZmlyc3Qgd2FybmluZyBpbiB0aGlzIGZ1bmN0aW9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKFdBUk5fT05fT05DRSghbWFzLVxcdTAwM2VzaGVhZiBcXHUwMDI2XFx1MDAyNiAhbWFzLVxcdTAwM2VhbGxvYykpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdG1hcy1cXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XFxuK1xcdG1hc19yZXNldChtYXMpO1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG5AQCAtNTkxMyw2ICs2MDQxLDEwIEBAIEVYUE9SVF9TWU1CT0wobXRyZWVfYWxsb2NfcnJhbmdlKTtcXG4gICogRXJhc2luZyBpcyB0aGUgc2FtZSBhcyBhIHdhbGsgdG8gYW4gZW50cnkgdGhlbiBhIHN0b3JlIG9mIGEgTlVMTCB0byB0aGF0XFxuICAqIEVOVElSRSByYW5nZS4gIEluIGZhY3QsIGl0IGlzIGltcGxlbWVudGVkIGFzIHN1Y2ggdXNpbmcgdGhlIGFkdmFuY2VkIEFQSS5cXG4gICpcXG4rICogTm90ZSB0aGF0IGVyYXNlIHJlcXVpcmVzIGFsbG9jYXRpb25zIGFuZCB3aWxsIHVzZSBHRlBfS0VSTkVMIHRvIGRvIHNvIGlmXFxuKyAqIG5lY2Vzc2FyeS4gIElmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgaW50ZXJuYWwgbG9jayB3aWxsIGJlIGRyb3BwZWQgdG9cXG4rICogcmV0cnkuXFxuKyAqXFxuICAqIFJldHVybjogVGhlIGVudHJ5IHN0b3JlZCBhdCB0aGUgQGluZGV4IG9yICVOVUxMXFxuICAqL1xcbiB2b2lkICptdHJlZV9lcmFzZShzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQsIHVuc2lnbmVkIGxvbmcgaW5kZXgpXFxuQEAgLTU5MjIsNiArNjA1NCw3IEBAIHZvaWQgKm10cmVlX2VyYXNlKHN0cnVjdCBtYXBsZV90cmVlICptdCwgdW5zaWduZWQgbG9uZyBpbmRleClcXG4gXFx0TUFfU1RBVEUobWFzLCBtdCwgaW5kZXgsIGluZGV4KTtcXG4gXFx0dHJhY2VfbWFfb3AoVFBfRkNULCBcXHUwMDI2bWFzKTtcXG4gXFxuK1xcdG1pZ2h0X2FsbG9jKEdGUF9LRVJORUwpO1xcbiBcXHRtdHJlZV9sb2NrKG10KTtcXG4gXFx0ZW50cnkgPSBtYXNfZXJhc2UoXFx1MDAyNm1hcyk7XFxuIFxcdG10cmVlX3VubG9jayhtdCk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jIGIvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNcXG5pbmRleCAwNjA3OTEzYTMwMjJkNS4uZDk2N2U3NmEzYzA2NTAgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY1xcbkBAIC0zNTIzNCw3ICszNTIzNCw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19wcmVhbGxvYyhzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQpXFxuIFxcdG10X3NldF9ub25fa2VybmVsKDEpO1xcbiBcXHQvKiBTcGFubmluZyBzdG9yZSAqL1xcbiBcXHRtYXNfc2V0X3JhbmdlKFxcdTAwMjZtYXMsIDEsIDEwMCk7XFxuLVxcdE1UX0JVR19PTihtdCwgbWFzX3ByZWFsbG9jYXRlKFxcdTAwMjZtYXMsIHB0ciwgR0ZQX0tFUk5FTCBcXHUwMDI2IEdGUF9OT1dBSVQpID09IDApO1xcbitcXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcXHUwMDI2bWFzLCBwdHIsIEdGUF9OT1dBSVQpID09IDApO1xcbiBcXHRhbGxvY2F0ZWQgPSBtYXNfYWxsb2NhdGVkKFxcdTAwMjZtYXMpO1xcbiBcXHRoZWlnaHQgPSBtYXNfbXRfaGVpZ2h0KFxcdTAwMjZtYXMpO1xcbiBcXHRNVF9CVUdfT04obXQsIGFsbG9jYXRlZCAhPSAwKTtcXG5AQCAtMzUyNTcsNyArMzUyNTcsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfcHJlYWxsb2Moc3RydWN0IG1hcGxlX3RyZWUgKm10KVxcbiBcXHRNVF9CVUdfT04obXQsIG1hc19hbGxvY2F0ZWQoXFx1MDAyNm1hcykgIT0gMCk7XFxuIFxcdG1hc19zZXRfcmFuZ2UoXFx1MDAyNm1hcywgMCwgMjAwKTtcXG4gXFx0bXRfc2V0X25vbl9rZXJuZWwoMSk7XFxuLVxcdE1UX0JVR19PTihtdCwgbWFzX3ByZWFsbG9jYXRlKFxcdTAwMjZtYXMsIHB0ciwgR0ZQX0tFUk5FTCBcXHUwMDI2IEdGUF9OT1dBSVQpID09IDApO1xcbitcXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcXHUwMDI2bWFzLCBwdHIsIEdGUF9OT1dBSVQpID09IDApO1xcbiBcXHRhbGxvY2F0ZWQgPSBtYXNfYWxsb2NhdGVkKFxcdTAwMjZtYXMpO1xcbiBcXHRoZWlnaHQgPSBtYXNfbXRfaGVpZ2h0KFxcdTAwMjZtYXMpO1xcbiBcXHRNVF9CVUdfT04obXQsIGFsbG9jYXRlZCAhPSAwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6MjQ6NTUuMzg5MzcyMjg3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA5NDI1MzU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19NQVBMRV9UUkVFXCIsXG4gICAgXCJMT0NLREVQXCIsXG4gICAgXCJQUk9WRV9MT0NLSU5HXCIsXG4gICAgXCJSQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hc19lcmFzZVwiLFxuICAgIFwibWFzX25vbWVtXCIsXG4gICAgXCJtYXNfYWxsb2NfY3ljbGljXCIsXG4gICAgXCJtYXNfd3Jfbm9kZV9zdG9yZVwiLFxuICAgIFwibWFzX3dyX3N0b3JlX3R5cGVcIixcbiAgICBcIm1hc19zdG9yZV9nZnBcIixcbiAgICBcIm1hc19zdG9yZV9wcmVhbGxvY1wiLFxuICAgIFwibWFzX3ByZWFsbG9jYXRlXCIsXG4gICAgXCJtdHJlZV9lcmFzZVwiLFxuICAgIFwibG9ja19zZXF1ZW5jZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWFwbGUgdHJlZSBsb2dpYywgaW5jbHVkaW5nIGVyYXNlLCBhbGxvY2F0aW9uLCBhbmQgc3RvcmUgb3BlcmF0aW9ucywgYW5kIGludHJvZHVjZXMgbG9jayBzZXF1ZW5jZSB0cmFja2luZyBpbiBsb2NrZGVwIHRvIHZlcmlmeSBtYXBsZSB0cmVlIGxvY2tpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIGFyZSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzZhZTRjYjRiOThlZjZkNTY5NDdkNWMzMjQ3MGU5Y2M1ODhlZDFjZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMDI6MjQ6NTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21hcGxlX3RyZWUucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdFxuaW5kZXggY2NkZDE2MTVjZjk3NGYuLjFlYWUyNGE5YzE4YjRhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tYXBsZV90cmVlLnJzdFxuQEAgLTE3LDcgKzE3LDggQEAgc3VwcG9ydHMgaXRlcmF0aW5nIG92ZXIgYSByYW5nZSBvZiBlbnRyaWVzIGFuZCBnb2luZyB0byB0aGUgcHJldmlvdXMgb3IgbmV4dFxuIGVudHJ5IGluIGEgY2FjaGUtZWZmaWNpZW50IG1hbm5lci4gIFRoZSB0cmVlIGNhbiBhbHNvIGJlIHB1dCBpbnRvIGFuIFJDVS1zYWZlXG4gbW9kZSBvZiBvcGVyYXRpb24gd2hpY2ggYWxsb3dzIHJlYWRpbmcgYW5kIHdyaXRpbmcgY29uY3VycmVudGx5LiAgV3JpdGVycyBtdXN0XG4gc3luY2hyb25pemUgb24gYSBsb2NrLCB3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQgc3BpbmxvY2ssIG9yIHRoZSB1c2VyIGNhbiBzZXRcbi10aGUgbG9jayB0byBhbiBleHRlcm5hbCBsb2NrIG9mIGEgZGlmZmVyZW50IHR5cGUuXG4rdGhlIGxvY2sgdG8gYW4gZXh0ZXJuYWwgbG9jayBvZiBhIGRpZmZlcmVudCB0eXBlLiAgTm90ZSB0aGF0IGV4dGVybmFsIGxvY2tzIG1heVxuK2ludGVyZmVyZSB3aXRoIGFsbG9jYXRpb25zIGluIGEgbG93IG1lbW9yeSBzaXR1YXRpb24uXG4gXG4gVGhlIE1hcGxlIFRyZWUgbWFpbnRhaW5zIGEgc21hbGwgbWVtb3J5IGZvb3RwcmludCBhbmQgd2FzIGRlc2lnbmVkIHRvIHVzZVxuIG1vZGVybiBwcm9jZXNzb3IgY2FjaGUgZWZmaWNpZW50bHkuICBUaGUgbWFqb3JpdHkgb2YgdGhlIHVzZXJzIHdpbGwgYmUgYWJsZSB0b1xuQEAgLTQyLDYgKzQzLDE1IEBAIHN1Y2Nlc3NmdWwgc3RvcmUgb3BlcmF0aW9uIHdpdGhpbiBhIGdpdmVuXG4gY29kZSBzZWdtZW50IHdoZW4gYWxsb2NhdGluZyBjYW5ub3QgYmUgZG9uZS4gIEFsbG9jYXRpb25zIG9mIG5vZGVzIGFyZVxuIHJlbGF0aXZlbHkgc21hbGwgYXQgYXJvdW5kIDI1NiBieXRlcy5cbiBcbitTaW5jZSB0aGUgbWFwbGUgdHJlZSB1c2VzIGludGVybmFsIG5vZGVzIHRoYXQgYXJlIGFsbG9jYXRlZCBhbmQgaGFzIHJ1bGVzIG9uXG4rZGF0YSBkZW5zaXR5LCBlcmFzaW5nIGFuIGVudHJ5IG1heSBjYXVzZSBhbGxvY2F0aW9ucyB0byBvY2N1ci4gIFRoYXQgaXMsXG4rZXJhc2luZyBhbiBlbnRyeSBtYXkgY29uc3VtZSBtZW1vcnkuICBVc2VycyBtdXN0IHRha2UgY2FyZSB0byBlbnN1cmUgdGhhdCB0aGV5XG4rZG8gbm90IHZpb2xhdGUgdGhlIGxhcmdlciBzeXN0ZW0gY29uc3RyYWludHMgb24gd2hlbiBhbmQgaG93IG1lbW9yeSBpc1xuK2FsbG9jYXRlZC4gIE1vc3Qgc2l0dWF0aW9ucyBhcmUgZmluZSB0byBhbGxvY2F0ZSwgYnV0IHRoZSBwcmUtYWxsb2NhdGlvblxuK3N1cHBvcnQgaXMgcHJvdmlkZWQgYXMgYSBtZWNoYW5pc20gdG8gYXZvaWQgdHJpY2tpZXIgc2l0dWF0aW9ucy4gIFRoZXJlIGlzIGFsc29cbit0aGUgcG9zc2liaWxpdHkgb2YgdXNpbmcgc3BlY2lhbCBlbnRyaWVzIGFuZCBjbGVhbiB1cCB0aGUgdHJlZSBsYXRlciwgaW5cbitleHRyZW1lIGNpcmN1bXN0YW5jZXMuXG4rXG4gLi4gX21hcGxlLXRyZWUtbm9ybWFsLWFwaTpcbiBcbiBOb3JtYWwgQVBJXG5AQCAtNjMsNyArNzMsOCBAQCBzdWNjZXNzIG9yIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlLiAgbXRyZWVfc3RvcmVfcmFuZ2UoKSB3b3JrcyBpbiB0aGUgc2FtZSB3YXlcbiBidXQgdGFrZXMgYSByYW5nZS4gIG10cmVlX2xvYWQoKSBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSBlbnRyeSBzdG9yZWQgYXQgYVxuIGdpdmVuIGluZGV4LiAgWW91IGNhbiB1c2UgbXRyZWVfZXJhc2UoKSB0byBlcmFzZSBhbiBlbnRpcmUgcmFuZ2UgYnkgb25seVxuIGtub3dpbmcgb25lIHZhbHVlIHdpdGhpbiB0aGF0IHJhbmdlLCBvciBtdHJlZV9zdG9yZSgpIGNhbGwgd2l0aCBhbiBlbnRyeSBvZlxuLU5VTEwgbWF5IGJlIHVzZWQgdG8gcGFydGlhbGx5IGVyYXNlIGEgcmFuZ2Ugb3IgbWFueSByYW5nZXMgYXQgb25jZS5cbitOVUxMIG1heSBiZSB1c2VkIHRvIHBhcnRpYWxseSBlcmFzZSBhIHJhbmdlIG9yIG1hbnkgcmFuZ2VzIGF0IG9uY2UuICBOb3RlIHRoYXRcbittdHJlZV9lcmFzZSgpIG1heSB1c2UgR0ZQX0tFUk5FTCBvbiBhbGxvY2F0aW9ucy5cbiBcbiBJZiB5b3Ugd2FudCB0byBvbmx5IHN0b3JlIGEgbmV3IGVudHJ5IHRvIGEgcmFuZ2UgKG9yIGluZGV4KSBpZiB0aGF0IHJhbmdlIGlzXG4gY3VycmVudGx5IGBgTlVMTGBgLCB5b3UgY2FuIHVzZSBtdHJlZV9pbnNlcnRfcmFuZ2UoKSBvciBtdHJlZV9pbnNlcnQoKSB3aGljaFxuQEAgLTE2Myw3ICsxNzQsOSBAQCBZb3UgY2FuIHVzZSBtYXNfZXJhc2UoKSB0byBlcmFzZSBhbiBlbnRpcmUgcmFuZ2UgYnkgc2V0dGluZyBpbmRleCBhbmRcbiBsYXN0IG9mIHRoZSBtYXBsZSBzdGF0ZSB0byB0aGUgZGVzaXJlZCByYW5nZSB0byBlcmFzZS4gIFRoaXMgd2lsbCBlcmFzZVxuIHRoZSBmaXJzdCByYW5nZSB0aGF0IGlzIGZvdW5kIGluIHRoYXQgcmFuZ2UsIHNldCB0aGUgbWFwbGUgc3RhdGUgaW5kZXhcbiBhbmQgbGFzdCBhcyB0aGUgcmFuZ2UgdGhhdCB3YXMgZXJhc2VkIGFuZCByZXR1cm4gdGhlIGVudHJ5IHRoYXQgZXhpc3RlZFxuLWF0IHRoYXQgbG9jYXRpb24uXG4rYXQgdGhhdCBsb2NhdGlvbi4gIE5vdGUgdGhhdCBtYXNfZXJhc2UoKSBtYXkgYWxsb2NhdGUgd2l0aCB0aGUgR0ZQX0tFUk5FTCBmbGFnLlxuK0lmIHRoaXMgaXMgbm90IG9rYXksIGNvbnNpZGVyIHVzaW5nIG1hc19zdG9yZV9nZnAoKSBhbmQgcGFzcyBpdCBhIGBgTlVMTGBgLFxuK2FmdGVyIHNldHRpbmcgdXAgdGhlIGNvcnJlY3QgcmFuZ2UgYnkgd2Fsa2luZyB0byB0aGUgZW50cnkuXG4gXG4gWW91IGNhbiB3YWxrIGVhY2ggZW50cnkgd2l0aGluIGEgcmFuZ2UgYnkgdXNpbmcgbWFzX2Zvcl9lYWNoKCkuICBJZiB5b3Ugd2FudFxuIHRvIHdhbGsgZWFjaCBlbGVtZW50IG9mIHRoZSB0cmVlIHRoZW4gYGAwYGAgYW5kIGBgVUxPTkdfTUFYYGAgbWF5IGJlIHVzZWQgYXNcbkBAIC0yMTEsNyArMjI0LDcgQEAgQWR2YW5jZWQgTG9ja2luZ1xuIFxuIFRoZSBtYXBsZSB0cmVlIHVzZXMgYSBzcGlubG9jayBieSBkZWZhdWx0LCBidXQgZXh0ZXJuYWwgbG9ja3MgY2FuIGJlIHVzZWQgZm9yXG4gdHJlZSB1cGRhdGVzIGFzIHdlbGwuICBUbyB1c2UgYW4gZXh0ZXJuYWwgbG9jaywgdGhlIHRyZWUgbXVzdCBiZSBpbml0aWFsaXplZFxuLXdpdGggdGhlIGBgTVRfRkxBR1NfTE9DS19FWFRFUk4gZmxhZ2BgLCB0aGlzIGlzIHVzdWFsbHkgZG9uZSB3aXRoIHRoZVxuK3dpdGggdGhlIGBgTVRfRkxBR1NfTE9DS19FWFRFUk5gYCBmbGFnLCB0aGlzIGlzIHVzdWFsbHkgZG9uZSB3aXRoIHRoZVxuIE1UUkVFX0lOSVRfRVhUKCkgI2RlZmluZSwgd2hpY2ggdGFrZXMgYW4gZXh0ZXJuYWwgbG9jayBhcyBhbiBhcmd1bWVudC5cbiBcbiBGdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oXG5pbmRleCA2MjE1NjYzNDU0MDZkZC4uYTY0NTFlY2JiZTlhMDUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmhcbkBAIC0yNzMsNiArMjczLDkgQEAgZXh0ZXJuIHN0cnVjdCBwaW5fY29va2llIGxvY2tfcGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrKTtcbiBleHRlcm4gdm9pZCBsb2NrX3JlcGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSk7XG4gZXh0ZXJuIHZvaWQgbG9ja191bnBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUpO1xuIFxuK2V4dGVybiB1MzIgbG9ja19zZXF1ZW5jZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2spO1xuKyNkZWZpbmUgbG9ja2RlcF9zZXF1ZW5jZShsb2NrKVx0bG9ja19zZXF1ZW5jZShcdTAwMjYobG9jayktXHUwMDNlZGVwX21hcClcbitcbiAjZGVmaW5lIGxvY2tkZXBfZGVwdGgodHNrKVx0KGRlYnVnX2xvY2tzID8gKHRzayktXHUwMDNlbG9ja2RlcF9kZXB0aCA6IDApXG4gXG4gI2RlZmluZSBsb2NrZGVwX2Fzc2VydChjb25kKVx0XHRcXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwX3R5cGVzLmhcbmluZGV4IGVhZTExNWEyNjQ4ODU2Li41NWM0YjE1MmZlZGY3YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2RlcF90eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXBfdHlwZXMuaFxuQEAgLTI1Myw3ICsyNTMsOCBAQCBzdHJ1Y3QgaGVsZF9sb2NrIHtcbiBcdHVuc2lnbmVkIGludCBoYXJkaXJxc19vZmY6MTtcbiBcdHVuc2lnbmVkIGludCBzeW5jOjE7XG4gXHR1bnNpZ25lZCBpbnQgcmVmZXJlbmNlczoxMTtcdFx0XHRcdFx0LyogMzIgYml0cyAqL1xuLVx0dW5zaWduZWQgaW50IHBpbl9jb3VudDtcbitcdHVuc2lnbmVkIGludCBwaW5fY291bnQ6MjQ7XG4rXHR1bnNpZ25lZCBpbnQgc2VxX2NvdW50Ojg7XG4gfTtcbiBcbiAjZWxzZSAvKiAhQ09ORklHX0xPQ0tERVAgKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaCBiL2luY2x1ZGUvbGludXgvbWFwbGVfdHJlZS5oXG5pbmRleCA0YTU2MzE5MDZhZmZiNS4uNWUwYmQyODU3ZDk0MWUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21hcGxlX3RyZWUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tYXBsZV90cmVlLmhcbkBAIC0yOSwxMyArMjksMTEgQEBcbiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFNcdDMxXHQvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC1cdTAwM2VwYXJlbnQgKi9cbiAjZGVmaW5lIE1BUExFX1JBTkdFNjRfU0xPVFNcdDE2XHQvKiAyNTYgYnl0ZXMgKi9cbiAjZGVmaW5lIE1BUExFX0FSQU5HRTY0X1NMT1RTXHQxMFx0LyogMjQwIGJ5dGVzICovXG4tI2RlZmluZSBNQVBMRV9BTExPQ19TTE9UU1x0KE1BUExFX05PREVfU0xPVFMgLSAxKVxuICNlbHNlXG4gLyogMzJiaXQgc2l6ZXMgKi9cbiAjZGVmaW5lIE1BUExFX05PREVfU0xPVFNcdDYzXHQvKiAyNTYgYnl0ZXMgaW5jbHVkaW5nIC1cdTAwM2VwYXJlbnQgKi9cbiAjZGVmaW5lIE1BUExFX1JBTkdFNjRfU0xPVFNcdDMyXHQvKiAyNTYgYnl0ZXMgKi9cbiAjZGVmaW5lIE1BUExFX0FSQU5HRTY0X1NMT1RTXHQyMVx0LyogMjQwIGJ5dGVzICovXG4tI2RlZmluZSBNQVBMRV9BTExPQ19TTE9UU1x0KE1BUExFX05PREVfU0xPVFMgLSAyKVxuICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR182NEJJVCkgfHwgZGVmaW5lZChCVUlMRF9WRFNPMzJfNjQpICovXG4gXG4gI2RlZmluZSBNQVBMRV9OT0RFX01BU0tcdFx0MjU1VUxcbkBAIC00ODUsNiArNDgzLDEyIEBAIHN0cnVjdCBtYV9zdGF0ZSB7XG4gXHR1bnNpZ25lZCBjaGFyIG1hc19mbGFncztcbiBcdHVuc2lnbmVkIGNoYXIgZW5kO1x0XHQvKiBUaGUgZW5kIG9mIHRoZSBub2RlICovXG4gXHRlbnVtIHN0b3JlX3R5cGUgc3RvcmVfdHlwZTtcdC8qIFRoZSB0eXBlIG9mIHN0b3JlIG5lZWRlZCBmb3IgdGhpcyBvcGVyYXRpb24gKi9cbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcbitcdHUzMiBsZF9zZXE7XG4rI2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxuK1x0dW5zaWduZWQgbG9uZyByY3VfZ3A7XG4rI2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xuKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xuIH07XG4gXG4gc3RydWN0IG1hX3dyX3N0YXRlIHtcbkBAIC01NzIsNyArNTc2LDcgQEAgdm9pZCBtYXBsZV90cmVlX2luaXQodm9pZCk7XG4gdm9pZCBtYXNfZGVzdHJveShzdHJ1Y3QgbWFfc3RhdGUgKm1hcyk7XG4gXG4gdm9pZCAqbWFzX3ByZXYoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWluKTtcbi12b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xuK3ZvaWQgKm1hc19wcmV2X3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbik7XG4gdm9pZCAqbWFzX25leHQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KTtcbiB2b2lkICptYXNfbmV4dF9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuaW5kZXggMzczYmNjMDU5OGQxMGIuLjE0ZDVjZThkZDYxMzY1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbkBAIC0xMjg4LDYgKzEyODgsNyBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3Qge1xuIFx0dTY0XHRcdFx0XHRjdXJyX2NoYWluX2tleTtcbiBcdGludFx0XHRcdFx0bG9ja2RlcF9kZXB0aDtcbiBcdHVuc2lnbmVkIGludFx0XHRcdGxvY2tkZXBfcmVjdXJzaW9uO1xuK1x0dW5zaWduZWQgaW50XHRcdFx0bG9ja2RlcF9zZXE7XG4gXHRzdHJ1Y3QgaGVsZF9sb2NrXHRcdGhlbGRfbG9ja3NbTUFYX0xPQ0tfREVQVEhdO1xuICNlbmRpZlxuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuaW5kZXggMmQ0YzViYWI1YWY4ODcuLmE2OTU2N2JkZDc5MTJlIDEwMDY0NFxuLS0tIGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG4rKysgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbkBAIC01MDc3LDcgKzUwNzcsNyBAQCBzdGF0aWMgaW50IF9fbG9ja19pc19oZWxkKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgaW50IHJlYWQpO1xuIHN0YXRpYyBpbnQgX19sb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsXG4gXHRcdFx0ICBpbnQgdHJ5bG9jaywgaW50IHJlYWQsIGludCBjaGVjaywgaW50IGhhcmRpcnFzX29mZixcbiBcdFx0XHQgIHN0cnVjdCBsb2NrZGVwX21hcCAqbmVzdF9sb2NrLCB1bnNpZ25lZCBsb25nIGlwLFxuLVx0XHRcdCAgaW50IHJlZmVyZW5jZXMsIGludCBwaW5fY291bnQsIGludCBzeW5jKVxuK1x0XHRcdCAgaW50IHJlZmVyZW5jZXMsIGludCBwaW5fY291bnQsIGludCBzeW5jLCBpbnQgc2VxKVxuIHtcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7XG4gXHRzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBOVUxMO1xuQEAgLTUxODMsNiArNTE4Myw3IEBAIHN0YXRpYyBpbnQgX19sb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsXG4gXHRobG9jay1cdTAwM2Vob2xkdGltZV9zdGFtcCA9IGxvY2tzdGF0X2Nsb2NrKCk7XG4gI2VuZGlmXG4gXHRobG9jay1cdTAwM2VwaW5fY291bnQgPSBwaW5fY291bnQ7XG4rXHRobG9jay1cdTAwM2VzZXFfY291bnQgPSBzZXE7XG4gXG4gXHRpZiAoY2hlY2tfd2FpdF9jb250ZXh0KGN1cnIsIGhsb2NrKSlcbiBcdFx0cmV0dXJuIDA7XG5AQCAtNTM4OCw3ICs1Mzg5LDcgQEAgc3RhdGljIGludCByZWFjcXVpcmVfaGVsZF9sb2NrcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHVuc2lnbmVkIGludCBkZXB0aCxcbiBcdFx0XHRcdCAgICBobG9jay1cdTAwM2VyZWFkLCBobG9jay1cdTAwM2VjaGVjayxcbiBcdFx0XHRcdCAgICBobG9jay1cdTAwM2VoYXJkaXJxc19vZmYsXG4gXHRcdFx0XHQgICAgaGxvY2stXHUwMDNlbmVzdF9sb2NrLCBobG9jay1cdTAwM2VhY3F1aXJlX2lwLFxuLVx0XHRcdFx0ICAgIGhsb2NrLVx1MDAzZXJlZmVyZW5jZXMsIGhsb2NrLVx1MDAzZXBpbl9jb3VudCwgMCkpIHtcbitcdFx0XHRcdCAgICBobG9jay1cdTAwM2VyZWZlcmVuY2VzLCBobG9jay1cdTAwM2VwaW5fY291bnQsIDAsIGhsb2NrLVx1MDAzZXNlcV9jb3VudCkpIHtcbiBcdFx0Y2FzZSAwOlxuIFx0XHRcdHJldHVybiAxO1xuIFx0XHRjYXNlIDE6XG5AQCAtNTY2OSwxNCArNTY3MCwxNyBAQCBzdGF0aWMgdm9pZCBfX2xvY2tfdW5waW5fbG9jayhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHN0cnVjdCBwaW5fY29va2llIGNvb2tpZVxuIFx0XHRzdHJ1Y3QgaGVsZF9sb2NrICpobG9jayA9IGN1cnItXHUwMDNlaGVsZF9sb2NrcyArIGk7XG4gXG4gXHRcdGlmIChtYXRjaF9oZWxkX2xvY2soaGxvY2ssIGxvY2spKSB7XG4rXHRcdFx0aW50IHBpbl9jb3VudDtcbitcbiBcdFx0XHRpZiAoV0FSTighaGxvY2stXHUwMDNlcGluX2NvdW50LCBcInVucGlubmluZyBhbiB1bnBpbm5lZCBsb2NrXFxuXCIpKVxuIFx0XHRcdFx0cmV0dXJuO1xuIFxuLVx0XHRcdGhsb2NrLVx1MDAzZXBpbl9jb3VudCAtPSBjb29raWUudmFsO1xuK1x0XHRcdHBpbl9jb3VudCA9IGhsb2NrLVx1MDAzZXBpbl9jb3VudCAtIGNvb2tpZS52YWw7XG4gXG4tXHRcdFx0aWYgKFdBUk4oKGludClobG9jay1cdTAwM2VwaW5fY291bnQgXHUwMDNjIDAsIFwicGluIGNvdW50IGNvcnJ1cHRlZFxcblwiKSlcbi1cdFx0XHRcdGhsb2NrLVx1MDAzZXBpbl9jb3VudCA9IDA7XG4rXHRcdFx0aWYgKFdBUk4ocGluX2NvdW50IFx1MDAzYyAwLCBcInBpbiBjb3VudCBjb3JydXB0ZWRcXG5cIikpXG4rXHRcdFx0XHRwaW5fY291bnQgPSAwO1xuIFxuK1x0XHRcdGhsb2NrLVx1MDAzZXBpbl9jb3VudCA9IHBpbl9jb3VudDtcbiBcdFx0XHRyZXR1cm47XG4gXHRcdH1cbiBcdH1cbkBAIC01Njg0LDYgKzU2ODgsMjQgQEAgc3RhdGljIHZvaWQgX19sb2NrX3VucGluX2xvY2soc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBzdHJ1Y3QgcGluX2Nvb2tpZSBjb29raWVcbiBcdFdBUk4oMSwgXCJ1bnBpbm5pbmcgYW4gdW5oZWxkIGxvY2tcXG5cIik7XG4gfVxuIFxuK3N0YXRpYyB1MzIgX19sb2NrX3NlcXVlbmNlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaylcbit7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50O1xuK1x0aW50IGk7XG4rXG4rXHRpZiAodW5saWtlbHkoIWRlYnVnX2xvY2tzKSlcbitcdFx0cmV0dXJuIH4wO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY3Vyci1cdTAwM2Vsb2NrZGVwX2RlcHRoOyBpKyspIHtcbitcdFx0c3RydWN0IGhlbGRfbG9jayAqaGxvY2sgPSBjdXJyLVx1MDAzZWhlbGRfbG9ja3MgKyBpO1xuK1xuK1x0XHRpZiAobWF0Y2hfaGVsZF9sb2NrKGhsb2NrLCBsb2NrKSlcbitcdFx0XHRyZXR1cm4gaGxvY2stXHUwMDNlc2VxX2NvdW50O1xuK1x0fVxuK1xuK1x0cmV0dXJuIH4wO1xuK31cbitcbiAvKlxuICAqIENoZWNrIHdoZXRoZXIgd2UgZm9sbG93IHRoZSBpcnEtZmxhZ3Mgc3RhdGUgcHJlY2lzZWx5OlxuICAqL1xuQEAgLTU4NjYsNyArNTg4OCw4IEBAIHZvaWQgbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLFxuIFxuIFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XG4gXHRfX2xvY2tfYWNxdWlyZShsb2NrLCBzdWJjbGFzcywgdHJ5bG9jaywgcmVhZCwgY2hlY2ssXG4tXHRcdCAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMCk7XG4rXHRcdCAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMCxcbitcdFx0ICAgICAgICsrY3VycmVudC1cdTAwM2Vsb2NrZGVwX3NlcSk7XG4gXHRsb2NrZGVwX3JlY3Vyc2lvbl9maW5pc2goKTtcbiBcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4gfVxuQEAgLTU5MTQsNyArNTkzNyw4IEBAIHZvaWQgbG9ja19zeW5jKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgc3ViY2xhc3MsIGludCByZWFkLFxuIFxuIFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XG4gXHRfX2xvY2tfYWNxdWlyZShsb2NrLCBzdWJjbGFzcywgMCwgcmVhZCwgY2hlY2ssXG4tXHRcdCAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMSk7XG4rXHRcdCAgICAgICBpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSwgbmVzdF9sb2NrLCBpcCwgMCwgMCwgMSxcbitcdFx0ICAgICAgICsrY3VycmVudC1cdTAwM2Vsb2NrZGVwX3NlcSk7XG4gXHRjaGVja19jaGFpbl9rZXkoY3VycmVudCk7XG4gXHRsb2NrZGVwX3JlY3Vyc2lvbl9maW5pc2goKTtcbiBcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG5AQCAtNjAwMCw2ICs2MDI0LDI2IEBAIHZvaWQgbG9ja191bnBpbl9sb2NrKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgc3RydWN0IHBpbl9jb29raWUgY29va2llKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChsb2NrX3VucGluX2xvY2spO1xuIFxuK3UzMiBsb2NrX3NlcXVlbmNlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaylcbit7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0dTMyIHNlcSA9IH4wO1xuK1xuK1x0aWYgKHVubGlrZWx5KCFsb2NrZGVwX2VuYWJsZWQoKSkpXG4rXHRcdHJldHVybiBzZXE7XG4rXG4rXHRyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuK1x0Y2hlY2tfZmxhZ3MoZmxhZ3MpO1xuK1xuK1x0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XG4rXHRzZXEgPSBfX2xvY2tfc2VxdWVuY2UobG9jayk7XG4rXHRsb2NrZGVwX3JlY3Vyc2lvbl9maW5pc2goKTtcbitcdHJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7XG4rXG4rXHRyZXR1cm4gc2VxO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChsb2NrX3NlcXVlbmNlKTtcbitcbiAjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVFxuIHN0YXRpYyB2b2lkIHByaW50X2xvY2tfY29udGVudGlvbl9idWcoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLFxuIFx0XHRcdFx0ICAgICAgc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLFxuZGlmZiAtLWdpdCBhL2xpYi9tYXBsZV90cmVlLmMgYi9saWIvbWFwbGVfdHJlZS5jXG5pbmRleCBlNTI4NzY0MzViNzdmMC4uMDZjYzA1Yjc5ZmJkYzggMTAwNjQ0XG4tLS0gYS9saWIvbWFwbGVfdHJlZS5jXG4rKysgYi9saWIvbWFwbGVfdHJlZS5jXG5AQCAtMjYxLDYgKzI2MSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWFzX2lzX3VuZGVyZmxvdyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiBcdHJldHVybiBtYXMtXHUwMDNlc3RhdHVzID09IG1hX3VuZGVyZmxvdztcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIG1hc19tYWtlX3dhbGthYmxlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuK3tcbitcdGlmICghbWFzX2lzX2FjdGl2ZShtYXMpIFx1MDAyNlx1MDAyNiAhbWFzX2lzX3N0YXJ0KG1hcykpXG4rXHRcdG1hcy1cdTAwM2VzdGF0dXMgPSBtYV9zdGFydDtcbit9XG4rXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgbWFwbGVfbm9kZSAqbXRlX3RvX25vZGUoXG4gXHRcdGNvbnN0IHN0cnVjdCBtYXBsZV9lbm9kZSAqZW50cnkpXG4ge1xuQEAgLTQ1NSw0NiArNDYxLDYgQEAgZW51bSBtYXBsZV90eXBlIG1hc19wYXJlbnRfdHlwZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICplbm9kZSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbi0vKlxuLSAqIG1hc19zZXRfcGFyZW50KCkgLSBTZXQgdGhlIHBhcmVudCBub2RlIGFuZCBlbmNvZGUgdGhlIHNsb3Rcbi0gKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGVcbi0gKiBAZW5vZGU6IFRoZSBlbmNvZGVkIG1hcGxlIG5vZGUuXG4tICogQHBhcmVudDogVGhlIGVuY29kZWQgbWFwbGUgbm9kZSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgQGVub2RlLlxuLSAqIEBzbG90OiBUaGUgc2xvdCB0aGF0IEBlbm9kZSByZXNpZGVzIGluIEBwYXJlbnQuXG4tICpcbi0gKiBTbG90IG51bWJlciBpcyBlbmNvZGVkIGluIHRoZSBlbm9kZS1cdTAwM2VwYXJlbnQgYml0IDMtNiBvciAyLTYsIGRlcGVuZGluZyBvbiB0aGVcbi0gKiBwYXJlbnQgdHlwZS5cbi0gKi9cbi1zdGF0aWMgaW5saW5lXG4tdm9pZCBtYXNfc2V0X3BhcmVudChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2Vub2RlICplbm9kZSxcbi1cdFx0ICAgIGNvbnN0IHN0cnVjdCBtYXBsZV9lbm9kZSAqcGFyZW50LCB1bnNpZ25lZCBjaGFyIHNsb3QpXG4te1xuLVx0dW5zaWduZWQgbG9uZyB2YWwgPSAodW5zaWduZWQgbG9uZylwYXJlbnQ7XG4tXHR1bnNpZ25lZCBsb25nIHNoaWZ0O1xuLVx0dW5zaWduZWQgbG9uZyB0eXBlO1xuLVx0ZW51bSBtYXBsZV90eXBlIHBfdHlwZSA9IG10ZV9ub2RlX3R5cGUocGFyZW50KTtcbi1cbi1cdE1BU19CVUdfT04obWFzLCBwX3R5cGUgPT0gbWFwbGVfZGVuc2UpO1xuLVx0TUFTX0JVR19PTihtYXMsIHBfdHlwZSA9PSBtYXBsZV9sZWFmXzY0KTtcbi1cbi1cdHN3aXRjaCAocF90eXBlKSB7XG4tXHRjYXNlIG1hcGxlX3JhbmdlXzY0OlxuLVx0Y2FzZSBtYXBsZV9hcmFuZ2VfNjQ6XG4tXHRcdHNoaWZ0ID0gTUFQTEVfUEFSRU5UX1NMT1RfU0hJRlQ7XG4tXHRcdHR5cGUgPSBNQVBMRV9QQVJFTlRfUkFOR0U2NDtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0Y2FzZSBtYXBsZV9kZW5zZTpcbi1cdGNhc2UgbWFwbGVfbGVhZl82NDpcbi1cdFx0c2hpZnQgPSB0eXBlID0gMDtcbi1cdFx0YnJlYWs7XG4tXHR9XG4tXG4tXHR2YWwgXHUwMDI2PSB+TUFQTEVfTk9ERV9NQVNLOyAvKiBDbGVhciBhbGwgbm9kZSBtZXRhZGF0YSBpbiBwYXJlbnQgKi9cbi1cdHZhbCB8PSAoc2xvdCBcdTAwM2NcdTAwM2Mgc2hpZnQpIHwgdHlwZTtcbi1cdG10ZV90b19ub2RlKGVub2RlKS1cdTAwM2VwYXJlbnQgPSBtYV9wYXJlbnRfcHRyKHZhbCk7XG4tfVxuLVxuIC8qXG4gICogbXRlX3BhcmVudF9zbG90KCkgLSBnZXQgdGhlIHBhcmVudCBzbG90IG9mIEBlbm9kZS5cbiAgKiBAZW5vZGU6IFRoZSBlbmNvZGVkIG1hcGxlIG5vZGUuXG5AQCAtODc2LDYgKzg0Miw0MiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFfc2V0X21ldGFfZ2FwKHN0cnVjdCBtYXBsZV9ub2RlICptbiwgZW51bSBtYXBsZV90eXBlIG10LFxuIFx0bWV0YS1cdTAwM2VnYXAgPSBvZmZzZXQ7XG4gfVxuIFxuKy8qXG4rICogbWFzX3NldF9wYXJlbnRfc2xvdHMoKSAtIEJ1bGsgb3BlcmF0aW9uIHRvIHNldCBtYW55IHNsb3QgcGFyZW50IHBvaW50ZXJzXG4rICogQG1hczogVGhlIG1hcGxlIHN0YXRlXG4rICogQHBhcmVudDogVGhlIGVuY29kZWQgbWFwbGUgbm9kZSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgQGVub2RlLlxuKyAqIEBzbG90OiBUaGUgc2xvdCB0aGF0IG9mIHRoZSBAZW5vZGUuXG4rICogQHN0YXJ0X3Nsb3Q6IFRoZSBvZmZzZXQgaW50byBAc2xvdFxuKyAqIEBjb3VudDogVGhlIG51bWJlciBvZiBzbG90cyB0byBzZXQgKGVnOiBleGNsdXNpdmUpXG4rICovXG4rc3RhdGljIGlubGluZVxuK3ZvaWQgbWFzX3NldF9wYXJlbnRfc2xvdHMoc3RydWN0IG1hX3N0YXRlICptYXMsIHN0cnVjdCBtYXBsZV9lbm9kZSAqcGFyZW50LFxuK1x0dm9pZCBfX3JjdSAqKnNsb3RzLCB1bnNpZ25lZCBjaGFyIHN0YXJ0X3Nsb3QsIHVuc2lnbmVkIGNoYXIgY291bnQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyB2YWw7XG4rXHR1bnNpZ25lZCBsb25nIHNoaWZ0O1xuK1x0dW5zaWduZWQgbG9uZyB0eXBlO1xuK1x0ZW51bSBtYXBsZV90eXBlIHBfdHlwZSA9IG10ZV9ub2RlX3R5cGUocGFyZW50KTtcbitcdHVuc2lnbmVkIGNoYXIgaTtcbitcbitcdE1BU19CVUdfT04obWFzLCBwX3R5cGUgIT0gbWFwbGVfcmFuZ2VfNjQgXHUwMDI2XHUwMDI2XG4rXHRcdFx0cF90eXBlICE9IG1hcGxlX2FyYW5nZV82NCk7XG4rXG4rXHRzaGlmdCA9IE1BUExFX1BBUkVOVF9TTE9UX1NISUZUO1xuK1x0dHlwZSA9IE1BUExFX1BBUkVOVF9SQU5HRTY0O1xuK1xuK1x0dmFsID0gKHVuc2lnbmVkIGxvbmcpcGFyZW50O1xuK1x0dmFsIFx1MDAyNj0gfk1BUExFX05PREVfTUFTSztcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpKyspIHtcbitcdFx0dW5zaWduZWQgbG9uZyBwdmFsID0gdmFsIHwgKChzdGFydF9zbG90ICsgaSkgXHUwMDNjXHUwMDNjIHNoaWZ0KSB8IHR5cGU7XG4rXHRcdHN0cnVjdCBtYXBsZV9lbm9kZSAqY2hpbGQ7XG4rXG4rXHRcdGNoaWxkID0gbXRfc2xvdF9sb2NrZWQobWFzLVx1MDAzZXRyZWUsIHNsb3RzLCBpKTtcbitcdFx0bXRlX3RvX25vZGUoY2hpbGQpLVx1MDAzZXBhcmVudCA9IG1hX3BhcmVudF9wdHIocHZhbCk7XG4rXHR9XG4rfVxuK1xuIC8qXG4gICogbWF0X2FkZCgpIC0gQWRkIGEgQGRlYWRfZW5vZGUgdG8gdGhlIG1hX3RvcGlhcnkgb2YgYSBsaXN0IG9mIGRlYWQgbm9kZXMuXG4gICogQG1hdDogdGhlIG1hX3RvcGlhcnksIGEgbGlua2VkIGxpc3Qgb2YgZGVhZCBub2Rlcy5cbkBAIC0xMTUzLDYgKzExNTUsNzMgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc19mcmVlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBzdHJ1Y3QgbWFwbGVfZW5vZGUgKnVzZWQpXG4gXHRtYV9mcmVlX3JjdShtdGVfdG9fbm9kZSh1c2VkKSk7XG4gfVxuIFxuK1xuKyNpZmRlZiBDT05GSUdfTE9DS0RFUFxuK3N0YXRpYyBzdHJ1Y3QgbG9ja2RlcF9tYXAgKm1hc19sb2NrZGVwX21hcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbit7XG4rXHRzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQgPSBtYXMtXHUwMDNldHJlZTtcbitcbitcdGlmIChtdF9leHRlcm5hbF9sb2NrKG10KSlcbitcdFx0cmV0dXJuIG10LVx1MDAzZW1hX2V4dGVybmFsX2xvY2s7XG4rXG4rXHRyZXR1cm4gXHUwMDI2KG10LVx1MDAzZW1hX2xvY2spLmRlcF9tYXA7XG4rfVxuK1xuKyNlbmRpZlxuK1xuK3N0YXRpYyB2b2lkIG1hc19sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuK3tcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcbitcdHN0cnVjdCBsb2NrZGVwX21hcCAqbWFwO1xuK1x0aWYgKCFtYXNfaXNfYWN0aXZlKG1hcykpXG4rXHRcdHJldHVybjtcbitcbisjaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXG4rXHRpZiAoIW10X2xvY2tlZChtYXMtXHUwMDNldHJlZSkpIHtcbitcdFx0aWYgKG10X2luX3JjdShtYXMtXHUwMDNldHJlZSkpXG4rXHRcdFx0V0FSTl9PTl9PTkNFKHBvbGxfc3RhdGVfc3luY2hyb25pemVfcmN1KG1hcy1cdTAwM2VyY3VfZ3ApKTtcbitcdH1cbisjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXG4rXG4rXHRtYXAgPSBtYXNfbG9ja2RlcF9tYXAobWFzKTtcbitcdGlmIChtYXAgXHUwMDI2XHUwMDI2IGxvY2tfaXNfaGVsZChtYXApKVxuK1x0XHRXQVJOX09OX09OQ0UobWFzLVx1MDAzZWxkX3NlcSAhPSBsb2NrX3NlcXVlbmNlKG1hcCkpO1xuKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xuK1xuK31cbitcbitzdGF0aWMgdm9pZCBtYXNfaW5pdF9sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuK3tcbisjaWZkZWYgQ09ORklHX0xPQ0tERVBcbitcdHN0cnVjdCBsb2NrZGVwX21hcCAqbWFwO1xuKyNpZmRlZiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RcbitcdGlmICghbXRfbG9ja2VkKG1hcy1cdTAwM2V0cmVlKSkge1xuK1x0XHRpZiAobXRfaW5fcmN1KG1hcy1cdTAwM2V0cmVlKSlcbitcdFx0XHRtYXMtXHUwMDNlcmN1X2dwID0gZ2V0X3N0YXRlX3N5bmNocm9uaXplX3JjdSgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rI2VuZGlmIC8qIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRCAqL1xuK1xuK1x0bWFwID0gbWFzX2xvY2tkZXBfbWFwKG1hcyk7XG4rXHRpZiAobWFwIFx1MDAyNlx1MDAyNiBsb2NrX2lzX2hlbGQobWFwKSlcbitcdFx0bWFzLVx1MDAzZWxkX3NlcSA9IGxvY2tfc2VxdWVuY2UobWFzX2xvY2tkZXBfbWFwKG1hcykpO1xuKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xuK1xuK31cbitcbitzdGF0aWMgdm9pZCBtYXNfbWF5X2luaXRfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbit7XG4rI2lmZGVmIENPTkZJR19MT0NLREVQXG4rI2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxuK1x0aWYgKG1hc19pc19zdGFydChtYXMpIHx8IG1hc19pc19wYXVzZWQobWFzKSkge1xuK1x0XHRtYXNfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4rXHRcdHJldHVybjtcbitcdH1cbisjZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXG4rXHRtYXNfbG9ja19jaGVjayhtYXMpO1xuKyNlbmRpZiAvKiBDT05GSUdfTE9DS0RFUCAqL1xuK31cbitcbiAvKlxuICAqIG1hc19zdGFydCgpIC0gU2V0cyB1cCBtYXBsZSBzdGF0ZSBmb3Igb3BlcmF0aW9ucy5cbiAgKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGUuXG5AQCAtMTE3MSw2ICsxMjQwLDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgbWFwbGVfZW5vZGUgKm1hc19zdGFydChzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiBcdGlmIChsaWtlbHkobWFzX2lzX3N0YXJ0KG1hcykpKSB7XG4gXHRcdHN0cnVjdCBtYXBsZV9lbm9kZSAqcm9vdDtcbiBcbitcdFx0bWFzX2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0XHRtYXMtXHUwMDNlbWluID0gMDtcbiBcdFx0bWFzLVx1MDAzZW1heCA9IFVMT05HX01BWDtcbiBcbkBAIC0xNTAxLDE0ICsxNTcxLDI2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfcGFyZW50X2dhcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgY2hhciBvZmZzZXQsXG4gXHRnb3RvIGFzY2VuZDtcbiB9XG4gXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1hc191cGRhdGVfZ2FwX2tub3duKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLFxuK1x0XHR1bnNpZ25lZCBsb25nIGdhcClcbit7XG4rXHR1bnNpZ25lZCBjaGFyIHBzbG90O1xuK1x0dW5zaWduZWQgbG9uZyBwX2dhcDtcbitcbitcdHBzbG90ID0gbXRlX3BhcmVudF9zbG90KG1hcy1cdTAwM2Vub2RlKTtcbitcdHBfZ2FwID0gbWFfZ2FwcyhtdGVfcGFyZW50KG1hcy1cdTAwM2Vub2RlKSxcbitcdFx0XHRtYXNfcGFyZW50X3R5cGUobWFzLCBtYXMtXHUwMDNlbm9kZSkpW3BzbG90XTtcbitcbitcdGlmIChwX2dhcCAhPSBnYXApXG4rXHRcdG1hc19wYXJlbnRfZ2FwKG1hcywgcHNsb3QsIGdhcCk7XG4rfVxuK1xuIC8qXG4gICogbWFzX3VwZGF0ZV9nYXAoKSAtIFVwZGF0ZSBhIG5vZGVzIGdhcHMgYW5kIHByb3BhZ2F0ZSB1cCBpZiBuZWNlc3NhcnkuXG4gICogQG1hczogdGhlIG1hcGxlIHN0YXRlLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfdXBkYXRlX2dhcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiB7XG4tXHR1bnNpZ25lZCBjaGFyIHBzbG90O1xuLVx0dW5zaWduZWQgbG9uZyBwX2dhcDtcbiBcdHVuc2lnbmVkIGxvbmcgbWF4X2dhcDtcbiBcbiBcdGlmICghbXRfaXNfYWxsb2MobWFzLVx1MDAzZXRyZWUpKVxuQEAgLTE1MTgsMTMgKzE2MDAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3VwZGF0ZV9nYXAoc3RydWN0IG1hX3N0YXRlICptYXMpXG4gXHRcdHJldHVybjtcbiBcbiBcdG1heF9nYXAgPSBtYXNfbWF4X2dhcChtYXMpO1xuLVxuLVx0cHNsb3QgPSBtdGVfcGFyZW50X3Nsb3QobWFzLVx1MDAzZW5vZGUpO1xuLVx0cF9nYXAgPSBtYV9nYXBzKG10ZV9wYXJlbnQobWFzLVx1MDAzZW5vZGUpLFxuLVx0XHRcdG1hc19wYXJlbnRfdHlwZShtYXMsIG1hcy1cdTAwM2Vub2RlKSlbcHNsb3RdO1xuLVxuLVx0aWYgKHBfZ2FwICE9IG1heF9nYXApXG4tXHRcdG1hc19wYXJlbnRfZ2FwKG1hcywgcHNsb3QsIG1heF9nYXApO1xuK1x0bWFzX3VwZGF0ZV9nYXBfa25vd24obWFzLCBtYXhfZ2FwKTtcbiB9XG4gXG4gLypcbkBAIC0xNTQwLDE0ICsxNjE2LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfYWRvcHRfY2hpbGRyZW4oc3RydWN0IG1hX3N0YXRlICptYXMsXG4gXHRzdHJ1Y3QgbWFwbGVfbm9kZSAqbm9kZSA9IG10ZV90b19ub2RlKHBhcmVudCk7XG4gXHR2b2lkIF9fcmN1ICoqc2xvdHMgPSBtYV9zbG90cyhub2RlLCB0eXBlKTtcbiBcdHVuc2lnbmVkIGxvbmcgKnBpdm90cyA9IG1hX3Bpdm90cyhub2RlLCB0eXBlKTtcbi1cdHN0cnVjdCBtYXBsZV9lbm9kZSAqY2hpbGQ7XG4tXHR1bnNpZ25lZCBjaGFyIG9mZnNldDtcbitcdHVuc2lnbmVkIGNoYXIgZW5kO1xuIFxuLVx0b2Zmc2V0ID0gbWFfZGF0YV9lbmQobm9kZSwgdHlwZSwgcGl2b3RzLCBtYXMtXHUwMDNlbWF4KTtcbi1cdGRvIHtcbi1cdFx0Y2hpbGQgPSBtYXNfc2xvdF9sb2NrZWQobWFzLCBzbG90cywgb2Zmc2V0KTtcbi1cdFx0bWFzX3NldF9wYXJlbnQobWFzLCBjaGlsZCwgcGFyZW50LCBvZmZzZXQpO1xuLVx0fSB3aGlsZSAob2Zmc2V0LS0pO1xuK1x0ZW5kID0gbWFfZGF0YV9lbmQobm9kZSwgdHlwZSwgcGl2b3RzLCBtYXMtXHUwMDNlbWF4KTtcbitcdG1hc19zZXRfcGFyZW50X3Nsb3RzKG1hcywgcGFyZW50LCBzbG90cywgMCwgZW5kICsgMSk7XG4gfVxuIFxuIC8qXG5AQCAtMTkyOSwxNSArMjAwMSwxMCBAQCB1bnNpZ25lZCBsb25nIG5vZGVfY29weShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX25vZGUgKnNyYyxcbiBcdHNfc2xvdHMgPSBtYV9zbG90cyhzcmMsIHNfbXQpICsgc3RhcnQ7XG4gXHRzX3Bpdm90cyA9IG1hX3Bpdm90cyhzcmMsIHNfbXQpICsgc3RhcnQ7XG4gXHRtZW1jcHkoZF9zbG90cywgc19zbG90cywgc2l6ZSAqIHNpemVvZih2b2lkIF9fcmN1ICopKTtcbi1cdGlmICghbWFfaXNfbGVhZihkX210KSBcdTAwMjZcdTAwMjYgc19tdCA9PSBtYXBsZV9jb3B5KSB7XG4tXHRcdHN0cnVjdCBtYXBsZV9lbm9kZSAqZWRzdCA9IG10X21rX25vZGUoZHN0LCBkX210KTtcbi1cbiBcbi1cdFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHNpemU7IGkrKylcbi1cdFx0XHRtYXNfc2V0X3BhcmVudChtYXMsXG4tXHRcdFx0XHQgICAgICAgbXRfc2xvdF9sb2NrZWQobWFzLVx1MDAzZXRyZWUsIGRfc2xvdHMsIGkpLFxuLVx0XHRcdFx0ICAgICAgIGVkc3QsIGRfc3RhcnQgKyBpKTtcbi1cdH1cbitcdGlmICghbWFfaXNfbGVhZihkX210KSBcdTAwMjZcdTAwMjYgc19tdCA9PSBtYXBsZV9jb3B5KVxuK1x0XHRtYXNfc2V0X3BhcmVudF9zbG90cyhtYXMsIG10X21rX25vZGUoZHN0LCBkX210KSxcbitcdFx0XHRcdCAgICAgZF9zbG90cywgZF9zdGFydCwgc2l6ZSk7XG4gXG4gXHRkX2dhcHMgPSBtYV9nYXBzKGRzdCwgZF9tdCk7XG4gXHRpZiAoZF9nYXBzKSB7XG5AQCAtMjA4MSw4ICsyMTQ4LDggQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193bWJfcmVwbGFjZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgc3RydWN0IG1hcGxlX2NvcHkgKmNwKVxuIFx0bWFzLVx1MDAzZW5vZGUgPSBtdF9zbG90X2xvY2tlZChtYXMtXHUwMDNldHJlZSwgY3AtXHUwMDNlc2xvdCwgMCk7XG4gXHQvKiBJbnNlcnQgdGhlIG5ldyBkYXRhIGluIHRoZSB0cmVlICovXG4gXHRtYXNfdG9waWFyeV9yZXBsYWNlKG1hcywgb2xkX2Vub2RlLCBjcC1cdTAwM2VoZWlnaHQpO1xuLVx0aWYgKCFtdGVfaXNfbGVhZihtYXMtXHUwMDNlbm9kZSkpXG4tXHRcdG1hc191cGRhdGVfZ2FwKG1hcyk7XG4rXHRpZiAobXRfaXNfYWxsb2MobWFzLVx1MDAzZXRyZWUpIFx1MDAyNlx1MDAyNiAhbXRlX2lzX3Jvb3QobWFzLVx1MDAzZW5vZGUpKVxuK1x0XHRtYXNfdXBkYXRlX2dhcF9rbm93bihtYXMsIGNwLVx1MDAzZWdhcFswXSk7XG4gXG4gXHRtdHJlZV9yYW5nZV93YWxrKG1hcyk7XG4gfVxuQEAgLTI5MjgsMTMgKzI5OTUsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX2V4dGVuZF9zcGFubmluZ19udWxsKHN0cnVjdCBtYV93cl9zdGF0ZSAqbF93cl9tYXMsXG4gXHRcdGlmIChyX21hcy1cdTAwM2VsYXN0IFx1MDAzYyByX3dyX21hcy1cdTAwM2VyX21heClcbiBcdFx0XHRyX21hcy1cdTAwM2VsYXN0ID0gcl93cl9tYXMtXHUwMDNlcl9tYXg7XG4gXHRcdHJfbWFzLVx1MDAzZW9mZnNldCsrO1xuLVx0fSBlbHNlIGlmICgocl9tYXMtXHUwMDNlbGFzdCA9PSByX3dyX21hcy1cdTAwM2VyX21heCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgKHJfbWFzLVx1MDAzZWxhc3QgXHUwMDNjIHJfbWFzLVx1MDAzZW1heCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgIW1hc19zbG90X2xvY2tlZChyX21hcywgcl93cl9tYXMtXHUwMDNlc2xvdHMsIHJfbWFzLVx1MDAzZW9mZnNldCArIDEpKSB7XG4tXHRcdHJfbWFzLVx1MDAzZWxhc3QgPSBtYXNfc2FmZV9waXZvdChyX21hcywgcl93cl9tYXMtXHUwMDNlcGl2b3RzLFxuLVx0XHRcdFx0XHQgICAgIHJfd3JfbWFzLVx1MDAzZXR5cGUsIHJfbWFzLVx1MDAzZW9mZnNldCArIDEpO1xuLVx0XHRyX21hcy1cdTAwM2VvZmZzZXQrKztcbi1cdFx0cl93cl9tYXMtXHUwMDNlcl9tYXggPSByX21hcy1cdTAwM2VsYXN0O1xuIFx0fVxuIH1cbiBcbkBAIC0zMTI1LDcgKzMxODUsNyBAQCBzdGF0aWMgdm9pZCBtYXNfd3Jfc3Bhbm5pbmdfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4gc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIHtcbiBcdHVuc2lnbmVkIGNoYXIgZHN0X29mZnNldCwgb2Zmc2V0X2VuZDtcbi1cdHVuc2lnbmVkIGNoYXIgY29weV9zaXplLCBub2RlX3Bpdm90cztcbitcdHVuc2lnbmVkIGNoYXIgY29weV9zaXplLCBub2RlX3Bpdm90cywgbm9kZV9zbG90cztcbiBcdHN0cnVjdCBtYXBsZV9ub2RlIHJldXNlLCAqbmV3bm9kZTtcbiBcdHVuc2lnbmVkIGxvbmcgKmRzdF9waXZvdHM7XG4gXHR2b2lkIF9fcmN1ICoqZHN0X3Nsb3RzO1xuQEAgLTMxMzgsNiArMzE5OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfbm9kZV9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiBcdGluX3JjdSA9IG10X2luX3JjdShtYXMtXHUwMDNldHJlZSk7XG4gXHRvZmZzZXRfZW5kID0gd3JfbWFzLVx1MDAzZW9mZnNldF9lbmQ7XG4gXHRub2RlX3Bpdm90cyA9IG10X3Bpdm90c1t3cl9tYXMtXHUwMDNldHlwZV07XG4rXHRub2RlX3Nsb3RzID0gbXRfc2xvdHNbd3JfbWFzLVx1MDAzZXR5cGVdO1xuIFx0LyogQXNzdW1lIGxhc3QgYWRkcyBhbiBlbnRyeSAqL1xuIFx0bmV3X2VuZCA9IG1hcy1cdTAwM2VlbmQgKyAxIC0gb2Zmc2V0X2VuZCArIG1hcy1cdTAwM2VvZmZzZXQ7XG4gXHRpZiAobWFzLVx1MDAzZWxhc3QgPT0gd3JfbWFzLVx1MDAzZWVuZF9waXYpIHtcbkBAIC0zMTQ5LDcgKzMyMTAsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbWFzX3dyX25vZGVfc3RvcmUoc3RydWN0IG1hX3dyX3N0YXRlICp3cl9tYXMpXG4gXHRpZiAoaW5fcmN1KSB7XG4gXHRcdG5ld25vZGUgPSBtYXNfcG9wX25vZGUobWFzKTtcbiBcdH0gZWxzZSB7XG4tXHRcdG1lbXNldChcdTAwMjZyZXVzZSwgMCwgc2l6ZW9mKHN0cnVjdCBtYXBsZV9ub2RlKSk7XG4gXHRcdG5ld25vZGUgPSBcdTAwMjZyZXVzZTtcbiBcdH1cbiBcbkBAIC0zMTkzLDcgKzMyNTMsMjEgQEAgc3RhdGljIGlubGluZSB2b2lkIG1hc193cl9ub2RlX3N0b3JlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIFx0XHRkc3RfcGl2b3RzW25ld19lbmRdID0gbWFzLVx1MDAzZW1heDtcbiBcbiBkb25lOlxuLVx0bWFzX2xlYWZfc2V0X21ldGEobmV3bm9kZSwgbWFwbGVfbGVhZl82NCwgbmV3X2VuZCk7XG4rXHRpZiAoIWluX3JjdSBcdTAwMjZcdTAwMjYgbmV3X2VuZCArIDIgXHUwMDNjIG5vZGVfc2xvdHMpIHtcbitcdFx0dW5zaWduZWQgY2hhciBjbGVhcl9mcm9tID0gbmV3X2VuZCArIDE7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIE5vdGUgdGhhdCB0aGUgbGFzdCBzbG90IGlzIG5ldmVyIGNsZWFyZWQsIHNpbmNlIHRoZSBtZXRhZGF0YVxuK1x0XHQgKiB3aWxsIGJlIHN0b3JlZCB0aGVyZSBvciBpdCBoYXMgYSB2YWx1ZS5cbitcdFx0ICovXG4rXHRcdG1lbXNldChkc3Rfc2xvdHMgKyBjbGVhcl9mcm9tLCAwLFxuK1x0XHQgICAgICAgc2l6ZW9mKHZvaWQgX19yY3UgKikgKiAobm9kZV9zbG90cyAtIGNsZWFyX2Zyb20pKTtcbitcdFx0aWYgKGNsZWFyX2Zyb20gXHUwMDNjIG5vZGVfcGl2b3RzKVxuK1x0XHRcdG1lbXNldChkc3RfcGl2b3RzICsgY2xlYXJfZnJvbSwgMCxcbitcdFx0XHQgICAgICAgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogKG5vZGVfcGl2b3RzIC0gY2xlYXJfZnJvbSkpO1xuK1x0fVxuK1xuK1x0bWFzX2xlYWZfc2V0X21ldGEobmV3bm9kZSwgd3JfbWFzLVx1MDAzZXR5cGUsIG5ld19lbmQpO1xuIFx0aWYgKGluX3JjdSkge1xuIFx0XHRzdHJ1Y3QgbWFwbGVfZW5vZGUgKm9sZF9lbm9kZSA9IG1hcy1cdTAwM2Vub2RlO1xuIFxuQEAgLTMyMTgsNyArMzI5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXNfd3Jfc2xvdF9zdG9yZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiBcdHZvaWQgX19yY3UgKipzbG90cyA9IHdyX21hcy1cdTAwM2VzbG90cztcbiBcdGJvb2wgZ2FwID0gZmFsc2U7XG4gXG4tXHRnYXAgfD0gIW10X3Nsb3RfbG9ja2VkKG1hcy1cdTAwM2V0cmVlLCBzbG90cywgb2Zmc2V0KTtcbitcdGdhcCB8PSAhd3JfbWFzLVx1MDAzZWNvbnRlbnQ7XG4gXHRnYXAgfD0gIW10X3Nsb3RfbG9ja2VkKG1hcy1cdTAwM2V0cmVlLCBzbG90cywgb2Zmc2V0ICsgMSk7XG4gXG4gXHRpZiAod3JfbWFzLVx1MDAzZW9mZnNldF9lbmQgLSBvZmZzZXQgPT0gMSkge1xuQEAgLTM2NjEsNiArMzczNSw5IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBzdG9yZV90eXBlIG1hc193cl9zdG9yZV90eXBlKHN0cnVjdCBtYV93cl9zdGF0ZSAqd3JfbWFzKVxuIHtcbiBcdHN0cnVjdCBtYV9zdGF0ZSAqbWFzID0gd3JfbWFzLVx1MDAzZW1hcztcbiBcdHVuc2lnbmVkIGNoYXIgbmV3X2VuZDtcbitcdGJvb2wgYXBwZW5kaW5nO1xuK1x0Ym9vbCBvbmVfc2xvdDtcbitcdGJvb2wgaW5fcmN1O1xuIFxuIFx0aWYgKHVubGlrZWx5KG1hc19pc19ub25lKG1hcykgfHwgbWFzX2lzX3B0cihtYXMpKSlcbiBcdFx0cmV0dXJuIHdyX3N0b3JlX3Jvb3Q7XG5AQCAtMzY4MCwyMSArMzc1NywzMCBAQCBzdGF0aWMgaW5saW5lIGVudW0gc3RvcmVfdHlwZSBtYXNfd3Jfc3RvcmVfdHlwZShzdHJ1Y3QgbWFfd3Jfc3RhdGUgKndyX21hcylcbiBcdFx0cmV0dXJuIHdyX25ld19yb290O1xuIFxuIFx0bmV3X2VuZCA9IG1hc193cl9uZXdfZW5kKHdyX21hcyk7XG4rXHRpbl9yY3UgPSBtdF9pbl9yY3UobWFzLVx1MDAzZXRyZWUpO1xuK1x0YXBwZW5kaW5nID0gbWFzLVx1MDAzZW9mZnNldCA9PSBtYXMtXHUwMDNlZW5kO1xuK1x0b25lX3Nsb3QgPSB3cl9tYXMtXHUwMDNlb2Zmc2V0X2VuZCAtIG1hcy1cdTAwM2VvZmZzZXQgPT0gMTtcbitcbiBcdC8qIFBvdGVudGlhbCBzcGFubmluZyByZWJhbGFuY2UgY29sbGFwc2luZyBhIG5vZGUgKi9cbiBcdGlmIChuZXdfZW5kIFx1MDAzYyBtdF9taW5fc2xvdHNbd3JfbWFzLVx1MDAzZXR5cGVdKSB7XG4gXHRcdGlmICghbXRlX2lzX3Jvb3QobWFzLVx1MDAzZW5vZGUpKVxuIFx0XHRcdHJldHVybiAgd3JfcmViYWxhbmNlO1xuK1x0XHRpZiAoIWluX3JjdSkge1xuK1x0XHRcdGlmIChhcHBlbmRpbmcpXG4rXHRcdFx0XHRyZXR1cm4gd3JfYXBwZW5kO1xuK1x0XHRcdGVsc2UgaWYgKG1hcy1cdTAwM2VlbmQgPT0gbmV3X2VuZCBcdTAwMjZcdTAwMjYgb25lX3Nsb3QpXG4rXHRcdFx0XHRyZXR1cm4gd3Jfc2xvdF9zdG9yZTtcbitcdFx0fVxuIFx0XHRyZXR1cm4gd3Jfbm9kZV9zdG9yZTtcbiBcdH1cbiBcbiBcdGlmIChuZXdfZW5kIFx1MDAzZT0gbXRfc2xvdHNbd3JfbWFzLVx1MDAzZXR5cGVdKVxuIFx0XHRyZXR1cm4gd3Jfc3BsaXRfc3RvcmU7XG4gXG4tXHRpZiAoIW10X2luX3JjdShtYXMtXHUwMDNldHJlZSkgXHUwMDI2XHUwMDI2IChtYXMtXHUwMDNlb2Zmc2V0ID09IG1hcy1cdTAwM2VlbmQpKVxuK1x0aWYgKCFpbl9yY3UgXHUwMDI2XHUwMDI2IGFwcGVuZGluZylcbiBcdFx0cmV0dXJuIHdyX2FwcGVuZDtcbiBcbi1cdGlmICgobmV3X2VuZCA9PSBtYXMtXHUwMDNlZW5kKSBcdTAwMjZcdTAwMjYgKCFtdF9pbl9yY3UobWFzLVx1MDAzZXRyZWUpIHx8XG4tXHRcdCh3cl9tYXMtXHUwMDNlb2Zmc2V0X2VuZCAtIG1hcy1cdTAwM2VvZmZzZXQgPT0gMSkpKVxuK1x0aWYgKG5ld19lbmQgPT0gbWFzLVx1MDAzZWVuZCBcdTAwMjZcdTAwMjYgKCFpbl9yY3UgfHwgb25lX3Nsb3QpKVxuIFx0XHRyZXR1cm4gd3Jfc2xvdF9zdG9yZTtcbiBcbiBcdHJldHVybiB3cl9ub2RlX3N0b3JlO1xuQEAgLTM3OTMsMzUgKzM4NzksNDAgQEAgaW50IG1hc19hbGxvY19jeWNsaWMoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0cCxcbiBcdFx0dm9pZCAqZW50cnksIHVuc2lnbmVkIGxvbmcgcmFuZ2VfbG8sIHVuc2lnbmVkIGxvbmcgcmFuZ2VfaGksXG4gXHRcdHVuc2lnbmVkIGxvbmcgKm5leHQsIGdmcF90IGdmcClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIG1pbiA9IHJhbmdlX2xvO1xuLVx0aW50IHJldCA9IDA7XG4tXG4tXHRyYW5nZV9sbyA9IG1heChtaW4sICpuZXh0KTtcbi1cdHJldCA9IG1hc19lbXB0eV9hcmVhKG1hcywgcmFuZ2VfbG8sIHJhbmdlX2hpLCAxKTtcbi1cdGlmICgobWFzLVx1MDAzZXRyZWUtXHUwMDNlbWFfZmxhZ3MgXHUwMDI2IE1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQpIFx1MDAyNlx1MDAyNiByZXQgPT0gMCkge1xuLVx0XHRtYXMtXHUwMDNldHJlZS1cdTAwM2VtYV9mbGFncyBcdTAwMjY9IH5NVF9GTEFHU19BTExPQ19XUkFQUEVEO1xuLVx0XHRyZXQgPSAxO1xuLVx0fVxuLVx0aWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgcmFuZ2VfbG8gXHUwMDNlIG1pbikge1xuLVx0XHRtYXNfcmVzZXQobWFzKTtcbi1cdFx0cmV0ID0gbWFzX2VtcHR5X2FyZWEobWFzLCBtaW4sIHJhbmdlX2hpLCAxKTtcbi1cdFx0aWYgKHJldCA9PSAwKVxuLVx0XHRcdHJldCA9IDE7XG4tXHR9XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0aW50IHJldDtcbitcdHVuc2lnbmVkIGxvbmcgbWluO1xuIFxuK1x0bWluID0gcmFuZ2VfbG87XG4gXHRkbyB7XG4rXHRcdHJhbmdlX2xvID0gbWF4KG1pbiwgKm5leHQpO1xuK1x0XHRyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIHJhbmdlX2xvLCByYW5nZV9oaSwgMSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHJhbmdlX2xvIFx1MDAzZSBtaW4pIHtcbitcdFx0XHRtYXNfcmVzZXQobWFzKTtcbitcdFx0XHRyZXQgPSBtYXNfZW1wdHlfYXJlYShtYXMsIG1pbiwgcmFuZ2VfaGksIDEpO1xuK1x0XHRcdGlmIChyZXQgPT0gMClcbitcdFx0XHRcdHJldCA9IDE7XG4rXHRcdH1cbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIG91dDtcbitcbiBcdFx0bWFzX2luc2VydChtYXMsIGVudHJ5KTtcbiBcdH0gd2hpbGUgKG1hc19ub21lbShtYXMsIGdmcCkpO1xuLVx0aWYgKG1hc19pc19lcnIobWFzKSlcbi1cdFx0cmV0dXJuIHhhX2VycihtYXMtXHUwMDNlbm9kZSk7XG4gXG4rXHRpZiAobWFzX2lzX2VycihtYXMpKSB7XG4rXHRcdHJldCA9IHhhX2VycihtYXMtXHUwMDNlbm9kZSk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0aWYgKChtYXMtXHUwMDNldHJlZS1cdTAwM2VtYV9mbGFncyBcdTAwMjYgTVRfRkxBR1NfQUxMT0NfV1JBUFBFRCkgXHUwMDI2XHUwMDI2IHJldCA9PSAwKSB7XG4rXHRcdG1hcy1cdTAwM2V0cmVlLVx1MDAzZW1hX2ZsYWdzIFx1MDAyNj0gfk1UX0ZMQUdTX0FMTE9DX1dSQVBQRUQ7XG4rXHRcdHJldCA9IDE7XG4rXHR9XG4gXHQqc3RhcnRwID0gbWFzLVx1MDAzZWluZGV4O1xuIFx0Km5leHQgPSAqc3RhcnRwICsgMTtcbiBcdGlmICgqbmV4dCA9PSAwKVxuIFx0XHRtYXMtXHUwMDNldHJlZS1cdTAwM2VtYV9mbGFncyB8PSBNVF9GTEFHU19BTExPQ19XUkFQUEVEO1xuIFxuK291dDpcbiBcdG1hc19kZXN0cm95KG1hcyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC00MzYwLDggKzQ0NTEsOCBAQCB2b2lkICptYXNfd2FsayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcbiB7XG4gXHR2b2lkICplbnRyeTtcbiBcbi1cdGlmICghbWFzX2lzX2FjdGl2ZShtYXMpIFx1MDAyNlx1MDAyNiAhbWFzX2lzX3N0YXJ0KG1hcykpXG4tXHRcdG1hcy1cdTAwM2VzdGF0dXMgPSBtYV9zdGFydDtcbitcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4rXHRtYXNfbWFrZV93YWxrYWJsZShtYXMpO1xuIHJldHJ5OlxuIFx0ZW50cnkgPSBtYXNfc3RhdGVfd2FsayhtYXMpO1xuIFx0aWYgKG1hc19pc19zdGFydChtYXMpKSB7XG5AQCAtNDgzMSw2ICs0OTIyLDcgQEAgdm9pZCAqbWFzX3N0b3JlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSlcbiB7XG4gXHRNQV9XUl9TVEFURSh3cl9tYXMsIG1hcywgZW50cnkpO1xuIFxuK1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdHRyYWNlX21hX3dyaXRlKFRQX0ZDVCwgbWFzLCAwLCBlbnRyeSk7XG4gI2lmZGVmIENPTkZJR19ERUJVR19NQVBMRV9UUkVFXG4gXHRpZiAoTUFTX1dBUk5fT04obWFzLCBtYXMtXHUwMDNlaW5kZXggXHUwMDNlIG1hcy1cdTAwM2VsYXN0KSlcbkBAIC00ODg5LDYgKzQ5ODEsNyBAQCBpbnQgbWFzX3N0b3JlX2dmcChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnksIGdmcF90IGdmcClcbiBcdE1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBlbnRyeSk7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbitcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gcmV0cnk6XG4gXHRtYXNfd3JfcHJlYWxsb2NhdGUoXHUwMDI2d3JfbWFzLCBlbnRyeSk7XG4gXHRpZiAodW5saWtlbHkobWFzX25vbWVtKG1hcywgZ2ZwKSkpIHtcbkBAIC00OTE5LDYgKzUwMTIsNyBAQCB2b2lkIG1hc19zdG9yZV9wcmVhbGxvYyhzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdm9pZCAqZW50cnkpXG4ge1xuIFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIGVudHJ5KTtcbiBcbitcdG1hc19sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzLVx1MDAzZXN0b3JlX3R5cGUgPT0gd3Jfc3RvcmVfcm9vdCkge1xuIFx0XHRtYXNfd3JfcHJlYWxsb2Nfc2V0dXAoXHUwMDI2d3JfbWFzKTtcbiBcdFx0Z290byBzdG9yZTtcbkBAIC00OTUxLDYgKzUwNDUsNyBAQCBpbnQgbWFzX3ByZWFsbG9jYXRlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB2b2lkICplbnRyeSwgZ2ZwX3QgZ2ZwKVxuIHtcbiBcdE1BX1dSX1NUQVRFKHdyX21hcywgbWFzLCBlbnRyeSk7XG4gXG4rXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0bWFzX3dyX3ByZWFsbG9jX3NldHVwKFx1MDAyNndyX21hcyk7XG4gXHRtYXMtXHUwMDNlc3RvcmVfdHlwZSA9IG1hc193cl9zdG9yZV90eXBlKFx1MDAyNndyX21hcyk7XG4gXHRtYXNfcHJlYWxsb2NfY2FsYyhcdTAwMjZ3cl9tYXMsIGVudHJ5KTtcbkBAIC00OTk3LDYgKzUwOTIsNyBAQCBzdGF0aWMgdm9pZCBtYXNfbWF5X2FjdGl2YXRlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIFx0XHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XG4gXHR9IGVsc2Uge1xuIFx0XHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfYWN0aXZlO1xuK1x0XHRtYXNfbG9ja19jaGVjayhtYXMpO1xuIFx0fVxuIH1cbiBcbkBAIC01MDc0LDYgKzUxNzAsNyBAQCB2b2lkICptYXNfbmV4dChzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtYXgpXG4ge1xuIFx0dm9pZCAqZW50cnkgPSBOVUxMO1xuIFxuK1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfbmV4dF9zZXR1cChtYXMsIG1heCwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTA5Nyw2ICs1MTk0LDcgQEAgdm9pZCAqbWFzX25leHRfcmFuZ2Uoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbitcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzX25leHRfc2V0dXAobWFzLCBtYXgsIFx1MDAyNmVudHJ5KSlcbiBcdFx0cmV0dXJuIGVudHJ5O1xuIFxuQEAgLTUyMDUsNiArNTMwMyw3IEBAIHZvaWQgKm1hc19wcmV2KHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbilcbiB7XG4gXHR2b2lkICplbnRyeSA9IE5VTEw7XG4gXG4rXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19wcmV2X3NldHVwKG1hcywgbWluLCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01MjI4LDYgKzUzMjcsNyBAQCB2b2lkICptYXNfcHJldl9yYW5nZShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pXG4ge1xuIFx0dm9pZCAqZW50cnkgPSBOVUxMO1xuIFxuK1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfcHJldl9zZXR1cChtYXMsIG1pbiwgXHUwMDI2ZW50cnkpKVxuIFx0XHRyZXR1cm4gZW50cnk7XG4gXG5AQCAtNTI3NCw2ICs1Mzc0LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwobXRfcHJldik7XG4gICovXG4gdm9pZCBtYXNfcGF1c2Uoc3RydWN0IG1hX3N0YXRlICptYXMpXG4ge1xuK1x0bWFzX2xvY2tfY2hlY2sobWFzKTtcbiBcdG1hcy1cdTAwM2VzdGF0dXMgPSBtYV9wYXVzZTtcbiBcdG1hcy1cdTAwM2Vub2RlID0gTlVMTDtcbiB9XG5AQCAtNTM4Miw2ICs1NDgzLDcgQEAgdm9pZCAqbWFzX2ZpbmQoc3RydWN0IG1hX3N0YXRlICptYXMsIHVuc2lnbmVkIGxvbmcgbWF4KVxuIHtcbiBcdHZvaWQgKmVudHJ5ID0gTlVMTDtcbiBcbitcdG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKG1hcyk7XG4gXHRpZiAobWFzX2ZpbmRfc2V0dXAobWFzLCBtYXgsIFx1MDAyNmVudHJ5KSlcbiBcdFx0cmV0dXJuIGVudHJ5O1xuIFxuQEAgLTU0MDksNiArNTUxMSw3IEBAIHZvaWQgKm1hc19maW5kX3JhbmdlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1heClcbiB7XG4gXHR2b2lkICplbnRyeSA9IE5VTEw7XG4gXG4rXHRtYXNfbWF5X2luaXRfbG9ja19jaGVjayhtYXMpO1xuIFx0aWYgKG1hc19maW5kX3NldHVwKG1hcywgbWF4LCBcdTAwMjZlbnRyeSkpXG4gXHRcdHJldHVybiBlbnRyeTtcbiBcbkBAIC01NDI4LDcgKzU1MzEsNiBAQCBFWFBPUlRfU1lNQk9MX0dQTChtYXNfZmluZF9yYW5nZSk7XG4gc3RhdGljIGJvb2wgbWFzX2ZpbmRfcmV2X3NldHVwKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCB1bnNpZ25lZCBsb25nIG1pbixcbiBcdFx0dm9pZCAqKmVudHJ5KVxuIHtcbi1cbiBcdHN3aXRjaCAobWFzLVx1MDAzZXN0YXR1cykge1xuIFx0Y2FzZSBtYV9hY3RpdmU6XG4gXHRcdGdvdG8gYWN0aXZlO1xuQEAgLTU1MjEsNiArNTYyMyw3IEBAIHZvaWQgKm1hc19maW5kX3JldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pXG4ge1xuIFx0dm9pZCAqZW50cnkgPSBOVUxMO1xuIFxuK1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfZmluZF9yZXZfc2V0dXAobWFzLCBtaW4sIFx1MDAyNmVudHJ5KSlcbiBcdFx0cmV0dXJuIGVudHJ5O1xuIFxuQEAgLTU1NDcsNiArNTY1MCw3IEBAIHZvaWQgKm1hc19maW5kX3JhbmdlX3JldihzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgdW5zaWduZWQgbG9uZyBtaW4pXG4ge1xuIFx0dm9pZCAqZW50cnkgPSBOVUxMO1xuIFxuK1x0bWFzX21heV9pbml0X2xvY2tfY2hlY2sobWFzKTtcbiBcdGlmIChtYXNfZmluZF9yZXZfc2V0dXAobWFzLCBtaW4sIFx1MDAyNmVudHJ5KSlcbiBcdFx0cmV0dXJuIGVudHJ5O1xuIFxuQEAgLTU1NjQsNiArNTY2OCwxMCBAQCBFWFBPUlRfU1lNQk9MX0dQTChtYXNfZmluZF9yYW5nZV9yZXYpO1xuICAqIFNlYXJjaGVzIGZvciBAbWFzLVx1MDAzZWluZGV4LCBzZXRzIEBtYXMtXHUwMDNlaW5kZXggYW5kIEBtYXMtXHUwMDNlbGFzdCB0byB0aGUgcmFuZ2UgYW5kXG4gICogZXJhc2VzIHRoYXQgcmFuZ2UuXG4gICpcbisgKiBOb3RlIHRoYXQgZXJhc2UgcmVxdWlyZXMgYWxsb2NhdGlvbnMgYW5kIHdpbGwgdXNlIEdGUF9LRVJORUwgdG8gZG8gc28gaWZcbisgKiBuZWNlc3NhcnkuICBJZiB0aGUgYWxsb2NhdGlvbiBmYWlscywgdGhlIGludGVybmFsIGxvY2sgd2lsbCBiZSBkcm9wcGVkIHRvXG4rICogcmV0cnkuXG4rICpcbiAgKiBSZXR1cm46IHRoZSBlbnRyeSB0aGF0IHdhcyBlcmFzZWQgb3IgJU5VTEwsIEBtYXMtXHUwMDNlaW5kZXggYW5kIEBtYXMtXHUwMDNlbGFzdCBhcmUgdXBkYXRlZC5cbiAgKi9cbiB2b2lkICptYXNfZXJhc2Uoc3RydWN0IG1hX3N0YXRlICptYXMpXG5AQCAtNTU3MiwxMyArNTY4MCwxOSBAQCB2b2lkICptYXNfZXJhc2Uoc3RydWN0IG1hX3N0YXRlICptYXMpXG4gXHR1bnNpZ25lZCBsb25nIGluZGV4ID0gbWFzLVx1MDAzZWluZGV4O1xuIFx0TUFfV1JfU1RBVEUod3JfbWFzLCBtYXMsIE5VTEwpO1xuIFxuLVx0aWYgKCFtYXNfaXNfYWN0aXZlKG1hcykgfHwgIW1hc19pc19zdGFydChtYXMpKVxuLVx0XHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XG4rXHQvKlxuK1x0ICogSW4gbG93IG1lbW9yeSBzaXR1YXRpb25zLCB0aGUgYWxsb2NhdGlvbiBpcyByZXRyaWVkIHdpdGggdGhlIGdmcCBmbGFnXG4rXHQgKiBHRlBfS0VSTkVMLiAgVGhlIGludGVybmFsIHNwaW5sb2NrIGlzIGRyb3BwZWQgaW4gbWFzX25vbWVtKCksIGhvd2V2ZXJcbitcdCAqIHRoZSBleHRlcm5hbCBsb2NrIGlzIG5vdCBkcm9wcGVkLlxuK1x0ICovXG4rXHRpZiAobXRfZXh0ZXJuYWxfbG9jayhtYXMtXHUwMDNldHJlZSkpXG4rXHRcdG1pZ2h0X2FsbG9jKEdGUF9LRVJORUwpO1xuIFxuK1x0bWFzX21ha2Vfd2Fsa2FibGUobWFzKTtcbiB3cml0ZV9yZXRyeTpcbiBcdGVudHJ5ID0gbWFzX3N0YXRlX3dhbGsobWFzKTtcbiBcdGlmICghZW50cnkpXG4tXHRcdHJldHVybiBOVUxMO1xuK1x0XHRnb3RvIG91dDtcbiBcbiBcdC8qIE11c3QgcmVzZXQgdG8gZW5zdXJlIHNwYW5uaW5nIHdyaXRlcyBvZiBsYXN0IHNsb3QgYXJlIGRldGVjdGVkICovXG4gXHRtYXNfcmVzZXQobWFzKTtcbkBAIC01NTg5LDggKzU3MDMsMTAgQEAgdm9pZCAqbWFzX2VyYXNlKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxuIFx0XHRnb3RvIHdyaXRlX3JldHJ5O1xuIFx0fVxuIFxuLVx0aWYgKG1hc19pc19lcnIobWFzKSlcbitcdGlmIChtYXNfaXNfZXJyKG1hcykpIHtcbitcdFx0ZW50cnkgPSBOVUxMO1xuIFx0XHRnb3RvIG91dDtcbitcdH1cbiBcbiBcdG1hc193cl9zdG9yZV9lbnRyeShcdTAwMjZ3cl9tYXMpO1xuIG91dDpcbkBAIC01NjAxLDEwICs1NzE3LDExIEBAIEVYUE9SVF9TWU1CT0xfR1BMKG1hc19lcmFzZSk7XG4gXG4gLyoqXG4gICogbWFzX25vbWVtKCkgLSBDaGVjayBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgYWxsb2NhdGluZyBhbmQgZG8gdGhlIGFsbG9jYXRpb25cbi0gKiBpZiBuZWNlc3NhcnkgSWYgdGhlcmUgYXJlIGFsbG9jYXRpb25zLCB0aGVuIGZyZWUgdGhlbS5cbisgKiBpZiBuZWNlc3NhcnkuXG4rICpcbiAgKiBAbWFzOiBUaGUgbWFwbGUgc3RhdGVcbiAgKiBAZ2ZwOiBUaGUgR0ZQX0ZMQUdTIHRvIHVzZSBmb3IgYWxsb2NhdGlvbnNcbi0gKiBSZXR1cm46IHRydWUgb24gYWxsb2NhdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLlxuKyAqIFJldHVybjogRmFsc2Ugb24gbm8gbWVtb3J5LiAgVHJ1ZSBvdGhlcndpc2UgKHBhcnRpYWwgc3VjY2VzcyBhcyB3ZWxsKVxuICAqL1xuIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApXG4gXHRfX211c3RfaG9sZChtYXMtXHUwMDNldHJlZS1cdTAwM2VtYV9sb2NrKVxuQEAgLTU2MTIsNiArNTcyOSwxMCBAQCBib29sIG1hc19ub21lbShzdHJ1Y3QgbWFfc3RhdGUgKm1hcywgZ2ZwX3QgZ2ZwKVxuIFx0aWYgKGxpa2VseShtYXMtXHUwMDNlbm9kZSAhPSBNQV9FUlJPUigtRU5PTUVNKSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbitcdC8qIEFsbG9jYXRpb25zIGNhbiBmYWlsLCBkb24ndCBkbyB0aGlzLiAqL1xuK1x0V0FSTl9PTl9PTkNFKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIG10X2V4dGVybmFsX2xvY2sobWFzLVx1MDAzZXRyZWUpKTtcbitcbiBcdGlmIChnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnApIFx1MDAyNlx1MDAyNiAhbXRfZXh0ZXJuYWxfbG9jayhtYXMtXHUwMDNldHJlZSkpIHtcbiBcdFx0bXRyZWVfdW5sb2NrKG1hcy1cdTAwM2V0cmVlKTtcbiBcdFx0bWFzX2FsbG9jX25vZGVzKG1hcywgZ2ZwKTtcbkBAIC01NjIwLDEwICs1NzQxLDE3IEBAIGJvb2wgbWFzX25vbWVtKHN0cnVjdCBtYV9zdGF0ZSAqbWFzLCBnZnBfdCBnZnApXG4gXHRcdG1hc19hbGxvY19ub2RlcyhtYXMsIGdmcCk7XG4gXHR9XG4gXG4tXHRpZiAoIW1hcy1cdTAwM2VzaGVhZiBcdTAwMjZcdTAwMjYgIW1hcy1cdTAwM2VhbGxvYylcbitcdC8qXG4rXHQgKiBSZXR1cm4gZmFsc2Ugb24gemVybyBmb3J3YXJkIHByb2dyZXNzLiAgUGFydGlhbCBhbGxvY2F0aW9ucyBhcmUga2VwdFxuK1x0ICogc28gdGhlIHJldHJ5IHBhdGggd2lsbCBhdHRlbXB0IHRvIGdldCB0aGUgcmVzdC4gIFRoZSBmYWlsdXJlIHNob3VsZFxuK1x0ICogbm90IGhhcHBlbiBhcyB3ZSB0cnkgb3VyIGJlc3QgdG8gcmVjbGFpbS4gIFRoZSB1c2VyIHdvdWxkIG5lZWQgYW5cbitcdCAqIGV4dGVybmFsIGxvY2sgd2l0aCBhIG5vbi1ibG9ja2luZyBnZnAgaW4gYSBsb3cgbWVtb3J5IHNpdHVhdGlvbiAtXG4rXHQgKiB3aGljaCB3b3VsZCBoYXZlIHRyaWdnZXJlZCB0aGUgZmlyc3Qgd2FybmluZyBpbiB0aGlzIGZ1bmN0aW9uLlxuK1x0ICovXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFtYXMtXHUwMDNlc2hlYWYgXHUwMDI2XHUwMDI2ICFtYXMtXHUwMDNlYWxsb2MpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRtYXMtXHUwMDNlc3RhdHVzID0gbWFfc3RhcnQ7XG4rXHRtYXNfcmVzZXQobWFzKTtcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbkBAIC01OTEzLDYgKzYwNDEsMTAgQEAgRVhQT1JUX1NZTUJPTChtdHJlZV9hbGxvY19ycmFuZ2UpO1xuICAqIEVyYXNpbmcgaXMgdGhlIHNhbWUgYXMgYSB3YWxrIHRvIGFuIGVudHJ5IHRoZW4gYSBzdG9yZSBvZiBhIE5VTEwgdG8gdGhhdFxuICAqIEVOVElSRSByYW5nZS4gIEluIGZhY3QsIGl0IGlzIGltcGxlbWVudGVkIGFzIHN1Y2ggdXNpbmcgdGhlIGFkdmFuY2VkIEFQSS5cbiAgKlxuKyAqIE5vdGUgdGhhdCBlcmFzZSByZXF1aXJlcyBhbGxvY2F0aW9ucyBhbmQgd2lsbCB1c2UgR0ZQX0tFUk5FTCB0byBkbyBzbyBpZlxuKyAqIG5lY2Vzc2FyeS4gIElmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgaW50ZXJuYWwgbG9jayB3aWxsIGJlIGRyb3BwZWQgdG9cbisgKiByZXRyeS5cbisgKlxuICAqIFJldHVybjogVGhlIGVudHJ5IHN0b3JlZCBhdCB0aGUgQGluZGV4IG9yICVOVUxMXG4gICovXG4gdm9pZCAqbXRyZWVfZXJhc2Uoc3RydWN0IG1hcGxlX3RyZWUgKm10LCB1bnNpZ25lZCBsb25nIGluZGV4KVxuQEAgLTU5MjIsNiArNjA1NCw3IEBAIHZvaWQgKm10cmVlX2VyYXNlKHN0cnVjdCBtYXBsZV90cmVlICptdCwgdW5zaWduZWQgbG9uZyBpbmRleClcbiBcdE1BX1NUQVRFKG1hcywgbXQsIGluZGV4LCBpbmRleCk7XG4gXHR0cmFjZV9tYV9vcChUUF9GQ1QsIFx1MDAyNm1hcyk7XG4gXG4rXHRtaWdodF9hbGxvYyhHRlBfS0VSTkVMKTtcbiBcdG10cmVlX2xvY2sobXQpO1xuIFx0ZW50cnkgPSBtYXNfZXJhc2UoXHUwMDI2bWFzKTtcbiBcdG10cmVlX3VubG9jayhtdCk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmMgYi90b29scy90ZXN0aW5nL3JhZGl4LXRyZWUvbWFwbGUuY1xuaW5kZXggMDYwNzkxM2EzMDIyZDUuLmQ5NjdlNzZhM2MwNjUwIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9yYWRpeC10cmVlL21hcGxlLmNcbisrKyBiL3Rvb2xzL3Rlc3RpbmcvcmFkaXgtdHJlZS9tYXBsZS5jXG5AQCAtMzUyMzQsNyArMzUyMzQsNyBAQCBzdGF0aWMgbm9pbmxpbmUgdm9pZCBfX2luaXQgY2hlY2tfcHJlYWxsb2Moc3RydWN0IG1hcGxlX3RyZWUgKm10KVxuIFx0bXRfc2V0X25vbl9rZXJuZWwoMSk7XG4gXHQvKiBTcGFubmluZyBzdG9yZSAqL1xuIFx0bWFzX3NldF9yYW5nZShcdTAwMjZtYXMsIDEsIDEwMCk7XG4tXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX0tFUk5FTCBcdTAwMjYgR0ZQX05PV0FJVCkgPT0gMCk7XG4rXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX05PV0FJVCkgPT0gMCk7XG4gXHRhbGxvY2F0ZWQgPSBtYXNfYWxsb2NhdGVkKFx1MDAyNm1hcyk7XG4gXHRoZWlnaHQgPSBtYXNfbXRfaGVpZ2h0KFx1MDAyNm1hcyk7XG4gXHRNVF9CVUdfT04obXQsIGFsbG9jYXRlZCAhPSAwKTtcbkBAIC0zNTI1Nyw3ICszNTI1Nyw3IEBAIHN0YXRpYyBub2lubGluZSB2b2lkIF9faW5pdCBjaGVja19wcmVhbGxvYyhzdHJ1Y3QgbWFwbGVfdHJlZSAqbXQpXG4gXHRNVF9CVUdfT04obXQsIG1hc19hbGxvY2F0ZWQoXHUwMDI2bWFzKSAhPSAwKTtcbiBcdG1hc19zZXRfcmFuZ2UoXHUwMDI2bWFzLCAwLCAyMDApO1xuIFx0bXRfc2V0X25vbl9rZXJuZWwoMSk7XG4tXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX0tFUk5FTCBcdTAwMjYgR0ZQX05PV0FJVCkgPT0gMCk7XG4rXHRNVF9CVUdfT04obXQsIG1hc19wcmVhbGxvY2F0ZShcdTAwMjZtYXMsIHB0ciwgR0ZQX05PV0FJVCkgPT0gMCk7XG4gXHRhbGxvY2F0ZWQgPSBtYXNfYWxsb2NhdGVkKFx1MDAyNm1hcyk7XG4gXHRoZWlnaHQgPSBtYXNfbXRfaGVpZ2h0KFx1MDAyNm1hcyk7XG4gXHRNVF9CVUdfT04obXQsIGFsbG9jYXRlZCAhPSAwKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI0OjU1LjM4OTM3NTY5N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5ODU0MDE2MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCdzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIHN0dWZmIOKAkyB0aGUgTWFwbGUgVHJlZSwgbG9ja2RlcCwgYW5kIHRoZSBkb2N1bWVudGF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBmYWlybHkgc3Vic3RhbnRpYWwgY2hhbmdlLiBJIHNlZSB0aGV5J3JlIGludHJvZHVjaW5nIGBsb2NrX3NlcXVlbmNlYCBpbnRvIGxvY2tkZXAsIGFkZGluZyBgbGRfc2VxYCB0byB0aGUgYHN0cnVjdCBtYV9zdGF0ZWAgd2l0aGluIHRoZSBtYXBsZSB0cmVlIGNvZGUsIGFuZCBpbXBvcnRhbnRseSwgdGhleSdyZSBlbWJlZGRpbmcgbG9ja2RlcCBjaGVja3Mgd2l0aGluIGNvcmUgTWFwbGUgVHJlZSBvcGVyYXRpb25zIGxpa2UgYG1hc19sb2NrX2NoZWNrYCwgYG1hc19pbml0X2xvY2tfY2hlY2tgLCBhbmQgYG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrYC4gSSBub3RlIHRoZSBjaGFuZ2VzIHRvIGBtYXNfZXJhc2VgIHRvIGhhbmRsZSBwb3RlbnRpYWwgbG93LW1lbW9yeSBzY2VuYXJpb3MsIGluY2x1ZGluZyB0aGUgaW50cm9kdWN0aW9uIG9mIGBtaWdodF9hbGxvYyhHRlBfS0VSTkVMKWAgd2hlbiBhbiBleHRlcm5hbCBsb2NrIGlzIGluIHBsYXkuIEkgYWxzbyBzZWUgbW9kaWZpY2F0aW9ucyB0byBgbWFzX3dyX25vZGVfc3RvcmVgIGFuZCBgbWFzX3dyX3N0b3JlX3R5cGVgLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHJlcXVpcmVzIGNhcmVmdWwgc2NydXRpbnkuIFNpbmNlIHRoaXMgcGF0Y2ggbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMsIHNwZWNpZmljYWxseSB0aGUgTWFwbGUgVHJlZSBpbXBsZW1lbnRhdGlvbiBhbmQgbG9ja2RlcCwgSSBrbm93IGZ1enppbmcgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbC4gV2UgbmVlZCB0byBleHBvc2UgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgbWVtb3J5IHByb2JsZW1zIGVhcmx5LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aG9zZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gRm9yIGxvY2tkZXAsIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYENPTkZJR19MT0NLREVQYCBpcyB0aGUga2V5LiBXaXRoIHRoZSBNYXBsZSBUcmVlLCBpdCdzIGJha2VkIGludG8gdGhlIGtlcm5lbC4gQWx0aG91Z2ggYWx3YXlzIGVuYWJsZWQsIEkga25vdyBgQ09ORklHX0RFQlVHX01BUExFX1RSRUVgIHdvdWxkIGJlIGhlbHBmdWwgd2hlbiBkZWJ1Z2dpbmcuIEkgc2hvdWxkIHByb2JhYmx5IGRvIGEgcXVpY2sgYGdpdCBncmVwYCBvbiB0aGUgY29uZmlncyB0byBjb25maXJtIGFueSBzcGVjaWZpYyBjb25maWdzIHRoYXQgYXBwbHkgdG8gdGhlIE1hcGxlIFRyZWUgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NjgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMjoyNTowMS4zNzQ3ODI5MDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1MDE2NTYwMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1BUExFX1RSRUVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI1OjAzLjgyNDk2MDIxOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3ODEyOTc5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipLY29uZmlnIEluc3BlY3Rpb24gZm9yIE1hcGxlIFRyZWUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE1hcGxlIFRyZWUgaXMgYmVpbmcgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBzeXN0ZW0uIFRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgbGliL0tjb25maWdgIGZpbGUuIFRoYXQncyB3aGVyZSB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIG1hbnkga2VybmVsIHN1YnN5c3RlbXMgYXJlIGRlZmluZWQuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGlzIGZpbGUgd2lsbCBsaWtlbHkgY29udGFpbiB0aGUgb3B0aW9ucyByZWxhdGVkIHRvIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgTWFwbGUgVHJlZSBmZWF0dXJlLCBtYXliZSBzb21lIGFzc29jaWF0ZWQgcGFyYW1ldGVycywgYW5kIHBvdGVudGlhbGx5IGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGNvbXBvbmVudHMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCBjb25maWd1cmF0aW9uIGNvbnRyb2xzIGFyZSBpbiBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE1OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI1OjA5LjYwNjI2MjE0OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTI2OTg0NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFQTEVfVFJFRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6MjU6MDkuNjcxNTQ3OTEyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2NzgzNDcwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkxvY2tpbmcgQ29uZmlndXJhdGlvbnMgaW4gdGhlIEtlcm5lbCoqXG5cblJpZ2h0LCBzbyB0aGUgTWFwbGUgdHJlZSBpcyBhbHdheXMgZW5hYmxlZCwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGBDT05GSUdfTE9DS0RFUGAuIFNpbmNlIGBQUk9WRV9MT0NLSU5HYCBpcyBtZW50aW9uZWQsIEkga25vdyBgTE9DS0RFUGAgaXMgYmVpbmcgaW5kaXJlY3RseSBlbmFibGVkLiBNYWtlcyBzZW5zZS4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhlIGxvY2tpbmcgcmVxdWlyZW1lbnRzIHJlbGF0ZSB0byB0aGUgb3ZlcmFsbCBjaGFuZ2UgYmVpbmcgZGlzY3Vzc2VkLiBBbmQgc2luY2UgdGhlIHBhdGNoIG1lbnRpb25zIGBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RgIHNwZWNpZmljYWxseSwgdGhhdCB3YXJyYW50cyBhIGRlZXBlciBsb29rLiBJJ2xsIG5lZWQgdG8gcmVjYWxsIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBzZXR0aW5nLiBJdCdzIGxpa2VseSByZWxhdGVkIHRvIHRoZSBncmFjZSBwZXJpb2QgaGFuZGxpbmcsIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBuZXcgTWFwbGUgdHJlZSBpbXBsZW1lbnRhdGlvbiBpcyBwcm9iYWJseSBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoaXMgcGF0Y2guIExldCdzIHNlZSBob3cgdGhhdCBjb21lcyBpbnRvIHBsYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzMzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6MjU6MTMuMDM5Mzg1Nzk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNzkzODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlJDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9tYXBsZV90cmVlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL21hcGxlX3RyZWUuYz0xMTcyPXN0YXRpYyB2b2lkIG1hc19sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbi0tXFxubGliL21hcGxlX3RyZWUuYy0xMTc4LVxcbmxpYi9tYXBsZV90cmVlLmM6MTE3OTojaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXFxubGliL21hcGxlX3RyZWUuYy0xMTgwLVxcdGlmICghbXRfbG9ja2VkKG1hcy1cXHUwMDNldHJlZSkpIHtcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmMtMTE4My1cXHR9XFxubGliL21hcGxlX3RyZWUuYzoxMTg0OiNlbmRpZiAvKiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QgKi9cXG5saWIvbWFwbGVfdHJlZS5jLTExODUtXFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jPTExOTM9c3RhdGljIHZvaWQgbWFzX2luaXRfbG9ja19jaGVjayhzdHJ1Y3QgbWFfc3RhdGUgKm1hcylcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmMtMTE5Ni1cXHRzdHJ1Y3QgbG9ja2RlcF9tYXAgKm1hcDtcXG5saWIvbWFwbGVfdHJlZS5jOjExOTc6I2lmZGVmIENPTkZJR19SQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFxcbmxpYi9tYXBsZV90cmVlLmMtMTE5OC1cXHRpZiAoIW10X2xvY2tlZChtYXMtXFx1MDAzZXRyZWUpKSB7XFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jLTEyMDItXFx0fVxcbmxpYi9tYXBsZV90cmVlLmM6MTIwMzojZW5kaWYgLyogQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EICovXFxubGliL21hcGxlX3RyZWUuYy0xMjA0LVxcbi0tXFxubGliL21hcGxlX3RyZWUuYz0xMjEyPXN0YXRpYyB2b2lkIG1hc19tYXlfaW5pdF9sb2NrX2NoZWNrKHN0cnVjdCBtYV9zdGF0ZSAqbWFzKVxcbi0tXFxubGliL21hcGxlX3RyZWUuYy0xMjE0LSNpZmRlZiBDT05GSUdfTE9DS0RFUFxcbmxpYi9tYXBsZV90cmVlLmM6MTIxNTojaWZkZWYgQ09ORklHX1JDVV9TVFJJQ1RfR1JBQ0VfUEVSSU9EXFxubGliL21hcGxlX3RyZWUuYy0xMjE2LVxcdGlmIChtYXNfaXNfc3RhcnQobWFzKSB8fCBtYXNfaXNfcGF1c2VkKG1hcykpIHtcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmMtMTIxOS1cXHR9XFxubGliL21hcGxlX3RyZWUuYzoxMjIwOiNlbmRpZiAvKiBDT05GSUdfUkNVX1NUUklDVF9HUkFDRV9QRVJJT0QgKi9cXG5saWIvbWFwbGVfdHJlZS5jLTEyMjEtXFx0bWFzX2xvY2tfY2hlY2sobWFzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDI6MjU6MTMuMTAxMTg3MjU5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY3MTQxODI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgUkNVIGFuZCBMb2NraW5nIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBgUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RgIGlzIGRlZmluaXRlbHkgaW4gcGxheS4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIHBvc3NpYmlsaXRpZXMgYSBiaXQgd2hlbiBjb25zaWRlcmluZyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIGFuZCBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIHRoZSBiYWNrIG9mIG15IG1pbmQuIFRoZW4sICpvZiBjb3Vyc2UqIGBDT05GSUdfTE9DS0RFUGAgaXMgZW5hYmxlZC4gVGhhdCdzIGdvb2Q7IGl0IG1lYW5zIHdlIGhhdmUgZXh0cmEgc2FmZXR5IGNoZWNrcywgd2hpY2ggaXMgYWx3YXlzIHdlbGNvbWUsIGV2ZW4gaWYgaXQgbWlnaHQgYWRkIHNvbWUgb3ZlcmhlYWQuIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IHRoZXNlIGRlYnVnIGNvbmZpZ3VyYXRpb25zIGNhbiBhZmZlY3QgcGVyZm9ybWFuY2Ugd2hlbiBJJ20gbG9va2luZyBhdCB0aW1pbmcgcHJvZmlsZXMgbGF0ZXIgb24uIE9rYXksIHdoYXQgZWxzZSBpcyBpbiBwbGF5PyBMZXQncyBhbHNvIHZlcmlmeSB3aGV0aGVyIGBDT05GSUdfREVCVUdfTUFQTEVfVFJFRWAgaXMgZW5hYmxlZC4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUgYXQgaGFuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMjoyNToxNi43NzI2MTA3MTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDk5NDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFQlVHX01BUExFX1RSRUVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL21hcGxlX3RyZWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvbWFwbGVfdHJlZS5jPTk2PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbWFwbGVfbm9kZV9jYWNoZTtcXG5saWIvbWFwbGVfdHJlZS5jLTk3LVxcbmxpYi9tYXBsZV90cmVlLmM6OTg6I2lmZGVmIENPTkZJR19ERUJVR19NQVBMRV9UUkVFXFxubGliL21hcGxlX3RyZWUuYy05OS1zdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBtdF9tYXhbXSA9IHtcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmM9NDkyMT12b2lkICptYXNfc3RvcmUoc3RydWN0IG1hX3N0YXRlICptYXMsIHZvaWQgKmVudHJ5KVxcbi0tXFxubGliL21hcGxlX3RyZWUuYy00OTI2LVxcdHRyYWNlX21hX3dyaXRlKFRQX0ZDVCwgbWFzLCAwLCBlbnRyeSk7XFxubGliL21hcGxlX3RyZWUuYzo0OTI3OiNpZmRlZiBDT05GSUdfREVCVUdfTUFQTEVfVFJFRVxcbmxpYi9tYXBsZV90cmVlLmMtNDkyOC1cXHRpZiAoTUFTX1dBUk5fT04obWFzLCBtYXMtXFx1MDAzZWluZGV4IFxcdTAwM2UgbWFzLVxcdTAwM2VsYXN0KSlcXG4tLVxcbmxpYi9tYXBsZV90cmVlLmM9NjM5Mj12b2lkICptdF9maW5kKHN0cnVjdCBtYXBsZV90cmVlICptdCwgdW5zaWduZWQgbG9uZyAqaW5kZXgsIHVuc2lnbmVkIGxvbmcgbWF4KVxcbi0tXFxubGliL21hcGxlX3RyZWUuYy02Mzk1LVxcdHZvaWQgKmVudHJ5O1xcbmxpYi9tYXBsZV90cmVlLmM6NjM5NjojaWZkZWYgQ09ORklHX0RFQlVHX01BUExFX1RSRUVcXG5saWIvbWFwbGVfdHJlZS5jLTYzOTctXFx0dW5zaWduZWQgbG9uZyBjb3B5ID0gKmluZGV4O1xcbi0tXFxubGliL21hcGxlX3RyZWUuYy02NDI4LVxcdFxcdCppbmRleCA9IG1hcy5sYXN0ICsgMTtcXG5saWIvbWFwbGVfdHJlZS5jOjY0Mjk6I2lmZGVmIENPTkZJR19ERUJVR19NQVBMRV9UUkVFXFxubGliL21hcGxlX3RyZWUuYy02NDMwLVxcdFxcdGlmIChNVF9XQVJOX09OKG10LCAoKmluZGV4KSBcXHUwMDI2XFx1MDAyNiAoKCppbmRleCkgXFx1MDAzYz0gY29weSkpKVxcbi0tXFxubGliL21hcGxlX3RyZWUuYz02NDYwPUVYUE9SVF9TWU1CT0wobXRfZmluZF9hZnRlcik7XFxubGliL21hcGxlX3RyZWUuYy02NDYxLVxcbmxpYi9tYXBsZV90cmVlLmM6NjQ2MjojaWZkZWYgQ09ORklHX0RFQlVHX01BUExFX1RSRUVcXG5saWIvbWFwbGVfdHJlZS5jLTY0NjMtYXRvbWljX3QgbWFwbGVfdHJlZV90ZXN0c19ydW47XFxuLS1cXG5saWIvbWFwbGVfdHJlZS5jPTcxNzY9RVhQT1JUX1NZTUJPTF9HUEwobWFzX3dyX2R1bXApO1xcbmxpYi9tYXBsZV90cmVlLmMtNzE3Ny1cXG5saWIvbWFwbGVfdHJlZS5jOjcxNzg6I2VuZGlmIC8qIENPTkZJR19ERUJVR19NQVBMRV9UUkVFICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI1OjE2LjgzNTEyMzk2N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTYzNzUyNDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWFwbGUgVHJlZSBQYXRjaCBmb3IgUG90ZW50aWFsIElzc3VlcyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIE1hcGxlIFRyZWUgY29kZS4gRW5hYmxpbmcgYERFQlVHX01BUExFX1RSRUVgIGlzIGEgZ29vZCBmaXJzdCBzdGVwIHRvIGhlbHAgd2l0aCBkZWJ1Z2dpbmcuIEkgc2hvdWxkIGFsc28gY2hlY2sgYFBST1ZFX0xPQ0tJTkdgIHRvIGVuYWJsZSBgTE9DS0RFUGAsIHdoaWNoIHdpbGwgYmUgY3J1Y2lhbCBmb3IgYW5hbHl6aW5nIGFueSBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gdGhlIHNwZWNpZmljcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYSByYW5nZSBvZiBNYXBsZSBUcmVlIGZ1bmN0aW9uczogYG1hc19lcmFzZWAsIGBtYXNfbm9tZW1gLCBgbWFzX2FsbG9jX2N5Y2xpY2AsIGBtYXNfd3Jfbm9kZV9zdG9yZWAsIGBtYXNfd3Jfc3RvcmVfdHlwZWAsIGBtYXNfc3RvcmVgLCBgbWFzX3N0b3JlX2dmcGAsIGBtYXNfc3RvcmVfcHJlYWxsb2NgLCBgbWFzX3ByZWFsbG9jYXRlYCwgYG1hc19uZXh0YCwgYG1hc19uZXh0X3JhbmdlYCwgYG1hc19wcmV2YCwgYG1hc19wcmV2X3JhbmdlYCwgYG1hc19maW5kYCwgYG1hc19maW5kX3JhbmdlYCwgYG1hc19maW5kX3JldmAsIGBtYXNfZmluZF9yYW5nZV9yZXZgLCBhbmQgYG10cmVlX2VyYXNlYC4gR2l2ZW4gdGhlIE1hcGxlIFRyZWUncyBpbXBvcnRhbmNlIGluIHRoZSBrZXJuZWwsIGVzcGVjaWFsbHkgZm9yIHRoaW5ncyBsaWtlIFZNQSBtYW5hZ2VtZW50LCBJIHNob3VsZCBjYXJlZnVsbHkgZXZhbHVhdGUgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgd2hpY2ggc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBtb3N0IGxpa2VseSB0byBiZSBwcm9ibGVtYXRpYy4gYG1hc19lcmFzZWAsIGBtYXNfbm9tZW1gLCBgbWFzX2FsbG9jX2N5Y2xpY2AsIGBtYXNfd3Jfbm9kZV9zdG9yZWAsIGBtYXNfd3Jfc3RvcmVfdHlwZWAsIGBtYXNfc3RvcmVfZ2ZwYCwgYG1hc19zdG9yZV9wcmVhbGxvY2AsIGBtYXNfcHJlYWxsb2NhdGVgLCBhbmQgYG10cmVlX2VyYXNlYCBzZWVtIGxpa2UgdGhleSBtaWdodCBiZSBtb3JlIGludGVyZXN0aW5nIHRoYW4gdGhlIGdlbmVyYWwgcGF0aCBvbmVzIGxpa2UgYG1hc19uZXh0YCwgYG1hc19wcmV2YCwgYW5kIGBtYXNfZmluZGAgd2hpY2ggYXJlIHByb2JhYmx5IHdlbGwtdGVzdGVkIGFuZCBmcmVxdWVudGx5IHVzZWQuIEknbGwgZm9jdXMgb24gdGhlIGZpcnN0IGdyb3VwLiBJdCdzIGxpa2VseSB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMgd2lsbCBuZWVkIG1vcmUgaW4tZGVwdGggcmV2aWV3LlxuXG5PaCwgYW5kIEkgYWxzbyBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYGxvY2tfc2VxdWVuY2VgIGluIGBsb2NrZGVwLmNgLiBUaGF0J3MgZGVmaW5pdGVseSByZWxhdGVkIHRvIHRoaXMsIGdpdmVuIHRoZSBgTE9DS0RFUGAgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwMDAsIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAyOjI1OjI0LjM5ODg5MDAzNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NzE3ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJERUJVR19NQVBMRV9UUkVFXCIsXG4gICAgXCJMT0NLREVQXCIsXG4gICAgXCJQUk9WRV9MT0NLSU5HXCIsXG4gICAgXCJSQ1VfU1RSSUNUX0dSQUNFX1BFUklPRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hc19lcmFzZVwiLFxuICAgIFwibWFzX25vbWVtXCIsXG4gICAgXCJtYXNfYWxsb2NfY3ljbGljXCIsXG4gICAgXCJtYXNfd3Jfbm9kZV9zdG9yZVwiLFxuICAgIFwibWFzX3dyX3N0b3JlX3R5cGVcIixcbiAgICBcIm1hc19zdG9yZV9nZnBcIixcbiAgICBcIm1hc19zdG9yZV9wcmVhbGxvY1wiLFxuICAgIFwibWFzX3ByZWFsbG9jYXRlXCIsXG4gICAgXCJtdHJlZV9lcmFzZVwiLFxuICAgIFwibG9ja19zZXF1ZW5jZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWFwbGUgdHJlZSBsb2dpYywgaW5jbHVkaW5nIGVyYXNlLCBhbGxvY2F0aW9uLCBhbmQgc3RvcmUgb3BlcmF0aW9ucywgYW5kIGludHJvZHVjZXMgbG9jayBzZXF1ZW5jZSB0cmFja2luZyBpbiBsb2NrZGVwIHRvIHZlcmlmeSBtYXBsZSB0cmVlIGxvY2tpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBsb2NraW5nIHZhbGlkYXRpb24sIHdoaWNoIGFyZSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVCVUdfTUFQTEVfVFJFRVwiLFxuICAgIFwiTE9DS0RFUFwiLFxuICAgIFwiUFJPVkVfTE9DS0lOR1wiLFxuICAgIFwiUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYXNfZXJhc2VcIixcbiAgICBcIm1hc19ub21lbVwiLFxuICAgIFwibWFzX2FsbG9jX2N5Y2xpY1wiLFxuICAgIFwibWFzX3dyX25vZGVfc3RvcmVcIixcbiAgICBcIm1hc193cl9zdG9yZV90eXBlXCIsXG4gICAgXCJtYXNfc3RvcmVfZ2ZwXCIsXG4gICAgXCJtYXNfc3RvcmVfcHJlYWxsb2NcIixcbiAgICBcIm1hc19wcmVhbGxvY2F0ZVwiLFxuICAgIFwibXRyZWVfZXJhc2VcIixcbiAgICBcImxvY2tfc2VxdWVuY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG1hcGxlIHRyZWUgbG9naWMsIGluY2x1ZGluZyBlcmFzZSwgYWxsb2NhdGlvbiwgYW5kIHN0b3JlIG9wZXJhdGlvbnMsIGFuZCBpbnRyb2R1Y2VzIGxvY2sgc2VxdWVuY2UgdHJhY2tpbmcgaW4gbG9ja2RlcCB0byB2ZXJpZnkgbWFwbGUgdHJlZSBsb2NraW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGRhdGEgc3RydWN0dXJlcyBhbmQgbG9ja2luZyB2YWxpZGF0aW9uLCB3aGljaCBhcmUgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowsc2pt[1] Phase: Succeeded StartedAt: 2026-07-01 02:25:36 +0000 UTC FinishedAt: 2026-07-01 02:25:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-01 02:25:36 +0000 UTC FinishedAt: 2026-07-01 02:25:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2] Phase: Succeeded StartedAt: 2026-07-01 02:25:36 +0000 UTC FinishedAt: 2026-07-01 07:01:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 02:25:36 +0000 UTC FinishedAt: 2026-07-01 07:01:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 02:25:36 +0000 UTC FinishedAt: 2026-07-01 02:26:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 02:25:36 +0000 UTC FinishedAt: 2026-07-01 02:25:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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-workflowsc2pt/series-workflowsc2pt-convert-artifact-1701889865/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 02:26:03 +0000 UTC FinishedAt: 2026-07-01 03:10:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 02:26:03 +0000 UTC FinishedAt: 2026-07-01 03:10:58 +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:*b967fdf0-09ef-4099-a268-71000f359a3e,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-workflowsc2pt/series-workflowsc2pt-convert-artifact-1701889865/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": "26def8df-9bd1-4f64-b56d-5d654191e8ed", "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-workflowsc2pt/series-workflowsc2pt-build-action-3295823399/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 02:26:03 +0000 UTC FinishedAt: 2026-07-01 03:10:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b967fdf0-09ef-4099-a268-71000f359a3e,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-workflowsc2pt/series-workflowsc2pt-convert-artifact-1701889865/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": "26def8df-9bd1-4f64-b56d-5d654191e8ed", "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-workflowsc2pt/series-workflowsc2pt-build-action-3295823399/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:10:58 +0000 UTC FinishedAt: 2026-07-01 03:10:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:10:58 +0000 UTC FinishedAt: 2026-07-01 03:10:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:10:58 +0000 UTC FinishedAt: 2026-07-01 03:11:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:10:58 +0000 UTC FinishedAt: 2026-07-01 03:11:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-workflowsc2pt/series-workflowsc2pt-convert-artifact-2771872092/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:11:27 +0000 UTC FinishedAt: 2026-07-01 03:13:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:11:27 +0000 UTC FinishedAt: 2026-07-01 03:13:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*26def8df-9bd1-4f64-b56d-5d654191e8ed,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-workflowsc2pt/series-workflowsc2pt-build-action-3295823399/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-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:13:38 +0000 UTC FinishedAt: 2026-07-01 03:13:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:13:38 +0000 UTC FinishedAt: 2026-07-01 03:13:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:13:38 +0000 UTC FinishedAt: 2026-07-01 03:56:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:13:38 +0000 UTC FinishedAt: 2026-07-01 03:56:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b967fdf0-09ef-4099-a268-71000f359a3e,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-workflowsc2pt/series-workflowsc2pt-convert-artifact-2771872092/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": "c45c611a-6272-4ed0-b672-2992d425b146", "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-workflowsc2pt/series-workflowsc2pt-build-action-3084791224/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:13:38 +0000 UTC FinishedAt: 2026-07-01 03:56:06 +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:*b967fdf0-09ef-4099-a268-71000f359a3e,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-workflowsc2pt/series-workflowsc2pt-convert-artifact-2771872092/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": "c45c611a-6272-4ed0-b672-2992d425b146", "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-workflowsc2pt/series-workflowsc2pt-build-action-3084791224/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:56:16 +0000 UTC FinishedAt: 2026-07-01 03:56:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:56:16 +0000 UTC FinishedAt: 2026-07-01 03:56:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:56:16 +0000 UTC FinishedAt: 2026-07-01 03:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:56:16 +0000 UTC FinishedAt: 2026-07-01 03:58:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c45c611a-6272-4ed0-b672-2992d425b146,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-workflowsc2pt/series-workflowsc2pt-build-action-3084791224/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-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:58:19 +0000 UTC FinishedAt: 2026-07-01 07:01:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:58:19 +0000 UTC FinishedAt: 2026-07-01 07:01:21 +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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","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:*26def8df-9bd1-4f64-b56d-5d654191e8ed,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c45c611a-6272-4ed0-b672-2992d425b146,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-workflowsc2pt/series-workflowsc2pt-build-action-3295823399/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-workflowsc2pt/series-workflowsc2pt-build-action-3084791224/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:58:19 +0000 UTC FinishedAt: 2026-07-01 03:58:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:58:19 +0000 UTC FinishedAt: 2026-07-01 03:58:35 +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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","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-workflowsc2pt/series-workflowsc2pt-convert-artifact-3075108389/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:58:19 +0000 UTC FinishedAt: 2026-07-01 03:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:58:19 +0000 UTC FinishedAt: 2026-07-01 03:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:58:19 +0000 UTC FinishedAt: 2026-07-01 03:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:58:42 +0000 UTC FinishedAt: 2026-07-01 07:01:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsc2pt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"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_erase","mas_nomem","mas_alloc_cyclic","mas_wr_node_store","mas_wr_store_type","mas_store_gfp","mas_store_prealloc","mas_preallocate","mtree_erase","lock_sequence"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEBUG_MAPLE_TREE","LOCKDEP","PROVE_LOCKING","RCU_STRICT_GRACE_PERIOD"],"series_id":"900befcc-c517-4d2e-b865-ae24029c312a","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-01 03:58:42 +0000 UTC FinishedAt: 2026-07-01 07:01:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*26def8df-9bd1-4f64-b56d-5d654191e8ed,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c45c611a-6272-4ed0-b672-2992d425b146,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-workflowsc2pt/series-workflowsc2pt-build-action-3295823399/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-workflowsc2pt/series-workflowsc2pt-build-action-3084791224/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-workflowsc2pt/series-workflowsc2pt-convert-artifact-3075108389/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,}