Name: series-workflowlgk96 Phase: Succeeded StartedAt: 2026-08-23 16:12:41 +0000 UTC FinishedAt: 2026-08-23 20:00:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[0] Phase: Succeeded StartedAt: 2026-08-23 16:12:41 +0000 UTC FinishedAt: 2026-08-23 16:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[0].run-triage Phase: Succeeded StartedAt: 2026-08-23 16:12:41 +0000 UTC FinishedAt: 2026-08-23 16:16:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "66fb95a521110da673090294561844c9f76ebe64", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "9P_FS", "CEPH_FS", "FUSE_FS", "GFS2_FS", "NFS_FS", "CIFS", "VBOXSF_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "66fb95a521110da673090294561844c9f76ebe64", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "9P_FS", "CEPH_FS", "FUSE_FS", "GFS2_FS", "NFS_FS", "CIFS", "VBOXSF_FS" ], "series_id": "9c6e0cff-a88b-4746-8ab0-9db0532c23f8" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "vfs_mkdir", "vfs_create", "vfs_lookup_open", "dentry_create", "filename_mkdirat", "filename_unlinkat", "filename_renameat2", "v9fs_vfs_atomic_open", "v9fs_vfs_atomic_open_dotl", "ceph_atomic_open", "fuse_atomic_open", "gfs2_atomic_open", "nfs_atomic_open", "nfs_atomic_open_v23", "cifs_atomic_open", "vboxsf_dir_atomic_open" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "512f2832-177b-4b65-b835-bdff3e4402bc", "7bdf5f73-8cce-4785-aa9e-dd89622cf613", "6d4f386f-fb66-4862-b644-4ac19c79f6a3" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7LAogICAgJiMzNDtHRlMyX0ZTJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O1ZCT1hTRl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19ta2RpciYjMzQ7LAogICAgJiMzNDt2ZnNfY3JlYXRlJiMzNDssCiAgICAmIzM0O3Zmc19sb29rdXBfb3BlbiYjMzQ7LAogICAgJiMzNDtkZW50cnlfY3JlYXRlJiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX21rZGlyYXQmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfdW5saW5rYXQmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfcmVuYW1lYXQyJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwmIzM0OywKICAgICYjMzQ7Y2VwaF9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtmdXNlX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O2dmczJfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3Blbl92MjMmIzM0OywKICAgICYjMzQ7Y2lmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2Ym94c2ZfZGlyX2F0b21pY19vcGVuJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBWRlMgYW5kIHZhcmlvdXMgZmlsZXN5c3RlbXMgdG8gc3VwcG9ydCBjcmVhdGluZyBkaXJlY3RvcmllcyB2aWEgYG9wZW5hdCgpYCB3aXRoIHRoZSBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCBmbGFncy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgYWRkaW5nIHRoZSBgT19JU19NS0RJUmAgbWFjcm8sIG1vZGlmeWluZyBgYnVpbGRfb3Blbl9mbGFncygpYCB0byBoYW5kbGUgdGhlIG5ldyBmbGFnIGNvbWJpbmF0aW9uLCBhbmQgdXBkYXRpbmcgYGxvb2t1cF9vcGVuKClgIGFuZCBgdmZzX21rZGlyKClgIHBhdGhzIGluIGBmcy9uYW1laS5jYCB0byByb3V0ZSBkaXJlY3RvcnkgY3JlYXRpb24gcmVxdWVzdHMgdG8gYHZmc19ta2Rpcl9ub19wZXJtKClgIGluc3RlYWQgb2YgcmVndWxhciBmaWxlIGNyZWF0aW9uIGZ1bmN0aW9ucy5cblxuVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IGxvZ2ljYWwsIGFsdGVyaW5nIGNvbnRyb2wgZmxvdyBhbmQgZmxhZyBoYW5kbGluZyB3aXRoaW4gdGhlIFZGUyBsYXllci4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gQWxsIHZhcmlhYmxlcyB1c2VkIChzdWNoIGFzIGBkZWxlZ2F0ZWRfaW5vZGVgKSBhcmUgcHJvcGVybHkgemVyby1pbml0aWFsaXplZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgbG9naWMgZXJyb3JzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCBmb3IgYG9wZW5hdCgpYCB0byBhdG9taWNhbGx5IGNyZWF0ZSBhIGRpcmVjdG9yeSBhbmQgcmV0dXJuIGEgZmlsZSBkZXNjcmlwdG9yLiBJdCBtb2RpZmllcyBjb3JlIFZGUyBwYXRoIHJlc29sdXRpb24gYW5kIGNyZWF0aW9uIGxvZ2ljIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AsIGFuZCB1cGRhdGVzIHNldmVyYWwgZmlsZXN5c3RlbXMmIzM5OyBgYXRvbWljX29wZW5gIGltcGxlbWVudGF0aW9ucyB0byBoYW5kbGUgdGhlIG5ldyBmbGFnIGNvbWJpbmF0aW9uLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDY5NzRmMmRhZTAzYTMxNGVlZGNkMjI1MTQ5ZTEyNmI2NjA5NGI0ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDE2OjE0OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmNcbmluZGV4IDM4Mjk1NTRjYTM2OTIuLmIxZTA4MjNjODdiNTcgMTAwNjQ0XG4tLS0gYS9mcy85cC92ZnNfaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvOXAvdmZzX2lub2RlLmNcbkBAIC03NzYsNiAmIzQzOzc3Niw5IEBAIHY5ZnNfdmZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0aW50IHA5X29tb2RlO1xuIFxuJiM0MztcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbiYjNDM7XHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4mIzQzO1xuIFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdjlmc192ZnNfbG9va3VwKGRpciwgZGVudHJ5LCAwKTtcbiBcdFx0aWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKVxuZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jXG5pbmRleCAxMTZiMjllOTVmMjFlLi42NGUwYWJhMDhkYTE2IDEwMDY0NFxuLS0tIGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuQEAgLTIzOCw2ICYjNDM7MjM4LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0c3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcztcbiBcdHN0cnVjdCBwb3NpeF9hY2wgKnBhY2wgPSBOVUxMLCAqZGFjbCA9IE5VTEw7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2OWZzX3Zmc19sb29rdXAoZGlyLCBkZW50cnksIDApO1xuIFx0XHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXG5kaWZmIC0tZ2l0IGEvZnMvY2VwaC9maWxlLmMgYi9mcy9jZXBoL2ZpbGUuY1xuaW5kZXggYTRhMmE0YjZhMDI3ZC4uNjIxNjNiN2VjYTVmOSAxMDA2NDRcbi0tLSBhL2ZzL2NlcGgvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9jZXBoL2ZpbGUuY1xuQEAgLTgxMiw2ICYjNDM7ODEyLDkgQEAgaW50IGNlcGhfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdCAgICAgIGRpciwgY2VwaF92aW5vcChkaXIpLCBkZW50cnksIGRlbnRyeSxcbiBcdCAgICAgIGRfdW5oYXNoZWQoZGVudHJ5KSA/IFwmIzM0O3VuaGFzaGVkXCYjMzQ7IDogXCYjMzQ7aGFzaGVkXCYjMzQ7LCBmbGFncywgbW9kZSk7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4gXHUwMDNlIE5BTUVfTUFYKVxuIFx0XHRyZXR1cm4gLUVOQU1FVE9PTE9ORztcbiBcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuY1xuaW5kZXggZDRlMDAyOTgxMGMwZi4uNTVkNTg0NGUyNjU1OSAxMDA2NDRcbi0tLSBhL2ZzL2Z1c2UvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Z1c2UvZGlyLmNcbkBAIC05MzUsNiAmIzQzOzkzNSw5IEBAIHN0YXRpYyBpbnQgZnVzZV9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZW50cnksXG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuIFx0c3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRpZiAoZnVzZV9pc19iYWQoZGlyKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jXG5pbmRleCBmMzYxODc2YzU1ODMzLi4zZWUxMzYwZjFiYzI3IDEwMDY0NFxuLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9nZnMyL2lub2RlLmNcbkBAIC0xMzg2LDYgJiM0MzsxMzg2LDkgQEAgc3RhdGljIGludCBnZnMyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4ge1xuIFx0Ym9vbCBleGNsID0gISEoZmxhZ3MgXHUwMDI2IE9fRVhDTCk7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpkID0gX19nZnMyX2xvb2t1cChkaXIsIGRlbnRyeSwgZmlsZSk7XG4gXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKSB7XG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcbmluZGV4IDIwYTY1MzRlYTNlZmYuLmUxYThmMTgzODVhNTIgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jXG5AQCAtMTM4MiwxMyAmIzQzOzEzODIsMTMgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxuIFxuIC8qKlxuICAqIG1heV9jcmVhdGVfaW5fc3RpY2t5IC0gQ2hlY2sgd2hldGhlciBhbiBPX0NSRUFUIG9wZW4gaW4gYSBzdGlja3kgZGlyZWN0b3J5XG4tICpcdFx0XHQgIHNob3VsZCBiZSBhbGxvd2VkLCBvciBub3QsIG9uIGZpbGVzIHRoYXQgYWxyZWFkeVxuLSAqXHRcdFx0ICBleGlzdC5cbiYjNDM7ICpcdFx0XHQgIHNob3VsZCBiZSBhbGxvd2VkLCBvciBub3QsIG9uIGZpbGVzL2RpcmVjdG9yaWVzIHRoYXRcbiYjNDM7ICpcdFx0XHQgIGFscmVhZHkgZXhpc3QuXG4gICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXG4gICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxuICAqIEBpbm9kZTogdGhlIGlub2RlIG9mIHRoZSBmaWxlIHRvIG9wZW5cbiAgKlxuLSAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOlxuJiM0MzsgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZS9kaXJlY3RvcnkpIHdoZW46XG4gICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZFxuICAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0c1xuICAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5XG5AQCAtMTQxNiw2ICYjNDM7MTQxNiwxNCBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdGlmIChsaWtlbHkoIShkaXJfbW9kZSBcdTAwMjYgU19JU1ZUWCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZXJlIGlzIG5vIHNlcGFyYXRlIHN5c2N0bCBmb3IgZGlyZWN0b3J5IGNyZWF0aW9uIGluIHN0aWNreVxuJiM0MztcdCAqIGZvbGRlcnMuIFRoZXJlZm9yZSwgZm9yIHRoZSBTX0lTRElSIGNhc2UsIGRpc2FibGluZ1xuJiM0MztcdCAqIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhciBpcyBub3QgZW5vdWdoIHRvIGFsbG93IGNyZWF0aW5nIGFcbiYjNDM7XHQgKiBkaXJlY3RvcnkgaW4gYSBzdGlja3kgZm9sZGVyLCBiZWNhdXNlIHRoYXQgbWF5IHN1cnByaXNlIHVzZXJzXG4mIzQzO1x0ICogbm90IGV4cGVjdGluZyB0aGF0IE9fQ1JFQVR8T19ESVJFQ1RPUlkgaXMgcG9zc2libGUgb24gbmV3ZXJcbiYjNDM7XHQgKiBrZXJuZWxzLlxuJiM0MztcdCAqL1xuIFx0aWYgKFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcilcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTQ0Nyw2ICYjNDM7MTQ1NSwxMiBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdFx0XHRcdFx0ICAgICAgXCYjMzQ7c3RpY2t5X2NyZWF0ZV9yZWd1bGFyXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiYjNDM7XHRcdFx0YXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBcJiMzNDtzdGlja3lfY3JlYXRlX2RpclwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUFDQ0VTO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMjc4MSw5ICYjNDM7Mjc5NSwxNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncylcbiBcdHJldHVybiBzO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHRyYWlsaW5nX3NsYXNoZXMoY29uc3Qgc3RydWN0IHFzdHIgKmxhc3QpXG4mIzQzO3tcbiYjNDM7XHQvKiBsYXN0LVx1MDAzZWxlbiBpcyBzZXQgYnkgaGFzaF9uYW1lKCkgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudFxuJiM0MztcdCAqIGNvbXBvbmVudCAtXHUwMDNlbmFtZSwgdGVybWluYXRpbmcgd2l0aCAmIzM5Oy8mIzM5OyBvciBhIE5VTCBjaGFyYWN0ZXIuICovXG4mIzQzO1x0cmV0dXJuIChib29sKWxhc3QtXHUwMDNlbmFtZVtsYXN0LVx1MDAzZWxlbl07XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpsb29rdXBfbGFzdChzdHJ1Y3QgbmFtZWlkYXRhICpuZClcbiB7XG4tXHRpZiAobmQtXHUwMDNlbGFzdF90eXBlID09IExBU1RfTk9STSBcdTAwMjZcdTAwMjYgbmQtXHUwMDNlbGFzdC5uYW1lW25kLVx1MDAzZWxhc3QubGVuXSlcbiYjNDM7XHRpZiAobmQtXHUwMDNlbGFzdF90eXBlID09IExBU1RfTk9STSBcdTAwMjZcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhcdTAwMjZuZC1cdTAwM2VsYXN0KSlcbiBcdFx0bmQtXHUwMDNlZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7XG4gXG4gXHRyZXR1cm4gd2Fsa19jb21wb25lbnQobmQsIFdBTEtfVFJBSUxJTkcpO1xuQEAgLTQxNTksNiAmIzQzOzQxODAsMjQgQEAgc3RhdGljIGlubGluZSB1bW9kZV90IHZmc19wcmVwYXJlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRyZXR1cm4gbW9kZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmVcbiYjNDM7aW50IHZmc19jcmVhdGVfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0ICAgICAgIHVtb2RlX3QgbW9kZSwgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmRpciA9IGRfaW5vZGUoZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbiYjNDM7XHRpbnQgZXJyb3I7XG4mIzQzO1xuJiM0MztcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRpZiAoIWVycm9yKVxuJiM0MztcdFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycm9yO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHZmc19jcmVhdGUgLSBjcmVhdGUgbmV3IGZpbGVcbiAgKiBAaWRtYXA6XHRpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXG5AQCAtNDE5MSwxMyAmIzQzOzQyMzAsOCBAQCBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG4gXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbi1cdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRyZXR1cm4gZXJyb3I7XG4tXHRlcnJvciA9IGRpci1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuLVx0aWYgKCFlcnJvcilcbi1cdFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcbi1cdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZmc19jcmVhdGVfbm9fcGVybShpZG1hcCwgZGVudHJ5LCBtb2RlLCBkaSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wodmZzX2NyZWF0ZSk7XG4gXG5AQCAtNDMxNCwyMSAmIzQzOzQzNDgsNDEgQEAgc3RhdGljIGlubGluZSBpbnQgb3Blbl90b19uYW1laV9mbGFncyhpbnQgZmxhZylcbiBcbiBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHRjb25zdCBzdHJ1Y3QgcGF0aCAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0dW1vZGVfdCBtb2RlKVxuJiM0MztcdFx0XHRpbnQgb3Blbl9mbGFnLCB1bW9kZV90IG1vZGUpXG4ge1xuLVx0aW50IGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XG4mIzQzO1x0c3RydWN0IGlub2RlICpkaXJfaW5vZGUgPSBkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4mIzQzO1x0Ym9vbCBjcmVhdGVfZGlyID0gT19JU19NS0RJUihvcGVuX2ZsYWcpO1xuJiM0MztcdGludCBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0aWYgKGNyZWF0ZV9kaXIpXG4mIzQzO1x0XHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbiBcdGlmICghZnN1aWRnaWRfaGFzX21hcHBpbmcoZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX3NiLCBpZG1hcCkpXG4gXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuLVx0ZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGUsXG4tXHRcdFx0XHQgTUFZX1dSSVRFIHwgTUFZX0VYRUMpO1xuJiM0MztcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdGlmIChjcmVhdGVfZGlyKVxuJiM0MztcdFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyb3I7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdW1vZGVfdCBvX2NyZWF0ZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGlub2RlICpkaXIsIGludCBvcGVuX2ZsYWcsIHVtb2RlX3QgbW9kZSlcbiYjNDM7e1xuJiM0MztcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZykpXG4mIzQzO1x0XHRyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lSV1hVR08gfCBTX0lTVlRYLCBTX0lGRElSKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuIH1cbiBcbiAvKipcbkBAIC00MzY0LDggJiM0Mzs0NDE4LDkgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0b21pY19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnlcbiBcbiBcdGZpbGUtXHUwMDNlX19mX3BhdGguZGVudHJ5ID0gREVOVFJZX05PVF9TRVQ7XG4gXHRmaWxlLVx1MDAzZV9fZl9wYXRoLm1udCA9IHBhdGgtXHUwMDNlbW50O1xuJiM0MztcbiBcdGVycm9yID0gZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlYXRvbWljX29wZW4oZGlyX2lub2RlLCBkZW50cnksIGZpbGUsXG4tXHRcdFx0XHQgICAgICAgb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpLCBtb2RlKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpLCBtb2RlKTtcbiBcdGRfbG9va3VwX2RvbmUoZGVudHJ5KTtcbiBcbiBcdGlmICghZXJyb3IpIHtcbkBAIC00NDEwLDEwICYjNDM7NDQ2NSwyMSBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeVxuIFx0XHR9XG4gXHRcdGRwdXQoZGVudHJ5KTtcbiBcdFx0ZGVudHJ5ID0gRVJSX1BUUihlcnJvcik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQ1JFQVRFRClcbiYjNDM7XHRcdFx0ZnNub3RpZnlfY3JlYXRlKGRpcl9pbm9kZSwgZGVudHJ5KTtcbiYjNDM7XHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKVxuJiM0MztcdFx0XHRmc25vdGlmeV9vcGVuKGZpbGUpO1xuIFx0fVxuJiM0MztcbiYjNDM7XG4gXHRyZXR1cm4gZGVudHJ5O1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZVxuJiM0MztzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKik7XG4gLypcbiAgKiBMb29rIHVwIGFuZCBtYXliZSBjcmVhdGUgYW5kIG9wZW4gdGhlIGxhc3QgY29tcG9uZW50LlxuICAqXG5AQCAtNDQzNSw2ICYjNDM7NDUwMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcDtcbiBcdHN0cnVjdCBkZW50cnkgKmRpciA9IG5kLVx1MDAzZXBhdGguZGVudHJ5O1xuIFx0c3RydWN0IGlub2RlICpkaXJfaW5vZGUgPSBkaXItXHUwMDNlZF9pbm9kZTtcbiYjNDM7XHRib29sIGNyZWF0ZV9kaXIgPSBPX0lTX01LRElSKG9wLVx1MDAzZW1vZGUpO1xuIFx0aW50IG9wZW5fZmxhZztcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiBcdGludCBlcnJvciwgY3JlYXRlX2Vycm9yO1xuQEAgLTQ0NTUsNyAmIzQzOzQ1MjIsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHQgKi9cbiBcdH1cbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpXG4tXHRcdGlub2RlX2xvY2soZGlyX2lub2RlKTtcbiYjNDM7XHRcdGlub2RlX2xvY2tfbmVzdGVkKGRpcl9pbm9kZSwgSV9NVVRFWF9QQVJFTlQpO1xuIFx0ZWxzZVxuIFx0XHRpbm9kZV9sb2NrX3NoYXJlZChkaXJfaW5vZGUpO1xuIFxuQEAgLTQ1MDcsMTIgJiM0Mzs0NTc0LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG4gXHRcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTClcbiBcdFx0XHRvcGVuX2ZsYWcgXHUwMDI2PSB+T19UUlVOQztcbi1cdFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgbW9kZSwgbW9kZSk7XG4mIzQzO1x0XHRtb2RlID0gb19jcmVhdGVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBvcGVuX2ZsYWcsIG1vZGUpO1xuIFx0XHRpZiAobGlrZWx5KGdvdF93cml0ZSkpXG4gXHRcdFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBcdTAwMjZuZC1cdTAwM2VwYXRoLFxuLVx0XHRcdFx0XHRcdCAgICBkZW50cnksIG1vZGUpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgZGVudHJ5LCBvcGVuX2ZsYWcsIG1vZGUpO1xuIFx0XHRlbHNlXG4gXHRcdFx0Y3JlYXRlX2Vycm9yID0gLUVST0ZTO1xuJiM0MztcdFx0LyogUmVmdXNlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0aHJvdWdoIGEgZGFuZ2xpbmcgKHRyYWlsaW5nKVxuJiM0MztcdFx0ICogc3ltbGluay4gRm9yIHJlZ3VsYXIgZmlsZXMgdGhpcyBoYXMgYmVlbiBhbGxvd2VkIGhpc3RvcmljYWxseVxuJiM0MztcdFx0ICogb24gT19DUkVBVCB3aXRob3V0IE9fRVhDTC4gKi9cbiYjNDM7XHRcdGlmICh1bmxpa2VseShuZC1cdTAwM2VkZXB0aCkgXHUwMDI2XHUwMDI2IGNyZWF0ZV9kaXIgXHUwMDI2XHUwMDI2ICFjcmVhdGVfZXJyb3IpXG4mIzQzO1x0XHRcdGNyZWF0ZV9lcnJvciA9IC1FRVhJU1Q7XG4gXHR9XG4gXHRpZiAoY3JlYXRlX2Vycm9yKVxuIFx0XHRvcGVuX2ZsYWcgXHUwMDI2PSB+T19DUkVBVDtcbkBAIC00NTM3LDYgJiM0Mzs0NjA5LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0XHRkZW50cnkgPSByZXM7XG4gXHRcdH1cbiBcdH1cbiYjNDM7XG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfaW5vZGUgfHwgIShvcC1cdTAwM2VvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIE5vIG5lZWQgdG8gY3JlYXRlIGEgZmlsZS4gIElmIGxvb2t1cCByZXR1cm5lZCBhIHBvc2l0aXZlXG5AQCAtNDU1NCwyNiAmIzQzOzQ2MjcsMjYgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0Z290byBvdXRfZHB1dDtcbiBcdH1cbiBcbi1cdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpcl9pbm9kZSwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBvdXRfZHB1dDtcbi1cbi1cdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7XG4tXHRpZiAoIWRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZSkge1xuJiM0MztcdGlmICgoY3JlYXRlX2RpciBcdTAwMjZcdTAwMjYgIWRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZW1rZGlyKVxuJiM0MztcdFx0fHwgKCFjcmVhdGVfZGlyIFx1MDAyNlx1MDAyNiAhZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKSkge1xuIFx0XHRlcnJvciA9IC1FQUNDRVM7XG4gXHRcdGdvdG8gb3V0X2RwdXQ7XG4gXHR9XG4gXG4tXHRlcnJvciA9IGRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdGlmIChjcmVhdGVfZGlyKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBtb2RlLCBcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xuJiM0MztcdFx0XHRlcnJvciA9IFBUUl9FUlJfT1JfWkVSTyhyZXMpO1xuJiM0MztcdFx0XHRpZiAoIWVycm9yKVxuJiM0MztcdFx0XHRcdGRlbnRyeSA9IHJlcztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ZXJyb3IgPSB2ZnNfY3JlYXRlX25vX3Blcm0oaWRtYXAsIGRlbnRyeSwgbW9kZSwgXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcbiYjNDM7XHR9XG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gb3V0X2RwdXQ7XG4mIzQzO1xuJiM0MztcdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7XG4gb3V0OlxuLVx0aWYgKCFJU19FUlIoZGVudHJ5KSkge1xuLVx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpXG4tXHRcdFx0ZnNub3RpZnlfY3JlYXRlKGRpcl9pbm9kZSwgZGVudHJ5KTtcbi1cdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpXG4tXHRcdFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcbi1cdH1cbiBcdGlmICgob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB8fCBjcmVhdGVfZXJyb3IpXG4gXHRcdGlub2RlX3VubG9jayhkaXJfaW5vZGUpO1xuIFx0ZWxzZVxuQEAgLTQ2OTUsMTcgJiM0Mzs0NzY4LDEyIEBAIHN0cnVjdCBmaWxlICp2ZnNfbG9va3VwX29wZW4oc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IHFzdHIgKmxhc3QsXG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModmZzX2xvb2t1cF9vcGVuLCBcJiMzNDtuZnNkXCYjMzQ7KTtcbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZClcbi17XG4tXHRyZXR1cm4gKGJvb2wpbmQtXHUwMDNlbGFzdC5uYW1lW25kLVx1MDAzZWxhc3QubGVuXTtcbi19XG4tXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9mYXN0X2Zvcl9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgb3Blbl9mbGFnKVxuIHtcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiBcbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbi1cdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKVxuJiM0MztcdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMoXHUwMDI2bmQtXHUwMDNlbGFzdCkgXHUwMDI2XHUwMDI2ICEob3Blbl9mbGFnIFx1MDAyNiBPX0RJUkVDVE9SWSkpXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJU0RJUik7XG4gXG4gXHRcdC8qIERvbiYjMzk7dCBib3RoZXIgb24gYW4gT19FWENMIGNyZWF0ZSAqL1xuQEAgLTQ3MTMsNyAmIzQzOzQ3ODEsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZCkpXG4mIzQzO1x0aWYgKHRyYWlsaW5nX3NsYXNoZXMoXHUwMDI2bmQtXHUwMDNlbGFzdCkpXG4gXHRcdG5kLVx1MDAzZWZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZO1xuIFxuIFx0ZGVudHJ5ID0gbG9va3VwX2Zhc3QobmQpO1xuQEAgLTQ4MDYsOCAmIzQzOzQ4NzQsOSBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG4gXHRcdGlmICgob3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0wpIFx1MDAyNlx1MDAyNiAhKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKSlcbiBcdFx0XHRyZXR1cm4gLUVFWElTVDtcbi1cdFx0aWYgKGRfaXNfZGlyKG5kLVx1MDAzZXBhdGguZGVudHJ5KSlcbiYjNDM7XHRcdGlmICghKG9wZW5fZmxhZyBcdTAwMjYgT19ESVJFQ1RPUlkpIFx1MDAyNlx1MDAyNiBkX2lzX2RpcihuZC1cdTAwM2VwYXRoLmRlbnRyeSkpXG4gXHRcdFx0cmV0dXJuIC1FSVNESVI7XG4mIzQzO1xuIFx0XHRlcnJvciA9IG1heV9jcmVhdGVfaW5fc3RpY2t5KGlkbWFwLCBuZCxcbiBcdFx0XHRcdFx0ICAgICBkX2JhY2tpbmdfaW5vZGUobmQtXHUwMDNlcGF0aC5kZW50cnkpKTtcbiBcdFx0aWYgKHVubGlrZWx5KGVycm9yKSlcbkBAIC01MDg3LDcgJiM0Mzs1MTU2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZShpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXG4gXHQgKiBEbyB0aGUgZmluYWwgbG9va3VwLiAgU3VwcHJlc3MgJiMzOTtjcmVhdGUmIzM5OyBpZiB0aGVyZSBpcyBhIHRyYWlsaW5nXG4gXHQgKiAmIzM5Oy8mIzM5OywgYW5kIGEgZGlyZWN0b3J5IHdhc24mIzM5O3QgcmVxdWVzdGVkLlxuIFx0ICovXG4tXHRpZiAobGFzdC5uYW1lW2xhc3QubGVuXSBcdTAwMjZcdTAwMjYgIXdhbnRfZGlyKVxuJiM0MztcdGlmICh0cmFpbGluZ19zbGFzaGVzKFx1MDAyNmxhc3QpIFx1MDAyNlx1MDAyNiAhd2FudF9kaXIpXG4gXHRcdGNyZWF0ZV9mbGFncyBcdTAwMjY9IH5MT09LVVBfQ1JFQVRFO1xuIFx0ZGVudHJ5ID0gc3RhcnRfZGlyb3AocGF0aC1cdTAwM2VkZW50cnksIFx1MDAyNmxhc3QsIHJldmFsX2ZsYWcgfCBjcmVhdGVfZmxhZ3MpO1xuIFx0aWYgKElTX0VSUihkZW50cnkpKVxuQEAgLTUxODIsNyAmIzQzOzUyNTEsNyBAQCBzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXG4gXHRcdHBhdGgtXHUwMDNlZGVudHJ5ID0gZGlyO1xuIFx0XHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuIFxuLVx0XHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIHBhdGgsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0XHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIHBhdGgsIGRlbnRyeSwgZmxhZ3MsIG1vZGUpO1xuIFx0XHRpZiAoY3JlYXRlX2Vycm9yKVxuIFx0XHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4gXG5AQCAtNTM1Niw2ICYjNDM7NTQyNSwzNCBAQCBTWVNDQUxMX0RFRklORTMobWtub2QsIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lLCB1bW9kZV90LCBtb2RlLCB1bnNpZ25lZCwgZFxuIFx0cmV0dXJuIGZpbGVuYW1lX21rbm9kYXQoQVRfRkRDV0QsIG5hbWUsIG1vZGUsIGRldik7XG4gfVxuIFxuJiM0MzsvKiBSZXR1cm5zIHRoZSBkZW50cnkgdG8gdXNlIChub3QgTlVMTCkgb3IgLUUgb24gZXJyb3IgKi9cbiYjNDM7c3RhdGljIGlubGluZVxuJiM0MztzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSlcbiYjNDM7e1xuJiM0MztcdGludCBlcnJvcjtcbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpkZTtcbiYjNDM7XHR1bnNpZ25lZCBtYXhfbGlua3MgPSBkaXItXHUwMDNlaV9zYi1cdTAwM2VzX21heF9saW5rcztcbiYjNDM7XG4mIzQzO1x0aWYgKG1heF9saW5rcyBcdTAwMjZcdTAwMjYgZGlyLVx1MDAzZWlfbmxpbmsgXHUwMDNlPSBtYXhfbGlua3MpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU1MSU5LKTtcbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xuJiM0MztcbiYjNDM7XHRkZSA9IGRpci1cdTAwM2VpX29wLVx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0aWYgKElTX0VSUihkZSkpXG4mIzQzO1x0XHRyZXR1cm4gZGU7XG4mIzQzO1x0aWYgKGRlKSB7XG4mIzQzO1x0XHRkcHV0KGRlbnRyeSk7XG4mIzQzO1x0XHRkZW50cnkgPSBkZTtcbiYjNDM7XHR9XG4mIzQzO1x0ZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpO1xuJiM0MztcdHJldHVybiBkZW50cnk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogdmZzX21rZGlyIC0gY3JlYXRlIGRpcmVjdG9yeSByZXR1cm5pbmcgY29ycmVjdCBkZW50cnkgaWYgcG9zc2libGVcbiAgKiBAaWRtYXA6XHRcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cbkBAIC01MzgzLDcgJiM0Mzs1NDgwLDYgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGVsZWdhdGVkX2lub2RlKVxuIHtcbiBcdGludCBlcnJvcjtcbi1cdHVuc2lnbmVkIG1heF9saW5rcyA9IGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfbWF4X2xpbmtzO1xuIFx0c3RydWN0IGRlbnRyeSAqZGU7XG4gXG4gXHRlcnJvciA9IG1heV9jcmVhdGVfZGVudHJ5KGlkbWFwLCBkaXIsIGRlbnRyeSk7XG5AQCAtNTM5OSwyNCAmIzQzOzU0OTUsMTIgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBlcnI7XG4gXG4tXHRlcnJvciA9IC1FTUxJTks7XG4tXHRpZiAobWF4X2xpbmtzIFx1MDAyNlx1MDAyNiBkaXItXHUwMDNlaV9ubGluayBcdTAwM2U9IG1heF9saW5rcylcbi1cdFx0Z290byBlcnI7XG4tXG4tXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gZXJyO1xuLVxuLVx0ZGUgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2Vta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuLVx0ZXJyb3IgPSBQVFJfRVJSKGRlKTtcbi1cdGlmIChJU19FUlIoZGUpKVxuJiM0MztcdGRlID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpO1xuJiM0MztcdGlmIChJU19FUlIoZGUpKSB7XG4mIzQzO1x0XHRlcnJvciA9IFBUUl9FUlIoZGUpO1xuIFx0XHRnb3RvIGVycjtcbi1cdGlmIChkZSkge1xuLVx0XHRkcHV0KGRlbnRyeSk7XG4tXHRcdGRlbnRyeSA9IGRlO1xuIFx0fVxuLVx0ZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpO1xuLVx0cmV0dXJuIGRlbnRyeTtcbiYjNDM7XHRyZXR1cm4gZGU7XG4gXG4gZXJyOlxuIFx0ZW5kX2NyZWF0aW5nKGRlbnRyeSk7XG5AQCAtNTcwMyw3ICYjNDM7NTc4Nyw3IEBAIGludCBmaWxlbmFtZV91bmxpbmthdChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpXG4gXHRcdGdvdG8gZXhpdF9kcm9wX3dyaXRlO1xuIFxuIFx0LyogV2h5IG5vdCBiZWZvcmU/IEJlY2F1c2Ugd2Ugd2FudCBjb3JyZWN0IGVycm9yIHZhbHVlICovXG4tXHRpZiAodW5saWtlbHkobGFzdC5uYW1lW2xhc3QubGVuXSkpIHtcbiYjNDM7XHRpZiAodW5saWtlbHkodHJhaWxpbmdfc2xhc2hlcyhcdTAwMjZsYXN0KSkpIHtcbiBcdFx0aWYgKGRfaXNfZGlyKGRlbnRyeSkpXG4gXHRcdFx0ZXJyb3IgPSAtRUlTRElSO1xuIFx0XHRlbHNlXG5AQCAtNjMwNSwxNiAmIzQzOzYzODksMTYgQEAgaW50IGZpbGVuYW1lX3JlbmFtZWF0MihpbnQgb2xkZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZyb20sXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IFJFTkFNRV9FWENIQU5HRSkge1xuIFx0XHRpZiAoIWRfaXNfZGlyKHJkLm5ld19kZW50cnkpKSB7XG4gXHRcdFx0ZXJyb3IgPSAtRU5PVERJUjtcbi1cdFx0XHRpZiAobmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKVxuJiM0MztcdFx0XHRpZiAodHJhaWxpbmdfc2xhc2hlcyhcdTAwMjZuZXdfbGFzdCkpXG4gXHRcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIFx0XHR9XG4gXHR9XG4gXHQvKiB1bmxlc3MgdGhlIHNvdXJjZSBpcyBhIGRpcmVjdG9yeSB0cmFpbGluZyBzbGFzaGVzIGdpdmUgLUVOT1RESVIgKi9cbiBcdGlmICghZF9pc19kaXIocmQub2xkX2RlbnRyeSkpIHtcbiBcdFx0ZXJyb3IgPSAtRU5PVERJUjtcbi1cdFx0aWYgKG9sZF9sYXN0Lm5hbWVbb2xkX2xhc3QubGVuXSlcbiYjNDM7XHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKFx1MDAyNm9sZF9sYXN0KSlcbiBcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuLVx0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgbmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKVxuJiM0MztcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IFJFTkFNRV9FWENIQU5HRSkgXHUwMDI2XHUwMDI2IHRyYWlsaW5nX3NsYXNoZXMoXHUwMDI2bmV3X2xhc3QpKVxuIFx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jXG5pbmRleCAzNmYyZTg1ODg5MjIwLi5iNGRiNzAzYzllOGM3IDEwMDY0NFxuLS0tIGEvZnMvbmZzL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uZnMvZGlyLmNcbkBAIC0yMTIxLDYgJiM0MzsyMTIxLDkgQEAgaW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0ZGZwcmludGsoVkZTLCBcJiMzNDtORlM6IGF0b21pY19vcGVuKCVzLyVsbHUpLCAlcGRcXG5cJiMzNDssXG4gXHRcdFx0ZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19pZCwgZGlyLVx1MDAzZWlfaW5vLCBkZW50cnkpO1xuIFxuJiM0MztcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxuJiM0MztcdFx0b3Blbl9mbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuJiM0MztcbiBcdGVyciA9IG5mc19jaGVja19mbGFncyhvcGVuX2ZsYWdzKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG5AQCAtMjMxMyw2ICYjNDM7MjMxNiw5IEBAIGludCBuZnNfYXRvbWljX29wZW5fdjIzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgKi9cbiBcdGludCBlcnJvciA9IDA7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIob3Blbl9mbGFncykpXG4mIzQzO1x0XHRvcGVuX2ZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4mIzQzO1xuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX25hbWUubGVuIFx1MDAzZSBORlNfU0VSVkVSKGRpciktXHUwMDNlbmFtZWxlbilcbiBcdFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXG5pbmRleCA2YjFjMTRlNjg0YTkzLi42Y2I1ZTJhZDc4MWYzIDEwMDY0NFxuLS0tIGEvZnMvb3Blbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vcGVuLmNcbkBAIC0xMjM5LDI5ICYjNDM7MTIzOSwzMCBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcdGlmIChXSUxMX0NSRUFURShmbGFncykpIHtcbiBcdFx0aWYgKGhvdy1cdTAwM2Vtb2RlIFx1MDAyNiB+U19JQUxMVUdPKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGUkVHO1xuJiM0MztcdFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGRElSO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGUkVHO1xuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKGhvdy1cdTAwM2Vtb2RlICE9IDApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdG9wLVx1MDAzZW1vZGUgPSAwO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIEJsb2NrIGJ1Z3Mgd2hlcmUgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGNyZWF0ZWQgcmVndWxhciBmaWxlcy5cbi1cdCAqIE5vdGUsIHRoYXQgYmxvY2tpbmcgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGhlcmUgYWxzbyBwcm90ZWN0c1xuLVx0ICogT19UTVBGSUxFIGJlbG93IHdoaWNoIHJlcXVpcmVzIE9fRElSRUNUT1JZIGJlaW5nIHJhaXNlZC5cbi1cdCAqL1xuLVx0aWYgKChmbGFncyBcdTAwMjYgKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpID09IChPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdC8qIE5vdyBoYW5kbGUgdGhlIGNyZWF0aXZlIGltcGxlbWVudGF0aW9uIG9mIE9fVE1QRklMRS4gKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgX19PX1RNUEZJTEUpIHtcbiBcdFx0LypcbiBcdFx0ICogSW4gb3JkZXIgdG8gZW5zdXJlIHByb2dyYW1zIGdldCBleHBsaWNpdCBlcnJvcnMgd2hlbiB0cnlpbmdcbiBcdFx0ICogdG8gdXNlIE9fVE1QRklMRSBvbiBvbGQga2VybmVscyB3ZSBlbmZvcmNlIHRoYXQgT19ESVJFQ1RPUllcbi1cdFx0ICogaXMgcmFpc2VkIGFsb25nc2lkZSBfX09fVE1QRklMRS5cbiYjNDM7XHRcdCAqIGlzIHJhaXNlZCBhbG9uZ3NpZGUgX19PX1RNUEZJTEUsIGJ1dCB3aXRob3V0IE9fQ1JFQVQuIFRoZVxuJiM0MztcdFx0ICogcmVhc29uIGZvciBkaXNhbGxvd2luZyBPX0NSRUFUfE9fVE1QRklMRSBpcyB0aGF0XG4mIzQzO1x0XHQgKiBPX0RJUkVDVE9SWXxPX0NSRUFUIHVzZWQgdG8gd29yayBhbmQgY3JlYXRlZCBhIHJlZ3VsYXIgZmlsZVxuJiM0MztcdFx0ICogaWYgbm90aGluZyBleGlzdGVkIGF0IHRoZSBvcGVuIHBhdGguIEhlbmNlLCBhbGxvd2luZyB0aGVcbiYjNDM7XHRcdCAqIGNvbWJpbmF0aW9uIHdvdWxkIGhhdmUgY2F1c2VkIE9fQ1JFQVR8T19UTVBGSUxFIHRvIGNyZWF0ZSBhXG4mIzQzO1x0XHQgKiByZWd1bGFyIChub24tdGVtcG9yYXJ5KSBmaWxlIG9uIG9sZCBrZXJuZWxzLCB3aGlsZSB0aGUgY2FsbGVyXG4mIzQzO1x0XHQgKiB3b3VsZCBiZWxpZXZlIHRoZXkgY3JlYXRlZCBhbiBhY3R1YWwgT19UTVBGSUxFLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE9fRElSRUNUT1JZKSlcbiYjNDM7XHRcdGlmICghKGZsYWdzIFx1MDAyNiBPX0RJUkVDVE9SWSkgfHwgKGZsYWdzIFx1MDAyNiBPX0NSRUFUKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0aWYgKCEoYWNjX21vZGUgXHUwMDI2IE1BWV9XUklURSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTMxOCw2ICYjNDM7MTMxOSwxNSBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcbiBcdG9wLVx1MDAzZWludGVudCA9IGZsYWdzIFx1MDAyNiBPX1BBVEggPyAwIDogTE9PS1VQX09QRU47XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZXF1ZXN0aW5nIHdyaXRlIGFjY2VzcyBvbiBhIGRpcmVjdG9yeSBjYW4gbmV2ZXIgc3VjY2VlZC4gUmF0aGVyXG4mIzQzO1x0ICogdGhhbiBwZXJmb3JtaW5nIGEgcGF0aC13YWxrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0YXJnZXQgaXNcbiYjNDM7XHQgKiBhY3R1YWxseSBhIGRpcmVjdG9yeSAoLUVJU0RJUikgb3Igbm90ICgtRU5PVERJUiksIHdlIHNob3J0LWNpcmN1aXRcbiYjNDM7XHQgKiB0byAtRU5PVERJUi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKGZsYWdzIFx1MDAyNiBPX0RJUkVDVE9SWSkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IF9fT19UTVBGSUxFKSBcdTAwMjZcdTAwMjYgKGFjY19tb2RlIFx1MDAyNiBNQVlfV1JJVEUpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9URElSO1xuJiM0MztcbiBcdGlmIChmbGFncyBcdTAwMjYgT19DUkVBVCkge1xuIFx0XHRvcC1cdTAwM2VpbnRlbnQgfD0gTE9PS1VQX0NSRUFURTtcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBPX0VYQ0wpIHtcbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2Rpci5jIGIvZnMvc21iL2NsaWVudC9kaXIuY1xuaW5kZXggNzgwM2JkNWJkMDFmOC4uZDFhZjkwYzk4MWNkNCAxMDA2NDRcbi0tLSBhL2ZzL3NtYi9jbGllbnQvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NtYi9jbGllbnQvZGlyLmNcbkBAIC01MzgsNiAmIzQzOzUzOCw5IEBAIGludCBjaWZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSxcbiBcdGlmICh1bmxpa2VseShjaWZzX2ZvcmNlZF9zaHV0ZG93bihjaWZzX3NiKSkpXG4gXHRcdHJldHVybiBzbWJfRUlPKHNtYl9laW9fdHJhY2VfZm9yY2VkX3NodXRkb3duKTtcbiBcbiYjNDM7XHRpZiAoT19JU19NS0RJUihvZmxhZ3MpKVxuJiM0MztcdFx0b2ZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFBvc2l4IG9wZW4gaXMgb25seSBjYWxsZWQgKGF0IGxvb2t1cCB0aW1lKSBmb3IgZmlsZSBjcmVhdGUgbm93LiBGb3JcbiBcdCAqIG9wZW5zIChyYXRoZXIgdGhhbiBjcmVhdGVzKSwgYmVjYXVzZSB3ZSBkbyBub3Qga25vdyBpZiBpdCBpcyBhIGZpbGVcbmRpZmYgLS1naXQgYS9mcy92Ym94c2YvZGlyLmMgYi9mcy92Ym94c2YvZGlyLmNcbmluZGV4IDBiOWVhYjE1NzQzMmQuLjZlMzA2ZGRkNzIyYmYgMTAwNjQ0XG4tLS0gYS9mcy92Ym94c2YvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zib3hzZi9kaXIuY1xuQEAgLTMxOCw2ICYjNDM7MzE4LDkgQEAgc3RhdGljIGludCB2Ym94c2ZfZGlyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHR1NjQgaGFuZGxlO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAoT19JU19NS0RJUihmbGFncykpXG4mIzQzO1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuJiM0MztcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHZib3hzZl9kaXJfbG9va3VwKHBhcmVudCwgZGVudHJ5LCAwKTtcbiBcdFx0aWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmNudGwuaCBiL2luY2x1ZGUvbGludXgvZmNudGwuaFxuaW5kZXggNmFkNmI5ZTdhMjI2YS4uMjA0ZTE2YmJlMjYzNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmNudGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mY250bC5oXG5AQCAtMzAsNiAmIzQzOzMwLDEyIEBAXG4gICovXG4gI2RlZmluZSBfX09fUkVHVUxBUlx0XHQoMSBcdTAwM2NcdTAwM2MgMzApXG4gXG4mIzQzOyNkZWZpbmUgT19NS0RJUl9NQVNLXHQoT19DUkVBVCB8IE9fRElSRUNUT1JZKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgT19JU19NS0RJUih1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKGZsYWdzIFx1MDAyNiBPX01LRElSX01BU0spID09IE9fTUtESVJfTUFTSztcbiYjNDM7fVxuJiM0MztcbiAvKiBMaXN0IG9mIGFsbCB2YWxpZCBmbGFncyBmb3IgdGhlIGhvdy1cdTAwM2VyZXNvbHZlIGFyZ3VtZW50OiAqL1xuICNkZWZpbmUgVkFMSURfUkVTT0xWRV9GTEFHUyBcXFxuIFx0KFJFU09MVkVfTk9fWERFViB8IFJFU09MVkVfTk9fTUFHSUNMSU5LUyB8IFJFU09MVkVfTk9fU1lNTElOS1MgfCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlXG5pbmRleCA5ZWIxODVmYjJmOWRkLi4wMWM1ODhkNGM4NGY2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZVxuQEAgLTEsNCAmIzQzOzEsNSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MztvcGVuX29fY3JlYXRfb19kaXJcbiBkbm90aWZ5X3Rlc3RcbiBkZXZwdHNfcHRzXG4gZmNsb2dcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlXG5pbmRleCAwM2JlMzM3YzFmMzUxLi4wOTU5YmQyNjg3NWFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlXG5AQCAtMSw3ICYjNDM7MSw3IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuIENGTEFHUyAmIzQzOz0gJChLSERSX0lOQ0xVREVTKVxuLVRFU1RfR0VOX1BST0dTIDo9IGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2cgdXN0YXRfdGVzdFxuJiM0MztURVNUX0dFTl9QUk9HUyA6PSBvcGVuX29fY3JlYXRfb19kaXIgZGV2cHRzX3B0cyBmaWxlX3N0cmVzc29yIGFub25faW5vZGVfdGVzdCBrZXJuZnNfdGVzdCBmY2xvZyB1c3RhdF90ZXN0XG4gVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGlkbWFwcGVkX3RtcGZpbGVcbiBURVNUX0dFTl9QUk9HU19FWFRFTkRFRCA6PSBkbm90aWZ5X3Rlc3RcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYmUwYWIzNDI2N2UxZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmNcbkBAIC0wLDAgJiM0MzsxLDIwMSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt3cmFwcGVycy5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIG9wZW5hdF9vX21rZGlyX2NoZWNrZWRfZmxhZ3MoZGZkLCBwYXRobmFtZSwgZmxhZ3MpICh7XHRcXFxuJiM0MztcdHN0cnVjdCBzdGF0IF9fc3Q7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRpbnQgX19mZCA9IG9wZW5hdF9vX21rZGlyKGRmZCwgcGF0aG5hbWUsIGZsYWdzLCBTX0lSV1hVKTtcdFxcXG4mIzQzO1x0QVNTRVJUX0dFKF9fZmQsIDApO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0QVNTRVJUX0VRKGZzdGF0KF9fZmQsIFx1MDAyNl9fc3QpLCAwKTtcdFx0XHRcdFxcXG4mIzQzO1x0RVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTtcdFx0XHRcdFxcXG4mIzQzO1x0X19mZDtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgb3BlbmF0X29fbWtkaXJfY2hlY2tlZChkZmQsIHBhdGhuYW1lKSBcXFxuJiM0MztcdG9wZW5hdF9vX21rZGlyX2NoZWNrZWRfZmxhZ3MoZGZkLCBwYXRobmFtZSwgT19SRE9OTFkpXG4mIzQzO1xuJiM0MztGSVhUVVJFKG9wZW5fb19jcmVhdF9vX2Rpcikge1xuJiM0MztcdGNoYXIgZGlycGF0aFtQQVRIX01BWF07XG4mIzQzO1x0aW50IGRmZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfU0VUVVAob3Blbl9vX2NyZWF0X29fZGlyKVxuJiM0Mzt7XG4mIzQzO1x0c3RyY3B5KHNlbGYtXHUwMDNlZGlycGF0aCwgXCYjMzQ7L3RtcC9vcGVuX29fY3JlYXRfb19kaXJfdGVzdC5YWFhYWFhcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9ORShta2R0ZW1wKHNlbGYtXHUwMDNlZGlycGF0aCksIE5VTEwpO1xuJiM0MztcdHNlbGYtXHUwMDNlZGZkID0gb3BlbihzZWxmLVx1MDAzZWRpcnBhdGgsIE9fRElSRUNUT1JZKTtcbiYjNDM7XHRBU1NFUlRfR0Uoc2VsZi1cdTAwM2VkZmQsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFX1RFQVJET1dOKG9wZW5fb19jcmVhdF9vX2RpcilcbiYjNDM7e1xuJiM0MztcdGNsb3NlKHNlbGYtXHUwMDNlZGZkKTtcbiYjNDM7XHRybWRpcihzZWxmLVx1MDAzZWRpcnBhdGgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBEb2VzIG9wZW5fb19jcmVhdF9vX2RpciByZXR1cm4gYSBmZCBhdCBhbGw/ICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJldHVybnNfZmQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtuZXdkaXJcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmZCksIDApO1xuJiM0MztcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7bmV3ZGlyXCYjMzQ7LCBBVF9SRU1PVkVESVIpLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGhlIGZkIG11c3QgcmVmZXIgdG8gdGhlIGRpcmVjdG9yeSB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQuICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGZkX2lzX2NyZWF0ZWRfZGlyKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcdHN0cnVjdCBzdGF0IHN0X3ZpYV9mZCwgc3RfdmlhX3BhdGg7XG4mIzQzO1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtjaGVja2RpclwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShmc3RhdChmZCwgXHUwMDI2c3RfdmlhX2ZkKSwgMCk7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCYjMzQ7JXMvY2hlY2tkaXJcJiMzNDssIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4mIzQzO1x0QVNTRVJUX0VRKHN0YXQocGF0aCwgXHUwMDI2c3RfdmlhX3BhdGgpLCAwKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9pbm8sIHN0X3ZpYV9wYXRoLnN0X2lubyk7XG4mIzQzO1x0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9kZXYsIHN0X3ZpYV9wYXRoLnN0X2Rldik7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmZCksIDApO1xuJiM0MztcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE1pc3NpbmcgcGFyZW50IGNvbXBvbmVudCBtdXN0IGZhaWwgd2l0aCBFTk9FTlQuICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGVub2VudF9taXNzaW5nX3BhcmVudClcbiYjNDM7e1xuJiM0MztcdEVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7bm9uZXhpc3RlbnQvY2hpbGRcJiMzNDssIE9fUkRPTkxZLCBTX0lSV1hVKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQW4gaW52YWxpZCBkZmQgbXVzdCBmYWlsIHdpdGggRUJBREYuICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGViYWRmKVxuJiM0Mzt7XG4mIzQzO1x0RVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKEZEX0lOVkFMSUQsIFwmIzM0O2JhZGZkaXJcJiMzNDssIE9fUkRPTkxZLCBTX0lSV1hVKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRUJBREYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBIGRmZCB0aGF0IHBvaW50cyB0byBhIGZpbGUgKG5vdCBhIGRpcmVjdG9yeSkgbXVzdCBmYWlsIHdpdGggRU5PVERJUi4gKi9cbiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vdGRpcl9kZmQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmlsZV9mZDtcbiYjNDM7XG4mIzQzO1x0ZmlsZV9mZCA9IG9wZW5hdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7ZmlsZVwmIzM0OyxcbiYjNDM7XHRcdFx0IE9fQ1JFQVQgfCBPX1JET05MWSwgU19JUldYVSk7XG4mIzQzO1x0QVNTRVJUX0dFKGZpbGVfZmQsIDApO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoZmlsZV9mZCwgXCYjMzQ7c3ViZGlyXCYjMzQ7LCBPX1JET05MWSwgU19JUldYVSksIC0xKTtcbiYjNDM7XHRFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApO1xuJiM0MztcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7ZmlsZVwmIzM0OywgMCksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBPX0VYQ0wgdG9nZXRoZXIgd2l0aCBPX0NSRUFUfE9fRElSRUNUT1JZIHNob3VsZCBzdWNjZWVkIGlmIHRoZSB0YXJnZXRcbiYjNDM7ICogZGlyZWN0b3J5IGRvZXMgbm90IHlldCBleGlzdC4gQWZ0ZXIgZGlyZWN0b3J5IGNyZWF0aW9uLCByZXBlYXRpbmcgdGhpc1xuJiM0MzsgKiBjYWxsIG11c3QgZmFpbCB3aXRoIEVFWElTVC5cbiYjNDM7ICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIG9fZXhjbF9lZXhpc3QpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXhjbGRpcl9mZDtcbiYjNDM7XG4mIzQzO1x0ZXhjbGRpcl9mZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWRfZmxhZ3Moc2VsZi1cdTAwM2VkZmQsIFwmIzM0O2V4Y2xkaXJcJiMzNDssIE9fRVhDTCk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihleGNsZGlyX2ZkLCBcJiMzNDsuXCYjMzQ7LCBPX0VYQ0wsIFNfSVJXWFUpLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFRVhJU1QpO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoY2xvc2UoZXhjbGRpcl9mZCksIDApO1xuJiM0MztcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7ZXhjbGRpclwmIzM0OywgQVRfUkVNT1ZFRElSKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgb24gYSBwYXRoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXMgYSByZWd1bGFyIGZpbGVcbiYjNDM7ICogbXVzdCBmYWlsIHdpdGggRU5PVERJUi5cbiYjNDM7ICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGV4aXN0aW5nX2ZpbGVfZW5vdGRpcilcbiYjNDM7e1xuJiM0MztcdGludCBmaWxlX2ZkO1xuJiM0MztcbiYjNDM7XHRmaWxlX2ZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtyZWdmaWxlXCYjMzQ7LFxuJiM0MztcdFx0XHQgT19DUkVBVCB8IE9fUkRPTkxZLCBTX0lSV1hVKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmlsZV9mZCwgMCk7XG4mIzQzO1x0RVhQRUNUX0VRKGNsb3NlKGZpbGVfZmQpLCAwKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtyZWdmaWxlXCYjMzQ7LCBPX1JET05MWSwgU19JUldYVSksIC0xKTtcbiYjNDM7XHRFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O3JlZ2ZpbGVcJiMzNDssIDApLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogT19DUkVBVHxPX0RJUkVDVE9SWSBjb21iaW5lZCB3aXRoIGEgd3JpdGFibGUgYWNjZXNzIG1vZGUgbXVzdCBiZVxuJiM0MzsgKiByZWplY3RlZDogYSBkaXJlY3RvcnkgY2Fubm90IGJlIG9wZW5lZCBmb3Igd3JpdGluZy5cbiYjNDM7ICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJlamVjdHNfd3JpdGFibGVfYWNjX21vZGUpXG4mIzQzO3tcbiYjNDM7XHRFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O3Jkd3JkaXJcJiMzNDssIE9fUkRXUiwgU19JUldYVSksIC0xKTtcbiYjNDM7XHRFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpO1xuJiM0MztcdC8qIENsZWFuIHVwIGlmIHRoZSBrZXJuZWwgY3JlYXRlZCB0aGUgZGlyZWN0b3J5IGFueXdheS4gKi9cbiYjNDM7XHR1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7cmR3cmRpclwmIzM0OywgQVRfUkVNT1ZFRElSKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogb3BlbmF0KE9fQ1JFQVR8T19ESVJFQ1RPUlkpIHdpdGggYSB0cmFpbGluZyBzbGFzaCBzaG91bGQgd29yay5cbiYjNDM7ICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHRyYWlsaW5nX3NsYXNoKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7bmV3ZGlyL1wmIzM0Oyk7XG4mIzQzO1x0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XG4mIzQzO1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtuZXdkaXJcJiMzNDssIEFUX1JFTU9WRURJUiksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBvcGVuYXQoT19DUkVBVCkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIGJ1dCB3aXRob3V0IE9fRElSRUNUT1JZXG4mIzQzOyAqIG11c3QgZmFpbCB3aXRoIEVJU0RJUiBhbmQgbXVzdCBub3QgY3JlYXRlIGFueXRoaW5nIGF0IHRoZSBwYXRoLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgdHJhaWxpbmdfc2xhc2hfbm9fb19kaXIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0c3RydWN0IHN0YXQgc3Q7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDt0cmFpbGluZy9cJiMzNDssIE9fQ1JFQVQgfCBPX1JET05MWSwgU19JUldYVSk7XG4mIzQzO1x0RVhQRUNUX0VRKGZkLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFSVNESVIpO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoZnN0YXRhdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7dHJhaWxpbmdcJiMzNDssIFx1MDAyNnN0LCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcbiYjNDM7XG4mIzQzO1x0LyogQmVzdC1lZmZvcnQgY2xlYW51cCBpbiBjYXNlIHRoZSBrZXJuZWwgbGVmdCBhIGZpbGUgYmVoaW5kLiAqL1xuJiM0MztcdGlmIChmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0dW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O3RyYWlsaW5nXCYjMzQ7LCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIHJldHVybmVkIGZkIG11c3QgYmUgdXNhYmxlIGFzIGEgZGZkIGZvciBmdXJ0aGVyICphdCgpIGNhbGxzLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfdXNhYmxlX2FzX2RmZClcbiYjNDM7e1xuJiM0MztcdGludCBwYXJlbnRfZmQsIGNoaWxkX2ZkO1xuJiM0MztcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1xuJiM0MztcdHBhcmVudF9mZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O3BhcmVudFwmIzM0Oyk7XG4mIzQzO1x0Y2hpbGRfZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHBhcmVudF9mZCwgXCYjMzQ7Y2hpbGRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoY2xvc2UoY2hpbGRfZmQpLCAwKTtcbiYjNDM7XHRFWFBFQ1RfRVEoY2xvc2UocGFyZW50X2ZkKSwgMCk7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCYjMzQ7JXMvcGFyZW50L2NoaWxkXCYjMzQ7LCBzZWxmLVx1MDAzZWRpcnBhdGgpO1xuJiM0MztcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XG4mIzQzO1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcJiMzNDslcy9wYXJlbnRcJiMzNDssIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4mIzQzO1x0RVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9IQVJORVNTX01BSU5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy93cmFwcGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvd3JhcHBlcnMuaFxuaW5kZXggNDIwYWU0ZjkwOGNmMi4uYWJlNWI4NWNlYmRjZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3dyYXBwZXJzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3dyYXBwZXJzLmhcbkBAIC0xMyw2ICYjNDM7MTMsMTAgQEBcbiAjZGVmaW5lIFNUQVRYX01OVF9JRF9VTklRVUUgMHgwMDAwNDAwMFUgLyogV2FudC9nb3QgZXh0ZW5kZWQgc3R4X21vdW50X2lkICovXG4gI2VuZGlmXG4gXG4mIzQzOyNpZm5kZWYgRkRfSU5WQUxJRFxuJiM0MzsjZGVmaW5lIEZEX0lOVkFMSUQgLTEwMDA5XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGludCBzeXNfZnNvcGVuKGNvbnN0IGNoYXIgKmZzbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuIHtcbiBcdHJldHVybiBzeXNjYWxsKF9fTlJfZnNvcGVuLCBmc25hbWUsIGZsYWdzKTtcbkBAIC0xMDUsNCAmIzQzOzEwOSwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNfb3Blbl90cmVlKGludCBkZmQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ1xuIFx0cmV0dXJuIHN5c2NhbGwoX19OUl9vcGVuX3RyZWUsIGRmZCwgZmlsZW5hbWUsIGZsYWdzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG9wZW5hdF9vX21rZGlyKGludCBkZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLFxuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN5c2NhbGwoX19OUl9vcGVuYXQsIGRmZCwgcGF0aG5hbWUsXG4mIzQzO1x0XHQgICAgICAgZmxhZ3MgfCBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQsIG1vZGUpO1xuJiM0Mzt9XG4mIzQzO1xuICNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDs5UF9GUyYjMzQ7LAogICAgJiMzNDtDRVBIX0ZTJiMzNDssCiAgICAmIzM0O0ZVU0VfRlMmIzM0OywKICAgICYjMzQ7R0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtORlNfRlMmIzM0OywKICAgICYjMzQ7Q0lGUyYjMzQ7LAogICAgJiMzNDtWQk9YU0ZfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfbWtkaXImIzM0OywKICAgICYjMzQ7dmZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2ZnNfbG9va3VwX29wZW4mIzM0OywKICAgICYjMzQ7ZGVudHJ5X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtmaWxlbmFtZV9ta2RpcmF0JiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX3VubGlua2F0JiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX3JlbmFtZWF0MiYjMzQ7LAogICAgJiMzNDt2OWZzX3Zmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsJiMzNDssCiAgICAmIzM0O2NlcGhfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7ZnVzZV9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtnZnMyX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtuZnNfYXRvbWljX29wZW5fdjIzJiMzNDssCiAgICAmIzM0O2NpZnNfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7dmJveHNmX2Rpcl9hdG9taWNfb3BlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAgZm9yIGBvcGVuYXQoKWAgdG8gYXRvbWljYWxseSBjcmVhdGUgYSBkaXJlY3RvcnkgYW5kIHJldHVybiBhIGZpbGUgZGVzY3JpcHRvci4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aCByZXNvbHV0aW9uIGFuZCBjcmVhdGlvbiBsb2dpYyBpbiBgZnMvbmFtZWkuY2AgYW5kIGBmcy9vcGVuLmNgLCBhbmQgdXBkYXRlcyBzZXZlcmFsIGZpbGVzeXN0ZW1zJiMzOTsgYGF0b21pY19vcGVuYCBpbXBsZW1lbnRhdGlvbnMgdG8gaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbi4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ2OTc0ZjJkYWUwM2EzMTRlZWRjZDIyNTE0OWUxMjZiNjYwOTRiNGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyMyAxNjoxNDowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmMKaW5kZXggMzgyOTU1NGNhMzY5Mi4uYjFlMDgyM2M4N2I1NyAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvOXAvdmZzX2lub2RlLmMKQEAgLTc3Niw2ICYjNDM7Nzc2LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCWludCBwOV9vbW9kZTsKIAomIzQzOwlpZiAoT19JU19NS0RJUihmbGFncykpCiYjNDM7CQlmbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJaWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHsKIAkJc3RydWN0IGRlbnRyeSAqcmVzID0gdjlmc192ZnNfbG9va3VwKGRpciwgZGVudHJ5LCAwKTsKIAkJaWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKQpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuYyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMKaW5kZXggMTE2YjI5ZTk1ZjIxZS4uNjRlMGFiYTA4ZGExNiAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jCkBAIC0yMzgsNiAmIzQzOzIzOCw5IEBAIHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOwogCXN0cnVjdCBwb3NpeF9hY2wgKnBhY2wgPSBOVUxMLCAqZGFjbCA9IE5VTEw7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIoZmxhZ3MpKQomIzQzOwkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7CiAJCXN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7CiAJCWlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSkKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZmlsZS5jIGIvZnMvY2VwaC9maWxlLmMKaW5kZXggYTRhMmE0YjZhMDI3ZC4uNjIxNjNiN2VjYTVmOSAxMDA2NDQKLS0tIGEvZnMvY2VwaC9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvY2VwaC9maWxlLmMKQEAgLTgxMiw2ICYjNDM7ODEyLDkgQEAgaW50IGNlcGhfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkgICAgICBkaXIsIGNlcGhfdmlub3AoZGlyKSwgZGVudHJ5LCBkZW50cnksCiAJICAgICAgZF91bmhhc2hlZChkZW50cnkpID8gJiMzNDt1bmhhc2hlZCYjMzQ7IDogJiMzNDtoYXNoZWQmIzM0OywgZmxhZ3MsIG1vZGUpOwogCiYjNDM7CWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZGVudHJ5LSZndDtkX25hbWUubGVuICZndDsgTkFNRV9NQVgpCiAJCXJldHVybiAtRU5BTUVUT09MT05HOwogCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCBkNGUwMDI5ODEwYzBmLi41NWQ1ODQ0ZTI2NTU5IDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTkzNSw2ICYjNDM7OTM1LDkgQEAgc3RhdGljIGludCBmdXNlX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICplbnRyeSwKIAlzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihkaXIpOwogCiYjNDM7CWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZnVzZV9pc19iYWQoZGlyKSkKIAkJcmV0dXJuIC1FSU87CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuYwppbmRleCBmMzYxODc2YzU1ODMzLi4zZWUxMzYwZjFiYzI3IDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZ2ZzMi9pbm9kZS5jCkBAIC0xMzg2LDYgJiM0MzsxMzg2LDkgQEAgc3RhdGljIGludCBnZnMyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiB7CiAJYm9vbCBleGNsID0gISEoZmxhZ3MgJmFtcDsgT19FWENMKTsKIAomIzQzOwlpZiAoT19JU19NS0RJUihmbGFncykpCiYjNDM7CQlmbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJaWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHsKIAkJc3RydWN0IGRlbnRyeSAqZCA9IF9fZ2ZzMl9sb29rdXAoZGlyLCBkZW50cnksIGZpbGUpOwogCQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX09QRU5FRCkgewpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggMjBhNjUzNGVhM2VmZi4uZTFhOGYxODM4NWE1MiAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jCkBAIC0xMzgyLDEzICYjNDM7MTM4MiwxMyBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspCiAKIC8qKgogICogbWF5X2NyZWF0ZV9pbl9zdGlja3kgLSBDaGVjayB3aGV0aGVyIGFuIE9fQ1JFQVQgb3BlbiBpbiBhIHN0aWNreSBkaXJlY3RvcnkKLSAqCQkJICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcyB0aGF0IGFscmVhZHkKLSAqCQkJICBleGlzdC4KJiM0MzsgKgkJCSAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdCwgb24gZmlsZXMvZGlyZWN0b3JpZXMgdGhhdAomIzQzOyAqCQkJICBhbHJlYWR5IGV4aXN0LgogICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tCiAgKiBAbmQ6IG5hbWVpZGF0YSBwYXRod2FsayBkYXRhCiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuCiAgKgotICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUpIHdoZW46CiYjNDM7ICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUvZGlyZWN0b3J5KSB3aGVuOgogICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZAogICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzCiAgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeQpAQCAtMTQxNiw2ICYjNDM7MTQxNiwxNCBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCwKIAlpZiAobGlrZWx5KCEoZGlyX21vZGUgJmFtcDsgU19JU1ZUWCkpKQogCQlyZXR1cm4gMDsKIAomIzQzOwkvKgomIzQzOwkgKiBUaGVyZSBpcyBubyBzZXBhcmF0ZSBzeXNjdGwgZm9yIGRpcmVjdG9yeSBjcmVhdGlvbiBpbiBzdGlja3kKJiM0MzsJICogZm9sZGVycy4gVGhlcmVmb3JlLCBmb3IgdGhlIFNfSVNESVIgY2FzZSwgZGlzYWJsaW5nCiYjNDM7CSAqIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhciBpcyBub3QgZW5vdWdoIHRvIGFsbG93IGNyZWF0aW5nIGEKJiM0MzsJICogZGlyZWN0b3J5IGluIGEgc3RpY2t5IGZvbGRlciwgYmVjYXVzZSB0aGF0IG1heSBzdXJwcmlzZSB1c2VycwomIzQzOwkgKiBub3QgZXhwZWN0aW5nIHRoYXQgT19DUkVBVHxPX0RJUkVDVE9SWSBpcyBwb3NzaWJsZSBvbiBuZXdlcgomIzQzOwkgKiBrZXJuZWxzLgomIzQzOwkgKi8KIAlpZiAoU19JU1JFRyhpbm9kZS0mZ3Q7aV9tb2RlKSAmYW1wOyZhbXA7ICFzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpCiAJCXJldHVybiAwOwogCkBAIC0xNDQ3LDYgJiM0MzsxNDU1LDEyIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLAogCQkJCQkgICAgICAmIzM0O3N0aWNreV9jcmVhdGVfcmVndWxhciYjMzQ7KTsKIAkJCXJldHVybiAtRUFDQ0VTOwogCQl9CiYjNDM7CiYjNDM7CQlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewomIzQzOwkJCWF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULAomIzQzOwkJCQkJICAgICAgJiMzNDtzdGlja3lfY3JlYXRlX2RpciYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVBQ0NFUzsKJiM0MzsJCX0KIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI3ODEsOSAmIzQzOzI3OTUsMTYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnBhdGhfaW5pdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgZmxhZ3MpCiAJcmV0dXJuIHM7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhjb25zdCBzdHJ1Y3QgcXN0ciAqbGFzdCkKJiM0Mzt7CiYjNDM7CS8qIGxhc3QtJmd0O2xlbiBpcyBzZXQgYnkgaGFzaF9uYW1lKCkgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudAomIzQzOwkgKiBjb21wb25lbnQgLSZndDtuYW1lLCB0ZXJtaW5hdGluZyB3aXRoICYjMzk7LyYjMzk7IG9yIGEgTlVMIGNoYXJhY3Rlci4gKi8KJiM0MzsJcmV0dXJuIChib29sKWxhc3QtJmd0O25hbWVbbGFzdC0mZ3Q7bGVuXTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmxvb2t1cF9sYXN0KHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCWlmIChuZC0mZ3Q7bGFzdF90eXBlID09IExBU1RfTk9STSAmYW1wOyZhbXA7IG5kLSZndDtsYXN0Lm5hbWVbbmQtJmd0O2xhc3QubGVuXSkKJiM0MzsJaWYgKG5kLSZndDtsYXN0X3R5cGUgPT0gTEFTVF9OT1JNICZhbXA7JmFtcDsgdHJhaWxpbmdfc2xhc2hlcygmYW1wO25kLSZndDtsYXN0KSkKIAkJbmQtJmd0O2ZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZOwogCiAJcmV0dXJuIHdhbGtfY29tcG9uZW50KG5kLCBXQUxLX1RSQUlMSU5HKTsKQEAgLTQxNTksNiAmIzQzOzQxODAsMjQgQEAgc3RhdGljIGlubGluZSB1bW9kZV90IHZmc19wcmVwYXJlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJcmV0dXJuIG1vZGU7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7aW50IHZmc19jcmVhdGVfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJICAgICAgIHVtb2RlX3QgbW9kZSwgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW5vZGUgKmRpciA9IGRfaW5vZGUoZGVudHJ5LSZndDtkX3BhcmVudCk7CiYjNDM7CWludCBlcnJvcjsKJiM0MzsKJiM0MzsJZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJZXJyb3IgPSBkaXItJmd0O2lfb3AtJmd0O2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwlpZiAoIWVycm9yKQomIzQzOwkJZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKIC8qKgogICogdmZzX2NyZWF0ZSAtIGNyZWF0ZSBuZXcgZmlsZQogICogQGlkbWFwOglpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tCkBAIC00MTkxLDEzICYjNDM7NDIzMCw4IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwKIAllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7Ci0JZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0JZXJyb3IgPSBkaXItJmd0O2lfb3AtJmd0O2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwotCWlmICghZXJyb3IpCi0JCWZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7Ci0JcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwlyZXR1cm4gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsIGRpKTsKIH0KIEVYUE9SVF9TWU1CT0wodmZzX2NyZWF0ZSk7CiAKQEAgLTQzMTQsMjEgJiM0Mzs0MzQ4LDQxIEBAIHN0YXRpYyBpbmxpbmUgaW50IG9wZW5fdG9fbmFtZWlfZmxhZ3MoaW50IGZsYWcpCiAKIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJY29uc3Qgc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJdW1vZGVfdCBtb2RlKQomIzQzOwkJCWludCBvcGVuX2ZsYWcsIHVtb2RlX3QgbW9kZSkKIHsKLQlpbnQgZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKJiM0MzsJc3RydWN0IGlub2RlICpkaXJfaW5vZGUgPSBkaXItJmd0O2RlbnRyeS0mZ3Q7ZF9pbm9kZTsKJiM0MzsJYm9vbCBjcmVhdGVfZGlyID0gT19JU19NS0RJUihvcGVuX2ZsYWcpOwomIzQzOwlpbnQgZXJyb3I7CiYjNDM7CiYjNDM7CWlmIChjcmVhdGVfZGlyKQomIzQzOwkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZWxzZQomIzQzOwkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAogCWlmICghZnN1aWRnaWRfaGFzX21hcHBpbmcoZGlyLSZndDtkZW50cnktJmd0O2Rfc2IsIGlkbWFwKSkKIAkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAKLQllcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLAotCQkJCSBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7CiYjNDM7CWVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLCBkZW50cnksIG1vZGUpOwomIzQzOwlpZiAoY3JlYXRlX2RpcikKJiM0MzsJCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpOwomIzQzOwllbHNlCiYjNDM7CQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnJvcjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1bW9kZV90IG9fY3JlYXRlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQljb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgaW50IG9wZW5fZmxhZywgdW1vZGVfdCBtb2RlKQomIzQzO3sKJiM0MzsJaWYgKE9fSVNfTUtESVIob3Blbl9mbGFnKSkKJiM0MzsJCXJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIFNfSUZESVIpOwomIzQzOwllbHNlCiYjNDM7CQlyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpOwogfQogCiAvKioKQEAgLTQzNjQsOCAmIzQzOzQ0MTgsOSBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeQogCiAJZmlsZS0mZ3Q7X19mX3BhdGguZGVudHJ5ID0gREVOVFJZX05PVF9TRVQ7CiAJZmlsZS0mZ3Q7X19mX3BhdGgubW50ID0gcGF0aC0mZ3Q7bW50OwomIzQzOwogCWVycm9yID0gZGlyX2lub2RlLSZndDtpX29wLSZndDthdG9taWNfb3BlbihkaXJfaW5vZGUsIGRlbnRyeSwgZmlsZSwKLQkJCQkgICAgICAgb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpLCBtb2RlKTsKJiM0MzsJCQkJCSAgICAgb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpLCBtb2RlKTsKIAlkX2xvb2t1cF9kb25lKGRlbnRyeSk7CiAKIAlpZiAoIWVycm9yKSB7CkBAIC00NDEwLDEwICYjNDM7NDQ2NSwyMSBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeQogCQl9CiAJCWRwdXQoZGVudHJ5KTsKIAkJZGVudHJ5ID0gRVJSX1BUUihlcnJvcik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX0NSRUFURUQpCiYjNDM7CQkJZnNub3RpZnlfY3JlYXRlKGRpcl9pbm9kZSwgZGVudHJ5KTsKJiM0MzsJCWlmIChmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfT1BFTkVEKQomIzQzOwkJCWZzbm90aWZ5X29wZW4oZmlsZSk7CiAJfQomIzQzOwomIzQzOwogCXJldHVybiBkZW50cnk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwKJiM0MzsJCQkJIHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCwKJiM0MzsJCQkJIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKik7CiAvKgogICogTG9vayB1cCBhbmQgbWF5YmUgY3JlYXRlIGFuZCBvcGVuIHRoZSBsYXN0IGNvbXBvbmVudC4KICAqCkBAIC00NDM1LDYgJiM0Mzs0NTAxLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlzdHJ1Y3QgbW50X2lkbWFwICppZG1hcDsKIAlzdHJ1Y3QgZGVudHJ5ICpkaXIgPSBuZC0mZ3Q7cGF0aC5kZW50cnk7CiAJc3RydWN0IGlub2RlICpkaXJfaW5vZGUgPSBkaXItJmd0O2RfaW5vZGU7CiYjNDM7CWJvb2wgY3JlYXRlX2RpciA9IE9fSVNfTUtESVIob3AtJmd0O21vZGUpOwogCWludCBvcGVuX2ZsYWc7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCWludCBlcnJvciwgY3JlYXRlX2Vycm9yOwpAQCAtNDQ1NSw3ICYjNDM7NDUyMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAqLwogCX0KIAlpZiAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpCi0JCWlub2RlX2xvY2soZGlyX2lub2RlKTsKJiM0MzsJCWlub2RlX2xvY2tfbmVzdGVkKGRpcl9pbm9kZSwgSV9NVVRFWF9QQVJFTlQpOwogCWVsc2UKIAkJaW5vZGVfbG9ja19zaGFyZWQoZGlyX2lub2RlKTsKIApAQCAtNDUwNywxMiAmIzQzOzQ1NzQsMTcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlpZiAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpIHsKIAkJaWYgKG9wZW5fZmxhZyAmYW1wOyBPX0VYQ0wpCiAJCQlvcGVuX2ZsYWcgJmFtcDs9IH5PX1RSVU5DOwotCQltb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBtb2RlLCBtb2RlLCBtb2RlKTsKJiM0MzsJCW1vZGUgPSBvX2NyZWF0ZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG9wZW5fZmxhZywgbW9kZSk7CiAJCWlmIChsaWtlbHkoZ290X3dyaXRlKSkKIAkJCWNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgJmFtcDtuZC0mZ3Q7cGF0aCwKLQkJCQkJCSAgICBkZW50cnksIG1vZGUpOwomIzQzOwkJCQkJCSAgICBkZW50cnksIG9wZW5fZmxhZywgbW9kZSk7CiAJCWVsc2UKIAkJCWNyZWF0ZV9lcnJvciA9IC1FUk9GUzsKJiM0MzsJCS8qIFJlZnVzZSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgdGhyb3VnaCBhIGRhbmdsaW5nICh0cmFpbGluZykKJiM0MzsJCSAqIHN5bWxpbmsuIEZvciByZWd1bGFyIGZpbGVzIHRoaXMgaGFzIGJlZW4gYWxsb3dlZCBoaXN0b3JpY2FsbHkKJiM0MzsJCSAqIG9uIE9fQ1JFQVQgd2l0aG91dCBPX0VYQ0wuICovCiYjNDM7CQlpZiAodW5saWtlbHkobmQtJmd0O2RlcHRoKSAmYW1wOyZhbXA7IGNyZWF0ZV9kaXIgJmFtcDsmYW1wOyAhY3JlYXRlX2Vycm9yKQomIzQzOwkJCWNyZWF0ZV9lcnJvciA9IC1FRVhJU1Q7CiAJfQogCWlmIChjcmVhdGVfZXJyb3IpCiAJCW9wZW5fZmxhZyAmYW1wOz0gfk9fQ1JFQVQ7CkBAIC00NTM3LDYgJiM0Mzs0NjA5LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCWRlbnRyeSA9IHJlczsKIAkJfQogCX0KJiM0MzsKIAlpZiAoZGVudHJ5LSZndDtkX2lub2RlIHx8ICEob3AtJmd0O29wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSkgewogCQkvKgogCQkgKiBObyBuZWVkIHRvIGNyZWF0ZSBhIGZpbGUuICBJZiBsb29rdXAgcmV0dXJuZWQgYSBwb3NpdGl2ZQpAQCAtNDU1NCwyNiAmIzQzOzQ2MjcsMjYgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJZ290byBvdXRfZHB1dDsKIAl9CiAKLQllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXJfaW5vZGUsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsICZhbXA7ZGVsZWdhdGVkX2lub2RlKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2RwdXQ7Ci0KLQlmaWxlLSZndDtmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDsKLQlpZiAoIWRpcl9pbm9kZS0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKSB7CiYjNDM7CWlmICgoY3JlYXRlX2RpciAmYW1wOyZhbXA7ICFkaXJfaW5vZGUtJmd0O2lfb3AtJmd0O21rZGlyKQomIzQzOwkJfHwgKCFjcmVhdGVfZGlyICZhbXA7JmFtcDsgIWRpcl9pbm9kZS0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKSkgewogCQllcnJvciA9IC1FQUNDRVM7CiAJCWdvdG8gb3V0X2RwdXQ7CiAJfQogCi0JZXJyb3IgPSBkaXJfaW5vZGUtJmd0O2lfb3AtJmd0O2NyZWF0ZShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksIG1vZGUpOwomIzQzOwlpZiAoY3JlYXRlX2RpcikgewomIzQzOwkJc3RydWN0IGRlbnRyeSAqcmVzID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LAomIzQzOwkJCQkJCSAgICAgICBtb2RlLCAmYW1wO2RlbGVnYXRlZF9pbm9kZSk7CiYjNDM7CQkJZXJyb3IgPSBQVFJfRVJSX09SX1pFUk8ocmVzKTsKJiM0MzsJCQlpZiAoIWVycm9yKQomIzQzOwkJCQlkZW50cnkgPSByZXM7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllcnJvciA9IHZmc19jcmVhdGVfbm9fcGVybShpZG1hcCwgZGVudHJ5LCBtb2RlLCAmYW1wO2RlbGVnYXRlZF9pbm9kZSk7CiYjNDM7CX0KIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2RwdXQ7CiYjNDM7CiYjNDM7CWZpbGUtJmd0O2ZfbW9kZSB8PSBGTU9ERV9DUkVBVEVEOwogb3V0OgotCWlmICghSVNfRVJSKGRlbnRyeSkpIHsKLQkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9DUkVBVEVEKQotCQkJZnNub3RpZnlfY3JlYXRlKGRpcl9pbm9kZSwgZGVudHJ5KTsKLQkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9PUEVORUQpCi0JCQlmc25vdGlmeV9vcGVuKGZpbGUpOwotCX0KIAlpZiAoKG9wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSB8fCBjcmVhdGVfZXJyb3IpCiAJCWlub2RlX3VubG9jayhkaXJfaW5vZGUpOwogCWVsc2UKQEAgLTQ2OTUsMTcgJiM0Mzs0NzY4LDEyIEBAIHN0cnVjdCBmaWxlICp2ZnNfbG9va3VwX29wZW4oc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IHFzdHIgKmxhc3QsCiB9CiBFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHZmc19sb29rdXBfb3BlbiwgJiMzNDtuZnNkJiMzNDspOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKLXsKLQlyZXR1cm4gKGJvb2wpbmQtJmd0O2xhc3QubmFtZVtuZC0mZ3Q7bGFzdC5sZW5dOwotfQotCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpCiB7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCiAJaWYgKG9wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSB7Ci0JCWlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSkKJiM0MzsJCWlmICh0cmFpbGluZ19zbGFzaGVzKCZhbXA7bmQtJmd0O2xhc3QpICZhbXA7JmFtcDsgIShvcGVuX2ZsYWcgJmFtcDsgT19ESVJFQ1RPUlkpKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVJU0RJUik7CiAKIAkJLyogRG9uJiMzOTt0IGJvdGhlciBvbiBhbiBPX0VYQ0wgY3JlYXRlICovCkBAIC00NzEzLDcgJiM0Mzs0NzgxLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9mYXN0X2Zvcl9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgb3Blbl9mbGFnKQogCQkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKQomIzQzOwlpZiAodHJhaWxpbmdfc2xhc2hlcygmYW1wO25kLSZndDtsYXN0KSkKIAkJbmQtJmd0O2ZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZOwogCiAJZGVudHJ5ID0gbG9va3VwX2Zhc3QobmQpOwpAQCAtNDgwNiw4ICYjNDM7NDg3NCw5IEBAIHN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwKIAlpZiAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpIHsKIAkJaWYgKChvcGVuX2ZsYWcgJmFtcDsgT19FWENMKSAmYW1wOyZhbXA7ICEoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX0NSRUFURUQpKQogCQkJcmV0dXJuIC1FRVhJU1Q7Ci0JCWlmIChkX2lzX2RpcihuZC0mZ3Q7cGF0aC5kZW50cnkpKQomIzQzOwkJaWYgKCEob3Blbl9mbGFnICZhbXA7IE9fRElSRUNUT1JZKSAmYW1wOyZhbXA7IGRfaXNfZGlyKG5kLSZndDtwYXRoLmRlbnRyeSkpCiAJCQlyZXR1cm4gLUVJU0RJUjsKJiM0MzsKIAkJZXJyb3IgPSBtYXlfY3JlYXRlX2luX3N0aWNreShpZG1hcCwgbmQsCiAJCQkJCSAgICAgZF9iYWNraW5nX2lub2RlKG5kLSZndDtwYXRoLmRlbnRyeSkpOwogCQlpZiAodW5saWtlbHkoZXJyb3IpKQpAQCAtNTA4Nyw3ICYjNDM7NTE1Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpmaWxlbmFtZV9jcmVhdGUoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLAogCSAqIERvIHRoZSBmaW5hbCBsb29rdXAuICBTdXBwcmVzcyAmIzM5O2NyZWF0ZSYjMzk7IGlmIHRoZXJlIGlzIGEgdHJhaWxpbmcKIAkgKiAmIzM5Oy8mIzM5OywgYW5kIGEgZGlyZWN0b3J5IHdhc24mIzM5O3QgcmVxdWVzdGVkLgogCSAqLwotCWlmIChsYXN0Lm5hbWVbbGFzdC5sZW5dICZhbXA7JmFtcDsgIXdhbnRfZGlyKQomIzQzOwlpZiAodHJhaWxpbmdfc2xhc2hlcygmYW1wO2xhc3QpICZhbXA7JmFtcDsgIXdhbnRfZGlyKQogCQljcmVhdGVfZmxhZ3MgJmFtcDs9IH5MT09LVVBfQ1JFQVRFOwogCWRlbnRyeSA9IHN0YXJ0X2Rpcm9wKHBhdGgtJmd0O2RlbnRyeSwgJmFtcDtsYXN0LCByZXZhbF9mbGFnIHwgY3JlYXRlX2ZsYWdzKTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpCkBAIC01MTgyLDcgJiM0Mzs1MjUxLDcgQEAgc3RydWN0IGZpbGUgKmRlbnRyeV9jcmVhdGUoc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncywgdW1vZGVfdCBtb2RlLAogCQlwYXRoLSZndDtkZW50cnkgPSBkaXI7CiAJCW1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7CiAKLQkJY3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIG1vZGUpOwomIzQzOwkJY3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIGZsYWdzLCBtb2RlKTsKIAkJaWYgKGNyZWF0ZV9lcnJvcikKIAkJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKIApAQCAtNTM1Niw2ICYjNDM7NTQyNSwzNCBAQCBTWVNDQUxMX0RFRklORTMobWtub2QsIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lLCB1bW9kZV90LCBtb2RlLCB1bnNpZ25lZCwgZAogCXJldHVybiBmaWxlbmFtZV9ta25vZGF0KEFUX0ZEQ1dELCBuYW1lLCBtb2RlLCBkZXYpOwogfQogCiYjNDM7LyogUmV0dXJucyB0aGUgZGVudHJ5IHRvIHVzZSAobm90IE5VTEwpIG9yIC1FIG9uIGVycm9yICovCiYjNDM7c3RhdGljIGlubGluZQomIzQzO3N0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLAomIzQzOwkJCQkgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpCiYjNDM7ewomIzQzOwlpbnQgZXJyb3I7CiYjNDM7CXN0cnVjdCBkZW50cnkgKmRlOwomIzQzOwl1bnNpZ25lZCBtYXhfbGlua3MgPSBkaXItJmd0O2lfc2ItJmd0O3NfbWF4X2xpbmtzOwomIzQzOwomIzQzOwlpZiAobWF4X2xpbmtzICZhbXA7JmFtcDsgZGlyLSZndDtpX25saW5rICZndDs9IG1heF9saW5rcykKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTUxJTkspOwomIzQzOwomIzQzOwllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwomIzQzOwomIzQzOwlkZSA9IGRpci0mZ3Q7aV9vcC0mZ3Q7bWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJaWYgKElTX0VSUihkZSkpCiYjNDM7CQlyZXR1cm4gZGU7CiYjNDM7CWlmIChkZSkgewomIzQzOwkJZHB1dChkZW50cnkpOwomIzQzOwkJZGVudHJ5ID0gZGU7CiYjNDM7CX0KJiM0MzsJZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpOwomIzQzOwlyZXR1cm4gZGVudHJ5OwomIzQzO30KJiM0MzsKIC8qKgogICogdmZzX21rZGlyIC0gY3JlYXRlIGRpcmVjdG9yeSByZXR1cm5pbmcgY29ycmVjdCBkZW50cnkgaWYgcG9zc2libGUKICAqIEBpZG1hcDoJCWlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb20KQEAgLTUzODMsNyAmIzQzOzU0ODAsNiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRlbGVnYXRlZF9pbm9kZSkKIHsKIAlpbnQgZXJyb3I7Ci0JdW5zaWduZWQgbWF4X2xpbmtzID0gZGlyLSZndDtpX3NiLSZndDtzX21heF9saW5rczsKIAlzdHJ1Y3QgZGVudHJ5ICpkZTsKIAogCWVycm9yID0gbWF5X2NyZWF0ZV9kZW50cnkoaWRtYXAsIGRpciwgZGVudHJ5KTsKQEAgLTUzOTksMjQgJiM0Mzs1NDk1LDEyIEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJaWYgKGVycm9yKQogCQlnb3RvIGVycjsKIAotCWVycm9yID0gLUVNTElOSzsKLQlpZiAobWF4X2xpbmtzICZhbXA7JmFtcDsgZGlyLSZndDtpX25saW5rICZndDs9IG1heF9saW5rcykKLQkJZ290byBlcnI7Ci0KLQllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGVycjsKLQotCWRlID0gZGlyLSZndDtpX29wLSZndDtta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwotCWVycm9yID0gUFRSX0VSUihkZSk7Ci0JaWYgKElTX0VSUihkZSkpCiYjNDM7CWRlID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpOwomIzQzOwlpZiAoSVNfRVJSKGRlKSkgewomIzQzOwkJZXJyb3IgPSBQVFJfRVJSKGRlKTsKIAkJZ290byBlcnI7Ci0JaWYgKGRlKSB7Ci0JCWRwdXQoZGVudHJ5KTsKLQkJZGVudHJ5ID0gZGU7CiAJfQotCWZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTsKLQlyZXR1cm4gZGVudHJ5OwomIzQzOwlyZXR1cm4gZGU7CiAKIGVycjoKIAllbmRfY3JlYXRpbmcoZGVudHJ5KTsKQEAgLTU3MDMsNyAmIzQzOzU3ODcsNyBAQCBpbnQgZmlsZW5hbWVfdW5saW5rYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKQogCQlnb3RvIGV4aXRfZHJvcF93cml0ZTsKIAogCS8qIFdoeSBub3QgYmVmb3JlPyBCZWNhdXNlIHdlIHdhbnQgY29ycmVjdCBlcnJvciB2YWx1ZSAqLwotCWlmICh1bmxpa2VseShsYXN0Lm5hbWVbbGFzdC5sZW5dKSkgewomIzQzOwlpZiAodW5saWtlbHkodHJhaWxpbmdfc2xhc2hlcygmYW1wO2xhc3QpKSkgewogCQlpZiAoZF9pc19kaXIoZGVudHJ5KSkKIAkJCWVycm9yID0gLUVJU0RJUjsKIAkJZWxzZQpAQCAtNjMwNSwxNiAmIzQzOzYzODksMTYgQEAgaW50IGZpbGVuYW1lX3JlbmFtZWF0MihpbnQgb2xkZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZyb20sCiAJaWYgKGZsYWdzICZhbXA7IFJFTkFNRV9FWENIQU5HRSkgewogCQlpZiAoIWRfaXNfZGlyKHJkLm5ld19kZW50cnkpKSB7CiAJCQllcnJvciA9IC1FTk9URElSOwotCQkJaWYgKG5ld19sYXN0Lm5hbWVbbmV3X2xhc3QubGVuXSkKJiM0MzsJCQlpZiAodHJhaWxpbmdfc2xhc2hlcygmYW1wO25ld19sYXN0KSkKIAkJCQlnb3RvIGV4aXRfdW5sb2NrOwogCQl9CiAJfQogCS8qIHVubGVzcyB0aGUgc291cmNlIGlzIGEgZGlyZWN0b3J5IHRyYWlsaW5nIHNsYXNoZXMgZ2l2ZSAtRU5PVERJUiAqLwogCWlmICghZF9pc19kaXIocmQub2xkX2RlbnRyeSkpIHsKIAkJZXJyb3IgPSAtRU5PVERJUjsKLQkJaWYgKG9sZF9sYXN0Lm5hbWVbb2xkX2xhc3QubGVuXSkKJiM0MzsJCWlmICh0cmFpbGluZ19zbGFzaGVzKCZhbXA7b2xkX2xhc3QpKQogCQkJZ290byBleGl0X3VubG9jazsKLQkJaWYgKCEoZmxhZ3MgJmFtcDsgUkVOQU1FX0VYQ0hBTkdFKSAmYW1wOyZhbXA7IG5ld19sYXN0Lm5hbWVbbmV3X2xhc3QubGVuXSkKJiM0MzsJCWlmICghKGZsYWdzICZhbXA7IFJFTkFNRV9FWENIQU5HRSkgJmFtcDsmYW1wOyB0cmFpbGluZ19zbGFzaGVzKCZhbXA7bmV3X2xhc3QpKQogCQkJZ290byBleGl0X3VubG9jazsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuYwppbmRleCAzNmYyZTg1ODg5MjIwLi5iNGRiNzAzYzllOGM3IDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmZzL2Rpci5jCkBAIC0yMTIxLDYgJiM0MzsyMTIxLDkgQEAgaW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCWRmcHJpbnRrKFZGUywgJiMzNDtORlM6IGF0b21pY19vcGVuKCVzLyVsbHUpLCAlcGRcbiYjMzQ7LAogCQkJZGlyLSZndDtpX3NiLSZndDtzX2lkLCBkaXItJmd0O2lfaW5vLCBkZW50cnkpOwogCiYjNDM7CWlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKQomIzQzOwkJb3Blbl9mbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJZXJyID0gbmZzX2NoZWNrX2ZsYWdzKG9wZW5fZmxhZ3MpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0yMzEzLDYgJiM0MzsyMzE2LDkgQEAgaW50IG5mc19hdG9taWNfb3Blbl92MjMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkgKi8KIAlpbnQgZXJyb3IgPSAwOwogCiYjNDM7CWlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKQomIzQzOwkJb3Blbl9mbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJaWYgKGRlbnRyeS0mZ3Q7ZF9uYW1lLmxlbiAmZ3Q7IE5GU19TRVJWRVIoZGlyKS0mZ3Q7bmFtZWxlbikKIAkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCA2YjFjMTRlNjg0YTkzLi42Y2I1ZTJhZDc4MWYzIDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb3Blbi5jCkBAIC0xMjM5LDI5ICYjNDM7MTIzOSwzMCBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcCkKIAlpZiAoV0lMTF9DUkVBVEUoZmxhZ3MpKSB7CiAJCWlmIChob3ctJmd0O21vZGUgJmFtcDsgflNfSUFMTFVHTykKIAkJCXJldHVybiAtRUlOVkFMOwotCQlvcC0mZ3Q7bW9kZSA9IGhvdy0mZ3Q7bW9kZSB8IFNfSUZSRUc7CiYjNDM7CQlpZiAoT19JU19NS0RJUihmbGFncykpCiYjNDM7CQkJb3AtJmd0O21vZGUgPSBob3ctJmd0O21vZGUgfCBTX0lGRElSOwomIzQzOwkJZWxzZQomIzQzOwkJCW9wLSZndDttb2RlID0gaG93LSZndDttb2RlIHwgU19JRlJFRzsKIAl9IGVsc2UgewogCQlpZiAoaG93LSZndDttb2RlICE9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJb3AtJmd0O21vZGUgPSAwOwogCX0KIAotCS8qCi0JICogQmxvY2sgYnVncyB3aGVyZSBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQgY3JlYXRlZCByZWd1bGFyIGZpbGVzLgotCSAqIE5vdGUsIHRoYXQgYmxvY2tpbmcgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGhlcmUgYWxzbyBwcm90ZWN0cwotCSAqIE9fVE1QRklMRSBiZWxvdyB3aGljaCByZXF1aXJlcyBPX0RJUkVDVE9SWSBiZWluZyByYWlzZWQuCi0JICovCi0JaWYgKChmbGFncyAmYW1wOyAoT19ESVJFQ1RPUlkgfCBPX0NSRUFUKSkgPT0gKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJLyogTm93IGhhbmRsZSB0aGUgY3JlYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgT19UTVBGSUxFLiAqLwogCWlmIChmbGFncyAmYW1wOyBfX09fVE1QRklMRSkgewogCQkvKgogCQkgKiBJbiBvcmRlciB0byBlbnN1cmUgcHJvZ3JhbXMgZ2V0IGV4cGxpY2l0IGVycm9ycyB3aGVuIHRyeWluZwogCQkgKiB0byB1c2UgT19UTVBGSUxFIG9uIG9sZCBrZXJuZWxzIHdlIGVuZm9yY2UgdGhhdCBPX0RJUkVDVE9SWQotCQkgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLgomIzQzOwkJICogaXMgcmFpc2VkIGFsb25nc2lkZSBfX09fVE1QRklMRSwgYnV0IHdpdGhvdXQgT19DUkVBVC4gVGhlCiYjNDM7CQkgKiByZWFzb24gZm9yIGRpc2FsbG93aW5nIE9fQ1JFQVR8T19UTVBGSUxFIGlzIHRoYXQKJiM0MzsJCSAqIE9fRElSRUNUT1JZfE9fQ1JFQVQgdXNlZCB0byB3b3JrIGFuZCBjcmVhdGVkIGEgcmVndWxhciBmaWxlCiYjNDM7CQkgKiBpZiBub3RoaW5nIGV4aXN0ZWQgYXQgdGhlIG9wZW4gcGF0aC4gSGVuY2UsIGFsbG93aW5nIHRoZQomIzQzOwkJICogY29tYmluYXRpb24gd291bGQgaGF2ZSBjYXVzZWQgT19DUkVBVHxPX1RNUEZJTEUgdG8gY3JlYXRlIGEKJiM0MzsJCSAqIHJlZ3VsYXIgKG5vbi10ZW1wb3JhcnkpIGZpbGUgb24gb2xkIGtlcm5lbHMsIHdoaWxlIHRoZSBjYWxsZXIKJiM0MzsJCSAqIHdvdWxkIGJlbGlldmUgdGhleSBjcmVhdGVkIGFuIGFjdHVhbCBPX1RNUEZJTEUuCiAJCSAqLwotCQlpZiAoIShmbGFncyAmYW1wOyBPX0RJUkVDVE9SWSkpCiYjNDM7CQlpZiAoIShmbGFncyAmYW1wOyBPX0RJUkVDVE9SWSkgfHwgKGZsYWdzICZhbXA7IE9fQ1JFQVQpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICghKGFjY19tb2RlICZhbXA7IE1BWV9XUklURSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzMTgsNiAmIzQzOzEzMTksMTUgQEAgaW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApCiAKIAlvcC0mZ3Q7aW50ZW50ID0gZmxhZ3MgJmFtcDsgT19QQVRIID8gMCA6IExPT0tVUF9PUEVOOwogCiYjNDM7CS8qCiYjNDM7CSAqIFJlcXVlc3Rpbmcgd3JpdGUgYWNjZXNzIG9uIGEgZGlyZWN0b3J5IGNhbiBuZXZlciBzdWNjZWVkLiBSYXRoZXIKJiM0MzsJICogdGhhbiBwZXJmb3JtaW5nIGEgcGF0aC13YWxrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0YXJnZXQgaXMKJiM0MzsJICogYWN0dWFsbHkgYSBkaXJlY3RvcnkgKC1FSVNESVIpIG9yIG5vdCAoLUVOT1RESVIpLCB3ZSBzaG9ydC1jaXJjdWl0CiYjNDM7CSAqIHRvIC1FTk9URElSLgomIzQzOwkgKi8KJiM0MzsJaWYgKChmbGFncyAmYW1wOyBPX0RJUkVDVE9SWSkgJmFtcDsmYW1wOyAhKGZsYWdzICZhbXA7IF9fT19UTVBGSUxFKSAmYW1wOyZhbXA7IChhY2NfbW9kZSAmYW1wOyBNQVlfV1JJVEUpKQomIzQzOwkJcmV0dXJuIC1FTk9URElSOwomIzQzOwogCWlmIChmbGFncyAmYW1wOyBPX0NSRUFUKSB7CiAJCW9wLSZndDtpbnRlbnQgfD0gTE9PS1VQX0NSRUFURTsKIAkJaWYgKGZsYWdzICZhbXA7IE9fRVhDTCkgewpkaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9kaXIuYyBiL2ZzL3NtYi9jbGllbnQvZGlyLmMKaW5kZXggNzgwM2JkNWJkMDFmOC4uZDFhZjkwYzk4MWNkNCAxMDA2NDQKLS0tIGEvZnMvc21iL2NsaWVudC9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zbWIvY2xpZW50L2Rpci5jCkBAIC01MzgsNiAmIzQzOzUzOCw5IEBAIGludCBjaWZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwKIAlpZiAodW5saWtlbHkoY2lmc19mb3JjZWRfc2h1dGRvd24oY2lmc19zYikpKQogCQlyZXR1cm4gc21iX0VJTyhzbWJfZWlvX3RyYWNlX2ZvcmNlZF9zaHV0ZG93bik7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIob2ZsYWdzKSkKJiM0MzsJCW9mbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJLyoKIAkgKiBQb3NpeCBvcGVuIGlzIG9ubHkgY2FsbGVkIChhdCBsb29rdXAgdGltZSkgZm9yIGZpbGUgY3JlYXRlIG5vdy4gRm9yCiAJICogb3BlbnMgKHJhdGhlciB0aGFuIGNyZWF0ZXMpLCBiZWNhdXNlIHdlIGRvIG5vdCBrbm93IGlmIGl0IGlzIGEgZmlsZQpkaWZmIC0tZ2l0IGEvZnMvdmJveHNmL2Rpci5jIGIvZnMvdmJveHNmL2Rpci5jCmluZGV4IDBiOWVhYjE1NzQzMmQuLjZlMzA2ZGRkNzIyYmYgMTAwNjQ0Ci0tLSBhL2ZzL3Zib3hzZi9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy92Ym94c2YvZGlyLmMKQEAgLTMxOCw2ICYjNDM7MzE4LDkgQEAgc3RhdGljIGludCB2Ym94c2ZfZGlyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJdTY0IGhhbmRsZTsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2Ym94c2ZfZGlyX2xvb2t1cChwYXJlbnQsIGRlbnRyeSwgMCk7CiAJCWlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmNudGwuaCBiL2luY2x1ZGUvbGludXgvZmNudGwuaAppbmRleCA2YWQ2YjllN2EyMjZhLi4yMDRlMTZiYmUyNjM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mY250bC5oCkBAIC0zMCw2ICYjNDM7MzAsMTIgQEAKICAqLwogI2RlZmluZSBfX09fUkVHVUxBUgkJKDEgJmx0OyZsdDsgMzApCiAKJiM0MzsjZGVmaW5lIE9fTUtESVJfTUFTSwkoT19DUkVBVCB8IE9fRElSRUNUT1JZKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBPX0lTX01LRElSKHVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiAoZmxhZ3MgJmFtcDsgT19NS0RJUl9NQVNLKSA9PSBPX01LRElSX01BU0s7CiYjNDM7fQomIzQzOwogLyogTGlzdCBvZiBhbGwgdmFsaWQgZmxhZ3MgZm9yIHRoZSBob3ctJmd0O3Jlc29sdmUgYXJndW1lbnQ6ICovCiAjZGVmaW5lIFZBTElEX1JFU09MVkVfRkxBR1MgXAogCShSRVNPTFZFX05PX1hERVYgfCBSRVNPTFZFX05PX01BR0lDTElOS1MgfCBSRVNPTFZFX05PX1NZTUxJTktTIHwgXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmUKaW5kZXggOWViMTg1ZmIyZjlkZC4uMDFjNTg4ZDRjODRmNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlCkBAIC0xLDQgJiM0MzsxLDUgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzO29wZW5fb19jcmVhdF9vX2RpcgogZG5vdGlmeV90ZXN0CiBkZXZwdHNfcHRzCiBmY2xvZwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZQppbmRleCAwM2JlMzM3YzFmMzUxLi4wOTU5YmQyNjg3NWFjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZQpAQCAtMSw3ICYjNDM7MSw3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAKIENGTEFHUyAmIzQzOz0gJChLSERSX0lOQ0xVREVTKQotVEVTVF9HRU5fUFJPR1MgOj0gZGV2cHRzX3B0cyBmaWxlX3N0cmVzc29yIGFub25faW5vZGVfdGVzdCBrZXJuZnNfdGVzdCBmY2xvZyB1c3RhdF90ZXN0CiYjNDM7VEVTVF9HRU5fUFJPR1MgOj0gb3Blbl9vX2NyZWF0X29fZGlyIGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2cgdXN0YXRfdGVzdAogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGlkbWFwcGVkX3RtcGZpbGUKIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEIDo9IGRub3RpZnlfdGVzdAogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmJlMGFiMzQyNjdlMWQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuYwpAQCAtMCwwICYjNDM7MSwyMDEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW1pdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3JhcHBlcnMuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIGZsYWdzKSAoewlcCiYjNDM7CXN0cnVjdCBzdGF0IF9fc3Q7CQkJCQkJXAomIzQzOwlpbnQgX19mZCA9IG9wZW5hdF9vX21rZGlyKGRmZCwgcGF0aG5hbWUsIGZsYWdzLCBTX0lSV1hVKTsJXAomIzQzOwlBU1NFUlRfR0UoX19mZCwgMCk7CQkJCQkJXAomIzQzOwlBU1NFUlRfRVEoZnN0YXQoX19mZCwgJmFtcDtfX3N0KSwgMCk7CQkJCVwKJiM0MzsJRVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTsJCQkJXAomIzQzOwlfX2ZkOwkJCQkJCQkJXAomIzQzO30pCiYjNDM7CiYjNDM7I2RlZmluZSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKGRmZCwgcGF0aG5hbWUpIFwKJiM0MzsJb3BlbmF0X29fbWtkaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCBPX1JET05MWSkKJiM0MzsKJiM0MztGSVhUVVJFKG9wZW5fb19jcmVhdF9vX2RpcikgewomIzQzOwljaGFyIGRpcnBhdGhbUEFUSF9NQVhdOwomIzQzOwlpbnQgZGZkOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9TRVRVUChvcGVuX29fY3JlYXRfb19kaXIpCiYjNDM7ewomIzQzOwlzdHJjcHkoc2VsZi0mZ3Q7ZGlycGF0aCwgJiMzNDsvdG1wL29wZW5fb19jcmVhdF9vX2Rpcl90ZXN0LlhYWFhYWCYjMzQ7KTsKJiM0MzsJQVNTRVJUX05FKG1rZHRlbXAoc2VsZi0mZ3Q7ZGlycGF0aCksIE5VTEwpOwomIzQzOwlzZWxmLSZndDtkZmQgPSBvcGVuKHNlbGYtJmd0O2RpcnBhdGgsIE9fRElSRUNUT1JZKTsKJiM0MzsJQVNTRVJUX0dFKHNlbGYtJmd0O2RmZCwgMCk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04ob3Blbl9vX2NyZWF0X29fZGlyKQomIzQzO3sKJiM0MzsJY2xvc2Uoc2VsZi0mZ3Q7ZGZkKTsKJiM0MzsJcm1kaXIoc2VsZi0mZ3Q7ZGlycGF0aCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIERvZXMgb3Blbl9vX2NyZWF0X29fZGlyIHJldHVybiBhIGZkIGF0IGFsbD8gKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZXR1cm5zX2ZkKQomIzQzO3sKJiM0MzsJaW50IGZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChzZWxmLSZndDtkZmQsICYjMzQ7bmV3ZGlyJiMzNDspOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTsKJiM0MzsJRVhQRUNUX0VRKHVubGlua2F0KHNlbGYtJmd0O2RmZCwgJiMzNDtuZXdkaXImIzM0OywgQVRfUkVNT1ZFRElSKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBmZCBtdXN0IHJlZmVyIHRvIHRoZSBkaXJlY3RvcnkgdGhhdCB3YXMganVzdCBjcmVhdGVkLiAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGZkX2lzX2NyZWF0ZWRfZGlyKQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwlzdHJ1Y3Qgc3RhdCBzdF92aWFfZmQsIHN0X3ZpYV9wYXRoOwomIzQzOwljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwomIzQzOwlmZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O2NoZWNrZGlyJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoZnN0YXQoZmQsICZhbXA7c3RfdmlhX2ZkKSwgMCk7CiYjNDM7CiYjNDM7CXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDslcy9jaGVja2RpciYjMzQ7LCBzZWxmLSZndDtkaXJwYXRoKTsKJiM0MzsJQVNTRVJUX0VRKHN0YXQocGF0aCwgJmFtcDtzdF92aWFfcGF0aCksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoc3RfdmlhX2ZkLnN0X2lubywgc3RfdmlhX3BhdGguc3RfaW5vKTsKJiM0MzsJRVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9kZXYsIHN0X3ZpYV9wYXRoLnN0X2Rldik7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShmZCksIDApOwomIzQzOwlFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBNaXNzaW5nIHBhcmVudCBjb21wb25lbnQgbXVzdCBmYWlsIHdpdGggRU5PRU5ULiAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGVub2VudF9taXNzaW5nX3BhcmVudCkKJiM0Mzt7CiYjNDM7CUVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihzZWxmLSZndDtkZmQsICYjMzQ7bm9uZXhpc3RlbnQvY2hpbGQmIzM0OywgT19SRE9OTFksIFNfSVJXWFUpLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRU5PRU5UKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQW4gaW52YWxpZCBkZmQgbXVzdCBmYWlsIHdpdGggRUJBREYuICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZWJhZGYpCiYjNDM7ewomIzQzOwlFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoRkRfSU5WQUxJRCwgJiMzNDtiYWRmZGlyJiMzNDssIE9fUkRPTkxZLCBTX0lSV1hVKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVCQURGKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQSBkZmQgdGhhdCBwb2ludHMgdG8gYSBmaWxlIChub3QgYSBkaXJlY3RvcnkpIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vdGRpcl9kZmQpCiYjNDM7ewomIzQzOwlpbnQgZmlsZV9mZDsKJiM0MzsKJiM0MzsJZmlsZV9mZCA9IG9wZW5hdChzZWxmLSZndDtkZmQsICYjMzQ7ZmlsZSYjMzQ7LAomIzQzOwkJCSBPX0NSRUFUIHwgT19SRE9OTFksIFNfSVJXWFUpOwomIzQzOwlBU1NFUlRfR0UoZmlsZV9mZCwgMCk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihmaWxlX2ZkLCAmIzM0O3N1YmRpciYjMzQ7LCBPX1JET05MWSwgU19JUldYVSksIC0xKTsKJiM0MzsJRVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKGNsb3NlKGZpbGVfZmQpLCAwKTsKJiM0MzsJRVhQRUNUX0VRKHVubGlua2F0KHNlbGYtJmd0O2RmZCwgJiMzNDtmaWxlJiMzNDssIDApLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBPX0VYQ0wgdG9nZXRoZXIgd2l0aCBPX0NSRUFUfE9fRElSRUNUT1JZIHNob3VsZCBzdWNjZWVkIGlmIHRoZSB0YXJnZXQKJiM0MzsgKiBkaXJlY3RvcnkgZG9lcyBub3QgeWV0IGV4aXN0LiBBZnRlciBkaXJlY3RvcnkgY3JlYXRpb24sIHJlcGVhdGluZyB0aGlzCiYjNDM7ICogY2FsbCBtdXN0IGZhaWwgd2l0aCBFRVhJU1QuCiYjNDM7ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2Rpciwgb19leGNsX2VleGlzdCkKJiM0Mzt7CiYjNDM7CWludCBleGNsZGlyX2ZkOwomIzQzOwomIzQzOwlleGNsZGlyX2ZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZF9mbGFncyhzZWxmLSZndDtkZmQsICYjMzQ7ZXhjbGRpciYjMzQ7LCBPX0VYQ0wpOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoZXhjbGRpcl9mZCwgJiMzNDsuJiMzNDssIE9fRVhDTCwgU19JUldYVSksIC0xKTsKJiM0MzsJRVhQRUNUX0VRKGVycm5vLCBFRVhJU1QpOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoZXhjbGRpcl9mZCksIDApOwomIzQzOwlFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O2V4Y2xkaXImIzM0OywgQVRfUkVNT1ZFRElSKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogT19DUkVBVHxPX0RJUkVDVE9SWSBvbiBhIHBhdGggdGhhdCBhbHJlYWR5IGV4aXN0cyBhcyBhIHJlZ3VsYXIgZmlsZQomIzQzOyAqIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuCiYjNDM7ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZXhpc3RpbmdfZmlsZV9lbm90ZGlyKQomIzQzO3sKJiM0MzsJaW50IGZpbGVfZmQ7CiYjNDM7CiYjNDM7CWZpbGVfZmQgPSBvcGVuYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3JlZ2ZpbGUmIzM0OywKJiM0MzsJCQkgT19DUkVBVCB8IE9fUkRPTkxZLCBTX0lSV1hVKTsKJiM0MzsJQVNTRVJUX0dFKGZpbGVfZmQsIDApOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3JlZ2ZpbGUmIzM0OywgT19SRE9OTFksIFNfSVJXWFUpLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRU5PVERJUik7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUSh1bmxpbmthdChzZWxmLSZndDtkZmQsICYjMzQ7cmVnZmlsZSYjMzQ7LCAwKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogT19DUkVBVHxPX0RJUkVDVE9SWSBjb21iaW5lZCB3aXRoIGEgd3JpdGFibGUgYWNjZXNzIG1vZGUgbXVzdCBiZQomIzQzOyAqIHJlamVjdGVkOiBhIGRpcmVjdG9yeSBjYW5ub3QgYmUgb3BlbmVkIGZvciB3cml0aW5nLgomIzQzOyAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJlamVjdHNfd3JpdGFibGVfYWNjX21vZGUpCiYjNDM7ewomIzQzOwlFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3Jkd3JkaXImIzM0OywgT19SRFdSLCBTX0lSV1hVKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpOwomIzQzOwkvKiBDbGVhbiB1cCBpZiB0aGUga2VybmVsIGNyZWF0ZWQgdGhlIGRpcmVjdG9yeSBhbnl3YXkuICovCiYjNDM7CXVubGlua2F0KHNlbGYtJmd0O2RmZCwgJiMzNDtyZHdyZGlyJiMzNDssIEFUX1JFTU9WRURJUik7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogb3BlbmF0KE9fQ1JFQVR8T19ESVJFQ1RPUlkpIHdpdGggYSB0cmFpbGluZyBzbGFzaCBzaG91bGQgd29yay4KJiM0MzsgKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCB0cmFpbGluZ19zbGFzaCkKJiM0Mzt7CiYjNDM7CWludCBmZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O25ld2Rpci8mIzM0Oyk7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShmZCksIDApOwomIzQzOwlFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O25ld2RpciYjMzQ7LCBBVF9SRU1PVkVESVIpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBvcGVuYXQoT19DUkVBVCkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIGJ1dCB3aXRob3V0IE9fRElSRUNUT1JZCiYjNDM7ICogbXVzdCBmYWlsIHdpdGggRUlTRElSIGFuZCBtdXN0IG5vdCBjcmVhdGUgYW55dGhpbmcgYXQgdGhlIHBhdGguCiYjNDM7ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgdHJhaWxpbmdfc2xhc2hfbm9fb19kaXIpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CXN0cnVjdCBzdGF0IHN0OwomIzQzOwomIzQzOwlmZCA9IG9wZW5hdChzZWxmLSZndDtkZmQsICYjMzQ7dHJhaWxpbmcvJiMzNDssIE9fQ1JFQVQgfCBPX1JET05MWSwgU19JUldYVSk7CiYjNDM7CUVYUEVDVF9FUShmZCwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVJU0RJUik7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShmc3RhdGF0KHNlbGYtJmd0O2RmZCwgJiMzNDt0cmFpbGluZyYjMzQ7LCAmYW1wO3N0LCAwKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVOT0VOVCk7CiYjNDM7CiYjNDM7CS8qIEJlc3QtZWZmb3J0IGNsZWFudXAgaW4gY2FzZSB0aGUga2VybmVsIGxlZnQgYSBmaWxlIGJlaGluZC4gKi8KJiM0MzsJaWYgKGZkICZndDs9IDApCiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CXVubGlua2F0KHNlbGYtJmd0O2RmZCwgJiMzNDt0cmFpbGluZyYjMzQ7LCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgZmQgbXVzdCBiZSB1c2FibGUgYXMgYSBkZmQgZm9yIGZ1cnRoZXIgKmF0KCkgY2FsbHMuCiYjNDM7ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfdXNhYmxlX2FzX2RmZCkKJiM0Mzt7CiYjNDM7CWludCBwYXJlbnRfZmQsIGNoaWxkX2ZkOwomIzQzOwljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwomIzQzOwlwYXJlbnRfZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHNlbGYtJmd0O2RmZCwgJiMzNDtwYXJlbnQmIzM0Oyk7CiYjNDM7CWNoaWxkX2ZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChwYXJlbnRfZmQsICYjMzQ7Y2hpbGQmIzM0Oyk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShjaGlsZF9mZCksIDApOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UocGFyZW50X2ZkKSwgMCk7CiYjNDM7CiYjNDM7CXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDslcy9wYXJlbnQvY2hpbGQmIzM0Oywgc2VsZi0mZ3Q7ZGlycGF0aCk7CiYjNDM7CUVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7CiYjNDM7CXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDslcy9wYXJlbnQmIzM0Oywgc2VsZi0mZ3Q7ZGlycGF0aCk7CiYjNDM7CUVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfSEFSTkVTU19NQUlOCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy93cmFwcGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvd3JhcHBlcnMuaAppbmRleCA0MjBhZTRmOTA4Y2YyLi5hYmU1Yjg1Y2ViZGNkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy93cmFwcGVycy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3dyYXBwZXJzLmgKQEAgLTEzLDYgJiM0MzsxMywxMCBAQAogI2RlZmluZSBTVEFUWF9NTlRfSURfVU5JUVVFIDB4MDAwMDQwMDBVIC8qIFdhbnQvZ290IGV4dGVuZGVkIHN0eF9tb3VudF9pZCAqLwogI2VuZGlmCiAKJiM0MzsjaWZuZGVmIEZEX0lOVkFMSUQKJiM0MzsjZGVmaW5lIEZEX0lOVkFMSUQgLTEwMDA5CiYjNDM7I2VuZGlmCiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBzeXNfZnNvcGVuKGNvbnN0IGNoYXIgKmZzbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXJldHVybiBzeXNjYWxsKF9fTlJfZnNvcGVuLCBmc25hbWUsIGZsYWdzKTsKQEAgLTEwNSw0ICYjNDM7MTA5LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IHN5c19vcGVuX3RyZWUoaW50IGRmZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIGludCBmbGFnCiAJcmV0dXJuIHN5c2NhbGwoX19OUl9vcGVuX3RyZWUsIGRmZCwgZmlsZW5hbWUsIGZsYWdzKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG9wZW5hdF9vX21rZGlyKGludCBkZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLAomIzQzOwkJCQkgdW5zaWduZWQgaW50IGZsYWdzLCBtb2RlX3QgbW9kZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBzeXNjYWxsKF9fTlJfb3BlbmF0LCBkZmQsIHBhdGhuYW1lLAomIzQzOwkJICAgICAgIGZsYWdzIHwgT19ESVJFQ1RPUlkgfCBPX0NSRUFULCBtb2RlKTsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MjMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV3IEF0b21pYyBEaXJlY3RvcnkgQ3JlYXRpb24gRmVhdHVyZSoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IHRoaXMgbmV3IHBhdGNoIGludHJvZHVjaW5nIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgLCBlc3NlbnRpYWxseSBgT19JU19NS0RJUmAsIGFsbG93aW5nIGZvciBhbiBhdG9taWMgYG9wZW5hdCgpYCB0aGF0IGNyZWF0ZXMgYSBkaXJlY3RvcnkgYW5kIHJldHVybnMgYSBmaWxlIGRlc2NyaXB0b3IuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYSBmYWlybHkgc3Vic3RhbnRpYWwgY2hhbmdlLCBwYXJ0aWN1bGFybHkgdG8gdGhlIFZGUyBsYXllciwgc3BlY2lmaWNhbGx5IGltcGFjdGluZyBgb3BlbmF0KClgIGFuZCBwYXRoIHJlc29sdXRpb24vY3JlYXRpb24gbG9naWMgd2l0aGluIGBuYW1laS5jYC4gIEdpdmVuIG15IGV4cGVydGlzZSwgdGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7ZnV6emluZyB0YXJnZXQuJiMzNDsKClRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpbiBgZnMvb3Blbi5jYCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBhZGRpbmcgYSBjaGVjayBmb3IgYE9fSVNfTUtESVJgIHdpdGhpbiB0aGUgYFdJTExfQ1JFQVRFYCBibG9jay4gVGhlIGRlZmluaXRpb24gb2YgYE9fSVNfTUtESVJgIGl0c2VsZiBsb29rcyBjbGVhbi4gIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGhvdyB0aGlzIHByb3BhZ2F0ZXMgdGhyb3VnaCBgbmFtZWkuY2AuICBgbWF5X29fY3JlYXRlYCBub3cgaGFzIGEgYGNyZWF0ZV9kaXJgIGZsYWcsIGFuZCBgbG9va3VwX29wZW5gJiMzOTtzIGxvZ2ljIGJyYW5jaGVzIHRvIGB2ZnNfbWtkaXJfbm9fcGVybWAgb3IgYHZmc19jcmVhdGVfbm9fcGVybWAgYmFzZWQgb24gdGhhdCBmbGFnLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBmb3IgZnV6emluZy4gV2Uga25vdyBgdmZzX21rZGlyX25vX3Blcm1gLCBgbWF5X29fY3JlYXRlYCwgYGxvb2t1cF9vcGVuYCwgYGF0b21pY19vcGVuYCwgYGRvX29wZW5gLCBgYnVpbGRfb3Blbl9mbGFnc2AgYXJlIHRvdWNoZWQuICBUaGUgZmlsZXN5c3RlbS1zcGVjaWZpYyBgYXRvbWljX29wZW5gIGltcGxlbWVudGF0aW9ucyBhcmUgYWxzbyBhZmZlY3RlZCwgYnV0IHRoZXkgYXJlIHNwZWNpZmljIHRvIGRpZmZlcmVudCBmaWxlIHN5c3RlbXMgYW5kIGRvIG5vdCBoYXZlIGFuIGltcGFjdCBvbiB0aGUgY29yZSBWRlMgZnVuY3Rpb25zLiBMZXQmIzM5O3MgZGlnIGRlZXBlcjogYWZ0ZXIgY2hlY2tpbmcsIGl0IHR1cm5zIG91dCB0aGF0IGB2ZnNfbWtkaXJfbm9fcGVybWAsIGBtYXlfb19jcmVhdGVgLCBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBhbmQgYGRvX29wZW5gIGFyZSBzdGF0aWMgdG8gdGhlIGZpbGVzIHRoZXkgYXJlIGluLiBgYnVpbGRfb3Blbl9mbGFnc2AgaXMgaW5saW5lLCBzbyBpdCB3b24mIzM5O3QgYmUgZXhwb3NlZCBhcyBhIGRpc3RpbmN0IHN5bWJvbC4KCkkgbmVlZCB0byBpZGVudGlmeSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQuIGB2ZnNfY3JlYXRlYCwgYHZmc19ta2RpcmAsIGBmaWxlbmFtZV9jcmVhdGVgLCBgZGVudHJ5X2NyZWF0ZWAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGFuZCBgZmlsZW5hbWVfcmVuYW1lYXQyYCBhcmUgbW9kaWZpZWQuIExvb2tpbmcgc3BlY2lmaWNhbGx5IGF0IGBmcy9uYW1laS5jYCwgdGhlc2UgYXJlIG5vdCBzdGF0aWMsIHdoaWNoIG1lYW5zIHRoZXNlIGFyZSB0aGUgc3ltYm9scyBleHBvc2VkLgoKVGhlIGtleSBlbnRyeSBwb2ludHMgYXJlIGBkb19zeXNfb3BlbmF0MmAsIHRoZSBtYWluIGBvcGVuYXQyYCBhbmQgYG9wZW5hdGAgaGFuZGxlciwgYW5kIGBwYXRoX29wZW5hdGAuIEFsc28sIHRoZSBgZG9fZmlscF9vcGVuYCBmdW5jdGlvbiBpcyBhIGNvcmUgZnVuY3Rpb24uCgpHaXZlbiB0aGUgaW50ZW50IGlzIHRvIGZ1enogYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAsIHRoZSBwcmltYXJ5IGdvYWwgaXMgdG8gdGFyZ2V0IGBvcGVuYXRgIGFuZCBgb3BlbmF0MmAgd2l0aCB0aGVzZSBmbGFncy4gIFN5emthbGxlciBhbHJlYWR5IGhhcyBjb3ZlcmFnZSBmb3IgYG9wZW5hdGAgZ2VuZXJhbGx5LCBidXQgdGhlIG5ldyBsb2dpYyBpcyBpbiB0aGVzZSBzeW1ib2xzOiBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBhbmQgYGxvb2t1cF9vcGVuYC4gQmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgYXJlbiYjMzk7dCBzdGF0aWMsIHRoZXkgY2FuIGJlIHRhcmdldGVkIGJ5IGZ1enppbmcuIElmIGBsb29rdXBfb3BlbmAgaXMgbm90IGlubGluZWQuCgpUaGUgZm9jdXMgc2hvdWxkIGJlIG9uIGNyZWF0aW5nIHRlc3QgY2FzZXMgdGhhdCBzcGVjaWZpY2FsbHkgZXhlcmNpc2UgdGhlIGF0b21pYyBkaXJlY3RvcnkgY3JlYXRpb24gcGF0aCB0byBleHBvc2UgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBzdWJ0bGUgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgc3RydWN0IGRlbnRyeSBcXCpsb29rdXBfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz00NDgwPXN0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosXG4tLVxuZnMvbmFtZWkuYy00NDk2LSAqL1xuZnMvbmFtZWkuYzo0NDk3OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG5mcy9uYW1laS5jLTQ0OTgtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBleHBlcnQ6CgoqKlVuZGVyc3RhbmRpbmcgU3l6a2FsbGVyJiMzOTtzIFRyYWNlYWJpbGl0eSoqCgpBbHJpZ2h0LCBzbyB0aGUga2V5IGhlcmUgaXMgdGhhdCBgbG9va3VwX29wZW5gIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGJ1dCBpdCYjMzk7cyAqbm90KiBpbmxpbmVkLiBUaGF0JiMzOTtzIGdvb2QgZnJvbSBhIGRlYnVnZ2luZyBwZXJzcGVjdGl2ZSwgZXNwZWNpYWxseSB3aGVuIHdvcmtpbmcgd2l0aCBzb21ldGhpbmcgbGlrZSBTeXprYWxsZXIuIEJlY2F1c2UgaXQmIzM5O3Mgc3RhdGljLCB0aGUgY29tcGlsZXIgd29uJiMzOTt0IHRyeSB0byBvcHRpbWl6ZSBpdCBhd2F5IGludG8gdGhlIGNhbGwgc2l0ZXMuIElmIGl0ICp3ZXJlKiBpbmxpbmVkLCBTeXprYWxsZXImIzM5O3MgdHJhY2luZyBjYXBhYmlsaXRpZXMgd291bGQgYmUgY29tcHJvbWlzZWQsIG1ha2luZyBpdCBtdWNoIGhhcmRlciB0byBvYnNlcnZlIGl0cyBiZWhhdmlvciBkaXJlY3RseS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gZXhhbWluaW5nIHRoZSB0cmFjZSByZXN1bHRzLiBOb3csIHRoZSBjb250ZXh0IGhhcyBsZWQgbWUgdG8gYGF0b21pY19vcGVuYCBpbiBgZnMvbmFtZWkuY2AuIExldCYjMzk7cyBzZWUgaG93IHRoYXQgZml0cyBpbnRvIHRoaXMgcGljdHVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgc3RydWN0IGRlbnRyeSBcXCphdG9taWNfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz00Mzc5PXN0YXRpYyBpbmxpbmUgdW1vZGVfdCBvX2NyZWF0ZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL25hbWVpLmMtNDQxMC0gKi9cbmZzL25hbWVpLmM6NDQxMTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmZzL25hbWVpLmMtNDQxMi1cdFx0XHRcdCAgc3RydWN0IGZpbGUgKmZpbGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyODMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKlJlZmxlY3Rpbmcgb24gRmlsZSBTeXN0ZW0gT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGZpbGUgc3lzdGVtIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGZpbGUgb3BlbmluZy4gSSYjMzk7dmUgbm90aWNlZCBzb21ldGhpbmcgaW50ZXJlc3RpbmcgYWJvdXQgYGF0b21pY19vcGVuYC4gSXQmIzM5O3MgZGVmaW5lZCBhcyBgc3RhdGljYCwgd2hpY2ggaXNuJiMzOTt0IGNvbXBsZXRlbHkgdW5leHBlY3RlZCwgYnV0IGl0JiMzOTtzICphbHNvKiBub3QgYW4gYGlubGluZWAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBkZWxpYmVyYXRlIGNob2ljZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMuIFR5cGljYWxseSwgSSYjMzk7ZCBleHBlY3QgYW4gb3B0aW1pemF0aW9uIGhlcmUgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBpbmxpbmluZywgYnV0IG1heWJlIHRoZXJlJiMzOTtzIGEgZ29vZCByZWFzb24gZm9yIGl0IGJlaW5nIGBzdGF0aWNgIGFuZCBub3QgYGlubGluZWAgLSBwZXJoYXBzIHRvIHByZXZlbnQgY29kZSBibG9hdCwga2VlcCBmdW5jdGlvbiBzY29wZSB0aWdodCwgb3IgYmVjYXVzZSB0aGUgY29tcGlsZXIgaXMgdW5hYmxlIHRvIGlubGluZSBmb3IgY2VydGFpbiB1c2VzLCBldGMuCgpOb3csIEkmIzM5O20gdHVybmluZyBteSBhdHRlbnRpb24gdG8gYGRvX29wZW5gLCBhbmQgSSYjMzk7bSBsb29raW5nIGF0IGl0JiMzOTtzIGRlZmluaXRpb24gaW4gYGZzL25hbWVpLmNgLiBNeSBtaW5kIGlzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgZGlmZmVyZW50IHNjZW5hcmlvcywgbG9va2luZyB0byBzZWUgaG93IGBhdG9taWNfb3BlbmAgaXMgdXNlZC4gSSYjMzk7bSB3b25kZXJpbmcgaWYgYGF0b21pY19vcGVuYCBpcyB1c2VkIGFzIGEgbG93IGxldmVsIGhlbHBlciBmdW5jdGlvbiBhbmQgaXMgbmV2ZXIgaW5saW5lZCB0byBwcmV2ZW50IGNvbXBsaWNhdGlvbnMgb2YgYSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgaW4gbXVsdGlwbGUgcGxhY2VzLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgYGF0b21pY19vcGVuYCBpcyB2ZXJ5IGxvbmcsIHNvIHRoZSBjb21waWxlciB3b3VsZCBub3QgYmUgYWJsZSB0byBpbmxpbmUgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyBpbnQgZG9fb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz00ODAyPXN0YXRpYyBjb25zdCBjaGFyICpvcGVuX2xhc3RfbG9va3VwcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbi0tXG5mcy9uYW1laS5jLTQ4NTYtICovXG5mcy9uYW1laS5jOjQ4NTc6c3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuZnMvbmFtZWkuYy00ODU4LVx0XHQgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzI2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGaWxlc3lzdGVtIEVudHJ5cG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZXNlIGZpbGVzeXN0ZW0gZW50cnkgcG9pbnRzLiBNeSBpbml0aWFsIG9ic2VydmF0aW9ucyBhcmUgdGhhdCBgZG9fb3BlbmAgaXMgZGVmaW5pdGVseSBzdGF0aWMgYnV0IG5vdCBpbmxpbmVkLCB3aGljaCBpcyBnb29kLiBgdmZzX21rZGlyYCBhbmQgYHZmc19jcmVhdGVgIGFyZSBib3RoIGV4cG9ydGVkLCBzbyB0aGV5JiMzOTtyZSBzb2xpZCBjYW5kaWRhdGVzLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZmlsZXN5c3RlbS1zcGVjaWZpYyBhdG9taWMgb3BlbiBmdW5jdGlvbnMgdG8gZ2V0IGEgYnJvYWRlciB2aWV3LiBJJiMzOTttIHNlZWluZzogYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgLCBgY2VwaF9hdG9taWNfb3BlbmAsIGBmdXNlX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBgY2lmc19hdG9taWNfb3BlbmAsIGFuZCBgdmJveHNmX2Rpcl9hdG9taWNfb3BlbmAuIEZyb20gYSBjdXJzb3J5IGdsYW5jZSwgdGhlc2UgYWxsIGxvb2sgbGlrZSB0aGV5JiMzOTtyZSBlaXRoZXIgbm90IHN0YXRpYyBvciBhcmUgc3RhdGljIGJ1dCB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIOKAkyB3aGljaCBtZWFucyB0aGV5IHdvbiYjMzk7dCBiZSBpbmxpbmVkLiBFeGNlcHQuLi53YWl0LCB0aGVyZSYjMzk7cyBgZnVzZV9hdG9taWNfb3BlbmAuIEl0ICppcyogc3RhdGljOiBgc3RhdGljIGludCBmdXNlX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICplbnRyeSxgLiBCdXQgSSByZW1lbWJlciBpdCYjMzk7cyBhc3NpZ25lZCB0byBgaW5vZGVfb3BlcmF0aW9ucy0mZ3Q7YXRvbWljX29wZW5gLCBzbyB0aGUgY29tcGlsZXIgd29uJiMzOTt0IGJlIGFibGUgdG8gaW5saW5lIGl0IGluIGEgdXNlZnVsIHdheS4KCkxldCBtZSBtYWtlIGEgcXVpY2sgbGlzdCBvZiB3aGF0IEkmIzM5O20gZm9jdXNlZCBvbiwganVzdCB0byBrZWVwIGV2ZXJ5dGhpbmcgc3RyYWlnaHQ6IGB2ZnNfbWtkaXJgLCBgdmZzX2NyZWF0ZWAsIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGBkb19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgLCBgY2VwaF9hdG9taWNfb3BlbmAsIGBmdXNlX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBgY2lmc19hdG9taWNfb3BlbmAsIGFuZCBgdmJveHNmX2Rpcl9hdG9taWNfb3BlbmAuCgpSaWdodCwgdGhlIHBvaW50IG9mIGFsbCB0aGlzIGlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIE9rYXksIGl0IGxvb2tzIGxpa2UgYGxvb2t1cF9vcGVuYCwgYGF0b21pY19vcGVuYCwgYW5kIGBkb19vcGVuYCBhcmUgc3RhdGljLiBTbyBJIGNhbiYjMzk7dCBiZSBzdXJlIGlmIHRoZXkgYXJlIGlubGluZWQgb3Igbm90LiBHaXZlbiB0aGVpciBzaXplLCB0aGV5IGFyZSBtb3N0IGxpa2VseSBub3QsIGJ1dCBpdCYjMzk7cyBhbHdheXMgc2FmZXIgdG8gY2hvb3NlIG5vbi1zdGF0aWMgaWYgcG9zc2libGUuIGBwYXRoX29wZW5hdGAgaXMgYWxzbyBzdGF0aWMuIEhvd2V2ZXIsIGBkb19maWxwX29wZW5gIGlzIG5vbi1zdGF0aWMsIGFzIGFyZSBgdmZzX21rZGlyYCBhbmQgYHZmc19jcmVhdGVgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgYWJvdXQgYGZpbGVuYW1lX2NyZWF0ZWAuCgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdHJ1Y3QgZGVudHJ5IFxcKmZpbGVuYW1lX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg3MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgYGZpbGVuYW1lX2NyZWF0ZWAqKgoKUmlnaHQsIGBmaWxlbmFtZV9jcmVhdGVg4oCmIHRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIE15IG1pbmQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhhdCBiZWNhdXNlIG9mIHRoZSBpbXBsaWNhdGlvbnMuIEl0IG1lYW5zIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGRlc2lnbmVkIHRvIGJlIHVzZWQgd2l0aG91dCBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIG9yIGEgY29udGV4dCB0aWVkIHRvIGEgc3BlY2lmaWMgb2JqZWN0IHN0YXRlLiBJdCYjMzk7cyBwcm9iYWJseSBpbnRlbmRlZCBhcyBhIHV0aWxpdHkgZnVuY3Rpb24sIHBlcmhhcHMgZm9yIGdlbmVyYXRpbmcgZmlsZW5hbWVzIGJhc2VkIG9uIHNvbWUgc3BlY2lmaWMgY3JpdGVyaWEsIGluZGVwZW5kZW50IG9mIGFueSBvYmplY3QmIzM5O3MgY3VycmVudCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gY29uc2lkZXIgd2hhdCB0aGUgYmVzdCBhcHByb2FjaCB0byB3b3JraW5nIHdpdGggdGhpcyBtaWdodCBiZSwgY29uc2lkZXJpbmcgaXQmIzM5O3Mgc3RhdGljLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGF0IGFwcHJvYWNoPyBEb2VzIGl0IGRlcGVuZCBvbiBnbG9iYWwgc3RhdGUsIG9yIHdpbGwgaXQgaW1wYWN0IGFueSB0ZXN0aW5nIG9yIHRocmVhZGluZyBzY2VuYXJpb3M/IEkgbmVlZCB0byB0aGluayBhYm91dCB0aGF0LCB0b28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbGVuYW1lX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz01MTA3PXN0cnVjdCBmaWxlICpkb19maWxlX29wZW5fcm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdCxcbi0tXG5mcy9uYW1laS5jLTUxMzAtXG5mcy9uYW1laS5jOjUxMzE6c3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZShpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXG5mcy9uYW1laS5jLTUxMzItXHRcdFx0XHQgICAgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgdW5zaWduZWQgaW50IGxvb2t1cF9mbGFncylcbi0tXG5mcy9uYW1laS5jPTUxODA9c3RydWN0IGRlbnRyeSAqc3RhcnRfY3JlYXRpbmdfcGF0aChpbnQgZGZkLCBjb25zdCBjaGFyICpwYXRobmFtZSxcbi0tXG5mcy9uYW1laS5jLTUxODMtXHRDTEFTUyhmaWxlbmFtZV9rZXJuZWwsIGZpbGVuYW1lKShwYXRobmFtZSk7XG5mcy9uYW1laS5jOjUxODQ6XHRyZXR1cm4gZmlsZW5hbWVfY3JlYXRlKGRmZCwgZmlsZW5hbWUsIHBhdGgsIGxvb2t1cF9mbGFncyk7XG5mcy9uYW1laS5jLTUxODUtfVxuLS1cbmZzL25hbWVpLmM9NTIwNz1pbmxpbmUgc3RydWN0IGRlbnRyeSAqc3RhcnRfY3JlYXRpbmdfdXNlcl9wYXRoKFxuLS1cbmZzL25hbWVpLmMtNTIxMS1cdENMQVNTKGZpbGVuYW1lLCBmaWxlbmFtZSkocGF0aG5hbWUpO1xuZnMvbmFtZWkuYzo1MjEyOlx0cmV0dXJuIGZpbGVuYW1lX2NyZWF0ZShkZmQsIGZpbGVuYW1lLCBwYXRoLCBsb29rdXBfZmxhZ3MpO1xuZnMvbmFtZWkuYy01MjEzLX1cbi0tXG5mcy9uYW1laS5jPTUzNjI9aW50IGZpbGVuYW1lX21rbm9kYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bW9kZV90IG1vZGUsXG4tLVxuZnMvbmFtZWkuYy01Mzc1LXJldHJ5OlxuZnMvbmFtZWkuYzo1Mzc2Olx0ZGVudHJ5ID0gZmlsZW5hbWVfY3JlYXRlKGRmZCwgbmFtZSwgXHUwMDI2cGF0aCwgbG9va3VwX2ZsYWdzKTtcbmZzL25hbWVpLmMtNTM3Ny1cdGlmIChJU19FUlIoZGVudHJ5KSlcbi0tXG5mcy9uYW1laS5jPTU1MTE9aW50IGZpbGVuYW1lX21rZGlyYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bW9kZV90IG1vZGUpXG4tLVxuZnMvbmFtZWkuYy01NTE5LXJldHJ5OlxuZnMvbmFtZWkuYzo1NTIwOlx0ZGVudHJ5ID0gZmlsZW5hbWVfY3JlYXRlKGRmZCwgbmFtZSwgXHUwMDI2cGF0aCwgbG9va3VwX2ZsYWdzKTtcbmZzL25hbWVpLmMtNTUyMS1cdGlmIChJU19FUlIoZGVudHJ5KSlcbi0tXG5mcy9uYW1laS5jPTU4ODU9aW50IGZpbGVuYW1lX3N5bWxpbmthdChzdHJ1Y3QgZmlsZW5hbWUgKmZyb20sIGludCBuZXdkZmQsIHN0cnVjdCBmaWxlbmFtZSAqdG8pXG4tLVxuZnMvbmFtZWkuYy01ODk2LXJldHJ5OlxuZnMvbmFtZWkuYzo1ODk3Olx0ZGVudHJ5ID0gZmlsZW5hbWVfY3JlYXRlKG5ld2RmZCwgdG8sIFx1MDAyNnBhdGgsIGxvb2t1cF9mbGFncyk7XG5mcy9uYW1laS5jLTU4OTgtXHRpZiAoSVNfRVJSKGRlbnRyeSkpXG4tLVxuZnMvbmFtZWkuYz02MDMzPWludCBmaWxlbmFtZV9saW5rYXQoaW50IG9sZGRmZCwgc3RydWN0IGZpbGVuYW1lICpvbGQsXG4tLVxuZnMvbmFtZWkuYy02MDYwLVxuZnMvbmFtZWkuYzo2MDYxOlx0bmV3X2RlbnRyeSA9IGZpbGVuYW1lX2NyZWF0ZShuZXdkZmQsIG5ldywgXHUwMDI2bmV3X3BhdGgsXG5mcy9uYW1laS5jLTYwNjItXHRcdFx0XHRcdChob3cgXHUwMDI2IExPT0tVUF9SRVZBTCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgzMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGdW5jdGlvbiBWaXNpYmlsaXR5IGluIHRoZSBGaWxlIFN5c3RlbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZmlsZSBzeXN0ZW0gZnVuY3Rpb25zIGFuZCB0YWtpbmcgc3RvY2sgb2YgdGhlaXIgZGVjbGFyYXRpb24uIEl0JiMzOTtzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhleSYjMzk7cmUgZXhwb3NlZCBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgbm90ZWQgdGhhdCBgZmlsZW5hbWVfY3JlYXRlYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gUmlnaHQsIG1lYW5pbmcgaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiBpdHMgY29tcGlsYXRpb24gdW5pdC4gRmluZSwgaW50ZXJuYWwgaGVscGVyIG9yIHNvbWV0aGluZywgSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuCgpUaGVuIEkgc2VlIGB2ZnNfbWtkaXJgLCBgdmZzX2NyZWF0ZWAsIGFuZCBgZG9fZmlscF9vcGVuYCwgYWxsIG5vbi1zdGF0aWMuIFRob3NlIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZCBhbmQgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgcHJvYmFibHkgZXZlbiBmcm9tIHVzZXJzcGFjZSBpbmRpcmVjdGx5LiBTZWVtcyByaWdodC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGlzIGBkb19zeXNfb3BlbmF0MmAgZnVuY3Rpb24uIEkgdGhpbmsgSSYjMzk7dmUgZ290IGl0IG1hcmtlZCBkb3duIGFzIG5vbi1zdGF0aWMgYXMgd2VsbC4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdCwgdGhvdWdoLCBzaW5jZSBpdHMgdmlzaWJpbGl0eSBpcyBjcnVjaWFsIHRvIGRldGVybWluaW5nIGhvdyBhcHBsaWNhdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgc3lzdGVtIGNhbGwuIE5lZWQgdG8gYmUgY2VydGFpbiBvbiB0aGF0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fc3lzX29wZW5hdDImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vcGVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb3Blbi5jPTE0MTY9RVhQT1JUX1NZTUJPTChmaWxlX29wZW5fcm9vdCk7XG5mcy9vcGVuLmMtMTQxNy1cbmZzL29wZW4uYzoxNDE4OnN0YXRpYyBpbnQgZG9fc3lzX29wZW5hdDIoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLFxuZnMvb3Blbi5jLTE0MTktXHRcdFx0ICBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdylcbi0tXG5mcy9vcGVuLmM9MTQzMD1pbnQgZG9fc3lzX29wZW4oaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSlcbi0tXG5mcy9vcGVuLmMtMTQzMi1cdHN0cnVjdCBvcGVuX2hvdyBob3cgPSBidWlsZF9vcGVuX2hvdyhmbGFncywgbW9kZSk7XG5mcy9vcGVuLmM6MTQzMzpcdHJldHVybiBkb19zeXNfb3BlbmF0MihkZmQsIGZpbGVuYW1lLCBcdTAwMjZob3cpO1xuZnMvb3Blbi5jLTE0MzQtfVxuLS1cbmZzL29wZW4uYz0xNDUyPVNZU0NBTExfREVGSU5FNChvcGVuYXQyLCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsXG4tLVxuZnMvb3Blbi5jLTE0NzUtXG5mcy9vcGVuLmM6MTQ3NjpcdHJldHVybiBkb19zeXNfb3BlbmF0MihkZmQsIGZpbGVuYW1lLCBcdTAwMjZ0bXApO1xuZnMvb3Blbi5jLTE0NzctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ3NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIEZ1bmN0aW9uIFZpc2liaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoZXNlIGtlcm5lbCBmdW5jdGlvbnMgYW5kIHRoZWlyIHNjb3BlLiBJIHNlZSB0aGF0IGBkb19zeXNfb3BlbmF0MmAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBtZWFucyBpdHMgdmlzaWJpbGl0eSBpcyByZXN0cmljdGVkIHRvIHRoZSBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4uIFRoYXQmIzM5O3MgYSBjb21tb24gcGF0dGVybiwga2VlcGluZyBpbnRlcm5hbCBoZWxwZXJzIGhpZGRlbi4gSW4gY29udHJhc3QsIGBkb19zeXNfb3BlbmAsIGB2ZnNfbWtkaXJgLCBgdmZzX2NyZWF0ZWAsIGB2ZnNfbG9va3VwX29wZW5gLCBgZGVudHJ5X2NyZWF0ZWAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGFuZCBgZmlsZW5hbWVfcmVuYW1lYXQyYCBhcmUgYWxsIG5vbi1zdGF0aWMuIFRoaXMgaW5kaWNhdGVzIHRoZXkgYXJlIGV4cG9zZWQgZm9yIHVzZSBieSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGVpciBicm9hZGVyIHNjb3BlIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGxpa2VseSBwYXJ0IG9mIHRoZSBWRlMgQVBJIG9yIGF0IGxlYXN0IGNvcmUgZmlsZXN5c3RlbSBmdW5jdGlvbmFsaXR5IHRoYXQmIzM5O3MgbWVhbnQgdG8gYmUgY2FsbGVkIGZyb20gZWxzZXdoZXJlLiBOb3csIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYGRlbnRyeV9jcmVhdGVgLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoYXQgb25lIGFuZCBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZW50cnlfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uYW1laS5jPTUyMTQ9RVhQT1JUX1NZTUJPTChzdGFydF9jcmVhdGluZ191c2VyX3BhdGgpO1xuLS1cbmZzL25hbWVpLmMtNTIxNi0vKipcbmZzL25hbWVpLmM6NTIxNzogKiBkZW50cnlfY3JlYXRlIC0gQ3JlYXRlIGFuZCBvcGVuIGEgZmlsZVxuZnMvbmFtZWkuYy01MjE4LSAqIEBwYXRoOiBwYXRoIHRvIGNyZWF0ZVxuLS1cbmZzL25hbWVpLmMtNTIzMi0gKi9cbmZzL25hbWVpLmM6NTIzMzpzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXG5mcy9uYW1laS5jLTUyMzQtXHRcdFx0ICAgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXG4tLVxuZnMvbmFtZWkuYy01Mjg4LX1cbmZzL25hbWVpLmM6NTI4OTpFWFBPUlRfU1lNQk9MKGRlbnRyeV9jcmVhdGUpO1xuZnMvbmFtZWkuYy01MjkwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAzNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgRmlsZXN5c3RlbSBMYW5kc2NhcGUqKgoKT2theSwgc28gYGRlbnRyeV9jcmVhdGVgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIGEgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2ssIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgbW9kdWxlLiBUaGF0IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYmV0dGVyLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIGl0JiMzOTtzIHVzZWQuIEJhc2VkIG9uIHRoYXQgSSBpbW1lZGlhdGVseSB3YW50IHRvIHNlZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBmdW5jdGlvbiBhbmQgb3RoZXJzLiBBIGdvb2QgcGxhY2UgdG8gbG9vayBmb3IgdGhhdCBjb25uZWN0aW9uIGlzIGB2ZnNfbG9va3VwX29wZW5gLiBUaGF0IGZ1bmN0aW9uIGRlYWxzIHdpdGgsIHdlbGwsIGxvb2tpbmcgdXAgYW5kIG9wZW5pbmcgZmlsZXMsIHNvIGl0JiMzOTtzIGEgbGlrZWx5IGNhbmRpZGF0ZSB0byBpbnRlcmFjdCB3aXRoIGRlbnRyaWVzLiBMZXQmIzM5O3Mgc2VlIGhvdyBgZGVudHJ5X2NyZWF0ZWAgaXMgYWN0dWFsbHkgdXRpbGl6ZWQgd2l0aGluIHRoYXQgY29udGV4dC4gSSBleHBlY3QgYSBnb29kIHZpZXcgb2YgaG93IHRoaXMgYWxsIGFjdHVhbGx5IHdvcmtzIHRvZ2V0aGVyLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgaG93IHRoYXQgZnVuY3Rpb24gbWF5IHV0aWxpemUgdGhlIGRlbnRyeSBjYWNoZSwgYW5kIGhvdyB0aGF0IGNhY2hlIGlzIGNyZWF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zmc19sb29rdXBfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz00NDk3PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvbmFtZWkuYy00Njc1LS8qKlxuZnMvbmFtZWkuYzo0Njc2OiAqIHZmc19sb29rdXBfb3BlbiAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIHJlZ3VsYXIgZmlsZVxuZnMvbmFtZWkuYy00Njc3LSAqIEBwYXJlbnQ6IGRpcmVjdG9yeSB0byBjb250YWluIGZpbGVcbi0tXG5mcy9uYW1laS5jLTQ2OTctICovXG5mcy9uYW1laS5jOjQ2OTg6c3RydWN0IGZpbGUgKnZmc19sb29rdXBfb3BlbihzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqbGFzdCxcbmZzL25hbWVpLmMtNDY5OS1cdFx0XHQgICAgIGludCBvcGVuX2ZsYWcsIHVtb2RlX3QgbW9kZSlcbi0tXG5mcy9uYW1laS5jLTQ3NjgtfVxuZnMvbmFtZWkuYzo0NzY5OkVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModmZzX2xvb2t1cF9vcGVuLCBcJiMzNDtuZnNkXCYjMzQ7KTtcbmZzL25hbWVpLmMtNDc3MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1MzQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgVmlydHVhbCBGaWxlc3lzdGVtKioKCk9rYXksIHNvIGB2ZnNfbG9va3VwX29wZW5gIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIEl0JiMzOTtzIGV4cG9ydGVkLCBzbyBpdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiB0aGUgVkZTLiBOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcmVsYXRlZCBmdW5jdGlvbnMgYW5kIGhvdyB0aGluZ3MgaW50ZXJhY3QsIGFuZCBteSBtaW5kIG5hdHVyYWxseSBqdW1wcyB0byBgdmZzX21rZGlyYC4gU2luY2UgSSYjMzk7bSB3b3JraW5nIHdpdGggdGhlIFZGUyBhbmQgaXRzIHZhcmlvdXMgb3BlcmF0aW9ucywgYG1rZGlyYCBpcyBhIGZ1bmRhbWVudGFsIG9uZS4gTGV0JiMzOTtzIHNlZSBob3cgYHZmc19ta2RpcmAgaW50ZXJhY3RzIHdpdGggYHZmc19sb29rdXBfb3BlbmAgYW5kIGhvdyB0aGUgZGlyZWN0b3J5IGNyZWF0aW9uIHByb2Nlc3MgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gbG9va2luZyB1cCBhIGZpbGUvZGlyZWN0b3J5IChvcGVuKSBhbmQgY3JlYXRpbmcgYSBkaXJlY3RvcnkgKG1rZGlyKSwgYW5kIGhvdyB0aGV5IGFyZSBpbnRlZ3JhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZnNfbWtkaXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uYW1laS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmM9NDQ3OT1zdGF0aWMgaW5saW5lXG5mcy9uYW1laS5jOjQ0ODA6c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKixcbmZzL25hbWVpLmMtNDQ4MS1cdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsXG4tLVxuZnMvbmFtZWkuYz00NDk3PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvbmFtZWkuYy00NjM2LVx0aWYgKGNyZWF0ZV9kaXIpIHtcbmZzL25hbWVpLmM6NDYzNzpcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LFxuZnMvbmFtZWkuYy00NjM4LVx0XHRcdFx0XHRcdCAgICAgICBtb2RlLCBcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xuLS1cbmZzL25hbWVpLmM9NTE4Nj1FWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX3BhdGgpO1xuLS1cbmZzL25hbWVpLmMtNTE5NS0gKiBpZiBzdGFydF9jcmVhdGluZ19wYXRoKCkgcmV0dXJuZWQgYSBub24tZXJyb3IuXG5mcy9uYW1laS5jOjUxOTY6ICogSWYgdmZzX21rZGlyKCkgd2FzIGNhbGxlZCBhbmQgaXQgcmV0dXJuZWQgYW4gZXJyb3IsIHRoYXQgZXJyb3IgKnNob3VsZCpcbmZzL25hbWVpLmMtNTE5Ny0gKiBiZSBwYXNzZWQgdG8gZW5kX2NyZWF0aW5nX3BhdGgoKSB0b2dldGhlciB3aXRoIHRoZSBwYXRoLlxuLS1cbmZzL25hbWVpLmM9NTQyOT1zdGF0aWMgaW5saW5lXG5mcy9uYW1laS5jOjU0MzA6c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvbmFtZWkuYy01NDMxLVx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuLS1cbmZzL25hbWVpLmMtNTQ1Ni0vKipcbmZzL25hbWVpLmM6NTQ1NzogKiB2ZnNfbWtkaXIgLSBjcmVhdGUgZGlyZWN0b3J5IHJldHVybmluZyBjb3JyZWN0IGRlbnRyeSBpZiBwb3NzaWJsZVxuZnMvbmFtZWkuYy01NDU4LSAqIEBpZG1hcDpcdFx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuLS1cbmZzL25hbWVpLmMtNTQ3Ny0gKi9cbmZzL25hbWVpLmM6NTQ3ODpzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvbmFtZWkuYy01NDc5LVx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbi0tXG5mcy9uYW1laS5jLTU0OTctXG5mcy9uYW1laS5jOjU0OTg6XHRkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcbmZzL25hbWVpLmMtNTQ5OS1cdGlmIChJU19FUlIoZGUpKSB7XG4tLVxuZnMvbmFtZWkuYy01NTA4LX1cbmZzL25hbWVpLmM6NTUwOTpFWFBPUlRfU1lNQk9MKHZmc19ta2Rpcik7XG5mcy9uYW1laS5jLTU1MTAtXG5mcy9uYW1laS5jPTU1MTE9aW50IGZpbGVuYW1lX21rZGlyYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bW9kZV90IG1vZGUpXG4tLVxuZnMvbmFtZWkuYy01NTI2LVx0aWYgKCFlcnJvcikge1xuZnMvbmFtZWkuYzo1NTI3Olx0XHRkZW50cnkgPSB2ZnNfbWtkaXIobW50X2lkbWFwKHBhdGgubW50KSwgcGF0aC5kZW50cnktXHUwMDNlZF9pbm9kZSxcbmZzL25hbWVpLmMtNTUyOC1cdFx0XHRcdCAgIGRlbnRyeSwgbW9kZSwgXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVGFyZ2V0aW5nIGBPX0lTX01LRElSYCBJbXBsZW1lbnRhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgT19JU19NS0RJUmAgZmxhZ3MgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBWRlMuIGB2ZnNfbWtkaXJgIGlzIGV4cG9ydGVkLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYW5hbHlzaXMsIGFuZCBJIGFsc28gc2VlIGB2ZnNfY3JlYXRlYCBhcyBhIHVzZWZ1bCBmb2N1cy4gSSBhbHNvIGtub3cgdGhlc2Ugc3ltYm9scyBhcmUgaW1wb3J0YW50OiBgdmZzX2xvb2t1cF9vcGVuYCwgYGRlbnRyeV9jcmVhdGVgLCBgZG9fc3lzX29wZW5gLCBgZmlsZW5hbWVfbWtkaXJhdGAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGBmaWxlbmFtZV9yZW5hbWVhdDJgLCBgdjlmc192ZnNfYXRvbWljX29wZW5gLCBgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bGAsIGBjZXBoX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBgY2lmc19hdG9taWNfb3BlbmAsIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYC4KCldhaXQsIGhvbGQgb24uIGBkb19zeXNfb3BlbmAgaXMgYSAqdmVyeSogaG90IHBhdGguIEZ1enppbmcgdGhhdCBoZWF2aWx5IG1pZ2h0IGNvbXBsZXRlbHkgdGhyb3cgb2ZmIGFueSBkaXN0cmlidXRpb24gbWV0cmljcyBJJiMzOTttIHRyeWluZyB0byBnYXRoZXIuIFRoZSBwcm9tcHQgaXMgc3BlY2lmaWNhbGx5IHRlbGxpbmcgbWUgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucywgc28gSSBuZWVkIHRvIGJlIG1vcmUgc2VsZWN0aXZlLiBgdmZzX21rZGlyYCBhbmQgYHZmc19jcmVhdGVgIGFyZSBhbHNvIHNvbWV3aGF0IGhvdCwgYnV0IHRoZXkgYXJlIG1vcmUgc3BlY2lmaWMgdGhhbiBgZG9fc3lzX29wZW5gLiBgdmZzX2xvb2t1cF9vcGVuYCBpcyBzcGVjaWZpYyB0byBuZnNkLCBhbmQgYGRlbnRyeV9jcmVhdGVgIGlzIHNwZWNpZmljIHRvIGNlcnRhaW4gY29kZSBwYXRocy4gVGhlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgYGF0b21pY19vcGVuYCBmdW5jdGlvbnMgYXJlIGlkZWFsIGJlY2F1c2UgdGhleSBhcmUgbW9kaWZpZWQgdG8gaGFuZGxlIGBPX0lTX01LRElSKGZsYWdzKWAuCgpTbywgbGV0JiMzOTtzIGZvY3VzIG9uIHRob3NlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgYGF0b21pY19vcGVuYCBmdW5jdGlvbnM6CiogICBgdjlmc192ZnNfYXRvbWljX29wZW5gCiogICBgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bGAKKiAgIGBjZXBoX2F0b21pY19vcGVuYAoqICAgYGdmczJfYXRvbWljX29wZW5gCiogICBgbmZzX2F0b21pY19vcGVuYAoqICAgYG5mc19hdG9taWNfb3Blbl92MjNgCiogICBgY2lmc19hdG9taWNfb3BlbmAKKiAgIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYAoKTm93LCBiZWZvcmUgSSBjb21taXQgdG8gdGhlc2UsIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlcXVpcmVkLiBUaGUgY29yZSBwYXJ0IG9mIHRoZSBmZWF0dXJlIGlzIFZGUywgc28gbm8gc3BlY2lhbCBjb25maWcgaXMgbmVlZGVkIHRoZXJlLiBCdXQgZm9yIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9ucywgSSBzZWU6IGBORVRfOVBgLCBgQ0VQSF9GU2AsIGBGVVNFX0ZTYCwgYEdGUzJfRlNgLCBgTkZTX0ZTYCwgYENJRlNgLCBhbmQgYFZCT1hTRl9GU2AuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRob3NlIGNvbmZpZyBvcHRpb25zIGFyZSBlbmFibGVkIGZvciBlYWNoIG9mIHRoZXNlIGZpbGVzeXN0ZW1zIHRvIGVuc3VyZSB0aGV5IGFyZSBhdmFpbGFibGUgZm9yIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWQk9YU0ZfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy92Ym94c2YvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy92Ym94c2YvS2NvbmZpZzoxOmNvbmZpZyBWQk9YU0ZfRlNcbmZzL3Zib3hzZi9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsQm94IGd1ZXN0IHNoYXJlZCBmb2xkZXIgKHZib3hzZikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjc1OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50KioKCkFoLCByaWdodC4gVGhlIHByb21wdCBpcyBpbmNyZWRpYmx5IHN1Y2NpbmN0LiBXaGVuIEkgc2VlIGp1c3QgJiMzNDtgVkJPWFNGX0ZTYCwmIzM0OyBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBpbXBsaWNhdGlvbi4gR2l2ZW4gdGhlIGNvbnRleHQgKG9yIGxhY2sgdGhlcmVvZiwgd2hpY2ggaXMgYWxzbyB0ZWxsaW5nISksIGl0IHNlZW1zIHNvbWVvbmUgaXMgbGlrZWx5IHJlZmVycmluZyB0byB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVycyBGaWxlc3lzdGVtLiBUaGVyZSYjMzk7cyBubyByb29tIGZvciBhbWJpZ3VpdHkgaGVyZS4gVGhlIGJyZXZpdHkgaXRzZWxmIGlzIHRoZSBrZXkgLSBpdCYjMzk7cyBhIGNvbmZpcm1hdGlvbiwgYW4gYWdyZWVtZW50LCBvciBwZXJoYXBzIGEgZGVjbGFyYXRpb24uIEl04oCZcyB0aGUgZmlsZXN5c3RlbSB1c2VkIHRvIHNoYXJlIGZvbGRlcnMgYmV0d2VlbiBhIFZpcnR1YWxCb3ggaG9zdCBhbmQgZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbXMuIEl0JiMzOTtzIGNvbmNpc2UgYmVjYXVzZSB0aGVyZSYjMzk7cyBsaXR0bGUgZWxzZSB0byBzYXkuIEl0JiMzOTtzIGEgc3RhbmRhcmQgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIHRoZSBub2QgaXMgZW5vdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgOVBfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy85cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzLzlwL0tjb25maWc6Mjpjb25maWcgOVBfRlNcbmZzLzlwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1BsYW4gOSBSZXNvdXJjZSBTaGFyaW5nIFN1cHBvcnQgKDlQMjAwMClcJiMzNDtcbi0tXG5mcy85cC9LY29uZmlnPTE0PWlmIDlQX0ZTXG5mcy85cC9LY29uZmlnOjE1OmNvbmZpZyA5UF9GU0NBQ0hFXG5mcy85cC9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtFbmFibGUgOVAgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzLzlwL0tjb25maWctMjItXG5mcy85cC9LY29uZmlnOjIzOmNvbmZpZyA5UF9GU19QT1NJWF9BQ0xcbmZzLzlwL0tjb25maWctMjQtXHRib29sIFwmIzM0OzlQIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvOXAvS2NvbmZpZz0zMj1lbmRpZlxuLS1cbmZzLzlwL0tjb25maWctMzQtXG5mcy85cC9LY29uZmlnOjM1OmNvbmZpZyA5UF9GU19TRUNVUklUWVxuZnMvOXAvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7OVAgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjQzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGVzKioKCkFscmlnaHQsIHNvIHRoZSBrZXkgaGVyZSBpcyB0aGF0IGA5UF9GU2AgaXMgdGhlIGNvbmZpZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHRoYXQgaXMgdGhlIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50LiBFdmVyeXRoaW5nIGZsb3dzIGZyb20gdGhlcmUsIGFuZCB1bmRlcnN0YW5kaW5nIHRoYXQgY29uZmlndXJhdGlvbiBpcyB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnQgdGhhdCB3aWxsIGluZmx1ZW5jZSB0aGUgbmV4dCBzdGVwcy4gSSBuZWVkIHRvIGtlZXAgdGhpcyBzcGVjaWZpYyBjb25maWcgaW4gbWluZCBhcyBJIHByb2NlZWQgd2l0aCBhbnkgc3Vic2VxdWVudCBhbmFseXNpcyBvciBhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRVBIX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvY2VwaC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NlcGgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvY2VwaC9LY29uZmlnOjI6Y29uZmlnIENFUEhfRlNcbmZzL2NlcGgvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Q2VwaCBkaXN0cmlidXRlZCBmaWxlIHN5c3RlbVwmIzM0O1xuLS1cbmZzL2NlcGgvS2NvbmZpZz0xOT1pZiBDRVBIX0ZTXG5mcy9jZXBoL0tjb25maWc6MjA6Y29uZmlnIENFUEhfRlNDQUNIRVxuZnMvY2VwaC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtFbmFibGUgQ2VwaCBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvY2VwaC9LY29uZmlnPTI3PWVuZGlmXG5mcy9jZXBoL0tjb25maWctMjgtXG5mcy9jZXBoL0tjb25maWc6Mjk6Y29uZmlnIENFUEhfRlNfUE9TSVhfQUNMXG5mcy9jZXBoL0tjb25maWctMzAtXHRib29sIFwmIzM0O0NlcGggUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9jZXBoL0tjb25maWctMzgtXG5mcy9jZXBoL0tjb25maWc6Mzk6Y29uZmlnIENFUEhfRlNfU0VDVVJJVFlfTEFCRUxcbmZzL2NlcGgvS2NvbmZpZy00MC1cdGJvb2wgXCYjMzQ7Q2VwaEZTIFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzYyNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqVGhpbmtpbmcgQWJvdXQgQ2VwaEZTIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IENlcGhGUywgYW5kIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGl0ZW0gdGhhdCYjMzk7cyBjb21pbmcgdG8gbWluZCBpcyB0aGUgYENFUEhfRlNgIHNldHRpbmcuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBpbW1lZGlhdGVseSBrbm93IHdlJiMzOTtyZSBub3QganVzdCBkaXNjdXNzaW5nIENlcGggZ2VuZXJhbGx5LCBidXQgZHJpbGxpbmcgZG93biB0byBpdHMgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgbGlrZWx5IGluIHRoZSB3ZWVkcyBvZiBtb3VudGluZywgdHVuaW5nLCBvciB0cm91Ymxlc2hvb3RpbmcgYSBDZXBoRlMgaW5zdGFuY2UuIFdlJiMzOTtyZSBlaXRoZXIgZXhhbWluaW5nIGhvdyBpdCYjMzk7cyBkZWZpbmVkLCBob3cgaXQmIzM5O3MgYmVoYXZpbmcsIG9yIGhvdyBpdCBpcyBpbXBsZW1lbnRlZC4gSSBwcm9iYWJseSBuZWVkIHNvbWUgY29udGV4dCBhcm91bmQgdGhhdCBzZXR0aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGlzc3VlLCBhcyB3ZWxsIGFzIHRoZSBzdXJyb3VuZGluZyBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVU0VfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mdXNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xuZnMvZnVzZS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzg5NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDb25maWd1cmluZyB0aGUgRmlsZXN5c3RlbSBJbnRlcmZhY2UqKgoKUmlnaHQsIGBGVVNFX0ZTYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0JiMzOTtzIHRoZSBjb25maWd1cmF0aW9uIHBvaW50IGZvciB0aGUgRmlsZSBTeXN0ZW0gaW4gVXNlciBTcGFjZSwgb3IgRlVTRSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLCBJJiMzOTttIHdvcmtpbmcgd2l0aC4gSXQgaW1tZWRpYXRlbHkgZm9jdXNlcyBtZSBvbiBob3cgdGhlIHdob2xlIHRoaW5nIGlzIHNldCB1cCwgd2hhdCBwYXJhbWV0ZXJzIGFyZSBhdmFpbGFibGUsIGFuZCB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLiBBbSBJIGRlYWxpbmcgd2l0aCBhIHNpbXBsZSBwYXNzdGhyb3VnaCBmaWxlc3lzdGVtLCBzb21ldGhpbmcgd2l0aCBjYWNoaW5nLCBvciBhIG1vcmUgY29tcGxleCBkaXN0cmlidXRlZCBkZXNpZ24/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHVzZXItc3BhY2Uva2VybmVsLXNwYWNlIGJvdW5kYXJ5IHdpdGggdGhpcyBzZXR0aW5nPyBVbmRlcnN0YW5kaW5nIHRoaXMgY29uZmlnLCB0aGUgYEZVU0VfRlNgIHNldHRpbmcsIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcmVhbGx5IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscywgYW5kIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIG9mIHRoaXMgdGhpbmcuIEl0JiMzOTtzIHRoZSBseW5jaHBpbiwgdGhlIHBsYWNlIHdoZXJlIGFsbCB0aGUgcGllY2VzIGNvbWUgdG9nZXRoZXIgdG8gZGVmaW5lIHRoZSBiZWhhdmlvci4gSXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgR0ZTMl9GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2dmczIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9nZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2dmczIvS2NvbmZpZzoyOmNvbmZpZyBHRlMyX0ZTXG5mcy9nZnMyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2dmczIvS2NvbmZpZy0yNi1cbmZzL2dmczIvS2NvbmZpZzoyNzpjb25maWcgR0ZTMl9GU19MT0NLSU5HX0RMTVxuZnMvZ2ZzMi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtHRlMyIERMTSBsb2NraW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjgxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkdGUzIgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBjb25maWd1cmF0aW9uIGZvciBHRlMyLiBUaGlua2luZyBhYm91dCB0aGlzLCBgR0ZTMl9GU2AgaXMgdGhlIGtleS4gVGhhdCBpbXBsaWVzIHdlJiMzOTtyZSBnb2luZyB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljIGZpbGVzeXN0ZW0gcGFyYW1ldGVycywgcHJlc3VtYWJseSB0aHJvdWdoIGEgY29uZmlndXJhdGlvbiBmaWxlLCBjb21tYW5kLWxpbmUgZmxhZ3MsIG9yIHBvc3NpYmx5IGV2ZW4gYSBkZWRpY2F0ZWQgbWFuYWdlbWVudCB0b29sLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGZhbWlsaWFyIGFzcGVjdHM6IGJsb2NrIHNpemUsIGpvdXJuYWwgb3B0aW9ucywgcXVvdGEgc2V0dGluZ3MgKGlmIGFwcGxpY2FibGUpLCBtb3VudCBvcHRpb25zLCBhbmQgYW55IHNwZWNpZmljIEdGUzIgdHVuYWJsZSBwYXJhbWV0ZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvciBzcGVjaWZpYyB1c2UgY2FzZXMuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoaXMgaXMgYSBuZXcgZGVwbG95bWVudCwgYW4gZXhpc3Rpbmcgc3lzdGVtIGJlaW5nIHR1bmVkLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gQ29udGV4dCBpcyBhbHdheXMga2V5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgZnVydGhlciBkZXRhaWwgd2UgYXJlIHdvcmtpbmcgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25mcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25mcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9uZnMvS2NvbmZpZzoyOmNvbmZpZyBORlNfRlNcbmZzL25mcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtORlMgY2xpZW50IHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9uZnMvS2NvbmZpZz0xNjI9Y29uZmlnIFJPT1RfTkZTXG4tLVxuZnMvbmZzL0tjb25maWctMTcyLVxuZnMvbmZzL0tjb25maWc6MTczOmNvbmZpZyBORlNfRlNDQUNIRVxuZnMvbmZzL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtQcm92aWRlIE5GUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjQ5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqUmVmbGVjdGluZyBvbiB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzLi4uICYjMzQ7TkZTX0ZTJiMzNDsuIEl0JiMzOTtzIGEgY29uZmlndXJhdGlvbiBpdGVtLCBhIGtleSBvbmUsIG5vIGRvdWJ0LiBUaGUgc3BlY2lmaWMgbmFtaW5nIGNvbnZlbnRpb24gaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXTigJlzIHJlbGF0ZWQgdG8gTmV0d29yayBGaWxlIFN5c3RlbSwgdGhlIHVuZGVybHlpbmcgZmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGFzIEkgcHJvY2VzcyB0aGUgb3RoZXIgY29tcG9uZW50cy4gSXQgc2lnbmFscyBhIGZvdW5kYXRpb25hbCBhc3BlY3Qgb2Ygc3RvcmFnZSBhbmQgYWNjZXNzLiBPa2F5LCBJJiMzOTttIG5vdGluZyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb247IEkgd2lsbCBuZWVkIHRvIGRlbHZlIGRlZXBlciBpbnRvIGl0cyBzZXR0aW5ncyBhbmQgaW50ZXJhY3Rpb25zLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUsIGl0IG1pZ2h0IGJlIGFib3V0IG1vdW50aW5nIHBvaW50cywgZXhwb3J0IGNvbmZpZ3VyYXRpb25zLCB2ZXJzaW9uIG5lZ290aWF0aW9uLCBzZWN1cml0eSBvcHRpb25zLCB0aGUgd29ya3MuIFRoaXMgc2luZ2xlIHBpZWNlIG9mIGluZm9ybWF0aW9uLCAmIzM0O05GU19GUywmIzM0OyB3aWxsIG5lZWQgdG8gYmUgY3Jvc3MtcmVmZXJlbmNlZCB3aXRoIGFsbCB0aGUgcmVzdCBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENJRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9zbWIvY2xpZW50L0tjb25maWc6Mjpjb25maWcgQ0lGU1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUIzIGFuZCBDSUZTIHN1cHBvcnQgKGFkdmFuY2VkIG5ldHdvcmsgZmlsZXN5c3RlbSlcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctNTMtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6NTQ6Y29uZmlnIENJRlNfU1RBVFMyXG5mcy9zbWIvY2xpZW50L0tjb25maWctNTUtXHRib29sIFwmIzM0O0V4dGVuZGVkIHN0YXRpc3RpY3NcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjctXG5mcy9zbWIvY2xpZW50L0tjb25maWc6Njg6Y29uZmlnIENJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjktXHRib29sIFwmIzM0O1N1cHBvcnQgbGVnYWN5IHNlcnZlcnMgd2hpY2ggdXNlIGxlc3Mgc2VjdXJlIGRpYWxlY3RzXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTgyLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjgzOmNvbmZpZyBDSUZTX1VQQ0FMTFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtLZXJiZXJvcy9TUE5FR08gYWR2YW5jZWQgc2Vzc2lvbiBzZXR1cFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05MS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo5Mjpjb25maWcgQ0lGU19YQVRUUlxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtDSUZTIGV4dGVuZGVkIGF0dHJpYnV0ZXNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA2LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjEwNzpjb25maWcgQ0lGU19QT1NJWFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7Q0lGUyBQT1NJWCBFeHRlbnNpb25zXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTExOC1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMTk6Y29uZmlnIENJRlNfREVCVUdcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjAtXHRib29sIFwmIzM0O0VuYWJsZSBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjctXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTI4OmNvbmZpZyBDSUZTX0RFQlVHMlxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGFkZGl0aW9uYWwgQ0lGUyBkZWJ1Z2dpbmcgcm91dGluZXNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTM4LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjEzOTpjb25maWcgQ0lGU19ERUJVR19EVU1QX0tFWVNcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDAtXHRib29sIFwmIzM0O0R1bXAgZW5jcnlwdGlvbiBrZXlzIGZvciBvZmZsaW5lIGRlY3J5cHRpb24gKFVuc2FmZSlcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTQ4LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE0OTpjb25maWcgQ0lGU19ERlNfVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTUwLVx0Ym9vbCBcJiMzNDtERlMgZmVhdHVyZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE2MS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNjI6Y29uZmlnIENJRlNfU1dOX1VQQ0FMTFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE2My1cdGJvb2wgXCYjMzQ7U1dOIGZlYXR1cmUgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzItXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTczOmNvbmZpZyBDSUZTX05GU0RfRVhQT1JUXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtBbGxvdyBuZnNkIHRvIGV4cG9ydCBDSUZTIGZpbGUgc3lzdGVtXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnPTE3OT1pZiBDSUZTXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTgwLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE4MTpjb25maWcgQ0lGU19TTUJfRElSRUNUXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTgyLVx0Ym9vbCBcJiMzNDtTTUIgRGlyZWN0IHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkwLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE5MTpjb25maWcgQ0lGU19GU0NBQ0hFXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkyLVx0Ym9vbCBcJiMzNDtQcm92aWRlIENJRlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTk5OmNvbmZpZyBDSUZTX1JPT1RcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMDAtXHRib29sIFwmIzM0O1NNQiByb290IGZpbGUgc3lzdGVtIChFeHBlcmltZW50YWwpXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwNi1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyMDc6Y29uZmlnIENJRlNfQ09NUFJFU1NJT05cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMDgtXHRib29sIFwmIzM0O1NNQiBtZXNzYWdlIGNvbXByZXNzaW9uIChFeHBlcmltZW50YWwpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTIzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQXRvbWljIERpcmVjdG9yeSBDcmVhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgaW50cm9kdWNpbmcgYSBuZXcgYXRvbWljIGRpcmVjdG9yeSBjcmVhdGlvbiBmZWF0dXJlIHZpYSBgb3BlbmF0KClgLCB1c2luZyBgT19DUkVBVCB8IE9fRElSRUNUT1JZYC4gVGhpcyBpcyBhIHByZXR0eSBpbnRlcmVzdGluZyBhZGRpdGlvbiwgYXMgYXRvbWljYWxseSBjcmVhdGluZyBkaXJlY3RvcmllcyBoYXMgb2Z0ZW4gYmVlbiBhIGJpdCBvZiBhIHRyaWNreSBhcmVhLgoKVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBhcmUgYDlQX0ZTYCwgYENFUEhfRlNgLCBgRlVTRV9GU2AsIGBHRlMyX0ZTYCwgYE5GU19GU2AsIGBDSUZTYCwgYW5kIGBWQk9YU0ZfRlNgIOKAkyB0aG9zZSBhcmUgdGhlIGZpbGVzeXN0ZW1zIHRoYXQgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gc3VwcG9ydCB0aGlzIG5ldyBhdG9taWMgb3BlbiBvcGVyYXRpb24uIEkmIzM5O20gbm90aW5nIHRoYXQgYmVjYXVzZSBpdCBnaXZlcyBtZSBhIGNsZWFyIGlkZWEgb2Ygd2hpY2ggc3Vic3lzdGVtcyBhcmUgYWZmZWN0ZWQuCgpJdCBsb29rcyBsaWtlIHRoZSBrZXkgY2hhbmdlIGlzIGluIGhvdyB0aGUgVkZTIGludGVyYWN0cyB3aXRoIGBPX0NSRUFUYCBhbmQgYE9fSVNfTUtESVIoZmxhZ3MpYC4gU3BlY2lmaWNhbGx5LCBpZiBgT19JU19NS0RJUihmbGFncylgIGlzIHRydWUgKG1lYW5pbmcgd2UmIzM5O3JlIHRyeWluZyB0byBjcmVhdGUgYSBkaXJlY3RvcnkpLCB0aGVuIGBPX0NSRUFUYCBpcyBjbGVhcmVkLiBUaGUgcmF0aW9uYWxlIGlzIHRoYXQgYGF0b21pY19vcGVuYCBpbXBsZW1lbnRhdGlvbnMgb2Z0ZW4gZG9uJiMzOTt0IHN1cHBvcnQgZGlyZWN0b3J5IGNyZWF0aW9uIGRpcmVjdGx5LiBUaGlzIG1lYW5zIHRoZXkgY2FuIGZhbGwgYmFjayB0byB0aGUgc3RhbmRhcmQgbG9va3VwIHByb2Nlc3MsIGFuZCBgbWtkaXJgIHdpbGwgYmUgY2FsbGVkIGluc3RlYWQgb2YgYGNyZWF0ZWAuIFRoaXMgbWFrZXMgYSBsb3Qgb2Ygc2Vuc2UsIGtlZXBpbmcgdGhlIGJlaGF2aW9yIGluIGxpbmUgd2l0aCB3aGF0IGEgZGV2ZWxvcGVyIHdvdWxkIGV4cGVjdC4KCk5vdywgdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYC4gVGhvc2UgYXJlIHRoZSBmaWxlcyBJJiMzOTtsbCB3YW50IHRvIGZvY3VzIG9uIHdoZW4gSSYjMzk7bSBhc3Nlc3NpbmcgdGhlIGltcGFjdCBvZiB0aGlzLiBUaGUga2V5IGZ1bmN0aW9ucyB0byBsb29rIGF0IGFyZSB0aGUgY29yZSBWRlMgZnVuY3Rpb25zOiBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgdmZzX2xvb2t1cF9vcGVuYCwgYGRlbnRyeV9jcmVhdGVgLCBgZmlsZW5hbWVfbWtkaXJhdGAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGFuZCBgZmlsZW5hbWVfcmVuYW1lYXQyYC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyB0aGVzZSBmdW5jdGlvbnMgaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbi4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBmaWxlbmFtZV9ta2RpcmF0YCwgYGZpbGVuYW1lX3VubGlua2F0YCwgYW5kIGBmaWxlbmFtZV9yZW5hbWVhdDJgIGFyZSAqbm90KiBzdGF0aWMsIHNvIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgb3V0c2lkZSB0aGVpciByZXNwZWN0aXZlIGZpbGVzLiBHb29kLiBJIGFsc28gY2hlY2tlZCB0aGF0IGBPX01LRElSX01BU0tgIGlzbiYjMzk7dCB1c2VkIGFueXdoZXJlIGVsc2UsIHdoaWNoIGZ1cnRoZXIgaXNvbGF0ZXMgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuCgpGcm9tIGEgdGVzdGluZyBwZXJzcGVjdGl2ZSwgdGhlIGltcGxpY2F0aW9ucyBhcmUgcHJldHR5IGNsZWFyOiB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgaXQgbmVlZHMgaGVhdnkgZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiB0aG9zZSBjb3JlIFZGUyBmdW5jdGlvbnMsIGFsb25nIHdpdGggdGhlaXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdXBkYXRlZCBmaWxlc3lzdGVtcyYjMzk7IGBhdG9taWNfb3BlbmAgaW1wbGVtZW50YXRpb25zLCBzdWNoIGFzIGB2OWZzX3Zmc19hdG9taWNfb3BlbmAsIGBjZXBoX2F0b21pY19vcGVuYCwgZXRjLiBJJiMzOTttIGdvaW5nIHRvIGFkZCB0aGVzZSB0byBteSBsaXN0IG9mIHN5bWJvbHMgdG8gaW52ZXN0aWdhdGUgbW9yZSB0aG9yb3VnaGx5LgoKU28sIGluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcsIGFsYmVpdCBzdWJ0bGUsIGF0b21pYyBkaXJlY3RvcnkgY3JlYXRpb24gZmVhdHVyZSB1c2luZyBhbiBleGlzdGluZyBmbGFnLiBUaGUgVkZTIGFuZCBhIHNlcmllcyBvZiBmaWxlc3lzdGVtIGRyaXZlcnMgd2lsbCBuZWVkIHRvIGJlIGxvb2tlZCBhdCBjbG9zZWx5IHRvIGFuYWx5emUgYmVoYXZpb3IgYW5kIHRlc3QgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7djlmc192ZnNfYXRvbWljX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy85cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvOXAvdmZzX2lub2RlLmM9NTc5PXY5ZnNfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzLzlwL3Zmc19pbm9kZS5jLTY0OC0gKlxuZnMvOXAvdmZzX2lub2RlLmM6NjQ5OiAqIG9wZW4oLi4sIE9fQ1JFQVQpIGlzIGhhbmRsZWQgaW4gdjlmc192ZnNfYXRvbWljX29wZW4oKS4gIFRoaXMgaXMgb25seSBjYWxsZWRcbmZzLzlwL3Zmc19pbm9kZS5jLTY1MC0gKiBmb3IgbWtub2QoMikuXG4tLVxuZnMvOXAvdmZzX2lub2RlLmM9NzY3PXN0YXRpYyBpbnRcbmZzLzlwL3Zmc19pbm9kZS5jOjc2ODp2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZnMvOXAvdmZzX2lub2RlLmMtNzY5LVx0XHQgICAgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSlcbi0tXG5mcy85cC92ZnNfaW5vZGUuYz0xMzY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2OWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zX2RvdHUgPSB7XG4tLVxuZnMvOXAvdmZzX2lub2RlLmMtMTM3MC1cdC5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsXG5mcy85cC92ZnNfaW5vZGUuYzoxMzcxOlx0LmF0b21pY19vcGVuID0gdjlmc192ZnNfYXRvbWljX29wZW4sXG5mcy85cC92ZnNfaW5vZGUuYy0xMzcyLVx0LnN5bWxpbmsgPSB2OWZzX3Zmc19zeW1saW5rLFxuLS1cbmZzLzlwL3Zmc19pbm9kZS5jPTEzODM9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvOXAvdmZzX2lub2RlLmMtMTM4NS1cdC5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsXG5mcy85cC92ZnNfaW5vZGUuYzoxMzg2Olx0LmF0b21pY19vcGVuID0gdjlmc192ZnNfYXRvbWljX29wZW4sXG5mcy85cC92ZnNfaW5vZGUuYy0xMzg3LVx0LnVubGluayA9IHY5ZnNfdmZzX3VubGluayxcbi0tXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jPTIyNT1zdGF0aWMgaW50XG5mcy85cC92ZnNfaW5vZGVfZG90bC5jOjIyNjp2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTIyNy1cdFx0XHQgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVtb2RlX3Qgb21vZGUpXG4tLVxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYz05NjQ9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9uc19kb3RsID0ge1xuZnMvOXAvdmZzX2lub2RlX2RvdGwuYy05NjUtXHQuY3JlYXRlID0gdjlmc192ZnNfY3JlYXRlX2RvdGwsXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jOjk2NjpcdC5hdG9taWNfb3BlbiA9IHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwsXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTk2Ny1cdC5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDY0CgkJCQkJCQlvdXRwdXQ6IDMyNAoJCQkJCQkJdGhvdWdodHM6IDI5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXcgVkZTIEZlYXR1cmUqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBuZXcgcGF0Y2guIFRoZXNlIGF0b21pYyBvcGVuIGZ1bmN0aW9ucywgdGhleSYjMzk7cmUgc3RhdGljIGJ1dCBsaW5rZWQgdG8gYGlub2RlX29wZXJhdGlvbnMtJmd0O2F0b21pY19vcGVuYC4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBub3QgaW5saW5lZCwgd2hpY2ggaXMgZ29vZCDigJMgdGhleSBoYXZlIHRoZWlyIG93biBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBQZXJmZWN0LiBJJiMzOTtsbCBkZWZpbml0ZWx5IGFkZCB0aGVzZSB0byB0aGUgRm9jdXNTeW1ib2xzIGxpc3Q7IGBjZXBoX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBhbmQgdGhlIG90aGVycyBhcmUgY3J1Y2lhbCBmb3IgZnV6emluZyB0aGlzLgoKTGV0IG1lIGp1c3QgcXVpY2tseSByZXZpZXcgdGhvc2UgRm9jdXNTeW1ib2xzIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJJiMzOTt2ZSBnb3QgYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYHZmc19sb29rdXBfb3BlbmAsIGBkZW50cnlfY3JlYXRlYCwgYGZpbGVuYW1lX21rZGlyYXRgLCBgZmlsZW5hbWVfdW5saW5rYXRgLCBhbmQgYGZpbGVuYW1lX3JlbmFtZWF0MmAuIFRoZW4gdGhlcmUgYXJlIHRoZSBzcGVjaWZpYyBmaWxlc3lzdGVtIGZ1bmN0aW9uczogYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgLCBgY2VwaF9hdG9taWNfb3BlbmAsIGBmdXNlX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBgY2lmc19hdG9taWNfb3BlbmAsIGFuZCBgdmJveHNmX2Rpcl9hdG9taWNfb3BlbmAuIFllcCwgdGhhdCBsb29rcyBjb21wcmVoZW5zaXZlLgoKTm93LCBqdXN0IGNoZWNraW5nIHRoZSBjb25maWdzLi4uIGA5UF9GU2AsIGBDRVBIX0ZTYCwgYEZVU0VfRlNgLCBgR0ZTMl9GU2AsIGBORlNfRlNgLCBgQ0lGU2AsIGFuZCBgVkJPWFNGX0ZTYC4gQWxsIHRoZSByZWxldmFudCBmaWxlc3lzdGVtcyBhcmUgY292ZXJlZC4KClllYWgsIEkgdGhpbmsgdGhpcyBpcyBzb2xpZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0aGF0IG1vZGlmaWVzIHRoZSBjb3JlIFZGUyBsb2dpYyAqYW5kKiBzZXZlcmFsIGZpbGVzeXN0ZW1zLiBDb25zaWRlcmluZyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgdGhpcyBpcyBhYnNvbHV0ZWx5IHByaW1lIGZ1enppbmcgbWF0ZXJpYWwuIEl0JiMzOTtzIGEgaGlnaC1pbXBhY3QgYXJlYSB3aXRoIGEgbG90IG9mIHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gcHJpb3JpdGl6ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7LAogICAgJiMzNDtHRlMyX0ZTJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O1ZCT1hTRl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19ta2RpciYjMzQ7LAogICAgJiMzNDt2ZnNfY3JlYXRlJiMzNDssCiAgICAmIzM0O3Zmc19sb29rdXBfb3BlbiYjMzQ7LAogICAgJiMzNDtkZW50cnlfY3JlYXRlJiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX21rZGlyYXQmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfdW5saW5rYXQmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfcmVuYW1lYXQyJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwmIzM0OywKICAgICYjMzQ7Y2VwaF9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtmdXNlX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O2dmczJfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3Blbl92MjMmIzM0OywKICAgICYjMzQ7Y2lmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2Ym94c2ZfZGlyX2F0b21pY19vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCBmb3IgYG9wZW5hdCgpYCB0byBhdG9taWNhbGx5IGNyZWF0ZSBhIGRpcmVjdG9yeSBhbmQgcmV0dXJuIGEgZmlsZSBkZXNjcmlwdG9yLiBJdCBtb2RpZmllcyBjb3JlIFZGUyBwYXRoIHJlc29sdXRpb24gYW5kIGNyZWF0aW9uIGxvZ2ljIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AsIGFuZCB1cGRhdGVzIHNldmVyYWwgZmlsZXN5c3RlbXMmIzM5OyBgYXRvbWljX29wZW5gIGltcGxlbWVudGF0aW9ucyB0byBoYW5kbGUgdGhlIG5ldyBmbGFnIGNvbWJpbmF0aW9uLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDs5UF9GUyYjMzQ7LAogICAgJiMzNDtDRVBIX0ZTJiMzNDssCiAgICAmIzM0O0ZVU0VfRlMmIzM0OywKICAgICYjMzQ7R0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtORlNfRlMmIzM0OywKICAgICYjMzQ7Q0lGUyYjMzQ7LAogICAgJiMzNDtWQk9YU0ZfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfbWtkaXImIzM0OywKICAgICYjMzQ7dmZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2ZnNfbG9va3VwX29wZW4mIzM0OywKICAgICYjMzQ7ZGVudHJ5X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtmaWxlbmFtZV9ta2RpcmF0JiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX3VubGlua2F0JiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX3JlbmFtZWF0MiYjMzQ7LAogICAgJiMzNDt2OWZzX3Zmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsJiMzNDssCiAgICAmIzM0O2NlcGhfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7ZnVzZV9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtnZnMyX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtuZnNfYXRvbWljX29wZW5fdjIzJiMzNDssCiAgICAmIzM0O2NpZnNfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7dmJveHNmX2Rpcl9hdG9taWNfb3BlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAgZm9yIGBvcGVuYXQoKWAgdG8gYXRvbWljYWxseSBjcmVhdGUgYSBkaXJlY3RvcnkgYW5kIHJldHVybiBhIGZpbGUgZGVzY3JpcHRvci4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aCByZXNvbHV0aW9uIGFuZCBjcmVhdGlvbiBsb2dpYyBpbiBgZnMvbmFtZWkuY2AgYW5kIGBmcy9vcGVuLmNgLCBhbmQgdXBkYXRlcyBzZXZlcmFsIGZpbGVzeXN0ZW1zJiMzOTsgYGF0b21pY19vcGVuYCBpbXBsZW1lbnRhdGlvbnMgdG8gaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbi4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIFZGUyBhbmQgdmFyaW91cyBmaWxlc3lzdGVtcyB0byBzdXBwb3J0IGNyZWF0aW5nIGRpcmVjdG9yaWVzIHZpYSBgb3BlbmF0KClgIHdpdGggdGhlIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgIGZsYWdzLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBhZGRpbmcgdGhlIGBPX0lTX01LRElSYCBtYWNybywgbW9kaWZ5aW5nIGBidWlsZF9vcGVuX2ZsYWdzKClgIHRvIGhhbmRsZSB0aGUgbmV3IGZsYWcgY29tYmluYXRpb24sIGFuZCB1cGRhdGluZyBgbG9va3VwX29wZW4oKWAgYW5kIGB2ZnNfbWtkaXIoKWAgcGF0aHMgaW4gYGZzL25hbWVpLmNgIHRvIHJvdXRlIGRpcmVjdG9yeSBjcmVhdGlvbiByZXF1ZXN0cyB0byBgdmZzX21rZGlyX25vX3Blcm0oKWAgaW5zdGVhZCBvZiByZWd1bGFyIGZpbGUgY3JlYXRpb24gZnVuY3Rpb25zLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgbG9naWNhbCwgYWx0ZXJpbmcgY29udHJvbCBmbG93IGFuZCBmbGFnIGhhbmRsaW5nIHdpdGhpbiB0aGUgVkZTIGxheWVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbGwgdmFyaWFibGVzIHVzZWQgKHN1Y2ggYXMgYGRlbGVnYXRlZF9pbm9kZWApIGFyZSBwcm9wZXJseSB6ZXJvLWluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDY5NzRmMmRhZTAzYTMxNGVlZGNkMjI1MTQ5ZTEyNmI2NjA5NGI0ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDE2OjE0OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuYwppbmRleCAzODI5NTU0Y2EzNjkyLi5iMWUwODIzYzg3YjU3IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy85cC92ZnNfaW5vZGUuYwpAQCAtNzc2LDYgJiM0Mzs3NzYsOSBAQCB2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IHA5X29tb2RlOwogCiYjNDM7CWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2OWZzX3Zmc19sb29rdXAoZGlyLCBkZW50cnksIDApOwogCQlpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpCmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuYwppbmRleCAxMTZiMjllOTVmMjFlLi42NGUwYWJhMDhkYTE2IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMKQEAgLTIzOCw2ICYjNDM7MjM4LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7CiAJc3RydWN0IHBvc2l4X2FjbCAqcGFjbCA9IE5VTEwsICpkYWNsID0gTlVMTDsKIAomIzQzOwlpZiAoT19JU19NS0RJUihmbGFncykpCiYjNDM7CQlmbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJaWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHsKIAkJc3RydWN0IGRlbnRyeSAqcmVzID0gdjlmc192ZnNfbG9va3VwKGRpciwgZGVudHJ5LCAwKTsKIAkJaWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9maWxlLmMgYi9mcy9jZXBoL2ZpbGUuYwppbmRleCBhNGEyYTRiNmEwMjdkLi42MjE2M2I3ZWNhNWY5IDEwMDY0NAotLS0gYS9mcy9jZXBoL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jZXBoL2ZpbGUuYwpAQCAtODEyLDYgJiM0Mzs4MTIsOSBAQCBpbnQgY2VwaF9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCSAgICAgIGRpciwgY2VwaF92aW5vcChkaXIpLCBkZW50cnksIGRlbnRyeSwKIAkgICAgICBkX3VuaGFzaGVkKGRlbnRyeSkgPyAmIzM0O3VuaGFzaGVkJiMzNDsgOiAmIzM0O2hhc2hlZCYjMzQ7LCBmbGFncywgbW9kZSk7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIoZmxhZ3MpKQomIzQzOwkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChkZW50cnktJmd0O2RfbmFtZS5sZW4gJmd0OyBOQU1FX01BWCkKIAkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jCmluZGV4IGQ0ZTAwMjk4MTBjMGYuLjU1ZDU4NDRlMjY1NTkgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnVzZS9kaXIuYwpAQCAtOTM1LDYgJiM0Mzs5MzUsOSBAQCBzdGF0aWMgaW50IGZ1c2VfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmVudHJ5LAogCXN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIoZmxhZ3MpKQomIzQzOwkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChmdXNlX2lzX2JhZChkaXIpKQogCQlyZXR1cm4gLUVJTzsKIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jCmluZGV4IGYzNjE4NzZjNTU4MzMuLjNlZTEzNjBmMWJjMjcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9nZnMyL2lub2RlLmMKQEAgLTEzODYsNiAmIzQzOzEzODYsOSBAQCBzdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIHsKIAlib29sIGV4Y2wgPSAhIShmbGFncyAmYW1wOyBPX0VYQ0wpOwogCiYjNDM7CWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpkID0gX19nZnMyX2xvb2t1cChkaXIsIGRlbnRyeSwgZmlsZSk7CiAJCWlmIChmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfT1BFTkVEKSB7CmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCAyMGE2NTM0ZWEzZWZmLi5lMWE4ZjE4Mzg1YTUyIDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmMKQEAgLTEzODIsMTMgJiM0MzsxMzgyLDEzIEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaykKIAogLyoqCiAgKiBtYXlfY3JlYXRlX2luX3N0aWNreSAtIENoZWNrIHdoZXRoZXIgYW4gT19DUkVBVCBvcGVuIGluIGEgc3RpY2t5IGRpcmVjdG9yeQotICoJCQkgIHNob3VsZCBiZSBhbGxvd2VkLCBvciBub3QsIG9uIGZpbGVzIHRoYXQgYWxyZWFkeQotICoJCQkgIGV4aXN0LgomIzQzOyAqCQkJICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcy9kaXJlY3RvcmllcyB0aGF0CiYjNDM7ICoJCQkgIGFscmVhZHkgZXhpc3QuCiAgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb20KICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGEKICAqIEBpbm9kZTogdGhlIGlub2RlIG9mIHRoZSBmaWxlIHRvIG9wZW4KICAqCi0gKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZSkgd2hlbjoKJiM0MzsgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZS9kaXJlY3RvcnkpIHdoZW46CiAgKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkCiAgKiAgIC0gdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMKICAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5CkBAIC0xNDE2LDYgJiM0MzsxNDE2LDE0IEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLAogCWlmIChsaWtlbHkoIShkaXJfbW9kZSAmYW1wOyBTX0lTVlRYKSkpCiAJCXJldHVybiAwOwogCiYjNDM7CS8qCiYjNDM7CSAqIFRoZXJlIGlzIG5vIHNlcGFyYXRlIHN5c2N0bCBmb3IgZGlyZWN0b3J5IGNyZWF0aW9uIGluIHN0aWNreQomIzQzOwkgKiBmb2xkZXJzLiBUaGVyZWZvcmUsIGZvciB0aGUgU19JU0RJUiBjYXNlLCBkaXNhYmxpbmcKJiM0MzsJICogc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyIGlzIG5vdCBlbm91Z2ggdG8gYWxsb3cgY3JlYXRpbmcgYQomIzQzOwkgKiBkaXJlY3RvcnkgaW4gYSBzdGlja3kgZm9sZGVyLCBiZWNhdXNlIHRoYXQgbWF5IHN1cnByaXNlIHVzZXJzCiYjNDM7CSAqIG5vdCBleHBlY3RpbmcgdGhhdCBPX0NSRUFUfE9fRElSRUNUT1JZIGlzIHBvc3NpYmxlIG9uIG5ld2VyCiYjNDM7CSAqIGtlcm5lbHMuCiYjNDM7CSAqLwogCWlmIChTX0lTUkVHKGlub2RlLSZndDtpX21vZGUpICZhbXA7JmFtcDsgIXN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikKIAkJcmV0dXJuIDA7CiAKQEAgLTE0NDcsNiAmIzQzOzE0NTUsMTIgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsCiAJCQkJCSAgICAgICYjMzQ7c3RpY2t5X2NyZWF0ZV9yZWd1bGFyJiMzNDspOwogCQkJcmV0dXJuIC1FQUNDRVM7CiAJCX0KJiM0MzsKJiM0MzsJCWlmIChTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CQkJYXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsCiYjNDM7CQkJCQkgICAgICAmIzM0O3N0aWNreV9jcmVhdGVfZGlyJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUFDQ0VTOwomIzQzOwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtMjc4MSw5ICYjNDM7Mjc5NSwxNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncykKIAlyZXR1cm4gczsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKGNvbnN0IHN0cnVjdCBxc3RyICpsYXN0KQomIzQzO3sKJiM0MzsJLyogbGFzdC0mZ3Q7bGVuIGlzIHNldCBieSBoYXNoX25hbWUoKSB0byB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50CiYjNDM7CSAqIGNvbXBvbmVudCAtJmd0O25hbWUsIHRlcm1pbmF0aW5nIHdpdGggJiMzOTsvJiMzOTsgb3IgYSBOVUwgY2hhcmFjdGVyLiAqLwomIzQzOwlyZXR1cm4gKGJvb2wpbGFzdC0mZ3Q7bmFtZVtsYXN0LSZndDtsZW5dOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbG9va3VwX2xhc3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0JaWYgKG5kLSZndDtsYXN0X3R5cGUgPT0gTEFTVF9OT1JNICZhbXA7JmFtcDsgbmQtJmd0O2xhc3QubmFtZVtuZC0mZ3Q7bGFzdC5sZW5dKQomIzQzOwlpZiAobmQtJmd0O2xhc3RfdHlwZSA9PSBMQVNUX05PUk0gJmFtcDsmYW1wOyB0cmFpbGluZ19zbGFzaGVzKCZhbXA7bmQtJmd0O2xhc3QpKQogCQluZC0mZ3Q7ZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7CiAKIAlyZXR1cm4gd2Fsa19jb21wb25lbnQobmQsIFdBTEtfVFJBSUxJTkcpOwpAQCAtNDE1OSw2ICYjNDM7NDE4MCwyNCBAQCBzdGF0aWMgaW5saW5lIHVtb2RlX3QgdmZzX3ByZXBhcmVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlyZXR1cm4gbW9kZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUKJiM0MztpbnQgdmZzX2NyZWF0ZV9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkgICAgICAgdW1vZGVfdCBtb2RlLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqZGlyID0gZF9pbm9kZShkZW50cnktJmd0O2RfcGFyZW50KTsKJiM0MzsJaW50IGVycm9yOwomIzQzOwomIzQzOwllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwllcnJvciA9IGRpci0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CWlmICghZXJyb3IpCiYjNDM7CQlmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyb3I7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB2ZnNfY3JlYXRlIC0gY3JlYXRlIG5ldyBmaWxlCiAgKiBAaWRtYXA6CWlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb20KQEAgLTQxOTEsMTMgJiM0Mzs0MjMwLDggQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLAogCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKLQllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQllcnJvciA9IGRpci0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7Ci0JaWYgKCFlcnJvcikKLQkJZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTsKLQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CXJldHVybiB2ZnNfY3JlYXRlX25vX3Blcm0oaWRtYXAsIGRlbnRyeSwgbW9kZSwgZGkpOwogfQogRVhQT1JUX1NZTUJPTCh2ZnNfY3JlYXRlKTsKIApAQCAtNDMxNCwyMSAmIzQzOzQzNDgsNDEgQEAgc3RhdGljIGlubGluZSBpbnQgb3Blbl90b19uYW1laV9mbGFncyhpbnQgZmxhZykKIAogc3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQljb25zdCBzdHJ1Y3QgcGF0aCAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQl1bW9kZV90IG1vZGUpCiYjNDM7CQkJaW50IG9wZW5fZmxhZywgdW1vZGVfdCBtb2RlKQogewotCWludCBlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApOwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlOwomIzQzOwlib29sIGNyZWF0ZV9kaXIgPSBPX0lTX01LRElSKG9wZW5fZmxhZyk7CiYjNDM7CWludCBlcnJvcjsKJiM0MzsKJiM0MzsJaWYgKGNyZWF0ZV9kaXIpCiYjNDM7CQllcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwllbHNlCiYjNDM7CQllcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCiAJaWYgKCFmc3VpZGdpZF9oYXNfbWFwcGluZyhkaXItJmd0O2RlbnRyeS0mZ3Q7ZF9zYiwgaWRtYXApKQogCQlyZXR1cm4gLUVPVkVSRkxPVzsKIAotCWVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyLSZndDtkZW50cnktJmd0O2RfaW5vZGUsCi0JCQkJIE1BWV9XUklURSB8IE1BWV9FWEVDKTsKJiM0MzsJZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBkaXJfaW5vZGUsIE1BWV9XUklURSB8IE1BWV9FWEVDKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCXJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLSZndDtkZW50cnktJmd0O2RfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CWlmIChjcmVhdGVfZGlyKQomIzQzOwkJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CWVsc2UKJiM0MzsJCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpcl9pbm9kZSwgZGVudHJ5LCBtb2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHVtb2RlX3Qgb19jcmVhdGVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCWNvbnN0IHN0cnVjdCBpbm9kZSAqZGlyLCBpbnQgb3Blbl9mbGFnLCB1bW9kZV90IG1vZGUpCiYjNDM7ewomIzQzOwlpZiAoT19JU19NS0RJUihvcGVuX2ZsYWcpKQomIzQzOwkJcmV0dXJuIHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JUldYVUdPIHwgU19JU1ZUWCwgU19JRkRJUik7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7CiB9CiAKIC8qKgpAQCAtNDM2NCw4ICYjNDM7NDQxOCw5IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5CiAKIAlmaWxlLSZndDtfX2ZfcGF0aC5kZW50cnkgPSBERU5UUllfTk9UX1NFVDsKIAlmaWxlLSZndDtfX2ZfcGF0aC5tbnQgPSBwYXRoLSZndDttbnQ7CiYjNDM7CiAJZXJyb3IgPSBkaXJfaW5vZGUtJmd0O2lfb3AtJmd0O2F0b21pY19vcGVuKGRpcl9pbm9kZSwgZGVudHJ5LCBmaWxlLAotCQkJCSAgICAgICBvcGVuX3RvX25hbWVpX2ZsYWdzKG9wZW5fZmxhZyksIG1vZGUpOwomIzQzOwkJCQkJICAgICBvcGVuX3RvX25hbWVpX2ZsYWdzKG9wZW5fZmxhZyksIG1vZGUpOwogCWRfbG9va3VwX2RvbmUoZGVudHJ5KTsKIAogCWlmICghZXJyb3IpIHsKQEAgLTQ0MTAsMTAgJiM0Mzs0NDY1LDIxIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5CiAJCX0KIAkJZHB1dChkZW50cnkpOwogCQlkZW50cnkgPSBFUlJfUFRSKGVycm9yKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfQ1JFQVRFRCkKJiM0MzsJCQlmc25vdGlmeV9jcmVhdGUoZGlyX2lub2RlLCBkZW50cnkpOwomIzQzOwkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9PUEVORUQpCiYjNDM7CQkJZnNub3RpZnlfb3BlbihmaWxlKTsKIAl9CiYjNDM7CiYjNDM7CiAJcmV0dXJuIGRlbnRyeTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUKJiM0MztzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLAomIzQzOwkJCQkgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LAomIzQzOwkJCQkgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqKTsKIC8qCiAgKiBMb29rIHVwIGFuZCBtYXliZSBjcmVhdGUgYW5kIG9wZW4gdGhlIGxhc3QgY29tcG9uZW50LgogICoKQEAgLTQ0MzUsNiAmIzQzOzQ1MDEsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLAogCXN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwOwogCXN0cnVjdCBkZW50cnkgKmRpciA9IG5kLSZndDtwYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci0mZ3Q7ZF9pbm9kZTsKJiM0MzsJYm9vbCBjcmVhdGVfZGlyID0gT19JU19NS0RJUihvcC0mZ3Q7bW9kZSk7CiAJaW50IG9wZW5fZmxhZzsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJaW50IGVycm9yLCBjcmVhdGVfZXJyb3I7CkBAIC00NDU1LDcgJiM0Mzs0NTIyLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICovCiAJfQogCWlmIChvcGVuX2ZsYWcgJmFtcDsgT19DUkVBVCkKLQkJaW5vZGVfbG9jayhkaXJfaW5vZGUpOwomIzQzOwkJaW5vZGVfbG9ja19uZXN0ZWQoZGlyX2lub2RlLCBJX01VVEVYX1BBUkVOVCk7CiAJZWxzZQogCQlpbm9kZV9sb2NrX3NoYXJlZChkaXJfaW5vZGUpOwogCkBAIC00NTA3LDEyICYjNDM7NDU3NCwxNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLAogCWlmIChvcGVuX2ZsYWcgJmFtcDsgT19DUkVBVCkgewogCQlpZiAob3Blbl9mbGFnICZhbXA7IE9fRVhDTCkKIAkJCW9wZW5fZmxhZyAmYW1wOz0gfk9fVFJVTkM7Ci0JCW1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIG1vZGUsIG1vZGUpOwomIzQzOwkJbW9kZSA9IG9fY3JlYXRlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgb3Blbl9mbGFnLCBtb2RlKTsKIAkJaWYgKGxpa2VseShnb3Rfd3JpdGUpKQogCQkJY3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCAmYW1wO25kLSZndDtwYXRoLAotCQkJCQkJICAgIGRlbnRyeSwgbW9kZSk7CiYjNDM7CQkJCQkJICAgIGRlbnRyeSwgb3Blbl9mbGFnLCBtb2RlKTsKIAkJZWxzZQogCQkJY3JlYXRlX2Vycm9yID0gLUVST0ZTOwomIzQzOwkJLyogUmVmdXNlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0aHJvdWdoIGEgZGFuZ2xpbmcgKHRyYWlsaW5nKQomIzQzOwkJICogc3ltbGluay4gRm9yIHJlZ3VsYXIgZmlsZXMgdGhpcyBoYXMgYmVlbiBhbGxvd2VkIGhpc3RvcmljYWxseQomIzQzOwkJICogb24gT19DUkVBVCB3aXRob3V0IE9fRVhDTC4gKi8KJiM0MzsJCWlmICh1bmxpa2VseShuZC0mZ3Q7ZGVwdGgpICZhbXA7JmFtcDsgY3JlYXRlX2RpciAmYW1wOyZhbXA7ICFjcmVhdGVfZXJyb3IpCiYjNDM7CQkJY3JlYXRlX2Vycm9yID0gLUVFWElTVDsKIAl9CiAJaWYgKGNyZWF0ZV9lcnJvcikKIAkJb3Blbl9mbGFnICZhbXA7PSB+T19DUkVBVDsKQEAgLTQ1MzcsNiAmIzQzOzQ2MDksNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJZGVudHJ5ID0gcmVzOwogCQl9CiAJfQomIzQzOwogCWlmIChkZW50cnktJmd0O2RfaW5vZGUgfHwgIShvcC0mZ3Q7b3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpKSB7CiAJCS8qCiAJCSAqIE5vIG5lZWQgdG8gY3JlYXRlIGEgZmlsZS4gIElmIGxvb2t1cCByZXR1cm5lZCBhIHBvc2l0aXZlCkBAIC00NTU0LDI2ICYjNDM7NDYyNywyNiBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLAogCQlnb3RvIG91dF9kcHV0OwogCX0KIAotCWVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpcl9pbm9kZSwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgJmFtcDtkZWxlZ2F0ZWRfaW5vZGUpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZHB1dDsKLQotCWZpbGUtJmd0O2ZfbW9kZSB8PSBGTU9ERV9DUkVBVEVEOwotCWlmICghZGlyX2lub2RlLSZndDtpX29wLSZndDtjcmVhdGUpIHsKJiM0MzsJaWYgKChjcmVhdGVfZGlyICZhbXA7JmFtcDsgIWRpcl9pbm9kZS0mZ3Q7aV9vcC0mZ3Q7bWtkaXIpCiYjNDM7CQl8fCAoIWNyZWF0ZV9kaXIgJmFtcDsmYW1wOyAhZGlyX2lub2RlLSZndDtpX29wLSZndDtjcmVhdGUpKSB7CiAJCWVycm9yID0gLUVBQ0NFUzsKIAkJZ290byBvdXRfZHB1dDsKIAl9CiAKLQllcnJvciA9IGRpcl9pbm9kZS0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CWlmIChjcmVhdGVfZGlyKSB7CiYjNDM7CQlzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksCiYjNDM7CQkJCQkJICAgICAgIG1vZGUsICZhbXA7ZGVsZWdhdGVkX2lub2RlKTsKJiM0MzsJCQllcnJvciA9IFBUUl9FUlJfT1JfWkVSTyhyZXMpOwomIzQzOwkJCWlmICghZXJyb3IpCiYjNDM7CQkJCWRlbnRyeSA9IHJlczsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVycm9yID0gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsICZhbXA7ZGVsZWdhdGVkX2lub2RlKTsKJiM0MzsJfQogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZHB1dDsKJiM0MzsKJiM0MzsJZmlsZS0mZ3Q7Zl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7CiBvdXQ6Ci0JaWYgKCFJU19FUlIoZGVudHJ5KSkgewotCQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX0NSRUFURUQpCi0JCQlmc25vdGlmeV9jcmVhdGUoZGlyX2lub2RlLCBkZW50cnkpOwotCQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX09QRU5FRCkKLQkJCWZzbm90aWZ5X29wZW4oZmlsZSk7Ci0JfQogCWlmICgob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpIHx8IGNyZWF0ZV9lcnJvcikKIAkJaW5vZGVfdW5sb2NrKGRpcl9pbm9kZSk7CiAJZWxzZQpAQCAtNDY5NSwxNyAmIzQzOzQ3NjgsMTIgQEAgc3RydWN0IGZpbGUgKnZmc19sb29rdXBfb3BlbihzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqbGFzdCwKIH0KIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModmZzX2xvb2t1cF9vcGVuLCAmIzM0O25mc2QmIzM0Oyk7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKHN0cnVjdCBuYW1laWRhdGEgKm5kKQotewotCXJldHVybiAoYm9vbCluZC0mZ3Q7bGFzdC5uYW1lW25kLSZndDtsYXN0Lmxlbl07Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZykKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAKIAlpZiAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpIHsKLQkJaWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKQomIzQzOwkJaWYgKHRyYWlsaW5nX3NsYXNoZXMoJmFtcDtuZC0mZ3Q7bGFzdCkgJmFtcDsmYW1wOyAhKG9wZW5fZmxhZyAmYW1wOyBPX0RJUkVDVE9SWSkpCiAJCQlyZXR1cm4gRVJSX1BUUigtRUlTRElSKTsKIAogCQkvKiBEb24mIzM5O3QgYm90aGVyIG9uIGFuIE9fRVhDTCBjcmVhdGUgKi8KQEAgLTQ3MTMsNyAmIzQzOzQ3ODEsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpCiAJCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAodHJhaWxpbmdfc2xhc2hlcyhuZCkpCiYjNDM7CWlmICh0cmFpbGluZ19zbGFzaGVzKCZhbXA7bmQtJmd0O2xhc3QpKQogCQluZC0mZ3Q7ZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7CiAKIAlkZW50cnkgPSBsb29rdXBfZmFzdChuZCk7CkBAIC00ODA2LDggJiM0Mzs0ODc0LDkgQEAgc3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLAogCWlmIChvcGVuX2ZsYWcgJmFtcDsgT19DUkVBVCkgewogCQlpZiAoKG9wZW5fZmxhZyAmYW1wOyBPX0VYQ0wpICZhbXA7JmFtcDsgIShmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfQ1JFQVRFRCkpCiAJCQlyZXR1cm4gLUVFWElTVDsKLQkJaWYgKGRfaXNfZGlyKG5kLSZndDtwYXRoLmRlbnRyeSkpCiYjNDM7CQlpZiAoIShvcGVuX2ZsYWcgJmFtcDsgT19ESVJFQ1RPUlkpICZhbXA7JmFtcDsgZF9pc19kaXIobmQtJmd0O3BhdGguZGVudHJ5KSkKIAkJCXJldHVybiAtRUlTRElSOwomIzQzOwogCQllcnJvciA9IG1heV9jcmVhdGVfaW5fc3RpY2t5KGlkbWFwLCBuZCwKIAkJCQkJICAgICBkX2JhY2tpbmdfaW5vZGUobmQtJmd0O3BhdGguZGVudHJ5KSk7CiAJCWlmICh1bmxpa2VseShlcnJvcikpCkBAIC01MDg3LDcgJiM0Mzs1MTU2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZShpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsCiAJICogRG8gdGhlIGZpbmFsIGxvb2t1cC4gIFN1cHByZXNzICYjMzk7Y3JlYXRlJiMzOTsgaWYgdGhlcmUgaXMgYSB0cmFpbGluZwogCSAqICYjMzk7LyYjMzk7LCBhbmQgYSBkaXJlY3Rvcnkgd2FzbiYjMzk7dCByZXF1ZXN0ZWQuCiAJICovCi0JaWYgKGxhc3QubmFtZVtsYXN0Lmxlbl0gJmFtcDsmYW1wOyAhd2FudF9kaXIpCiYjNDM7CWlmICh0cmFpbGluZ19zbGFzaGVzKCZhbXA7bGFzdCkgJmFtcDsmYW1wOyAhd2FudF9kaXIpCiAJCWNyZWF0ZV9mbGFncyAmYW1wOz0gfkxPT0tVUF9DUkVBVEU7CiAJZGVudHJ5ID0gc3RhcnRfZGlyb3AocGF0aC0mZ3Q7ZGVudHJ5LCAmYW1wO2xhc3QsIHJldmFsX2ZsYWcgfCBjcmVhdGVfZmxhZ3MpOwogCWlmIChJU19FUlIoZGVudHJ5KSkKQEAgLTUxODIsNyAmIzQzOzUyNTEsNyBAQCBzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsCiAJCXBhdGgtJmd0O2RlbnRyeSA9IGRpcjsKIAkJbW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTsKIAotCQljcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIHBhdGgsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CQljcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIHBhdGgsIGRlbnRyeSwgZmxhZ3MsIG1vZGUpOwogCQlpZiAoY3JlYXRlX2Vycm9yKQogCQkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwogCkBAIC01MzU2LDYgJiM0Mzs1NDI1LDM0IEBAIFNZU0NBTExfREVGSU5FMyhta25vZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVtb2RlX3QsIG1vZGUsIHVuc2lnbmVkLCBkCiAJcmV0dXJuIGZpbGVuYW1lX21rbm9kYXQoQVRfRkRDV0QsIG5hbWUsIG1vZGUsIGRldik7CiB9CiAKJiM0MzsvKiBSZXR1cm5zIHRoZSBkZW50cnkgdG8gdXNlIChub3QgTlVMTCkgb3IgLUUgb24gZXJyb3IgKi8KJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsCiYjNDM7CQkJCSBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSkKJiM0Mzt7CiYjNDM7CWludCBlcnJvcjsKJiM0MzsJc3RydWN0IGRlbnRyeSAqZGU7CiYjNDM7CXVuc2lnbmVkIG1heF9saW5rcyA9IGRpci0mZ3Q7aV9zYi0mZ3Q7c19tYXhfbGlua3M7CiYjNDM7CiYjNDM7CWlmIChtYXhfbGlua3MgJmFtcDsmYW1wOyBkaXItJmd0O2lfbmxpbmsgJmd0Oz0gbWF4X2xpbmtzKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVNTElOSyk7CiYjNDM7CiYjNDM7CWVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiYjNDM7CiYjNDM7CWRlID0gZGlyLSZndDtpX29wLSZndDtta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwlpZiAoSVNfRVJSKGRlKSkKJiM0MzsJCXJldHVybiBkZTsKJiM0MzsJaWYgKGRlKSB7CiYjNDM7CQlkcHV0KGRlbnRyeSk7CiYjNDM7CQlkZW50cnkgPSBkZTsKJiM0MzsJfQomIzQzOwlmc25vdGlmeV9ta2RpcihkaXIsIGRlbnRyeSk7CiYjNDM7CXJldHVybiBkZW50cnk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB2ZnNfbWtkaXIgLSBjcmVhdGUgZGlyZWN0b3J5IHJldHVybmluZyBjb3JyZWN0IGRlbnRyeSBpZiBwb3NzaWJsZQogICogQGlkbWFwOgkJaWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbQpAQCAtNTM4Myw3ICYjNDM7NTQ4MCw2IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCQkgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGVsZWdhdGVkX2lub2RlKQogewogCWludCBlcnJvcjsKLQl1bnNpZ25lZCBtYXhfbGlua3MgPSBkaXItJmd0O2lfc2ItJmd0O3NfbWF4X2xpbmtzOwogCXN0cnVjdCBkZW50cnkgKmRlOwogCiAJZXJyb3IgPSBtYXlfY3JlYXRlX2RlbnRyeShpZG1hcCwgZGlyLCBkZW50cnkpOwpAQCAtNTM5OSwyNCAmIzQzOzU0OTUsMTIgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyOwogCi0JZXJyb3IgPSAtRU1MSU5LOwotCWlmIChtYXhfbGlua3MgJmFtcDsmYW1wOyBkaXItJmd0O2lfbmxpbmsgJmd0Oz0gbWF4X2xpbmtzKQotCQlnb3RvIGVycjsKLQotCWVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGVsZWdhdGVkX2lub2RlKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZXJyOwotCi0JZGUgPSBkaXItJmd0O2lfb3AtJmd0O21rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7Ci0JZXJyb3IgPSBQVFJfRVJSKGRlKTsKLQlpZiAoSVNfRVJSKGRlKSkKJiM0MzsJZGUgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7CiYjNDM7CWlmIChJU19FUlIoZGUpKSB7CiYjNDM7CQllcnJvciA9IFBUUl9FUlIoZGUpOwogCQlnb3RvIGVycjsKLQlpZiAoZGUpIHsKLQkJZHB1dChkZW50cnkpOwotCQlkZW50cnkgPSBkZTsKIAl9Ci0JZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpOwotCXJldHVybiBkZW50cnk7CiYjNDM7CXJldHVybiBkZTsKIAogZXJyOgogCWVuZF9jcmVhdGluZyhkZW50cnkpOwpAQCAtNTcwMyw3ICYjNDM7NTc4Nyw3IEBAIGludCBmaWxlbmFtZV91bmxpbmthdChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpCiAJCWdvdG8gZXhpdF9kcm9wX3dyaXRlOwogCiAJLyogV2h5IG5vdCBiZWZvcmU/IEJlY2F1c2Ugd2Ugd2FudCBjb3JyZWN0IGVycm9yIHZhbHVlICovCi0JaWYgKHVubGlrZWx5KGxhc3QubmFtZVtsYXN0Lmxlbl0pKSB7CiYjNDM7CWlmICh1bmxpa2VseSh0cmFpbGluZ19zbGFzaGVzKCZhbXA7bGFzdCkpKSB7CiAJCWlmIChkX2lzX2RpcihkZW50cnkpKQogCQkJZXJyb3IgPSAtRUlTRElSOwogCQllbHNlCkBAIC02MzA1LDE2ICYjNDM7NjM4OSwxNiBAQCBpbnQgZmlsZW5hbWVfcmVuYW1lYXQyKGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZnJvbSwKIAlpZiAoZmxhZ3MgJmFtcDsgUkVOQU1FX0VYQ0hBTkdFKSB7CiAJCWlmICghZF9pc19kaXIocmQubmV3X2RlbnRyeSkpIHsKIAkJCWVycm9yID0gLUVOT1RESVI7Ci0JCQlpZiAobmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKQomIzQzOwkJCWlmICh0cmFpbGluZ19zbGFzaGVzKCZhbXA7bmV3X2xhc3QpKQogCQkJCWdvdG8gZXhpdF91bmxvY2s7CiAJCX0KIAl9CiAJLyogdW5sZXNzIHRoZSBzb3VyY2UgaXMgYSBkaXJlY3RvcnkgdHJhaWxpbmcgc2xhc2hlcyBnaXZlIC1FTk9URElSICovCiAJaWYgKCFkX2lzX2RpcihyZC5vbGRfZGVudHJ5KSkgewogCQllcnJvciA9IC1FTk9URElSOwotCQlpZiAob2xkX2xhc3QubmFtZVtvbGRfbGFzdC5sZW5dKQomIzQzOwkJaWYgKHRyYWlsaW5nX3NsYXNoZXMoJmFtcDtvbGRfbGFzdCkpCiAJCQlnb3RvIGV4aXRfdW5sb2NrOwotCQlpZiAoIShmbGFncyAmYW1wOyBSRU5BTUVfRVhDSEFOR0UpICZhbXA7JmFtcDsgbmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKQomIzQzOwkJaWYgKCEoZmxhZ3MgJmFtcDsgUkVOQU1FX0VYQ0hBTkdFKSAmYW1wOyZhbXA7IHRyYWlsaW5nX3NsYXNoZXMoJmFtcDtuZXdfbGFzdCkpCiAJCQlnb3RvIGV4aXRfdW5sb2NrOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IDM2ZjJlODU4ODkyMjAuLmI0ZGI3MDNjOWU4YzcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uZnMvZGlyLmMKQEAgLTIxMjEsNiAmIzQzOzIxMjEsOSBAQCBpbnQgbmZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJZGZwcmludGsoVkZTLCAmIzM0O05GUzogYXRvbWljX29wZW4oJXMvJWxsdSksICVwZFxuJiMzNDssCiAJCQlkaXItJmd0O2lfc2ItJmd0O3NfaWQsIGRpci0mZ3Q7aV9pbm8sIGRlbnRyeSk7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIob3Blbl9mbGFncykpCiYjNDM7CQlvcGVuX2ZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAllcnIgPSBuZnNfY2hlY2tfZmxhZ3Mob3Blbl9mbGFncyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTIzMTMsNiAmIzQzOzIzMTYsOSBAQCBpbnQgbmZzX2F0b21pY19vcGVuX3YyMyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCSAqLwogCWludCBlcnJvciA9IDA7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIob3Blbl9mbGFncykpCiYjNDM7CQlvcGVuX2ZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZGVudHJ5LSZndDtkX25hbWUubGVuICZndDsgTkZTX1NFUlZFUihkaXIpLSZndDtuYW1lbGVuKQogCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKIApkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IDZiMWMxNGU2ODRhOTMuLjZjYjVlMmFkNzgxZjMgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vcGVuLmMKQEAgLTEyMzksMjkgJiM0MzsxMjM5LDMwIEBAIGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKQogCWlmIChXSUxMX0NSRUFURShmbGFncykpIHsKIAkJaWYgKGhvdy0mZ3Q7bW9kZSAmYW1wOyB+U19JQUxMVUdPKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW9wLSZndDttb2RlID0gaG93LSZndDttb2RlIHwgU19JRlJFRzsKJiM0MzsJCWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCQlvcC0mZ3Q7bW9kZSA9IGhvdy0mZ3Q7bW9kZSB8IFNfSUZESVI7CiYjNDM7CQllbHNlCiYjNDM7CQkJb3AtJmd0O21vZGUgPSBob3ctJmd0O21vZGUgfCBTX0lGUkVHOwogCX0gZWxzZSB7CiAJCWlmIChob3ctJmd0O21vZGUgIT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlvcC0mZ3Q7bW9kZSA9IDA7CiAJfQogCi0JLyoKLQkgKiBCbG9jayBidWdzIHdoZXJlIE9fRElSRUNUT1JZIHwgT19DUkVBVCBjcmVhdGVkIHJlZ3VsYXIgZmlsZXMuCi0JICogTm90ZSwgdGhhdCBibG9ja2luZyBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQgaGVyZSBhbHNvIHByb3RlY3RzCi0JICogT19UTVBGSUxFIGJlbG93IHdoaWNoIHJlcXVpcmVzIE9fRElSRUNUT1JZIGJlaW5nIHJhaXNlZC4KLQkgKi8KLQlpZiAoKGZsYWdzICZhbXA7IChPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpKSA9PSAoT19ESVJFQ1RPUlkgfCBPX0NSRUFUKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkvKiBOb3cgaGFuZGxlIHRoZSBjcmVhdGl2ZSBpbXBsZW1lbnRhdGlvbiBvZiBPX1RNUEZJTEUuICovCiAJaWYgKGZsYWdzICZhbXA7IF9fT19UTVBGSUxFKSB7CiAJCS8qCiAJCSAqIEluIG9yZGVyIHRvIGVuc3VyZSBwcm9ncmFtcyBnZXQgZXhwbGljaXQgZXJyb3JzIHdoZW4gdHJ5aW5nCiAJCSAqIHRvIHVzZSBPX1RNUEZJTEUgb24gb2xkIGtlcm5lbHMgd2UgZW5mb3JjZSB0aGF0IE9fRElSRUNUT1JZCi0JCSAqIGlzIHJhaXNlZCBhbG9uZ3NpZGUgX19PX1RNUEZJTEUuCiYjNDM7CQkgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLCBidXQgd2l0aG91dCBPX0NSRUFULiBUaGUKJiM0MzsJCSAqIHJlYXNvbiBmb3IgZGlzYWxsb3dpbmcgT19DUkVBVHxPX1RNUEZJTEUgaXMgdGhhdAomIzQzOwkJICogT19ESVJFQ1RPUll8T19DUkVBVCB1c2VkIHRvIHdvcmsgYW5kIGNyZWF0ZWQgYSByZWd1bGFyIGZpbGUKJiM0MzsJCSAqIGlmIG5vdGhpbmcgZXhpc3RlZCBhdCB0aGUgb3BlbiBwYXRoLiBIZW5jZSwgYWxsb3dpbmcgdGhlCiYjNDM7CQkgKiBjb21iaW5hdGlvbiB3b3VsZCBoYXZlIGNhdXNlZCBPX0NSRUFUfE9fVE1QRklMRSB0byBjcmVhdGUgYQomIzQzOwkJICogcmVndWxhciAobm9uLXRlbXBvcmFyeSkgZmlsZSBvbiBvbGQga2VybmVscywgd2hpbGUgdGhlIGNhbGxlcgomIzQzOwkJICogd291bGQgYmVsaWV2ZSB0aGV5IGNyZWF0ZWQgYW4gYWN0dWFsIE9fVE1QRklMRS4KIAkJICovCi0JCWlmICghKGZsYWdzICZhbXA7IE9fRElSRUNUT1JZKSkKJiM0MzsJCWlmICghKGZsYWdzICZhbXA7IE9fRElSRUNUT1JZKSB8fCAoZmxhZ3MgJmFtcDsgT19DUkVBVCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKCEoYWNjX21vZGUgJmFtcDsgTUFZX1dSSVRFKSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTMxOCw2ICYjNDM7MTMxOSwxNSBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcCkKIAogCW9wLSZndDtpbnRlbnQgPSBmbGFncyAmYW1wOyBPX1BBVEggPyAwIDogTE9PS1VQX09QRU47CiAKJiM0MzsJLyoKJiM0MzsJICogUmVxdWVzdGluZyB3cml0ZSBhY2Nlc3Mgb24gYSBkaXJlY3RvcnkgY2FuIG5ldmVyIHN1Y2NlZWQuIFJhdGhlcgomIzQzOwkgKiB0aGFuIHBlcmZvcm1pbmcgYSBwYXRoLXdhbGsgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHRhcmdldCBpcwomIzQzOwkgKiBhY3R1YWxseSBhIGRpcmVjdG9yeSAoLUVJU0RJUikgb3Igbm90ICgtRU5PVERJUiksIHdlIHNob3J0LWNpcmN1aXQKJiM0MzsJICogdG8gLUVOT1RESVIuCiYjNDM7CSAqLwomIzQzOwlpZiAoKGZsYWdzICZhbXA7IE9fRElSRUNUT1JZKSAmYW1wOyZhbXA7ICEoZmxhZ3MgJmFtcDsgX19PX1RNUEZJTEUpICZhbXA7JmFtcDsgKGFjY19tb2RlICZhbXA7IE1BWV9XUklURSkpCiYjNDM7CQlyZXR1cm4gLUVOT1RESVI7CiYjNDM7CiAJaWYgKGZsYWdzICZhbXA7IE9fQ1JFQVQpIHsKIAkJb3AtJmd0O2ludGVudCB8PSBMT09LVVBfQ1JFQVRFOwogCQlpZiAoZmxhZ3MgJmFtcDsgT19FWENMKSB7CmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2Rpci5jIGIvZnMvc21iL2NsaWVudC9kaXIuYwppbmRleCA3ODAzYmQ1YmQwMWY4Li5kMWFmOTBjOTgxY2Q0IDEwMDY0NAotLS0gYS9mcy9zbWIvY2xpZW50L2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NtYi9jbGllbnQvZGlyLmMKQEAgLTUzOCw2ICYjNDM7NTM4LDkgQEAgaW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LAogCWlmICh1bmxpa2VseShjaWZzX2ZvcmNlZF9zaHV0ZG93bihjaWZzX3NiKSkpCiAJCXJldHVybiBzbWJfRUlPKHNtYl9laW9fdHJhY2VfZm9yY2VkX3NodXRkb3duKTsKIAomIzQzOwlpZiAoT19JU19NS0RJUihvZmxhZ3MpKQomIzQzOwkJb2ZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAkvKgogCSAqIFBvc2l4IG9wZW4gaXMgb25seSBjYWxsZWQgKGF0IGxvb2t1cCB0aW1lKSBmb3IgZmlsZSBjcmVhdGUgbm93LiBGb3IKIAkgKiBvcGVucyAocmF0aGVyIHRoYW4gY3JlYXRlcyksIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cgaWYgaXQgaXMgYSBmaWxlCmRpZmYgLS1naXQgYS9mcy92Ym94c2YvZGlyLmMgYi9mcy92Ym94c2YvZGlyLmMKaW5kZXggMGI5ZWFiMTU3NDMyZC4uNmUzMDZkZGQ3MjJiZiAxMDA2NDQKLS0tIGEvZnMvdmJveHNmL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zib3hzZi9kaXIuYwpAQCAtMzE4LDYgJiM0MzszMTgsOSBAQCBzdGF0aWMgaW50IHZib3hzZl9kaXJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAl1NjQgaGFuZGxlOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIoZmxhZ3MpKQomIzQzOwkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7CiAJCXN0cnVjdCBkZW50cnkgKnJlcyA9IHZib3hzZl9kaXJfbG9va3VwKHBhcmVudCwgZGVudHJ5LCAwKTsKIAkJaWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mY250bC5oIGIvaW5jbHVkZS9saW51eC9mY250bC5oCmluZGV4IDZhZDZiOWU3YTIyNmEuLjIwNGUxNmJiZTI2MzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmNudGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmgKQEAgLTMwLDYgJiM0MzszMCwxMiBAQAogICovCiAjZGVmaW5lIF9fT19SRUdVTEFSCQkoMSAmbHQ7Jmx0OyAzMCkKIAomIzQzOyNkZWZpbmUgT19NS0RJUl9NQVNLCShPX0NSRUFUIHwgT19ESVJFQ1RPUlkpCiYjNDM7c3RhdGljIGlubGluZSBib29sIE9fSVNfTUtESVIodW5zaWduZWQgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIChmbGFncyAmYW1wOyBPX01LRElSX01BU0spID09IE9fTUtESVJfTUFTSzsKJiM0Mzt9CiYjNDM7CiAvKiBMaXN0IG9mIGFsbCB2YWxpZCBmbGFncyBmb3IgdGhlIGhvdy0mZ3Q7cmVzb2x2ZSBhcmd1bWVudDogKi8KICNkZWZpbmUgVkFMSURfUkVTT0xWRV9GTEFHUyBcCiAJKFJFU09MVkVfTk9fWERFViB8IFJFU09MVkVfTk9fTUFHSUNMSU5LUyB8IFJFU09MVkVfTk9fU1lNTElOS1MgfCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZQppbmRleCA5ZWIxODVmYjJmOWRkLi4wMWM1ODhkNGM4NGY2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmUKQEAgLTEsNCAmIzQzOzEsNSBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7b3Blbl9vX2NyZWF0X29fZGlyCiBkbm90aWZ5X3Rlc3QKIGRldnB0c19wdHMKIGZjbG9nCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlCmluZGV4IDAzYmUzMzdjMWYzNTEuLjA5NTliZDI2ODc1YWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlCkBAIC0xLDcgJiM0MzsxLDcgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIAogQ0ZMQUdTICYjNDM7PSAkKEtIRFJfSU5DTFVERVMpCi1URVNUX0dFTl9QUk9HUyA6PSBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nIHVzdGF0X3Rlc3QKJiM0MztURVNUX0dFTl9QUk9HUyA6PSBvcGVuX29fY3JlYXRfb19kaXIgZGV2cHRzX3B0cyBmaWxlX3N0cmVzc29yIGFub25faW5vZGVfdGVzdCBrZXJuZnNfdGVzdCBmY2xvZyB1c3RhdF90ZXN0CiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gaWRtYXBwZWRfdG1wZmlsZQogVEVTVF9HRU5fUFJPR1NfRVhURU5ERUQgOj0gZG5vdGlmeV90ZXN0CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYmUwYWIzNDI2N2UxZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jCkBAIC0wLDAgJiM0MzsxLDIwMSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zdGF0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3cmFwcGVycy5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIG9wZW5hdF9vX21rZGlyX2NoZWNrZWRfZmxhZ3MoZGZkLCBwYXRobmFtZSwgZmxhZ3MpICh7CVwKJiM0MzsJc3RydWN0IHN0YXQgX19zdDsJCQkJCQlcCiYjNDM7CWludCBfX2ZkID0gb3BlbmF0X29fbWtkaXIoZGZkLCBwYXRobmFtZSwgZmxhZ3MsIFNfSVJXWFUpOwlcCiYjNDM7CUFTU0VSVF9HRShfX2ZkLCAwKTsJCQkJCQlcCiYjNDM7CUFTU0VSVF9FUShmc3RhdChfX2ZkLCAmYW1wO19fc3QpLCAwKTsJCQkJXAomIzQzOwlFWFBFQ1RfVFJVRShTX0lTRElSKF9fc3Quc3RfbW9kZSkpOwkJCQlcCiYjNDM7CV9fZmQ7CQkJCQkJCQlcCiYjNDM7fSkKJiM0MzsKJiM0MzsjZGVmaW5lIG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoZGZkLCBwYXRobmFtZSkgXAomIzQzOwlvcGVuYXRfb19ta2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIE9fUkRPTkxZKQomIzQzOwomIzQzO0ZJWFRVUkUob3Blbl9vX2NyZWF0X29fZGlyKSB7CiYjNDM7CWNoYXIgZGlycGF0aFtQQVRIX01BWF07CiYjNDM7CWludCBkZmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKG9wZW5fb19jcmVhdF9vX2RpcikKJiM0Mzt7CiYjNDM7CXN0cmNweShzZWxmLSZndDtkaXJwYXRoLCAmIzM0Oy90bXAvb3Blbl9vX2NyZWF0X29fZGlyX3Rlc3QuWFhYWFhYJiMzNDspOwomIzQzOwlBU1NFUlRfTkUobWtkdGVtcChzZWxmLSZndDtkaXJwYXRoKSwgTlVMTCk7CiYjNDM7CXNlbGYtJmd0O2RmZCA9IG9wZW4oc2VsZi0mZ3Q7ZGlycGF0aCwgT19ESVJFQ1RPUlkpOwomIzQzOwlBU1NFUlRfR0Uoc2VsZi0mZ3Q7ZGZkLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihvcGVuX29fY3JlYXRfb19kaXIpCiYjNDM7ewomIzQzOwljbG9zZShzZWxmLSZndDtkZmQpOwomIzQzOwlybWRpcihzZWxmLSZndDtkaXJwYXRoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogRG9lcyBvcGVuX29fY3JlYXRfb19kaXIgcmV0dXJuIGEgZmQgYXQgYWxsPyAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJldHVybnNfZmQpCiYjNDM7ewomIzQzOwlpbnQgZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHNlbGYtJmd0O2RmZCwgJiMzNDtuZXdkaXImIzM0Oyk7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShmZCksIDApOwomIzQzOwlFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O25ld2RpciYjMzQ7LCBBVF9SRU1PVkVESVIpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIGZkIG11c3QgcmVmZXIgdG8gdGhlIGRpcmVjdG9yeSB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQuICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfaXNfY3JlYXRlZF9kaXIpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CXN0cnVjdCBzdGF0IHN0X3ZpYV9mZCwgc3RfdmlhX3BhdGg7CiYjNDM7CWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CiYjNDM7CWZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChzZWxmLSZndDtkZmQsICYjMzQ7Y2hlY2tkaXImIzM0Oyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShmc3RhdChmZCwgJmFtcDtzdF92aWFfZmQpLCAwKTsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL2NoZWNrZGlyJiMzNDssIHNlbGYtJmd0O2RpcnBhdGgpOwomIzQzOwlBU1NFUlRfRVEoc3RhdChwYXRoLCAmYW1wO3N0X3ZpYV9wYXRoKSwgMCk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShzdF92aWFfZmQuc3RfaW5vLCBzdF92aWFfcGF0aC5zdF9pbm8pOwomIzQzOwlFWFBFQ1RfRVEoc3RfdmlhX2ZkLnN0X2Rldiwgc3RfdmlhX3BhdGguc3RfZGV2KTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7CiYjNDM7CUVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIE1pc3NpbmcgcGFyZW50IGNvbXBvbmVudCBtdXN0IGZhaWwgd2l0aCBFTk9FTlQuICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vZW50X21pc3NpbmdfcGFyZW50KQomIzQzO3sKJiM0MzsJRVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKHNlbGYtJmd0O2RmZCwgJiMzNDtub25leGlzdGVudC9jaGlsZCYjMzQ7LCBPX1JET05MWSwgU19JUldYVSksIC0xKTsKJiM0MzsJRVhQRUNUX0VRKGVycm5vLCBFTk9FTlQpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBbiBpbnZhbGlkIGRmZCBtdXN0IGZhaWwgd2l0aCBFQkFERi4gKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlYmFkZikKJiM0Mzt7CiYjNDM7CUVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihGRF9JTlZBTElELCAmIzM0O2JhZGZkaXImIzM0OywgT19SRE9OTFksIFNfSVJXWFUpLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRUJBREYpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBIGRmZCB0aGF0IHBvaW50cyB0byBhIGZpbGUgKG5vdCBhIGRpcmVjdG9yeSkgbXVzdCBmYWlsIHdpdGggRU5PVERJUi4gKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlbm90ZGlyX2RmZCkKJiM0Mzt7CiYjNDM7CWludCBmaWxlX2ZkOwomIzQzOwomIzQzOwlmaWxlX2ZkID0gb3BlbmF0KHNlbGYtJmd0O2RmZCwgJiMzNDtmaWxlJiMzNDssCiYjNDM7CQkJIE9fQ1JFQVQgfCBPX1JET05MWSwgU19JUldYVSk7CiYjNDM7CUFTU0VSVF9HRShmaWxlX2ZkLCAwKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKGZpbGVfZmQsICYjMzQ7c3ViZGlyJiMzNDssIE9fUkRPTkxZLCBTX0lSV1hVKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApOwomIzQzOwlFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O2ZpbGUmIzM0OywgMCksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIE9fRVhDTCB0b2dldGhlciB3aXRoIE9fQ1JFQVR8T19ESVJFQ1RPUlkgc2hvdWxkIHN1Y2NlZWQgaWYgdGhlIHRhcmdldAomIzQzOyAqIGRpcmVjdG9yeSBkb2VzIG5vdCB5ZXQgZXhpc3QuIEFmdGVyIGRpcmVjdG9yeSBjcmVhdGlvbiwgcmVwZWF0aW5nIHRoaXMKJiM0MzsgKiBjYWxsIG11c3QgZmFpbCB3aXRoIEVFWElTVC4KJiM0MzsgKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBvX2V4Y2xfZWV4aXN0KQomIzQzO3sKJiM0MzsJaW50IGV4Y2xkaXJfZmQ7CiYjNDM7CiYjNDM7CWV4Y2xkaXJfZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkX2ZsYWdzKHNlbGYtJmd0O2RmZCwgJiMzNDtleGNsZGlyJiMzNDssIE9fRVhDTCk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihleGNsZGlyX2ZkLCAmIzM0Oy4mIzM0OywgT19FWENMLCBTX0lSV1hVKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVFWElTVCk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShleGNsZGlyX2ZkKSwgMCk7CiYjNDM7CUVYUEVDVF9FUSh1bmxpbmthdChzZWxmLSZndDtkZmQsICYjMzQ7ZXhjbGRpciYjMzQ7LCBBVF9SRU1PVkVESVIpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBPX0NSRUFUfE9fRElSRUNUT1JZIG9uIGEgcGF0aCB0aGF0IGFscmVhZHkgZXhpc3RzIGFzIGEgcmVndWxhciBmaWxlCiYjNDM7ICogbXVzdCBmYWlsIHdpdGggRU5PVERJUi4KJiM0MzsgKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBleGlzdGluZ19maWxlX2Vub3RkaXIpCiYjNDM7ewomIzQzOwlpbnQgZmlsZV9mZDsKJiM0MzsKJiM0MzsJZmlsZV9mZCA9IG9wZW5hdChzZWxmLSZndDtkZmQsICYjMzQ7cmVnZmlsZSYjMzQ7LAomIzQzOwkJCSBPX0NSRUFUIHwgT19SRE9OTFksIFNfSVJXWFUpOwomIzQzOwlBU1NFUlRfR0UoZmlsZV9mZCwgMCk7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihzZWxmLSZndDtkZmQsICYjMzQ7cmVnZmlsZSYjMzQ7LCBPX1JET05MWSwgU19JUldYVSksIC0xKTsKJiM0MzsJRVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKHVubGlua2F0KHNlbGYtJmd0O2RmZCwgJiMzNDtyZWdmaWxlJiMzNDssIDApLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBPX0NSRUFUfE9fRElSRUNUT1JZIGNvbWJpbmVkIHdpdGggYSB3cml0YWJsZSBhY2Nlc3MgbW9kZSBtdXN0IGJlCiYjNDM7ICogcmVqZWN0ZWQ6IGEgZGlyZWN0b3J5IGNhbm5vdCBiZSBvcGVuZWQgZm9yIHdyaXRpbmcuCiYjNDM7ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgcmVqZWN0c193cml0YWJsZV9hY2NfbW9kZSkKJiM0Mzt7CiYjNDM7CUVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihzZWxmLSZndDtkZmQsICYjMzQ7cmR3cmRpciYjMzQ7LCBPX1JEV1IsIFNfSVJXWFUpLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRU5PVERJUik7CiYjNDM7CS8qIENsZWFuIHVwIGlmIHRoZSBrZXJuZWwgY3JlYXRlZCB0aGUgZGlyZWN0b3J5IGFueXdheS4gKi8KJiM0MzsJdW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3Jkd3JkaXImIzM0OywgQVRfUkVNT1ZFRElSKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBvcGVuYXQoT19DUkVBVHxPX0RJUkVDVE9SWSkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIHNob3VsZCB3b3JrLgomIzQzOyAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHRyYWlsaW5nX3NsYXNoKQomIzQzO3sKJiM0MzsJaW50IGZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChzZWxmLSZndDtkZmQsICYjMzQ7bmV3ZGlyLyYjMzQ7KTsKJiM0MzsJRVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7CiYjNDM7CUVYUEVDVF9FUSh1bmxpbmthdChzZWxmLSZndDtkZmQsICYjMzQ7bmV3ZGlyJiMzNDssIEFUX1JFTU9WRURJUiksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIG9wZW5hdChPX0NSRUFUKSB3aXRoIGEgdHJhaWxpbmcgc2xhc2ggYnV0IHdpdGhvdXQgT19ESVJFQ1RPUlkKJiM0MzsgKiBtdXN0IGZhaWwgd2l0aCBFSVNESVIgYW5kIG11c3Qgbm90IGNyZWF0ZSBhbnl0aGluZyBhdCB0aGUgcGF0aC4KJiM0MzsgKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCB0cmFpbGluZ19zbGFzaF9ub19vX2RpcikKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsJc3RydWN0IHN0YXQgc3Q7CiYjNDM7CiYjNDM7CWZkID0gb3BlbmF0KHNlbGYtJmd0O2RmZCwgJiMzNDt0cmFpbGluZy8mIzM0OywgT19DUkVBVCB8IE9fUkRPTkxZLCBTX0lSV1hVKTsKJiM0MzsJRVhQRUNUX0VRKGZkLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRUlTRElSKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKGZzdGF0YXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3RyYWlsaW5nJiMzNDssICZhbXA7c3QsIDApLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRU5PRU5UKTsKJiM0MzsKJiM0MzsJLyogQmVzdC1lZmZvcnQgY2xlYW51cCBpbiBjYXNlIHRoZSBrZXJuZWwgbGVmdCBhIGZpbGUgYmVoaW5kLiAqLwomIzQzOwlpZiAoZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJdW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3RyYWlsaW5nJiMzNDssIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSByZXR1cm5lZCBmZCBtdXN0IGJlIHVzYWJsZSBhcyBhIGRmZCBmb3IgZnVydGhlciAqYXQoKSBjYWxscy4KJiM0MzsgKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBmZF91c2FibGVfYXNfZGZkKQomIzQzO3sKJiM0MzsJaW50IHBhcmVudF9mZCwgY2hpbGRfZmQ7CiYjNDM7CWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CiYjNDM7CXBhcmVudF9mZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3BhcmVudCYjMzQ7KTsKJiM0MzsJY2hpbGRfZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHBhcmVudF9mZCwgJiMzNDtjaGlsZCYjMzQ7KTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKGNsb3NlKGNoaWxkX2ZkKSwgMCk7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShwYXJlbnRfZmQpLCAwKTsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL3BhcmVudC9jaGlsZCYjMzQ7LCBzZWxmLSZndDtkaXJwYXRoKTsKJiM0MzsJRVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL3BhcmVudCYjMzQ7LCBzZWxmLSZndDtkaXJwYXRoKTsKJiM0MzsJRVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9IQVJORVNTX01BSU4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3dyYXBwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy93cmFwcGVycy5oCmluZGV4IDQyMGFlNGY5MDhjZjIuLmFiZTViODVjZWJkY2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3dyYXBwZXJzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvd3JhcHBlcnMuaApAQCAtMTMsNiAmIzQzOzEzLDEwIEBACiAjZGVmaW5lIFNUQVRYX01OVF9JRF9VTklRVUUgMHgwMDAwNDAwMFUgLyogV2FudC9nb3QgZXh0ZW5kZWQgc3R4X21vdW50X2lkICovCiAjZW5kaWYKIAomIzQzOyNpZm5kZWYgRkRfSU5WQUxJRAomIzQzOyNkZWZpbmUgRkRfSU5WQUxJRCAtMTAwMDkKJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyBpbmxpbmUgaW50IHN5c19mc29wZW4oY29uc3QgY2hhciAqZnNuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJcmV0dXJuIHN5c2NhbGwoX19OUl9mc29wZW4sIGZzbmFtZSwgZmxhZ3MpOwpAQCAtMTA1LDQgJiM0MzsxMDksMTEgQEAgc3RhdGljIGlubGluZSBpbnQgc3lzX29wZW5fdHJlZShpbnQgZGZkLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgaW50IGZsYWcKIAlyZXR1cm4gc3lzY2FsbChfX05SX29wZW5fdHJlZSwgZGZkLCBmaWxlbmFtZSwgZmxhZ3MpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgb3BlbmF0X29fbWtkaXIoaW50IGRmZCwgY29uc3QgY2hhciAqcGF0aG5hbWUsCiYjNDM7CQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN5c2NhbGwoX19OUl9vcGVuYXQsIGRmZCwgcGF0aG5hbWUsCiYjNDM7CQkgICAgICAgZmxhZ3MgfCBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQsIG1vZGUpOwomIzQzO30KJiM0MzsKICNlbmRpZgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBFdmFsdWF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJdCYjMzk7cyBmb2N1c2VkIG9uIGVuYWJsaW5nIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgIHZpYSBgb3BlbmF0YCwgd2hpY2ggaXMgYSBuZWF0IGZlYXR1cmUuIFRoZSBjaGFuZ2VzIHRvdWNoIGEgbG90IG9mIGNvZGU6IHRoZSBWRlMsIHBsdXMgYSBidW5jaCBvZiBmaWxlc3lzdGVtcyDigJMgOXAsIENlcGgsIEZVU0UsIEdGUzIsIE5GUywgU01CLCB2Ym94c2YuIFdlJiMzOTtyZSBsb29raW5nIGF0IGNoYW5nZXMgaW4gYHZmc19pbm9kZS5jYCwgdmFyaW91cyBkaXJlY3RvcnkgaGFuZGxpbmcgaW4gdGhlIGZpbGUgc3lzdGVtcywgYG5hbWVpLmNgLCBgb3Blbi5jYCwgYW5kIGEgbmV3IHNlbGZ0ZXN0LgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgY2hhbmdpbmcuIE1vc3RseSwgdGhlcmUgYXJlIHRoZXNlIGBPX0lTX01LRElSKGZsYWdzKWAgY2hlY2tzIGFuZCBmbGFnIG1hbmlwdWxhdGlvbnMgaW4gdGhvc2UgYCpfYXRvbWljX29wZW5gIGZ1bmN0aW9ucyB0byB0cmVhdCB0aGUgcmVxdWVzdCB0byBjcmVhdGUgYSBkaXJlY3RvcnkgYXMgYE9fQ1JFQVRgICp3aXRob3V0KiBgT19ESVJFQ1RPUllgIGFzIHRoZSBjb21tb24gYmVoYXZpb3Igb2YgdGhlIHBhdGNoLgoKSW4gYG5hbWVpLmNgLCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIHN0aWNreSBiaXQgaGFuZGxpbmcsIGhvdyBkaXJlY3RvcnkgY3JlYXRpb24gaXMgaGFuZGxlZCBpbiBwZXJtaXNzaW9uIGNoZWNrcyBhbmQgdGhlIG1vZGUgaXMgc2V0LCBhcyB3ZWxsIGFzIGhhbmRsaW5nIGBmc25vdGlmeWAgZXZlbnRzIGFuZCB0aGUga2V5IGBsb29rdXBfb3BlbmAgY2FsbHMuIEl0IGludHJvZHVjZXMgYHZmc19ta2Rpcl9ub19wZXJtYCBhbmQgYHZmc19ta2RpcmAuIEFsc28sIGl0IGNhbGxzIGB2ZnNfbWtkaXJfbm9fcGVybWAgd2hlcmUgaXQgdXNlZCB0byBjYWxsIGB2ZnNfY3JlYXRlX25vX3Blcm1gLgoKYG9wZW4uY2AgaXMgdXBkYXRlZCB0byBzZXQgdGhlIG1vZGUgYW5kIGhhbmRsZSB0aGUgdG1wZmlsZSBmbGFnIGFuZCByZXR1cm4gYC1FTk9URElSYCBjb3JyZWN0bHksIGJhc2VkIG9uIHRoZXNlIG5ldyBmbGFncy4KCldlJiMzOTt2ZSBnb3QgdGhlIG5ldyBgT19JU19NS0RJUmAgbWFjcm8gZGVmaW5lZCBpbiBgZmNudGwuaGAgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0LgoKU28sIGFtIEkgc2VlaW5nIG5ldyBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcz8gTm90IGZyb20gdGhlIGluaXRpYWwgcmV2aWV3LiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVzZXItc3BhY2UgZXhwb3NlZCBkYXRhIHN0cnVjdHVyZXMsIG9yIGFsbG9jYXRpb25zIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGludHJvZHVjZSBhbnkgbmV3IGJ1ZmZlcnMgb3IgYW55IGNvcHkgY2FsbHMuIEl0JiMzOTtzIHByaW1hcmlseSBjb250cm9sIGZsb3cgYW5kIGZsYWcgaGFuZGxpbmcsIG1ha2luZyBpdCBhIGxvZ2ljIGNoYW5nZS4gSWYgdGhlcmUgYXJlIGJ1Z3MsIHRoZXkmIzM5O3JlIG1vc3QgbGlrZWx5IGxvZ2ljIGVycm9ycywgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgdXN1YWwgYnVnIGRldGVjdG9ycyAqc2hvdWxkKiBjYXRjaCB0aG9zZS4KCk9rYXksIGxldCYjMzk7cyBqdXN0IG1ha2UgKnN1cmUqIHdlJiMzOTtyZSBub3QgYWNjaWRlbnRhbGx5IHVzaW5nIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYW55d2hlcmUuIGB2ZnNfbWtkaXJfbm9fcGVybWAgdGFrZXMgYWxsIHRoZSBleHBlY3RlZCBhcmd1bWVudHM6IGFuIGlub2RlLCBkZW50cnksIG1vZGUsIGV0Yy4gYW5kIGNhbGxzIHRoZSBpbm9kZSYjMzk7cyBta2RpciBtZXRob2QuIEFsbCBnb29kLgoKTm93IGluIGBsb29rdXBfb3BlbmA6IElmIHRoZSBjcmVhdGVfZGlyIGZsYWcgaXMgc2V0LCBpdCBjYWxscyBgdmZzX21rZGlyX25vX3Blcm1gLiBJdCB1c2VzIHRoZSBgZGVsZWdhdGVkX2lub2RlYCBzdHJ1Y3QsIGRlZmluZWQgYXMgYHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlO2AuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCB2YXJpYWJsZSBpbiBgZnMvbmFtZWkuY2Agc291cmNlIGNvZGUuIEl0IHNlZW1zIGxpa2UgdGhlIHZhcmlhYmxlIGlzIGRlY2xhcmVkIGFuZCB1c2VkIGluIGEgd2F5IHRoYXQgKnNob3VsZCogYmUgc2FmZS4KCkJhc2VkIG9uIHRoZSBldmlkZW5jZSBJIHNlZSwgdGhpcyBkb2VzICpub3QqIGxvb2sgbGlrZSBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uYW1laS5jPTQ0OTc9c3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5mcy9uYW1laS5jLTQ0OTkte1xuZnMvbmFtZWkuYzo0NTAwOlx0c3RydWN0IGRlbGVnYXRlZF9pbm9kZSBkZWxlZ2F0ZWRfaW5vZGUgPSB7IH07XG5mcy9uYW1laS5jLTQ1MDEtXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcDtcbi0tXG5mcy9uYW1laS5jPTU1MTE9aW50IGZpbGVuYW1lX21rZGlyYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bW9kZV90IG1vZGUpXG4tLVxuZnMvbmFtZWkuYy01NTE2LVx0dW5zaWduZWQgaW50IGxvb2t1cF9mbGFncyA9IExPT0tVUF9ESVJFQ1RPUlk7XG5mcy9uYW1laS5jOjU1MTc6XHRzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlIGRlbGVnYXRlZF9pbm9kZSA9IHsgfTtcbmZzL25hbWVpLmMtNTUxOC1cbi0tXG5mcy9uYW1laS5jPTU2MTc9aW50IGZpbGVuYW1lX3JtZGlyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSlcbi0tXG5mcy9uYW1laS5jLTU2MjQtXHR1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzID0gMDtcbmZzL25hbWVpLmM6NTYyNTpcdHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlID0geyB9O1xuZnMvbmFtZWkuYy01NjI2LXJldHJ5OlxuLS1cbmZzL25hbWVpLmM9NTc2MT1pbnQgZmlsZW5hbWVfdW5saW5rYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKVxuLS1cbmZzL25hbWVpLmMtNTc2OC1cdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG5mcy9uYW1laS5jOjU3Njk6XHRzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlIGRlbGVnYXRlZF9pbm9kZSA9IHsgfTtcbmZzL25hbWVpLmMtNTc3MC1cdHVuc2lnbmVkIGludCBsb29rdXBfZmxhZ3MgPSAwO1xuLS1cbmZzL25hbWVpLmM9NTg4NT1pbnQgZmlsZW5hbWVfc3ltbGlua2F0KHN0cnVjdCBmaWxlbmFtZSAqZnJvbSwgaW50IG5ld2RmZCwgc3RydWN0IGZpbGVuYW1lICp0bylcbi0tXG5mcy9uYW1laS5jLTU4OTAtXHR1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzID0gMDtcbmZzL25hbWVpLmM6NTg5MTpcdHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlID0geyB9O1xuZnMvbmFtZWkuYy01ODkyLVxuLS1cbmZzL25hbWVpLmM9NjAzMz1pbnQgZmlsZW5hbWVfbGlua2F0KGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqb2xkLFxuLS1cbmZzL25hbWVpLmMtNjAzOC1cdHN0cnVjdCBwYXRoIG9sZF9wYXRoLCBuZXdfcGF0aDtcbmZzL25hbWVpLmM6NjAzOTpcdHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlID0geyB9O1xuZnMvbmFtZWkuYy02MDQwLVx0aW50IGhvdyA9IDA7XG4tLVxuZnMvbmFtZWkuYz02MzMxPWludCBmaWxlbmFtZV9yZW5hbWVhdDIoaW50IG9sZGRmZCwgc3RydWN0IGZpbGVuYW1lICpmcm9tLFxuLS1cbmZzL25hbWVpLmMtNjMzNy1cdGVudW0gbGFzdF90eXBlIG9sZF90eXBlLCBuZXdfdHlwZTtcbmZzL25hbWVpLmM6NjMzODpcdHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlID0geyB9O1xuZnMvbmFtZWkuYy02MzM5LVx0dW5zaWduZWQgaW50IGxvb2t1cF9mbGFncyA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjIyCgkJCQkJCQlvdXRwdXQ6IDI2NAoJCQkJCQkJdGhvdWdodHM6IDQwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBPcGVuYXQgT19DUkVBVCB8IE9fRElSRUNUT1JZIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyBsb29rcyBjbGVhbiBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gVGhleSYjMzk7cmUgYWRkaW5nIGEgZmVhdHVyZSwgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAsIHRvIGBvcGVuYXRgLCB3aGljaCBpcyBzZW5zaWJsZSBmb3IgbWFuYWdpbmcgZGlyZWN0b3J5IGNyZWF0aW9uLiBUaGUgYGRlbGVnYXRlZF9pbm9kZWAgaXMgaW5pdGlhbGl6ZWQgYXMgYHsgfWAsIHNvIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGEgY2xlYW4gc2xhdGUgdGhlcmUuCgpUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBmbGFnIGhhbmRsaW5nIGFuZCBjb250cm9sIGZsb3cgd2l0aGluIHRoZSBWRlMgYW5kIGZpbGVzeXN0ZW1zLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhYm91dCByb3V0aW5nIGRpcmVjdG9yeSBjcmVhdGlvbiByZXF1ZXN0cyB2aWEgYG9wZW5hdGAgbW9yZSBjb25zaXN0ZW50bHkuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoaW5ncyBsaWtlIHRoZSBgT19JU19NS0RJUmAgbWFjcm8sIG1vZGlmaWNhdGlvbnMgdG8gYGJ1aWxkX29wZW5fZmxhZ3MoKWAsIGFuZCB1cGRhdGVzIHRvIGZ1bmN0aW9ucyBsaWtlIGBsb29rdXBfb3BlbigpYCwgYHZmc19ta2RpcigpYCwgYW5kIGBhdG9taWNfb3BlbigpYC4gSW1wb3J0YW50bHksIGl0IHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgZW5zdXJpbmcgZGlyZWN0b3J5IGNyZWF0aW9uIGdvZXMgZG93biB0aGUgcHJvcGVyLCBta2Rpci1zcGVjaWZpYyBwYXRocywgbGV2ZXJhZ2luZyBleGlzdGluZyBtZWNoYW5pc21zIGxpa2UgYHZmc19ta2Rpcl9ub19wZXJtKClgIGFuZCBgc2VjdXJpdHlfcGF0aF9ta2RpcigpYC4KClRoaW5raW5nIGFib3V0IHBvdGVudGlhbCByaXNrcywgYmVjYXVzZSBpdCBpcyBwdXJlbHkgbG9naWNhbCBjaGFuZ2VzLCBhbmQgaXQmIzM5O3Mgbm90IGludHJvZHVjaW5nIGNvbXBsZXggbmV3IGRhdGEgc3RydWN0dXJlcyBvciBkaXJlY3RseSBleHBvc2luZyBpbnRlcm5hbCBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZSB0cmFkaXRpb25hbCBtZW1vcnkgZXJyb3IgZGV0ZWN0b3JzLCBwYXJ0aWN1bGFybHkgS0FTQU4sIGFyZSBsaWtlbHkgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGlzc3Vlcy4gQW55IGJ1Z3MgYXJlIG11Y2ggbW9yZSBsaWtlbHkgdG8gbWFuaWZlc3QgYXMgbG9naWMgZXJyb3JzLCBkZXJlZmVyZW5jZXMsIG9yIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLiBUaGVzZSBhcmUgYWxsIHRoaW5ncyB0aGF0IEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGZsYWcgZWZmZWN0aXZlbHkuIFRoZSBkZXNpZ24gc2VlbXMgc291bmQgYW5kIGF2b2lkcyB0aGUgcGl0ZmFsbHMgdGhhdCB3b3VsZCB3YXJyYW50IEtNU0FOLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIFZGUyBhbmQgdmFyaW91cyBmaWxlc3lzdGVtcyB0byBzdXBwb3J0IGNyZWF0aW5nIGRpcmVjdG9yaWVzIHZpYSBgb3BlbmF0KClgIHdpdGggdGhlIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgIGZsYWdzLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBhZGRpbmcgdGhlIGBPX0lTX01LRElSYCBtYWNybywgbW9kaWZ5aW5nIGBidWlsZF9vcGVuX2ZsYWdzKClgIHRvIGhhbmRsZSB0aGUgbmV3IGZsYWcgY29tYmluYXRpb24sIGFuZCB1cGRhdGluZyBgbG9va3VwX29wZW4oKWAgYW5kIGB2ZnNfbWtkaXIoKWAgcGF0aHMgaW4gYGZzL25hbWVpLmNgIHRvIHJvdXRlIGRpcmVjdG9yeSBjcmVhdGlvbiByZXF1ZXN0cyB0byBgdmZzX21rZGlyX25vX3Blcm0oKWAgaW5zdGVhZCBvZiByZWd1bGFyIGZpbGUgY3JlYXRpb24gZnVuY3Rpb25zLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgbG9naWNhbCwgYWx0ZXJpbmcgY29udHJvbCBmbG93IGFuZCBmbGFnIGhhbmRsaW5nIHdpdGhpbiB0aGUgVkZTIGxheWVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbGwgdmFyaWFibGVzIHVzZWQgKHN1Y2ggYXMgYGRlbGVnYXRlZF9pbm9kZWApIGFyZSBwcm9wZXJseSB6ZXJvLWluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgVkZTIGFuZCB2YXJpb3VzIGZpbGVzeXN0ZW1zIHRvIHN1cHBvcnQgY3JlYXRpbmcgZGlyZWN0b3JpZXMgdmlhIGBvcGVuYXQoKWAgd2l0aCB0aGUgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAgZmxhZ3MuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIGFkZGluZyB0aGUgYE9fSVNfTUtESVJgIG1hY3JvLCBtb2RpZnlpbmcgYGJ1aWxkX29wZW5fZmxhZ3MoKWAgdG8gaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbiwgYW5kIHVwZGF0aW5nIGBsb29rdXBfb3BlbigpYCBhbmQgYHZmc19ta2RpcigpYCBwYXRocyBpbiBgZnMvbmFtZWkuY2AgdG8gcm91dGUgZGlyZWN0b3J5IGNyZWF0aW9uIHJlcXVlc3RzIHRvIGB2ZnNfbWtkaXJfbm9fcGVybSgpYCBpbnN0ZWFkIG9mIHJlZ3VsYXIgZmlsZSBjcmVhdGlvbiBmdW5jdGlvbnMuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBsb2dpY2FsLCBhbHRlcmluZyBjb250cm9sIGZsb3cgYW5kIGZsYWcgaGFuZGxpbmcgd2l0aGluIHRoZSBWRlMgbGF5ZXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuIEFsbCB2YXJpYWJsZXMgdXNlZCAoc3VjaCBhcyBgZGVsZWdhdGVkX2lub2RlYCkgYXJlIHByb3Blcmx5IHplcm8taW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIGxvZ2ljIGVycm9ycywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNDoxMC4yMjk4NzM1MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzY4NzgwMDQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJWQk9YU0ZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZnNfbWtkaXJcIixcbiAgICBcInZmc19jcmVhdGVcIixcbiAgICBcInZmc19sb29rdXBfb3BlblwiLFxuICAgIFwiZGVudHJ5X2NyZWF0ZVwiLFxuICAgIFwiZmlsZW5hbWVfbWtkaXJhdFwiLFxuICAgIFwiZmlsZW5hbWVfdW5saW5rYXRcIixcbiAgICBcImZpbGVuYW1lX3JlbmFtZWF0MlwiLFxuICAgIFwidjlmc192ZnNfYXRvbWljX29wZW5cIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxcIixcbiAgICBcImNlcGhfYXRvbWljX29wZW5cIixcbiAgICBcImZ1c2VfYXRvbWljX29wZW5cIixcbiAgICBcImdmczJfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3BlblwiLFxuICAgIFwibmZzX2F0b21pY19vcGVuX3YyM1wiLFxuICAgIFwiY2lmc19hdG9taWNfb3BlblwiLFxuICAgIFwidmJveHNmX2Rpcl9hdG9taWNfb3BlblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBWRlMgYW5kIHZhcmlvdXMgZmlsZXN5c3RlbXMgdG8gc3VwcG9ydCBjcmVhdGluZyBkaXJlY3RvcmllcyB2aWEgYG9wZW5hdCgpYCB3aXRoIHRoZSBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCBmbGFncy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgYWRkaW5nIHRoZSBgT19JU19NS0RJUmAgbWFjcm8sIG1vZGlmeWluZyBgYnVpbGRfb3Blbl9mbGFncygpYCB0byBoYW5kbGUgdGhlIG5ldyBmbGFnIGNvbWJpbmF0aW9uLCBhbmQgdXBkYXRpbmcgYGxvb2t1cF9vcGVuKClgIGFuZCBgdmZzX21rZGlyKClgIHBhdGhzIGluIGBmcy9uYW1laS5jYCB0byByb3V0ZSBkaXJlY3RvcnkgY3JlYXRpb24gcmVxdWVzdHMgdG8gYHZmc19ta2Rpcl9ub19wZXJtKClgIGluc3RlYWQgb2YgcmVndWxhciBmaWxlIGNyZWF0aW9uIGZ1bmN0aW9ucy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgbG9naWNhbCwgYWx0ZXJpbmcgY29udHJvbCBmbG93IGFuZCBmbGFnIGhhbmRsaW5nIHdpdGhpbiB0aGUgVkZTIGxheWVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbGwgdmFyaWFibGVzIHVzZWQgKHN1Y2ggYXMgYGRlbGVnYXRlZF9pbm9kZWApIGFyZSBwcm9wZXJseSB6ZXJvLWluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAgZm9yIGBvcGVuYXQoKWAgdG8gYXRvbWljYWxseSBjcmVhdGUgYSBkaXJlY3RvcnkgYW5kIHJldHVybiBhIGZpbGUgZGVzY3JpcHRvci4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aCByZXNvbHV0aW9uIGFuZCBjcmVhdGlvbiBsb2dpYyBpbiBgZnMvbmFtZWkuY2AgYW5kIGBmcy9vcGVuLmNgLCBhbmQgdXBkYXRlcyBzZXZlcmFsIGZpbGVzeXN0ZW1zJyBgYXRvbWljX29wZW5gIGltcGxlbWVudGF0aW9ucyB0byBoYW5kbGUgdGhlIG5ldyBmbGFnIGNvbWJpbmF0aW9uLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNDoxMC4yMjk4Nzg2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMjg5NzQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ2OTc0ZjJkYWUwM2EzMTRlZWRjZDIyNTE0OWUxMjZiNjYwOTRiNGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMjMgMTY6MTQ6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuY1xcbmluZGV4IDM4Mjk1NTRjYTM2OTIuLmIxZTA4MjNjODdiNTcgMTAwNjQ0XFxuLS0tIGEvZnMvOXAvdmZzX2lub2RlLmNcXG4rKysgYi9mcy85cC92ZnNfaW5vZGUuY1xcbkBAIC03NzYsNiArNzc2LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4gXFx0aW50IHA5X29tb2RlO1xcbiBcXG4rXFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxcbitcXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XFxuIFxcdFxcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7XFxuIFxcdFxcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcXG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuYyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcXG5pbmRleCAxMTZiMjllOTVmMjFlLi42NGUwYWJhMDhkYTE2IDEwMDY0NFxcbi0tLSBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcXG4rKysgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jXFxuQEAgLTIzOCw2ICsyMzgsOSBAQCB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7XFxuIFxcdHN0cnVjdCBwb3NpeF9hY2wgKnBhY2wgPSBOVUxMLCAqZGFjbCA9IE5VTEw7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcXG4gXFx0XFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdjlmc192ZnNfbG9va3VwKGRpciwgZGVudHJ5LCAwKTtcXG4gXFx0XFx0aWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKVxcbmRpZmYgLS1naXQgYS9mcy9jZXBoL2ZpbGUuYyBiL2ZzL2NlcGgvZmlsZS5jXFxuaW5kZXggYTRhMmE0YjZhMDI3ZC4uNjIxNjNiN2VjYTVmOSAxMDA2NDRcXG4tLS0gYS9mcy9jZXBoL2ZpbGUuY1xcbisrKyBiL2ZzL2NlcGgvZmlsZS5jXFxuQEAgLTgxMiw2ICs4MTIsOSBAQCBpbnQgY2VwaF9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHQgICAgICBkaXIsIGNlcGhfdmlub3AoZGlyKSwgZGVudHJ5LCBkZW50cnksXFxuIFxcdCAgICAgIGRfdW5oYXNoZWQoZGVudHJ5KSA/IFxcXCJ1bmhhc2hlZFxcXCIgOiBcXFwiaGFzaGVkXFxcIiwgZmxhZ3MsIG1vZGUpO1xcbiBcXG4rXFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxcbitcXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGlmIChkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4gXFx1MDAzZSBOQU1FX01BWClcXG4gXFx0XFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuY1xcbmluZGV4IGQ0ZTAwMjk4MTBjMGYuLjU1ZDU4NDRlMjY1NTkgMTAwNjQ0XFxuLS0tIGEvZnMvZnVzZS9kaXIuY1xcbisrKyBiL2ZzL2Z1c2UvZGlyLmNcXG5AQCAtOTM1LDYgKzkzNSw5IEBAIHN0YXRpYyBpbnQgZnVzZV9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZW50cnksXFxuIFxcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XFxuIFxcdHN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihkaXIpO1xcbiBcXG4rXFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxcbitcXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGlmIChmdXNlX2lzX2JhZChkaXIpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuY1xcbmluZGV4IGYzNjE4NzZjNTU4MzMuLjNlZTEzNjBmMWJjMjcgMTAwNjQ0XFxuLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jXFxuKysrIGIvZnMvZ2ZzMi9pbm9kZS5jXFxuQEAgLTEzODYsNiArMTM4Niw5IEBAIHN0YXRpYyBpbnQgZ2ZzMl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiB7XFxuIFxcdGJvb2wgZXhjbCA9ICEhKGZsYWdzIFxcdTAwMjYgT19FWENMKTtcXG4gXFxuK1xcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcXG4rXFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfk9fQ1JFQVQ7XFxuK1xcbiBcXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xcbiBcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkID0gX19nZnMyX2xvb2t1cChkaXIsIGRlbnRyeSwgZmlsZSk7XFxuIFxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9PUEVORUQpIHtcXG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcXG5pbmRleCAyMGE2NTM0ZWEzZWZmLi5lMWE4ZjE4Mzg1YTUyIDEwMDY0NFxcbi0tLSBhL2ZzL25hbWVpLmNcXG4rKysgYi9mcy9uYW1laS5jXFxuQEAgLTEzODIsMTMgKzEzODIsMTMgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxcbiBcXG4gLyoqXFxuICAqIG1heV9jcmVhdGVfaW5fc3RpY2t5IC0gQ2hlY2sgd2hldGhlciBhbiBPX0NSRUFUIG9wZW4gaW4gYSBzdGlja3kgZGlyZWN0b3J5XFxuLSAqXFx0XFx0XFx0ICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcyB0aGF0IGFscmVhZHlcXG4tICpcXHRcXHRcXHQgIGV4aXN0LlxcbisgKlxcdFxcdFxcdCAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdCwgb24gZmlsZXMvZGlyZWN0b3JpZXMgdGhhdFxcbisgKlxcdFxcdFxcdCAgYWxyZWFkeSBleGlzdC5cXG4gICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXFxuICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGFcXG4gICogQGlub2RlOiB0aGUgaW5vZGUgb2YgdGhlIGZpbGUgdG8gb3BlblxcbiAgKlxcbi0gKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZSkgd2hlbjpcXG4rICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUvZGlyZWN0b3J5KSB3aGVuOlxcbiAgKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkXFxuICAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0c1xcbiAgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxcbkBAIC0xNDE2LDYgKzE0MTYsMTQgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuIFxcdGlmIChsaWtlbHkoIShkaXJfbW9kZSBcXHUwMDI2IFNfSVNWVFgpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUaGVyZSBpcyBubyBzZXBhcmF0ZSBzeXNjdGwgZm9yIGRpcmVjdG9yeSBjcmVhdGlvbiBpbiBzdGlja3lcXG4rXFx0ICogZm9sZGVycy4gVGhlcmVmb3JlLCBmb3IgdGhlIFNfSVNESVIgY2FzZSwgZGlzYWJsaW5nXFxuK1xcdCAqIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhciBpcyBub3QgZW5vdWdoIHRvIGFsbG93IGNyZWF0aW5nIGFcXG4rXFx0ICogZGlyZWN0b3J5IGluIGEgc3RpY2t5IGZvbGRlciwgYmVjYXVzZSB0aGF0IG1heSBzdXJwcmlzZSB1c2Vyc1xcbitcXHQgKiBub3QgZXhwZWN0aW5nIHRoYXQgT19DUkVBVHxPX0RJUkVDVE9SWSBpcyBwb3NzaWJsZSBvbiBuZXdlclxcbitcXHQgKiBrZXJuZWxzLlxcbitcXHQgKi9cXG4gXFx0aWYgKFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcilcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0xNDQ3LDYgKzE0NTUsMTIgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJzdGlja3lfY3JlYXRlX3JlZ3VsYXJcXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuK1xcdFxcdFxcdGF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwic3RpY2t5X2NyZWF0ZV9kaXJcXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTI3ODEsOSArMjc5NSwxNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncylcXG4gXFx0cmV0dXJuIHM7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKGNvbnN0IHN0cnVjdCBxc3RyICpsYXN0KVxcbit7XFxuK1xcdC8qIGxhc3QtXFx1MDAzZWxlbiBpcyBzZXQgYnkgaGFzaF9uYW1lKCkgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudFxcbitcXHQgKiBjb21wb25lbnQgLVxcdTAwM2VuYW1lLCB0ZXJtaW5hdGluZyB3aXRoICcvJyBvciBhIE5VTCBjaGFyYWN0ZXIuICovXFxuK1xcdHJldHVybiAoYm9vbClsYXN0LVxcdTAwM2VuYW1lW2xhc3QtXFx1MDAzZWxlbl07XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbG9va3VwX2xhc3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQpXFxuIHtcXG4tXFx0aWYgKG5kLVxcdTAwM2VsYXN0X3R5cGUgPT0gTEFTVF9OT1JNIFxcdTAwMjZcXHUwMDI2IG5kLVxcdTAwM2VsYXN0Lm5hbWVbbmQtXFx1MDAzZWxhc3QubGVuXSlcXG4rXFx0aWYgKG5kLVxcdTAwM2VsYXN0X3R5cGUgPT0gTEFTVF9OT1JNIFxcdTAwMjZcXHUwMDI2IHRyYWlsaW5nX3NsYXNoZXMoXFx1MDAyNm5kLVxcdTAwM2VsYXN0KSlcXG4gXFx0XFx0bmQtXFx1MDAzZWZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZO1xcbiBcXG4gXFx0cmV0dXJuIHdhbGtfY29tcG9uZW50KG5kLCBXQUxLX1RSQUlMSU5HKTtcXG5AQCAtNDE1OSw2ICs0MTgwLDI0IEBAIHN0YXRpYyBpbmxpbmUgdW1vZGVfdCB2ZnNfcHJlcGFyZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRyZXR1cm4gbW9kZTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZVxcbitpbnQgdmZzX2NyZWF0ZV9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdCAgICAgICB1bW9kZV90IG1vZGUsIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRpKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZSAqZGlyID0gZF9pbm9kZShkZW50cnktXFx1MDAzZWRfcGFyZW50KTtcXG4rXFx0aW50IGVycm9yO1xcbitcXG4rXFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0ZXJyb3IgPSBkaXItXFx1MDAzZWlfb3AtXFx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xcbitcXHRpZiAoIWVycm9yKVxcbitcXHRcXHRmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpO1xcbitcXG4rXFx0cmV0dXJuIGVycm9yO1xcbit9XFxuK1xcbiAvKipcXG4gICogdmZzX2NyZWF0ZSAtIGNyZWF0ZSBuZXcgZmlsZVxcbiAgKiBAaWRtYXA6XFx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxcbkBAIC00MTkxLDEzICs0MjMwLDggQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbiBcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbi1cXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcXG4tXFx0aWYgKGVycm9yKVxcbi1cXHRcXHRyZXR1cm4gZXJyb3I7XFxuLVxcdGVycm9yID0gZGlyLVxcdTAwM2VpX29wLVxcdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG4tXFx0aWYgKCFlcnJvcilcXG4tXFx0XFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcXG4tXFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0cmV0dXJuIHZmc19jcmVhdGVfbm9fcGVybShpZG1hcCwgZGVudHJ5LCBtb2RlLCBkaSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh2ZnNfY3JlYXRlKTtcXG4gXFxuQEAgLTQzMTQsMjEgKzQzNDgsNDEgQEAgc3RhdGljIGlubGluZSBpbnQgb3Blbl90b19uYW1laV9mbGFncyhpbnQgZmxhZylcXG4gXFxuIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgcGF0aCAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdHVtb2RlX3QgbW9kZSlcXG4rXFx0XFx0XFx0aW50IG9wZW5fZmxhZywgdW1vZGVfdCBtb2RlKVxcbiB7XFxuLVxcdGludCBlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX2lub2RlO1xcbitcXHRib29sIGNyZWF0ZV9kaXIgPSBPX0lTX01LRElSKG9wZW5fZmxhZyk7XFxuK1xcdGludCBlcnJvcjtcXG4rXFxuK1xcdGlmIChjcmVhdGVfZGlyKVxcbitcXHRcXHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXG4gXFx0aWYgKCFmc3VpZGdpZF9oYXNfbWFwcGluZyhkaXItXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9zYiwgaWRtYXApKVxcbiBcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4gXFxuLVxcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfaW5vZGUsXFxuLVxcdFxcdFxcdFxcdCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XFxuK1xcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXG4tXFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXItXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0aWYgKGNyZWF0ZV9kaXIpXFxuK1xcdFxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpcl9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcXG4rXFxuK1xcdHJldHVybiBlcnJvcjtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1bW9kZV90IG9fY3JlYXRlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBpbm9kZSAqZGlyLCBpbnQgb3Blbl9mbGFnLCB1bW9kZV90IG1vZGUpXFxuK3tcXG4rXFx0aWYgKE9fSVNfTUtESVIob3Blbl9mbGFnKSlcXG4rXFx0XFx0cmV0dXJuIHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JUldYVUdPIHwgU19JU1ZUWCwgU19JRkRJUik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0dXJuIHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTQzNjQsOCArNDQxOCw5IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5XFxuIFxcbiBcXHRmaWxlLVxcdTAwM2VfX2ZfcGF0aC5kZW50cnkgPSBERU5UUllfTk9UX1NFVDtcXG4gXFx0ZmlsZS1cXHUwMDNlX19mX3BhdGgubW50ID0gcGF0aC1cXHUwMDNlbW50O1xcbitcXG4gXFx0ZXJyb3IgPSBkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWF0b21pY19vcGVuKGRpcl9pbm9kZSwgZGVudHJ5LCBmaWxlLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpLCBtb2RlKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBvcGVuX3RvX25hbWVpX2ZsYWdzKG9wZW5fZmxhZyksIG1vZGUpO1xcbiBcXHRkX2xvb2t1cF9kb25lKGRlbnRyeSk7XFxuIFxcbiBcXHRpZiAoIWVycm9yKSB7XFxuQEAgLTQ0MTAsMTAgKzQ0NjUsMjEgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0b21pY19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnlcXG4gXFx0XFx0fVxcbiBcXHRcXHRkcHV0KGRlbnRyeSk7XFxuIFxcdFxcdGRlbnRyeSA9IEVSUl9QVFIoZXJyb3IpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfQ1JFQVRFRClcXG4rXFx0XFx0XFx0ZnNub3RpZnlfY3JlYXRlKGRpcl9pbm9kZSwgZGVudHJ5KTtcXG4rXFx0XFx0aWYgKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX09QRU5FRClcXG4rXFx0XFx0XFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcXG4gXFx0fVxcbitcXG4rXFxuIFxcdHJldHVybiBkZW50cnk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmVcXG4rc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKik7XFxuIC8qXFxuICAqIExvb2sgdXAgYW5kIG1heWJlIGNyZWF0ZSBhbmQgb3BlbiB0aGUgbGFzdCBjb21wb25lbnQuXFxuICAqXFxuQEAgLTQ0MzUsNiArNDUwMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwO1xcbiBcXHRzdHJ1Y3QgZGVudHJ5ICpkaXIgPSBuZC1cXHUwMDNlcGF0aC5kZW50cnk7XFxuIFxcdHN0cnVjdCBpbm9kZSAqZGlyX2lub2RlID0gZGlyLVxcdTAwM2VkX2lub2RlO1xcbitcXHRib29sIGNyZWF0ZV9kaXIgPSBPX0lTX01LRElSKG9wLVxcdTAwM2Vtb2RlKTtcXG4gXFx0aW50IG9wZW5fZmxhZztcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xcbiBcXHRpbnQgZXJyb3IsIGNyZWF0ZV9lcnJvcjtcXG5AQCAtNDQ1NSw3ICs0NTIyLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0ICovXFxuIFxcdH1cXG4gXFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpXFxuLVxcdFxcdGlub2RlX2xvY2soZGlyX2lub2RlKTtcXG4rXFx0XFx0aW5vZGVfbG9ja19uZXN0ZWQoZGlyX2lub2RlLCBJX01VVEVYX1BBUkVOVCk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0aW5vZGVfbG9ja19zaGFyZWQoZGlyX2lub2RlKTtcXG4gXFxuQEAgLTQ1MDcsMTIgKzQ1NzQsMTcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG4gXFx0XFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fRVhDTClcXG4gXFx0XFx0XFx0b3Blbl9mbGFnIFxcdTAwMjY9IH5PX1RSVU5DO1xcbi1cXHRcXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBtb2RlLCBtb2RlLCBtb2RlKTtcXG4rXFx0XFx0bW9kZSA9IG9fY3JlYXRlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgb3Blbl9mbGFnLCBtb2RlKTtcXG4gXFx0XFx0aWYgKGxpa2VseShnb3Rfd3JpdGUpKVxcbiBcXHRcXHRcXHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIFxcdTAwMjZuZC1cXHUwMDNlcGF0aCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGRlbnRyeSwgbW9kZSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBkZW50cnksIG9wZW5fZmxhZywgbW9kZSk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0Y3JlYXRlX2Vycm9yID0gLUVST0ZTO1xcbitcXHRcXHQvKiBSZWZ1c2UgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRocm91Z2ggYSBkYW5nbGluZyAodHJhaWxpbmcpXFxuK1xcdFxcdCAqIHN5bWxpbmsuIEZvciByZWd1bGFyIGZpbGVzIHRoaXMgaGFzIGJlZW4gYWxsb3dlZCBoaXN0b3JpY2FsbHlcXG4rXFx0XFx0ICogb24gT19DUkVBVCB3aXRob3V0IE9fRVhDTC4gKi9cXG4rXFx0XFx0aWYgKHVubGlrZWx5KG5kLVxcdTAwM2VkZXB0aCkgXFx1MDAyNlxcdTAwMjYgY3JlYXRlX2RpciBcXHUwMDI2XFx1MDAyNiAhY3JlYXRlX2Vycm9yKVxcbitcXHRcXHRcXHRjcmVhdGVfZXJyb3IgPSAtRUVYSVNUO1xcbiBcXHR9XFxuIFxcdGlmIChjcmVhdGVfZXJyb3IpXFxuIFxcdFxcdG9wZW5fZmxhZyBcXHUwMDI2PSB+T19DUkVBVDtcXG5AQCAtNDUzNyw2ICs0NjA5LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0XFx0ZGVudHJ5ID0gcmVzO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFxuIFxcdGlmIChkZW50cnktXFx1MDAzZWRfaW5vZGUgfHwgIShvcC1cXHUwMDNlb3Blbl9mbGFnIFxcdTAwMjYgT19DUkVBVCkpIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogTm8gbmVlZCB0byBjcmVhdGUgYSBmaWxlLiAgSWYgbG9va3VwIHJldHVybmVkIGEgcG9zaXRpdmVcXG5AQCAtNDU1NCwyNiArNDYyNywyNiBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXHRcXHRnb3RvIG91dF9kcHV0O1xcbiBcXHR9XFxuIFxcbi1cXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXJfaW5vZGUsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIFxcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xcbi1cXHRpZiAoZXJyb3IpXFxuLVxcdFxcdGdvdG8gb3V0X2RwdXQ7XFxuLVxcbi1cXHRmaWxlLVxcdTAwM2VmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDtcXG4tXFx0aWYgKCFkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWNyZWF0ZSkge1xcbitcXHRpZiAoKGNyZWF0ZV9kaXIgXFx1MDAyNlxcdTAwMjYgIWRpcl9pbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlbWtkaXIpXFxuK1xcdFxcdHx8ICghY3JlYXRlX2RpciBcXHUwMDI2XFx1MDAyNiAhZGlyX2lub2RlLVxcdTAwM2VpX29wLVxcdTAwM2VjcmVhdGUpKSB7XFxuIFxcdFxcdGVycm9yID0gLUVBQ0NFUztcXG4gXFx0XFx0Z290byBvdXRfZHB1dDtcXG4gXFx0fVxcbiBcXG4tXFx0ZXJyb3IgPSBkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xcbitcXHRpZiAoY3JlYXRlX2Rpcikge1xcbitcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBtb2RlLCBcXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcXG4rXFx0XFx0XFx0ZXJyb3IgPSBQVFJfRVJSX09SX1pFUk8ocmVzKTtcXG4rXFx0XFx0XFx0aWYgKCFlcnJvcilcXG4rXFx0XFx0XFx0XFx0ZGVudHJ5ID0gcmVzO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlcnJvciA9IHZmc19jcmVhdGVfbm9fcGVybShpZG1hcCwgZGVudHJ5LCBtb2RlLCBcXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcXG4rXFx0fVxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdGdvdG8gb3V0X2RwdXQ7XFxuK1xcbitcXHRmaWxlLVxcdTAwM2VmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDtcXG4gb3V0Olxcbi1cXHRpZiAoIUlTX0VSUihkZW50cnkpKSB7XFxuLVxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxcbi1cXHRcXHRcXHRmc25vdGlmeV9jcmVhdGUoZGlyX2lub2RlLCBkZW50cnkpO1xcbi1cXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfT1BFTkVEKVxcbi1cXHRcXHRcXHRmc25vdGlmeV9vcGVuKGZpbGUpO1xcbi1cXHR9XFxuIFxcdGlmICgob3Blbl9mbGFnIFxcdTAwMjYgT19DUkVBVCkgfHwgY3JlYXRlX2Vycm9yKVxcbiBcXHRcXHRpbm9kZV91bmxvY2soZGlyX2lub2RlKTtcXG4gXFx0ZWxzZVxcbkBAIC00Njk1LDE3ICs0NzY4LDEyIEBAIHN0cnVjdCBmaWxlICp2ZnNfbG9va3VwX29wZW4oc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IHFzdHIgKmxhc3QsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyh2ZnNfbG9va3VwX29wZW4sIFxcXCJuZnNkXFxcIik7XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG4te1xcbi1cXHRyZXR1cm4gKGJvb2wpbmQtXFx1MDAzZWxhc3QubmFtZVtuZC1cXHUwMDNlbGFzdC5sZW5dO1xcbi19XFxuLVxcbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpXFxuIHtcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xcbiBcXG4gXFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG4tXFx0XFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKVxcbitcXHRcXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhcXHUwMDI2bmQtXFx1MDAzZWxhc3QpIFxcdTAwMjZcXHUwMDI2ICEob3Blbl9mbGFnIFxcdTAwMjYgT19ESVJFQ1RPUlkpKVxcbiBcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlTRElSKTtcXG4gXFxuIFxcdFxcdC8qIERvbid0IGJvdGhlciBvbiBhbiBPX0VYQ0wgY3JlYXRlICovXFxuQEAgLTQ3MTMsNyArNDc4MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZylcXG4gXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcXG4rXFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMoXFx1MDAyNm5kLVxcdTAwM2VsYXN0KSlcXG4gXFx0XFx0bmQtXFx1MDAzZWZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZO1xcbiBcXG4gXFx0ZGVudHJ5ID0gbG9va3VwX2Zhc3QobmQpO1xcbkBAIC00ODA2LDggKzQ4NzQsOSBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuIFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKSB7XFxuIFxcdFxcdGlmICgob3Blbl9mbGFnIFxcdTAwMjYgT19FWENMKSBcXHUwMDI2XFx1MDAyNiAhKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX0NSRUFURUQpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4tXFx0XFx0aWYgKGRfaXNfZGlyKG5kLVxcdTAwM2VwYXRoLmRlbnRyeSkpXFxuK1xcdFxcdGlmICghKG9wZW5fZmxhZyBcXHUwMDI2IE9fRElSRUNUT1JZKSBcXHUwMDI2XFx1MDAyNiBkX2lzX2RpcihuZC1cXHUwMDNlcGF0aC5kZW50cnkpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJU0RJUjtcXG4rXFxuIFxcdFxcdGVycm9yID0gbWF5X2NyZWF0ZV9pbl9zdGlja3koaWRtYXAsIG5kLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGRfYmFja2luZ19pbm9kZShuZC1cXHUwMDNlcGF0aC5kZW50cnkpKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KGVycm9yKSlcXG5AQCAtNTA4Nyw3ICs1MTU2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZShpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXFxuIFxcdCAqIERvIHRoZSBmaW5hbCBsb29rdXAuICBTdXBwcmVzcyAnY3JlYXRlJyBpZiB0aGVyZSBpcyBhIHRyYWlsaW5nXFxuIFxcdCAqICcvJywgYW5kIGEgZGlyZWN0b3J5IHdhc24ndCByZXF1ZXN0ZWQuXFxuIFxcdCAqL1xcbi1cXHRpZiAobGFzdC5uYW1lW2xhc3QubGVuXSBcXHUwMDI2XFx1MDAyNiAhd2FudF9kaXIpXFxuK1xcdGlmICh0cmFpbGluZ19zbGFzaGVzKFxcdTAwMjZsYXN0KSBcXHUwMDI2XFx1MDAyNiAhd2FudF9kaXIpXFxuIFxcdFxcdGNyZWF0ZV9mbGFncyBcXHUwMDI2PSB+TE9PS1VQX0NSRUFURTtcXG4gXFx0ZGVudHJ5ID0gc3RhcnRfZGlyb3AocGF0aC1cXHUwMDNlZGVudHJ5LCBcXHUwMDI2bGFzdCwgcmV2YWxfZmxhZyB8IGNyZWF0ZV9mbGFncyk7XFxuIFxcdGlmIChJU19FUlIoZGVudHJ5KSlcXG5AQCAtNTE4Miw3ICs1MjUxLDcgQEAgc3RydWN0IGZpbGUgKmRlbnRyeV9jcmVhdGUoc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncywgdW1vZGVfdCBtb2RlLFxcbiBcXHRcXHRwYXRoLVxcdTAwM2VkZW50cnkgPSBkaXI7XFxuIFxcdFxcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7XFxuIFxcbi1cXHRcXHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIHBhdGgsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdFxcdGNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgcGF0aCwgZGVudHJ5LCBmbGFncywgbW9kZSk7XFxuIFxcdFxcdGlmIChjcmVhdGVfZXJyb3IpXFxuIFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbiBcXG5AQCAtNTM1Niw2ICs1NDI1LDM0IEBAIFNZU0NBTExfREVGSU5FMyhta25vZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVtb2RlX3QsIG1vZGUsIHVuc2lnbmVkLCBkXFxuIFxcdHJldHVybiBmaWxlbmFtZV9ta25vZGF0KEFUX0ZEQ1dELCBuYW1lLCBtb2RlLCBkZXYpO1xcbiB9XFxuIFxcbisvKiBSZXR1cm5zIHRoZSBkZW50cnkgdG8gdXNlIChub3QgTlVMTCkgb3IgLUUgb24gZXJyb3IgKi9cXG4rc3RhdGljIGlubGluZVxcbitzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRpKVxcbit7XFxuK1xcdGludCBlcnJvcjtcXG4rXFx0c3RydWN0IGRlbnRyeSAqZGU7XFxuK1xcdHVuc2lnbmVkIG1heF9saW5rcyA9IGRpci1cXHUwMDNlaV9zYi1cXHUwMDNlc19tYXhfbGlua3M7XFxuK1xcbitcXHRpZiAobWF4X2xpbmtzIFxcdTAwMjZcXHUwMDI2IGRpci1cXHUwMDNlaV9ubGluayBcXHUwMDNlPSBtYXhfbGlua3MpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTUxJTkspO1xcbitcXG4rXFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xcbitcXG4rXFx0ZGUgPSBkaXItXFx1MDAzZWlfb3AtXFx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdGlmIChJU19FUlIoZGUpKVxcbitcXHRcXHRyZXR1cm4gZGU7XFxuK1xcdGlmIChkZSkge1xcbitcXHRcXHRkcHV0KGRlbnRyeSk7XFxuK1xcdFxcdGRlbnRyeSA9IGRlO1xcbitcXHR9XFxuK1xcdGZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTtcXG4rXFx0cmV0dXJuIGRlbnRyeTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHZmc19ta2RpciAtIGNyZWF0ZSBkaXJlY3RvcnkgcmV0dXJuaW5nIGNvcnJlY3QgZGVudHJ5IGlmIHBvc3NpYmxlXFxuICAqIEBpZG1hcDpcXHRcXHRpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXFxuQEAgLTUzODMsNyArNTQ4MCw2IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkZWxlZ2F0ZWRfaW5vZGUpXFxuIHtcXG4gXFx0aW50IGVycm9yO1xcbi1cXHR1bnNpZ25lZCBtYXhfbGlua3MgPSBkaXItXFx1MDAzZWlfc2ItXFx1MDAzZXNfbWF4X2xpbmtzO1xcbiBcXHRzdHJ1Y3QgZGVudHJ5ICpkZTtcXG4gXFxuIFxcdGVycm9yID0gbWF5X2NyZWF0ZV9kZW50cnkoaWRtYXAsIGRpciwgZGVudHJ5KTtcXG5AQCAtNTM5OSwyNCArNTQ5NSwxMiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4tXFx0ZXJyb3IgPSAtRU1MSU5LO1xcbi1cXHRpZiAobWF4X2xpbmtzIFxcdTAwMjZcXHUwMDI2IGRpci1cXHUwMDNlaV9ubGluayBcXHUwMDNlPSBtYXhfbGlua3MpXFxuLVxcdFxcdGdvdG8gZXJyO1xcbi1cXG4tXFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkZWxlZ2F0ZWRfaW5vZGUpO1xcbi1cXHRpZiAoZXJyb3IpXFxuLVxcdFxcdGdvdG8gZXJyO1xcbi1cXG4tXFx0ZGUgPSBkaXItXFx1MDAzZWlfb3AtXFx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuLVxcdGVycm9yID0gUFRSX0VSUihkZSk7XFxuLVxcdGlmIChJU19FUlIoZGUpKVxcbitcXHRkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcXG4rXFx0aWYgKElTX0VSUihkZSkpIHtcXG4rXFx0XFx0ZXJyb3IgPSBQVFJfRVJSKGRlKTtcXG4gXFx0XFx0Z290byBlcnI7XFxuLVxcdGlmIChkZSkge1xcbi1cXHRcXHRkcHV0KGRlbnRyeSk7XFxuLVxcdFxcdGRlbnRyeSA9IGRlO1xcbiBcXHR9XFxuLVxcdGZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTtcXG4tXFx0cmV0dXJuIGRlbnRyeTtcXG4rXFx0cmV0dXJuIGRlO1xcbiBcXG4gZXJyOlxcbiBcXHRlbmRfY3JlYXRpbmcoZGVudHJ5KTtcXG5AQCAtNTcwMyw3ICs1Nzg3LDcgQEAgaW50IGZpbGVuYW1lX3VubGlua2F0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSlcXG4gXFx0XFx0Z290byBleGl0X2Ryb3Bfd3JpdGU7XFxuIFxcbiBcXHQvKiBXaHkgbm90IGJlZm9yZT8gQmVjYXVzZSB3ZSB3YW50IGNvcnJlY3QgZXJyb3IgdmFsdWUgKi9cXG4tXFx0aWYgKHVubGlrZWx5KGxhc3QubmFtZVtsYXN0Lmxlbl0pKSB7XFxuK1xcdGlmICh1bmxpa2VseSh0cmFpbGluZ19zbGFzaGVzKFxcdTAwMjZsYXN0KSkpIHtcXG4gXFx0XFx0aWYgKGRfaXNfZGlyKGRlbnRyeSkpXFxuIFxcdFxcdFxcdGVycm9yID0gLUVJU0RJUjtcXG4gXFx0XFx0ZWxzZVxcbkBAIC02MzA1LDE2ICs2Mzg5LDE2IEBAIGludCBmaWxlbmFtZV9yZW5hbWVhdDIoaW50IG9sZGRmZCwgc3RydWN0IGZpbGVuYW1lICpmcm9tLFxcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIHtcXG4gXFx0XFx0aWYgKCFkX2lzX2RpcihyZC5uZXdfZGVudHJ5KSkge1xcbiBcXHRcXHRcXHRlcnJvciA9IC1FTk9URElSO1xcbi1cXHRcXHRcXHRpZiAobmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKVxcbitcXHRcXHRcXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhcXHUwMDI2bmV3X2xhc3QpKVxcbiBcXHRcXHRcXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0LyogdW5sZXNzIHRoZSBzb3VyY2UgaXMgYSBkaXJlY3RvcnkgdHJhaWxpbmcgc2xhc2hlcyBnaXZlIC1FTk9URElSICovXFxuIFxcdGlmICghZF9pc19kaXIocmQub2xkX2RlbnRyeSkpIHtcXG4gXFx0XFx0ZXJyb3IgPSAtRU5PVERJUjtcXG4tXFx0XFx0aWYgKG9sZF9sYXN0Lm5hbWVbb2xkX2xhc3QubGVuXSlcXG4rXFx0XFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMoXFx1MDAyNm9sZF9sYXN0KSlcXG4gXFx0XFx0XFx0Z290byBleGl0X3VubG9jaztcXG4tXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIFxcdTAwMjZcXHUwMDI2IG5ld19sYXN0Lm5hbWVbbmV3X2xhc3QubGVuXSlcXG4rXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIFxcdTAwMjZcXHUwMDI2IHRyYWlsaW5nX3NsYXNoZXMoXFx1MDAyNm5ld19sYXN0KSlcXG4gXFx0XFx0XFx0Z290byBleGl0X3VubG9jaztcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jXFxuaW5kZXggMzZmMmU4NTg4OTIyMC4uYjRkYjcwM2M5ZThjNyAxMDA2NDRcXG4tLS0gYS9mcy9uZnMvZGlyLmNcXG4rKysgYi9mcy9uZnMvZGlyLmNcXG5AQCAtMjEyMSw2ICsyMTIxLDkgQEAgaW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHRkZnByaW50ayhWRlMsIFxcXCJORlM6IGF0b21pY19vcGVuKCVzLyVsbHUpLCAlcGRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdGRpci1cXHUwMDNlaV9zYi1cXHUwMDNlc19pZCwgZGlyLVxcdTAwM2VpX2lubywgZGVudHJ5KTtcXG4gXFxuK1xcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxcbitcXHRcXHRvcGVuX2ZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0ZXJyID0gbmZzX2NoZWNrX2ZsYWdzKG9wZW5fZmxhZ3MpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbkBAIC0yMzEzLDYgKzIzMTYsOSBAQCBpbnQgbmZzX2F0b21pY19vcGVuX3YyMyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHQgKi9cXG4gXFx0aW50IGVycm9yID0gMDtcXG4gXFxuK1xcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxcbitcXHRcXHRvcGVuX2ZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbiBcXHUwMDNlIE5GU19TRVJWRVIoZGlyKS1cXHUwMDNlbmFtZWxlbilcXG4gXFx0XFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmNcXG5pbmRleCA2YjFjMTRlNjg0YTkzLi42Y2I1ZTJhZDc4MWYzIDEwMDY0NFxcbi0tLSBhL2ZzL29wZW4uY1xcbisrKyBiL2ZzL29wZW4uY1xcbkBAIC0xMjM5LDI5ICsxMjM5LDMwIEBAIGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxcbiBcXHRpZiAoV0lMTF9DUkVBVEUoZmxhZ3MpKSB7XFxuIFxcdFxcdGlmIChob3ctXFx1MDAzZW1vZGUgXFx1MDAyNiB+U19JQUxMVUdPKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0b3AtXFx1MDAzZW1vZGUgPSBob3ctXFx1MDAzZW1vZGUgfCBTX0lGUkVHO1xcbitcXHRcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdFxcdG9wLVxcdTAwM2Vtb2RlID0gaG93LVxcdTAwM2Vtb2RlIHwgU19JRkRJUjtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRvcC1cXHUwMDNlbW9kZSA9IGhvdy1cXHUwMDNlbW9kZSB8IFNfSUZSRUc7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGlmIChob3ctXFx1MDAzZW1vZGUgIT0gMClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdG9wLVxcdTAwM2Vtb2RlID0gMDtcXG4gXFx0fVxcbiBcXG4tXFx0LypcXG4tXFx0ICogQmxvY2sgYnVncyB3aGVyZSBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQgY3JlYXRlZCByZWd1bGFyIGZpbGVzLlxcbi1cXHQgKiBOb3RlLCB0aGF0IGJsb2NraW5nIE9fRElSRUNUT1JZIHwgT19DUkVBVCBoZXJlIGFsc28gcHJvdGVjdHNcXG4tXFx0ICogT19UTVBGSUxFIGJlbG93IHdoaWNoIHJlcXVpcmVzIE9fRElSRUNUT1JZIGJlaW5nIHJhaXNlZC5cXG4tXFx0ICovXFxuLVxcdGlmICgoZmxhZ3MgXFx1MDAyNiAoT19ESVJFQ1RPUlkgfCBPX0NSRUFUKSkgPT0gKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4gXFx0LyogTm93IGhhbmRsZSB0aGUgY3JlYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgT19UTVBGSUxFLiAqL1xcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBfX09fVE1QRklMRSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBJbiBvcmRlciB0byBlbnN1cmUgcHJvZ3JhbXMgZ2V0IGV4cGxpY2l0IGVycm9ycyB3aGVuIHRyeWluZ1xcbiBcXHRcXHQgKiB0byB1c2UgT19UTVBGSUxFIG9uIG9sZCBrZXJuZWxzIHdlIGVuZm9yY2UgdGhhdCBPX0RJUkVDVE9SWVxcbi1cXHRcXHQgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLlxcbitcXHRcXHQgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLCBidXQgd2l0aG91dCBPX0NSRUFULiBUaGVcXG4rXFx0XFx0ICogcmVhc29uIGZvciBkaXNhbGxvd2luZyBPX0NSRUFUfE9fVE1QRklMRSBpcyB0aGF0XFxuK1xcdFxcdCAqIE9fRElSRUNUT1JZfE9fQ1JFQVQgdXNlZCB0byB3b3JrIGFuZCBjcmVhdGVkIGEgcmVndWxhciBmaWxlXFxuK1xcdFxcdCAqIGlmIG5vdGhpbmcgZXhpc3RlZCBhdCB0aGUgb3BlbiBwYXRoLiBIZW5jZSwgYWxsb3dpbmcgdGhlXFxuK1xcdFxcdCAqIGNvbWJpbmF0aW9uIHdvdWxkIGhhdmUgY2F1c2VkIE9fQ1JFQVR8T19UTVBGSUxFIHRvIGNyZWF0ZSBhXFxuK1xcdFxcdCAqIHJlZ3VsYXIgKG5vbi10ZW1wb3JhcnkpIGZpbGUgb24gb2xkIGtlcm5lbHMsIHdoaWxlIHRoZSBjYWxsZXJcXG4rXFx0XFx0ICogd291bGQgYmVsaWV2ZSB0aGV5IGNyZWF0ZWQgYW4gYWN0dWFsIE9fVE1QRklMRS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgT19ESVJFQ1RPUlkpKVxcbitcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IE9fRElSRUNUT1JZKSB8fCAoZmxhZ3MgXFx1MDAyNiBPX0NSRUFUKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdGlmICghKGFjY19tb2RlIFxcdTAwMjYgTUFZX1dSSVRFKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTEzMTgsNiArMTMxOSwxNSBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcXG4gXFxuIFxcdG9wLVxcdTAwM2VpbnRlbnQgPSBmbGFncyBcXHUwMDI2IE9fUEFUSCA/IDAgOiBMT09LVVBfT1BFTjtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFJlcXVlc3Rpbmcgd3JpdGUgYWNjZXNzIG9uIGEgZGlyZWN0b3J5IGNhbiBuZXZlciBzdWNjZWVkLiBSYXRoZXJcXG4rXFx0ICogdGhhbiBwZXJmb3JtaW5nIGEgcGF0aC13YWxrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0YXJnZXQgaXNcXG4rXFx0ICogYWN0dWFsbHkgYSBkaXJlY3RvcnkgKC1FSVNESVIpIG9yIG5vdCAoLUVOT1RESVIpLCB3ZSBzaG9ydC1jaXJjdWl0XFxuK1xcdCAqIHRvIC1FTk9URElSLlxcbitcXHQgKi9cXG4rXFx0aWYgKChmbGFncyBcXHUwMDI2IE9fRElSRUNUT1JZKSBcXHUwMDI2XFx1MDAyNiAhKGZsYWdzIFxcdTAwMjYgX19PX1RNUEZJTEUpIFxcdTAwMjZcXHUwMDI2IChhY2NfbW9kZSBcXHUwMDI2IE1BWV9XUklURSkpXFxuK1xcdFxcdHJldHVybiAtRU5PVERJUjtcXG4rXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG4gXFx0XFx0b3AtXFx1MDAzZWludGVudCB8PSBMT09LVVBfQ1JFQVRFO1xcbiBcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBPX0VYQ0wpIHtcXG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9kaXIuYyBiL2ZzL3NtYi9jbGllbnQvZGlyLmNcXG5pbmRleCA3ODAzYmQ1YmQwMWY4Li5kMWFmOTBjOTgxY2Q0IDEwMDY0NFxcbi0tLSBhL2ZzL3NtYi9jbGllbnQvZGlyLmNcXG4rKysgYi9mcy9zbWIvY2xpZW50L2Rpci5jXFxuQEAgLTUzOCw2ICs1MzgsOSBAQCBpbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXFxuIFxcdGlmICh1bmxpa2VseShjaWZzX2ZvcmNlZF9zaHV0ZG93bihjaWZzX3NiKSkpXFxuIFxcdFxcdHJldHVybiBzbWJfRUlPKHNtYl9laW9fdHJhY2VfZm9yY2VkX3NodXRkb3duKTtcXG4gXFxuK1xcdGlmIChPX0lTX01LRElSKG9mbGFncykpXFxuK1xcdFxcdG9mbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFBvc2l4IG9wZW4gaXMgb25seSBjYWxsZWQgKGF0IGxvb2t1cCB0aW1lKSBmb3IgZmlsZSBjcmVhdGUgbm93LiBGb3JcXG4gXFx0ICogb3BlbnMgKHJhdGhlciB0aGFuIGNyZWF0ZXMpLCBiZWNhdXNlIHdlIGRvIG5vdCBrbm93IGlmIGl0IGlzIGEgZmlsZVxcbmRpZmYgLS1naXQgYS9mcy92Ym94c2YvZGlyLmMgYi9mcy92Ym94c2YvZGlyLmNcXG5pbmRleCAwYjllYWIxNTc0MzJkLi42ZTMwNmRkZDcyMmJmIDEwMDY0NFxcbi0tLSBhL2ZzL3Zib3hzZi9kaXIuY1xcbisrKyBiL2ZzL3Zib3hzZi9kaXIuY1xcbkBAIC0zMTgsNiArMzE4LDkgQEAgc3RhdGljIGludCB2Ym94c2ZfZGlyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdHU2NCBoYW5kbGU7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcXG4gXFx0XFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmJveHNmX2Rpcl9sb29rdXAocGFyZW50LCBkZW50cnksIDApO1xcbiBcXHRcXHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmNudGwuaCBiL2luY2x1ZGUvbGludXgvZmNudGwuaFxcbmluZGV4IDZhZDZiOWU3YTIyNmEuLjIwNGUxNmJiZTI2MzQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mY250bC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mY250bC5oXFxuQEAgLTMwLDYgKzMwLDEyIEBAXFxuICAqL1xcbiAjZGVmaW5lIF9fT19SRUdVTEFSXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMzApXFxuIFxcbisjZGVmaW5lIE9fTUtESVJfTUFTS1xcdChPX0NSRUFUIHwgT19ESVJFQ1RPUlkpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBPX0lTX01LRElSKHVuc2lnbmVkIGludCBmbGFncylcXG4re1xcbitcXHRyZXR1cm4gKGZsYWdzIFxcdTAwMjYgT19NS0RJUl9NQVNLKSA9PSBPX01LRElSX01BU0s7XFxuK31cXG4rXFxuIC8qIExpc3Qgb2YgYWxsIHZhbGlkIGZsYWdzIGZvciB0aGUgaG93LVxcdTAwM2VyZXNvbHZlIGFyZ3VtZW50OiAqL1xcbiAjZGVmaW5lIFZBTElEX1JFU09MVkVfRkxBR1MgXFxcXFxcbiBcXHQoUkVTT0xWRV9OT19YREVWIHwgUkVTT0xWRV9OT19NQUdJQ0xJTktTIHwgUkVTT0xWRV9OT19TWU1MSU5LUyB8IFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcXG5pbmRleCA5ZWIxODVmYjJmOWRkLi4wMWM1ODhkNGM4NGY2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlXFxuQEAgLTEsNCArMSw1IEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbitvcGVuX29fY3JlYXRfb19kaXJcXG4gZG5vdGlmeV90ZXN0XFxuIGRldnB0c19wdHNcXG4gZmNsb2dcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxcbmluZGV4IDAzYmUzMzdjMWYzNTEuLjA5NTliZDI2ODc1YWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxcbkBAIC0xLDcgKzEsNyBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIFxcbiBDRkxBR1MgKz0gJChLSERSX0lOQ0xVREVTKVxcbi1URVNUX0dFTl9QUk9HUyA6PSBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nIHVzdGF0X3Rlc3RcXG4rVEVTVF9HRU5fUFJPR1MgOj0gb3Blbl9vX2NyZWF0X29fZGlyIGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2cgdXN0YXRfdGVzdFxcbiBURVNUX0dFTl9QUk9HUyArPSBpZG1hcHBlZF90bXBmaWxlXFxuIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEIDo9IGRub3RpZnlfdGVzdFxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYmUwYWIzNDI2N2UxZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuY1xcbkBAIC0wLDAgKzEsMjAxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwid3JhcHBlcnMuaFxcXCJcXG4rXFxuKyNkZWZpbmUgb3BlbmF0X29fbWtkaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCBmbGFncykgKHtcXHRcXFxcXFxuK1xcdHN0cnVjdCBzdGF0IF9fc3Q7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpbnQgX19mZCA9IG9wZW5hdF9vX21rZGlyKGRmZCwgcGF0aG5hbWUsIGZsYWdzLCBTX0lSV1hVKTtcXHRcXFxcXFxuK1xcdEFTU0VSVF9HRShfX2ZkLCAwKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdEFTU0VSVF9FUShmc3RhdChfX2ZkLCBcXHUwMDI2X19zdCksIDApO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0RVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fZmQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9KVxcbitcXG4rI2RlZmluZSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKGRmZCwgcGF0aG5hbWUpIFxcXFxcXG4rXFx0b3BlbmF0X29fbWtkaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCBPX1JET05MWSlcXG4rXFxuK0ZJWFRVUkUob3Blbl9vX2NyZWF0X29fZGlyKSB7XFxuK1xcdGNoYXIgZGlycGF0aFtQQVRIX01BWF07XFxuK1xcdGludCBkZmQ7XFxuK307XFxuK1xcbitGSVhUVVJFX1NFVFVQKG9wZW5fb19jcmVhdF9vX2RpcilcXG4re1xcbitcXHRzdHJjcHkoc2VsZi1cXHUwMDNlZGlycGF0aCwgXFxcIi90bXAvb3Blbl9vX2NyZWF0X29fZGlyX3Rlc3QuWFhYWFhYXFxcIik7XFxuK1xcdEFTU0VSVF9ORShta2R0ZW1wKHNlbGYtXFx1MDAzZWRpcnBhdGgpLCBOVUxMKTtcXG4rXFx0c2VsZi1cXHUwMDNlZGZkID0gb3BlbihzZWxmLVxcdTAwM2VkaXJwYXRoLCBPX0RJUkVDVE9SWSk7XFxuK1xcdEFTU0VSVF9HRShzZWxmLVxcdTAwM2VkZmQsIDApO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKG9wZW5fb19jcmVhdF9vX2RpcilcXG4re1xcbitcXHRjbG9zZShzZWxmLVxcdTAwM2VkZmQpO1xcbitcXHRybWRpcihzZWxmLVxcdTAwM2VkaXJwYXRoKTtcXG4rfVxcbitcXG4rLyogRG9lcyBvcGVuX29fY3JlYXRfb19kaXIgcmV0dXJuIGEgZmQgYXQgYWxsPyAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZXR1cm5zX2ZkKVxcbit7XFxuK1xcdGludCBmZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoc2VsZi1cXHUwMDNlZGZkLCBcXFwibmV3ZGlyXFxcIik7XFxuK1xcdEVYUEVDVF9FUShjbG9zZShmZCksIDApO1xcbitcXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwibmV3ZGlyXFxcIiwgQVRfUkVNT1ZFRElSKSwgMCk7XFxuK31cXG4rXFxuKy8qIFRoZSBmZCBtdXN0IHJlZmVyIHRvIHRoZSBkaXJlY3RvcnkgdGhhdCB3YXMganVzdCBjcmVhdGVkLiAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBmZF9pc19jcmVhdGVkX2RpcilcXG4re1xcbitcXHRpbnQgZmQ7XFxuK1xcdHN0cnVjdCBzdGF0IHN0X3ZpYV9mZCwgc3RfdmlhX3BhdGg7XFxuK1xcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcbitcXHRmZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoc2VsZi1cXHUwMDNlZGZkLCBcXFwiY2hlY2tkaXJcXFwiKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShmc3RhdChmZCwgXFx1MDAyNnN0X3ZpYV9mZCksIDApO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiJXMvY2hlY2tkaXJcXFwiLCBzZWxmLVxcdTAwM2VkaXJwYXRoKTtcXG4rXFx0QVNTRVJUX0VRKHN0YXQocGF0aCwgXFx1MDAyNnN0X3ZpYV9wYXRoKSwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEoc3RfdmlhX2ZkLnN0X2lubywgc3RfdmlhX3BhdGguc3RfaW5vKTtcXG4rXFx0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9kZXYsIHN0X3ZpYV9wYXRoLnN0X2Rldik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTtcXG4rfVxcbitcXG4rLyogTWlzc2luZyBwYXJlbnQgY29tcG9uZW50IG11c3QgZmFpbCB3aXRoIEVOT0VOVC4gKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vZW50X21pc3NpbmdfcGFyZW50KVxcbit7XFxuK1xcdEVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihzZWxmLVxcdTAwM2VkZmQsIFxcXCJub25leGlzdGVudC9jaGlsZFxcXCIsIE9fUkRPTkxZLCBTX0lSV1hVKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVOT0VOVCk7XFxuK31cXG4rXFxuKy8qIEFuIGludmFsaWQgZGZkIG11c3QgZmFpbCB3aXRoIEVCQURGLiAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlYmFkZilcXG4re1xcbitcXHRFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoRkRfSU5WQUxJRCwgXFxcImJhZGZkaXJcXFwiLCBPX1JET05MWSwgU19JUldYVSksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFQkFERik7XFxuK31cXG4rXFxuKy8qIEEgZGZkIHRoYXQgcG9pbnRzIHRvIGEgZmlsZSAobm90IGEgZGlyZWN0b3J5KSBtdXN0IGZhaWwgd2l0aCBFTk9URElSLiAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlbm90ZGlyX2RmZClcXG4re1xcbitcXHRpbnQgZmlsZV9mZDtcXG4rXFxuK1xcdGZpbGVfZmQgPSBvcGVuYXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwiZmlsZVxcXCIsXFxuK1xcdFxcdFxcdCBPX0NSRUFUIHwgT19SRE9OTFksIFNfSVJXWFUpO1xcbitcXHRBU1NFUlRfR0UoZmlsZV9mZCwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoZmlsZV9mZCwgXFxcInN1YmRpclxcXCIsIE9fUkRPTkxZLCBTX0lSV1hVKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKGNsb3NlKGZpbGVfZmQpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXFx1MDAzZWRmZCwgXFxcImZpbGVcXFwiLCAwKSwgMCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIE9fRVhDTCB0b2dldGhlciB3aXRoIE9fQ1JFQVR8T19ESVJFQ1RPUlkgc2hvdWxkIHN1Y2NlZWQgaWYgdGhlIHRhcmdldFxcbisgKiBkaXJlY3RvcnkgZG9lcyBub3QgeWV0IGV4aXN0LiBBZnRlciBkaXJlY3RvcnkgY3JlYXRpb24sIHJlcGVhdGluZyB0aGlzXFxuKyAqIGNhbGwgbXVzdCBmYWlsIHdpdGggRUVYSVNULlxcbisgKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2Rpciwgb19leGNsX2VleGlzdClcXG4re1xcbitcXHRpbnQgZXhjbGRpcl9mZDtcXG4rXFxuK1xcdGV4Y2xkaXJfZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkX2ZsYWdzKHNlbGYtXFx1MDAzZWRmZCwgXFxcImV4Y2xkaXJcXFwiLCBPX0VYQ0wpO1xcbitcXG4rXFx0RVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKGV4Y2xkaXJfZmQsIFxcXCIuXFxcIiwgT19FWENMLCBTX0lSV1hVKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVFWElTVCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoZXhjbGRpcl9mZCksIDApO1xcbitcXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwiZXhjbGRpclxcXCIsIEFUX1JFTU9WRURJUiksIDApO1xcbit9XFxuK1xcbisvKlxcbisgKiBPX0NSRUFUfE9fRElSRUNUT1JZIG9uIGEgcGF0aCB0aGF0IGFscmVhZHkgZXhpc3RzIGFzIGEgcmVndWxhciBmaWxlXFxuKyAqIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuXFxuKyAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBleGlzdGluZ19maWxlX2Vub3RkaXIpXFxuK3tcXG4rXFx0aW50IGZpbGVfZmQ7XFxuK1xcbitcXHRmaWxlX2ZkID0gb3BlbmF0KHNlbGYtXFx1MDAzZWRmZCwgXFxcInJlZ2ZpbGVcXFwiLFxcbitcXHRcXHRcXHQgT19DUkVBVCB8IE9fUkRPTkxZLCBTX0lSV1hVKTtcXG4rXFx0QVNTRVJUX0dFKGZpbGVfZmQsIDApO1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApO1xcbitcXG4rXFx0RVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKHNlbGYtXFx1MDAzZWRmZCwgXFxcInJlZ2ZpbGVcXFwiLCBPX1JET05MWSwgU19JUldYVSksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTtcXG4rXFxuK1xcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJyZWdmaWxlXFxcIiwgMCksIDApO1xcbit9XFxuK1xcbisvKlxcbisgKiBPX0NSRUFUfE9fRElSRUNUT1JZIGNvbWJpbmVkIHdpdGggYSB3cml0YWJsZSBhY2Nlc3MgbW9kZSBtdXN0IGJlXFxuKyAqIHJlamVjdGVkOiBhIGRpcmVjdG9yeSBjYW5ub3QgYmUgb3BlbmVkIGZvciB3cml0aW5nLlxcbisgKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgcmVqZWN0c193cml0YWJsZV9hY2NfbW9kZSlcXG4re1xcbitcXHRFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoc2VsZi1cXHUwMDNlZGZkLCBcXFwicmR3cmRpclxcXCIsIE9fUkRXUiwgU19JUldYVSksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTtcXG4rXFx0LyogQ2xlYW4gdXAgaWYgdGhlIGtlcm5lbCBjcmVhdGVkIHRoZSBkaXJlY3RvcnkgYW55d2F5LiAqL1xcbitcXHR1bmxpbmthdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJyZHdyZGlyXFxcIiwgQVRfUkVNT1ZFRElSKTtcXG4rfVxcbitcXG4rLypcXG4rICogb3BlbmF0KE9fQ1JFQVR8T19ESVJFQ1RPUlkpIHdpdGggYSB0cmFpbGluZyBzbGFzaCBzaG91bGQgd29yay5cXG4rICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHRyYWlsaW5nX3NsYXNoKVxcbit7XFxuK1xcdGludCBmZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoc2VsZi1cXHUwMDNlZGZkLCBcXFwibmV3ZGlyL1xcXCIpO1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXFx1MDAzZWRmZCwgXFxcIm5ld2RpclxcXCIsIEFUX1JFTU9WRURJUiksIDApO1xcbit9XFxuK1xcbisvKlxcbisgKiBvcGVuYXQoT19DUkVBVCkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIGJ1dCB3aXRob3V0IE9fRElSRUNUT1JZXFxuKyAqIG11c3QgZmFpbCB3aXRoIEVJU0RJUiBhbmQgbXVzdCBub3QgY3JlYXRlIGFueXRoaW5nIGF0IHRoZSBwYXRoLlxcbisgKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgdHJhaWxpbmdfc2xhc2hfbm9fb19kaXIpXFxuK3tcXG4rXFx0aW50IGZkO1xcbitcXHRzdHJ1Y3Qgc3RhdCBzdDtcXG4rXFxuK1xcdGZkID0gb3BlbmF0KHNlbGYtXFx1MDAzZWRmZCwgXFxcInRyYWlsaW5nL1xcXCIsIE9fQ1JFQVQgfCBPX1JET05MWSwgU19JUldYVSk7XFxuK1xcdEVYUEVDVF9FUShmZCwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVJU0RJUik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoZnN0YXRhdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJ0cmFpbGluZ1xcXCIsIFxcdTAwMjZzdCwgMCksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFTk9FTlQpO1xcbitcXG4rXFx0LyogQmVzdC1lZmZvcnQgY2xlYW51cCBpbiBjYXNlIHRoZSBrZXJuZWwgbGVmdCBhIGZpbGUgYmVoaW5kLiAqL1xcbitcXHRpZiAoZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHR1bmxpbmthdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJ0cmFpbGluZ1xcXCIsIDApO1xcbit9XFxuK1xcbisvKlxcbisgKiBUaGUgcmV0dXJuZWQgZmQgbXVzdCBiZSB1c2FibGUgYXMgYSBkZmQgZm9yIGZ1cnRoZXIgKmF0KCkgY2FsbHMuXFxuKyAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBmZF91c2FibGVfYXNfZGZkKVxcbit7XFxuK1xcdGludCBwYXJlbnRfZmQsIGNoaWxkX2ZkO1xcbitcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXG4rXFx0cGFyZW50X2ZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChzZWxmLVxcdTAwM2VkZmQsIFxcXCJwYXJlbnRcXFwiKTtcXG4rXFx0Y2hpbGRfZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHBhcmVudF9mZCwgXFxcImNoaWxkXFxcIik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoY2hpbGRfZmQpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKGNsb3NlKHBhcmVudF9mZCksIDApO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiJXMvcGFyZW50L2NoaWxkXFxcIiwgc2VsZi1cXHUwMDNlZGlycGF0aCk7XFxuK1xcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XFxuK1xcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXFxcIiVzL3BhcmVudFxcXCIsIHNlbGYtXFx1MDAzZWRpcnBhdGgpO1xcbitcXHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xcbit9XFxuK1xcbitURVNUX0hBUk5FU1NfTUFJTlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy93cmFwcGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvd3JhcHBlcnMuaFxcbmluZGV4IDQyMGFlNGY5MDhjZjIuLmFiZTViODVjZWJkY2QgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvd3JhcHBlcnMuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3dyYXBwZXJzLmhcXG5AQCAtMTMsNiArMTMsMTAgQEBcXG4gI2RlZmluZSBTVEFUWF9NTlRfSURfVU5JUVVFIDB4MDAwMDQwMDBVIC8qIFdhbnQvZ290IGV4dGVuZGVkIHN0eF9tb3VudF9pZCAqL1xcbiAjZW5kaWZcXG4gXFxuKyNpZm5kZWYgRkRfSU5WQUxJRFxcbisjZGVmaW5lIEZEX0lOVkFMSUQgLTEwMDA5XFxuKyNlbmRpZlxcbitcXG4gc3RhdGljIGlubGluZSBpbnQgc3lzX2Zzb3Blbihjb25zdCBjaGFyICpmc25hbWUsIHVuc2lnbmVkIGludCBmbGFncylcXG4ge1xcbiBcXHRyZXR1cm4gc3lzY2FsbChfX05SX2Zzb3BlbiwgZnNuYW1lLCBmbGFncyk7XFxuQEAgLTEwNSw0ICsxMDksMTEgQEAgc3RhdGljIGlubGluZSBpbnQgc3lzX29wZW5fdHJlZShpbnQgZGZkLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgaW50IGZsYWdcXG4gXFx0cmV0dXJuIHN5c2NhbGwoX19OUl9vcGVuX3RyZWUsIGRmZCwgZmlsZW5hbWUsIGZsYWdzKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnQgb3BlbmF0X29fbWtkaXIoaW50IGRmZCwgY29uc3QgY2hhciAqcGF0aG5hbWUsXFxuK1xcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlKVxcbit7XFxuK1xcdHJldHVybiBzeXNjYWxsKF9fTlJfb3BlbmF0LCBkZmQsIHBhdGhuYW1lLFxcbitcXHRcXHQgICAgICAgZmxhZ3MgfCBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQsIG1vZGUpO1xcbit9XFxuK1xcbiAjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTQ6MTEuNzMzMzc3NzYxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI3MzIxMjM5NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIjlQX0ZTXCIsXG4gICAgXCJDRVBIX0ZTXCIsXG4gICAgXCJGVVNFX0ZTXCIsXG4gICAgXCJHRlMyX0ZTXCIsXG4gICAgXCJORlNfRlNcIixcbiAgICBcIkNJRlNcIixcbiAgICBcIlZCT1hTRl9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19ta2RpclwiLFxuICAgIFwidmZzX2NyZWF0ZVwiLFxuICAgIFwidmZzX2xvb2t1cF9vcGVuXCIsXG4gICAgXCJkZW50cnlfY3JlYXRlXCIsXG4gICAgXCJmaWxlbmFtZV9ta2RpcmF0XCIsXG4gICAgXCJmaWxlbmFtZV91bmxpbmthdFwiLFxuICAgIFwiZmlsZW5hbWVfcmVuYW1lYXQyXCIsXG4gICAgXCJ2OWZzX3Zmc19hdG9taWNfb3BlblwiLFxuICAgIFwidjlmc192ZnNfYXRvbWljX29wZW5fZG90bFwiLFxuICAgIFwiY2VwaF9hdG9taWNfb3BlblwiLFxuICAgIFwiZnVzZV9hdG9taWNfb3BlblwiLFxuICAgIFwiZ2ZzMl9hdG9taWNfb3BlblwiLFxuICAgIFwibmZzX2F0b21pY19vcGVuXCIsXG4gICAgXCJuZnNfYXRvbWljX29wZW5fdjIzXCIsXG4gICAgXCJjaWZzX2F0b21pY19vcGVuXCIsXG4gICAgXCJ2Ym94c2ZfZGlyX2F0b21pY19vcGVuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgIGZvciBgb3BlbmF0KClgIHRvIGF0b21pY2FsbHkgY3JlYXRlIGEgZGlyZWN0b3J5IGFuZCByZXR1cm4gYSBmaWxlIGRlc2NyaXB0b3IuIEl0IG1vZGlmaWVzIGNvcmUgVkZTIHBhdGggcmVzb2x1dGlvbiBhbmQgY3JlYXRpb24gbG9naWMgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYCwgYW5kIHVwZGF0ZXMgc2V2ZXJhbCBmaWxlc3lzdGVtcycgYGF0b21pY19vcGVuYCBpbXBsZW1lbnRhdGlvbnMgdG8gaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbi4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDY5NzRmMmRhZTAzYTMxNGVlZGNkMjI1MTQ5ZTEyNmI2NjA5NGI0ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDE2OjE0OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuY1xuaW5kZXggMzgyOTU1NGNhMzY5Mi4uYjFlMDgyM2M4N2I1NyAxMDA2NDRcbi0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jXG4rKysgYi9mcy85cC92ZnNfaW5vZGUuY1xuQEAgLTc3Niw2ICs3NzYsOSBAQCB2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdGludCBwOV9vbW9kZTtcbiBcbitcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7XG4gXHRcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuaW5kZXggMTE2YjI5ZTk1ZjIxZS4uNjRlMGFiYTA4ZGExNiAxMDA2NDRcbi0tLSBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcbisrKyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcbkBAIC0yMzgsNiArMjM4LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0c3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcztcbiBcdHN0cnVjdCBwb3NpeF9hY2wgKnBhY2wgPSBOVUxMLCAqZGFjbCA9IE5VTEw7XG4gXG4rXHRpZiAoT19JU19NS0RJUihmbGFncykpXG4rXHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2OWZzX3Zmc19sb29rdXAoZGlyLCBkZW50cnksIDApO1xuIFx0XHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXG5kaWZmIC0tZ2l0IGEvZnMvY2VwaC9maWxlLmMgYi9mcy9jZXBoL2ZpbGUuY1xuaW5kZXggYTRhMmE0YjZhMDI3ZC4uNjIxNjNiN2VjYTVmOSAxMDA2NDRcbi0tLSBhL2ZzL2NlcGgvZmlsZS5jXG4rKysgYi9mcy9jZXBoL2ZpbGUuY1xuQEAgLTgxMiw2ICs4MTIsOSBAQCBpbnQgY2VwaF9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0ICAgICAgZGlyLCBjZXBoX3Zpbm9wKGRpciksIGRlbnRyeSwgZGVudHJ5LFxuIFx0ICAgICAgZF91bmhhc2hlZChkZW50cnkpID8gXCJ1bmhhc2hlZFwiIDogXCJoYXNoZWRcIiwgZmxhZ3MsIG1vZGUpO1xuIFxuK1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX25hbWUubGVuIFx1MDAzZSBOQU1FX01BWClcbiBcdFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZnVzZS9kaXIuYyBiL2ZzL2Z1c2UvZGlyLmNcbmluZGV4IGQ0ZTAwMjk4MTBjMGYuLjU1ZDU4NDRlMjY1NTkgMTAwNjQ0XG4tLS0gYS9mcy9mdXNlL2Rpci5jXG4rKysgYi9mcy9mdXNlL2Rpci5jXG5AQCAtOTM1LDYgKzkzNSw5IEBAIHN0YXRpYyBpbnQgZnVzZV9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZW50cnksXG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuIFx0c3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7XG4gXG4rXHRpZiAoT19JU19NS0RJUihmbGFncykpXG4rXHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRpZiAoZnVzZV9pc19iYWQoZGlyKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jXG5pbmRleCBmMzYxODc2YzU1ODMzLi4zZWUxMzYwZjFiYzI3IDEwMDY0NFxuLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jXG4rKysgYi9mcy9nZnMyL2lub2RlLmNcbkBAIC0xMzg2LDYgKzEzODYsOSBAQCBzdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiB7XG4gXHRib29sIGV4Y2wgPSAhIShmbGFncyBcdTAwMjYgT19FWENMKTtcbiBcbitcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKmQgPSBfX2dmczJfbG9va3VwKGRpciwgZGVudHJ5LCBmaWxlKTtcbiBcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpIHtcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggMjBhNjUzNGVhM2VmZi4uZTFhOGYxODM4NWE1MiAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbisrKyBiL2ZzL25hbWVpLmNcbkBAIC0xMzgyLDEzICsxMzgyLDEzIEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcbiBcbiAvKipcbiAgKiBtYXlfY3JlYXRlX2luX3N0aWNreSAtIENoZWNrIHdoZXRoZXIgYW4gT19DUkVBVCBvcGVuIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxuLSAqXHRcdFx0ICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcyB0aGF0IGFscmVhZHlcbi0gKlx0XHRcdCAgZXhpc3QuXG4rICpcdFx0XHQgIHNob3VsZCBiZSBhbGxvd2VkLCBvciBub3QsIG9uIGZpbGVzL2RpcmVjdG9yaWVzIHRoYXRcbisgKlx0XHRcdCAgYWxyZWFkeSBleGlzdC5cbiAgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cbiAgKiBAbmQ6IG5hbWVpZGF0YSBwYXRod2FsayBkYXRhXG4gICogQGlub2RlOiB0aGUgaW5vZGUgb2YgdGhlIGZpbGUgdG8gb3BlblxuICAqXG4tICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUpIHdoZW46XG4rICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUvZGlyZWN0b3J5KSB3aGVuOlxuICAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWRcbiAgKiAgIC0gdGhlIGZpbGUgYWxyZWFkeSBleGlzdHNcbiAgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxuQEAgLTE0MTYsNiArMTQxNiwxNCBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdGlmIChsaWtlbHkoIShkaXJfbW9kZSBcdTAwMjYgU19JU1ZUWCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdC8qXG4rXHQgKiBUaGVyZSBpcyBubyBzZXBhcmF0ZSBzeXNjdGwgZm9yIGRpcmVjdG9yeSBjcmVhdGlvbiBpbiBzdGlja3lcbitcdCAqIGZvbGRlcnMuIFRoZXJlZm9yZSwgZm9yIHRoZSBTX0lTRElSIGNhc2UsIGRpc2FibGluZ1xuK1x0ICogc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyIGlzIG5vdCBlbm91Z2ggdG8gYWxsb3cgY3JlYXRpbmcgYVxuK1x0ICogZGlyZWN0b3J5IGluIGEgc3RpY2t5IGZvbGRlciwgYmVjYXVzZSB0aGF0IG1heSBzdXJwcmlzZSB1c2Vyc1xuK1x0ICogbm90IGV4cGVjdGluZyB0aGF0IE9fQ1JFQVR8T19ESVJFQ1RPUlkgaXMgcG9zc2libGUgb24gbmV3ZXJcbitcdCAqIGtlcm5lbHMuXG4rXHQgKi9cbiBcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2ICFzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTE0NDcsNiArMTQ1NSwxMiBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdFx0XHRcdFx0ICAgICAgXCJzdGlja3lfY3JlYXRlX3JlZ3VsYXJcIik7XG4gXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHRcdH1cbitcbitcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuK1x0XHRcdGF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULFxuK1x0XHRcdFx0XHQgICAgICBcInN0aWNreV9jcmVhdGVfZGlyXCIpO1xuK1x0XHRcdHJldHVybiAtRUFDQ0VTO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0yNzgxLDkgKzI3OTUsMTYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnBhdGhfaW5pdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgZmxhZ3MpXG4gXHRyZXR1cm4gcztcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHRyYWlsaW5nX3NsYXNoZXMoY29uc3Qgc3RydWN0IHFzdHIgKmxhc3QpXG4re1xuK1x0LyogbGFzdC1cdTAwM2VsZW4gaXMgc2V0IGJ5IGhhc2hfbmFtZSgpIHRvIHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnRcbitcdCAqIGNvbXBvbmVudCAtXHUwMDNlbmFtZSwgdGVybWluYXRpbmcgd2l0aCAnLycgb3IgYSBOVUwgY2hhcmFjdGVyLiAqL1xuK1x0cmV0dXJuIChib29sKWxhc3QtXHUwMDNlbmFtZVtsYXN0LVx1MDAzZWxlbl07XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbG9va3VwX2xhc3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQpXG4ge1xuLVx0aWYgKG5kLVx1MDAzZWxhc3RfdHlwZSA9PSBMQVNUX05PUk0gXHUwMDI2XHUwMDI2IG5kLVx1MDAzZWxhc3QubmFtZVtuZC1cdTAwM2VsYXN0Lmxlbl0pXG4rXHRpZiAobmQtXHUwMDNlbGFzdF90eXBlID09IExBU1RfTk9STSBcdTAwMjZcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhcdTAwMjZuZC1cdTAwM2VsYXN0KSlcbiBcdFx0bmQtXHUwMDNlZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7XG4gXG4gXHRyZXR1cm4gd2Fsa19jb21wb25lbnQobmQsIFdBTEtfVFJBSUxJTkcpO1xuQEAgLTQxNTksNiArNDE4MCwyNCBAQCBzdGF0aWMgaW5saW5lIHVtb2RlX3QgdmZzX3ByZXBhcmVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdHJldHVybiBtb2RlO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lXG4raW50IHZmc19jcmVhdGVfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHQgICAgICAgdW1vZGVfdCBtb2RlLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSlcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmRpciA9IGRfaW5vZGUoZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbitcdGludCBlcnJvcjtcbitcbitcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRlcnJvciA9IGRpci1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0aWYgKCFlcnJvcilcbitcdFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcbitcbitcdHJldHVybiBlcnJvcjtcbit9XG4rXG4gLyoqXG4gICogdmZzX2NyZWF0ZSAtIGNyZWF0ZSBuZXcgZmlsZVxuICAqIEBpZG1hcDpcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cbkBAIC00MTkxLDEzICs0MjMwLDggQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4tXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0cmV0dXJuIGVycm9yO1xuLVx0ZXJyb3IgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbi1cdGlmICghZXJyb3IpXG4tXHRcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XG4tXHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRyZXR1cm4gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsIGRpKTtcbiB9XG4gRVhQT1JUX1NZTUJPTCh2ZnNfY3JlYXRlKTtcbiBcbkBAIC00MzE0LDIxICs0MzQ4LDQxIEBAIHN0YXRpYyBpbmxpbmUgaW50IG9wZW5fdG9fbmFtZWlfZmxhZ3MoaW50IGZsYWcpXG4gXG4gc3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0Y29uc3Qgc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdHVtb2RlX3QgbW9kZSlcbitcdFx0XHRpbnQgb3Blbl9mbGFnLCB1bW9kZV90IG1vZGUpXG4ge1xuLVx0aW50IGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XG4rXHRzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZTtcbitcdGJvb2wgY3JlYXRlX2RpciA9IE9fSVNfTUtESVIob3Blbl9mbGFnKTtcbitcdGludCBlcnJvcjtcbitcbitcdGlmIChjcmVhdGVfZGlyKVxuK1x0XHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZWxzZVxuK1x0XHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4gXHRpZiAoIWZzdWlkZ2lkX2hhc19tYXBwaW5nKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9zYiwgaWRtYXApKVxuIFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcbi1cdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLFxuLVx0XHRcdFx0IE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbitcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuK1x0aWYgKGNyZWF0ZV9kaXIpXG4rXHRcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xuK1x0ZWxzZVxuK1x0XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4rXG4rXHRyZXR1cm4gZXJyb3I7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdW1vZGVfdCBvX2NyZWF0ZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgaW50IG9wZW5fZmxhZywgdW1vZGVfdCBtb2RlKVxuK3tcbitcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZykpXG4rXHRcdHJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIFNfSUZESVIpO1xuK1x0ZWxzZVxuK1x0XHRyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuIH1cbiBcbiAvKipcbkBAIC00MzY0LDggKzQ0MTgsOSBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeVxuIFxuIFx0ZmlsZS1cdTAwM2VfX2ZfcGF0aC5kZW50cnkgPSBERU5UUllfTk9UX1NFVDtcbiBcdGZpbGUtXHUwMDNlX19mX3BhdGgubW50ID0gcGF0aC1cdTAwM2VtbnQ7XG4rXG4gXHRlcnJvciA9IGRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWF0b21pY19vcGVuKGRpcl9pbm9kZSwgZGVudHJ5LCBmaWxlLFxuLVx0XHRcdFx0ICAgICAgIG9wZW5fdG9fbmFtZWlfZmxhZ3Mob3Blbl9mbGFnKSwgbW9kZSk7XG4rXHRcdFx0XHRcdCAgICAgb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpLCBtb2RlKTtcbiBcdGRfbG9va3VwX2RvbmUoZGVudHJ5KTtcbiBcbiBcdGlmICghZXJyb3IpIHtcbkBAIC00NDEwLDEwICs0NDY1LDIxIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5XG4gXHRcdH1cbiBcdFx0ZHB1dChkZW50cnkpO1xuIFx0XHRkZW50cnkgPSBFUlJfUFRSKGVycm9yKTtcbitcdH0gZWxzZSB7XG4rXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQ1JFQVRFRClcbitcdFx0XHRmc25vdGlmeV9jcmVhdGUoZGlyX2lub2RlLCBkZW50cnkpO1xuK1x0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRClcbitcdFx0XHRmc25vdGlmeV9vcGVuKGZpbGUpO1xuIFx0fVxuK1xuK1xuIFx0cmV0dXJuIGRlbnRyeTtcbiB9XG4gXG4rc3RhdGljIGlubGluZVxuK3N0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosXG4rXHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LFxuK1x0XHRcdFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKik7XG4gLypcbiAgKiBMb29rIHVwIGFuZCBtYXliZSBjcmVhdGUgYW5kIG9wZW4gdGhlIGxhc3QgY29tcG9uZW50LlxuICAqXG5AQCAtNDQzNSw2ICs0NTAxLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwO1xuIFx0c3RydWN0IGRlbnRyeSAqZGlyID0gbmQtXHUwMDNlcGF0aC5kZW50cnk7XG4gXHRzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci1cdTAwM2VkX2lub2RlO1xuK1x0Ym9vbCBjcmVhdGVfZGlyID0gT19JU19NS0RJUihvcC1cdTAwM2Vtb2RlKTtcbiBcdGludCBvcGVuX2ZsYWc7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4gXHRpbnQgZXJyb3IsIGNyZWF0ZV9lcnJvcjtcbkBAIC00NDU1LDcgKzQ1MjIsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHQgKi9cbiBcdH1cbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpXG4tXHRcdGlub2RlX2xvY2soZGlyX2lub2RlKTtcbitcdFx0aW5vZGVfbG9ja19uZXN0ZWQoZGlyX2lub2RlLCBJX01VVEVYX1BBUkVOVCk7XG4gXHRlbHNlXG4gXHRcdGlub2RlX2xvY2tfc2hhcmVkKGRpcl9pbm9kZSk7XG4gXG5AQCAtNDUwNywxMiArNDU3NCwxNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkge1xuIFx0XHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0wpXG4gXHRcdFx0b3Blbl9mbGFnIFx1MDAyNj0gfk9fVFJVTkM7XG4tXHRcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIG1vZGUsIG1vZGUpO1xuK1x0XHRtb2RlID0gb19jcmVhdGVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBvcGVuX2ZsYWcsIG1vZGUpO1xuIFx0XHRpZiAobGlrZWx5KGdvdF93cml0ZSkpXG4gXHRcdFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBcdTAwMjZuZC1cdTAwM2VwYXRoLFxuLVx0XHRcdFx0XHRcdCAgICBkZW50cnksIG1vZGUpO1xuK1x0XHRcdFx0XHRcdCAgICBkZW50cnksIG9wZW5fZmxhZywgbW9kZSk7XG4gXHRcdGVsc2VcbiBcdFx0XHRjcmVhdGVfZXJyb3IgPSAtRVJPRlM7XG4rXHRcdC8qIFJlZnVzZSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgdGhyb3VnaCBhIGRhbmdsaW5nICh0cmFpbGluZylcbitcdFx0ICogc3ltbGluay4gRm9yIHJlZ3VsYXIgZmlsZXMgdGhpcyBoYXMgYmVlbiBhbGxvd2VkIGhpc3RvcmljYWxseVxuK1x0XHQgKiBvbiBPX0NSRUFUIHdpdGhvdXQgT19FWENMLiAqL1xuK1x0XHRpZiAodW5saWtlbHkobmQtXHUwMDNlZGVwdGgpIFx1MDAyNlx1MDAyNiBjcmVhdGVfZGlyIFx1MDAyNlx1MDAyNiAhY3JlYXRlX2Vycm9yKVxuK1x0XHRcdGNyZWF0ZV9lcnJvciA9IC1FRVhJU1Q7XG4gXHR9XG4gXHRpZiAoY3JlYXRlX2Vycm9yKVxuIFx0XHRvcGVuX2ZsYWcgXHUwMDI2PSB+T19DUkVBVDtcbkBAIC00NTM3LDYgKzQ2MDksNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdGRlbnRyeSA9IHJlcztcbiBcdFx0fVxuIFx0fVxuK1xuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX2lub2RlIHx8ICEob3AtXHUwMDNlb3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBObyBuZWVkIHRvIGNyZWF0ZSBhIGZpbGUuICBJZiBsb29rdXAgcmV0dXJuZWQgYSBwb3NpdGl2ZVxuQEAgLTQ1NTQsMjYgKzQ2MjcsMjYgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0Z290byBvdXRfZHB1dDtcbiBcdH1cbiBcbi1cdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpcl9pbm9kZSwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBvdXRfZHB1dDtcbi1cbi1cdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7XG4tXHRpZiAoIWRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZSkge1xuK1x0aWYgKChjcmVhdGVfZGlyIFx1MDAyNlx1MDAyNiAhZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlbWtkaXIpXG4rXHRcdHx8ICghY3JlYXRlX2RpciBcdTAwMjZcdTAwMjYgIWRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZSkpIHtcbiBcdFx0ZXJyb3IgPSAtRUFDQ0VTO1xuIFx0XHRnb3RvIG91dF9kcHV0O1xuIFx0fVxuIFxuLVx0ZXJyb3IgPSBkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbitcdGlmIChjcmVhdGVfZGlyKSB7XG4rXHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSxcbitcdFx0XHRcdFx0XHQgICAgICAgbW9kZSwgXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcbitcdFx0XHRlcnJvciA9IFBUUl9FUlJfT1JfWkVSTyhyZXMpO1xuK1x0XHRcdGlmICghZXJyb3IpXG4rXHRcdFx0XHRkZW50cnkgPSByZXM7XG4rXHR9IGVsc2Uge1xuK1x0XHRlcnJvciA9IHZmc19jcmVhdGVfbm9fcGVybShpZG1hcCwgZGVudHJ5LCBtb2RlLCBcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xuK1x0fVxuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIG91dF9kcHV0O1xuK1xuK1x0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDtcbiBvdXQ6XG4tXHRpZiAoIUlTX0VSUihkZW50cnkpKSB7XG4tXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQ1JFQVRFRClcbi1cdFx0XHRmc25vdGlmeV9jcmVhdGUoZGlyX2lub2RlLCBkZW50cnkpO1xuLVx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRClcbi1cdFx0XHRmc25vdGlmeV9vcGVuKGZpbGUpO1xuLVx0fVxuIFx0aWYgKChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHx8IGNyZWF0ZV9lcnJvcilcbiBcdFx0aW5vZGVfdW5sb2NrKGRpcl9pbm9kZSk7XG4gXHRlbHNlXG5AQCAtNDY5NSwxNyArNDc2OCwxMiBAQCBzdHJ1Y3QgZmlsZSAqdmZzX2xvb2t1cF9vcGVuKHN0cnVjdCBwYXRoICpwYXJlbnQsIHN0cnVjdCBxc3RyICpsYXN0LFxuIH1cbiBFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHZmc19sb29rdXBfb3BlbiwgXCJuZnNkXCIpO1xuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuLXtcbi1cdHJldHVybiAoYm9vbCluZC1cdTAwM2VsYXN0Lm5hbWVbbmQtXHUwMDNlbGFzdC5sZW5dO1xuLX1cbi1cbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpXG4ge1xuIFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuIFxuIFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkge1xuLVx0XHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZCkpXG4rXHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKFx1MDAyNm5kLVx1MDAzZWxhc3QpIFx1MDAyNlx1MDAyNiAhKG9wZW5fZmxhZyBcdTAwMjYgT19ESVJFQ1RPUlkpKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FSVNESVIpO1xuIFxuIFx0XHQvKiBEb24ndCBib3RoZXIgb24gYW4gT19FWENMIGNyZWF0ZSAqL1xuQEAgLTQ3MTMsNyArNDc4MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZylcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcbitcdGlmICh0cmFpbGluZ19zbGFzaGVzKFx1MDAyNm5kLVx1MDAzZWxhc3QpKVxuIFx0XHRuZC1cdTAwM2VmbGFncyB8PSBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWTtcbiBcbiBcdGRlbnRyeSA9IGxvb2t1cF9mYXN0KG5kKTtcbkBAIC00ODA2LDggKzQ4NzQsOSBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG4gXHRcdGlmICgob3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0wpIFx1MDAyNlx1MDAyNiAhKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKSlcbiBcdFx0XHRyZXR1cm4gLUVFWElTVDtcbi1cdFx0aWYgKGRfaXNfZGlyKG5kLVx1MDAzZXBhdGguZGVudHJ5KSlcbitcdFx0aWYgKCEob3Blbl9mbGFnIFx1MDAyNiBPX0RJUkVDVE9SWSkgXHUwMDI2XHUwMDI2IGRfaXNfZGlyKG5kLVx1MDAzZXBhdGguZGVudHJ5KSlcbiBcdFx0XHRyZXR1cm4gLUVJU0RJUjtcbitcbiBcdFx0ZXJyb3IgPSBtYXlfY3JlYXRlX2luX3N0aWNreShpZG1hcCwgbmQsXG4gXHRcdFx0XHRcdCAgICAgZF9iYWNraW5nX2lub2RlKG5kLVx1MDAzZXBhdGguZGVudHJ5KSk7XG4gXHRcdGlmICh1bmxpa2VseShlcnJvcikpXG5AQCAtNTA4Nyw3ICs1MTU2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZShpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXG4gXHQgKiBEbyB0aGUgZmluYWwgbG9va3VwLiAgU3VwcHJlc3MgJ2NyZWF0ZScgaWYgdGhlcmUgaXMgYSB0cmFpbGluZ1xuIFx0ICogJy8nLCBhbmQgYSBkaXJlY3Rvcnkgd2Fzbid0IHJlcXVlc3RlZC5cbiBcdCAqL1xuLVx0aWYgKGxhc3QubmFtZVtsYXN0Lmxlbl0gXHUwMDI2XHUwMDI2ICF3YW50X2RpcilcbitcdGlmICh0cmFpbGluZ19zbGFzaGVzKFx1MDAyNmxhc3QpIFx1MDAyNlx1MDAyNiAhd2FudF9kaXIpXG4gXHRcdGNyZWF0ZV9mbGFncyBcdTAwMjY9IH5MT09LVVBfQ1JFQVRFO1xuIFx0ZGVudHJ5ID0gc3RhcnRfZGlyb3AocGF0aC1cdTAwM2VkZW50cnksIFx1MDAyNmxhc3QsIHJldmFsX2ZsYWcgfCBjcmVhdGVfZmxhZ3MpO1xuIFx0aWYgKElTX0VSUihkZW50cnkpKVxuQEAgLTUxODIsNyArNTI1MSw3IEBAIHN0cnVjdCBmaWxlICpkZW50cnlfY3JlYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSxcbiBcdFx0cGF0aC1cdTAwM2VkZW50cnkgPSBkaXI7XG4gXHRcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7XG4gXG4tXHRcdGNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgcGF0aCwgZGVudHJ5LCBtb2RlKTtcbitcdFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIGZsYWdzLCBtb2RlKTtcbiBcdFx0aWYgKGNyZWF0ZV9lcnJvcilcbiBcdFx0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuIFxuQEAgLTUzNTYsNiArNTQyNSwzNCBAQCBTWVNDQUxMX0RFRklORTMobWtub2QsIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lLCB1bW9kZV90LCBtb2RlLCB1bnNpZ25lZCwgZFxuIFx0cmV0dXJuIGZpbGVuYW1lX21rbm9kYXQoQVRfRkRDV0QsIG5hbWUsIG1vZGUsIGRldik7XG4gfVxuIFxuKy8qIFJldHVybnMgdGhlIGRlbnRyeSB0byB1c2UgKG5vdCBOVUxMKSBvciAtRSBvbiBlcnJvciAqL1xuK3N0YXRpYyBpbmxpbmVcbitzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG4rXHRcdFx0XHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpXG4re1xuK1x0aW50IGVycm9yO1xuK1x0c3RydWN0IGRlbnRyeSAqZGU7XG4rXHR1bnNpZ25lZCBtYXhfbGlua3MgPSBkaXItXHUwMDNlaV9zYi1cdTAwM2VzX21heF9saW5rcztcbitcbitcdGlmIChtYXhfbGlua3MgXHUwMDI2XHUwMDI2IGRpci1cdTAwM2VpX25saW5rIFx1MDAzZT0gbWF4X2xpbmtzKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU1MSU5LKTtcbitcbitcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnJvcik7XG4rXG4rXHRkZSA9IGRpci1cdTAwM2VpX29wLVx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRpZiAoSVNfRVJSKGRlKSlcbitcdFx0cmV0dXJuIGRlO1xuK1x0aWYgKGRlKSB7XG4rXHRcdGRwdXQoZGVudHJ5KTtcbitcdFx0ZGVudHJ5ID0gZGU7XG4rXHR9XG4rXHRmc25vdGlmeV9ta2RpcihkaXIsIGRlbnRyeSk7XG4rXHRyZXR1cm4gZGVudHJ5O1xuK31cbitcbiAvKipcbiAgKiB2ZnNfbWtkaXIgLSBjcmVhdGUgZGlyZWN0b3J5IHJldHVybmluZyBjb3JyZWN0IGRlbnRyeSBpZiBwb3NzaWJsZVxuICAqIEBpZG1hcDpcdFx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuQEAgLTUzODMsNyArNTQ4MCw2IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRlbGVnYXRlZF9pbm9kZSlcbiB7XG4gXHRpbnQgZXJyb3I7XG4tXHR1bnNpZ25lZCBtYXhfbGlua3MgPSBkaXItXHUwMDNlaV9zYi1cdTAwM2VzX21heF9saW5rcztcbiBcdHN0cnVjdCBkZW50cnkgKmRlO1xuIFxuIFx0ZXJyb3IgPSBtYXlfY3JlYXRlX2RlbnRyeShpZG1hcCwgZGlyLCBkZW50cnkpO1xuQEAgLTUzOTksMjQgKzU0OTUsMTIgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBlcnI7XG4gXG4tXHRlcnJvciA9IC1FTUxJTks7XG4tXHRpZiAobWF4X2xpbmtzIFx1MDAyNlx1MDAyNiBkaXItXHUwMDNlaV9ubGluayBcdTAwM2U9IG1heF9saW5rcylcbi1cdFx0Z290byBlcnI7XG4tXG4tXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gZXJyO1xuLVxuLVx0ZGUgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2Vta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuLVx0ZXJyb3IgPSBQVFJfRVJSKGRlKTtcbi1cdGlmIChJU19FUlIoZGUpKVxuK1x0ZGUgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7XG4rXHRpZiAoSVNfRVJSKGRlKSkge1xuK1x0XHRlcnJvciA9IFBUUl9FUlIoZGUpO1xuIFx0XHRnb3RvIGVycjtcbi1cdGlmIChkZSkge1xuLVx0XHRkcHV0KGRlbnRyeSk7XG4tXHRcdGRlbnRyeSA9IGRlO1xuIFx0fVxuLVx0ZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpO1xuLVx0cmV0dXJuIGRlbnRyeTtcbitcdHJldHVybiBkZTtcbiBcbiBlcnI6XG4gXHRlbmRfY3JlYXRpbmcoZGVudHJ5KTtcbkBAIC01NzAzLDcgKzU3ODcsNyBAQCBpbnQgZmlsZW5hbWVfdW5saW5rYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKVxuIFx0XHRnb3RvIGV4aXRfZHJvcF93cml0ZTtcbiBcbiBcdC8qIFdoeSBub3QgYmVmb3JlPyBCZWNhdXNlIHdlIHdhbnQgY29ycmVjdCBlcnJvciB2YWx1ZSAqL1xuLVx0aWYgKHVubGlrZWx5KGxhc3QubmFtZVtsYXN0Lmxlbl0pKSB7XG4rXHRpZiAodW5saWtlbHkodHJhaWxpbmdfc2xhc2hlcyhcdTAwMjZsYXN0KSkpIHtcbiBcdFx0aWYgKGRfaXNfZGlyKGRlbnRyeSkpXG4gXHRcdFx0ZXJyb3IgPSAtRUlTRElSO1xuIFx0XHRlbHNlXG5AQCAtNjMwNSwxNiArNjM4OSwxNiBAQCBpbnQgZmlsZW5hbWVfcmVuYW1lYXQyKGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZnJvbSxcbiBcdGlmIChmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSB7XG4gXHRcdGlmICghZF9pc19kaXIocmQubmV3X2RlbnRyeSkpIHtcbiBcdFx0XHRlcnJvciA9IC1FTk9URElSO1xuLVx0XHRcdGlmIChuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pXG4rXHRcdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMoXHUwMDI2bmV3X2xhc3QpKVxuIFx0XHRcdFx0Z290byBleGl0X3VubG9jaztcbiBcdFx0fVxuIFx0fVxuIFx0LyogdW5sZXNzIHRoZSBzb3VyY2UgaXMgYSBkaXJlY3RvcnkgdHJhaWxpbmcgc2xhc2hlcyBnaXZlIC1FTk9URElSICovXG4gXHRpZiAoIWRfaXNfZGlyKHJkLm9sZF9kZW50cnkpKSB7XG4gXHRcdGVycm9yID0gLUVOT1RESVI7XG4tXHRcdGlmIChvbGRfbGFzdC5uYW1lW29sZF9sYXN0Lmxlbl0pXG4rXHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKFx1MDAyNm9sZF9sYXN0KSlcbiBcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuLVx0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgbmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKVxuK1x0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhcdTAwMjZuZXdfbGFzdCkpXG4gXHRcdFx0Z290byBleGl0X3VubG9jaztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmNcbmluZGV4IDM2ZjJlODU4ODkyMjAuLmI0ZGI3MDNjOWU4YzcgMTAwNjQ0XG4tLS0gYS9mcy9uZnMvZGlyLmNcbisrKyBiL2ZzL25mcy9kaXIuY1xuQEAgLTIxMjEsNiArMjEyMSw5IEBAIGludCBuZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdGRmcHJpbnRrKFZGUywgXCJORlM6IGF0b21pY19vcGVuKCVzLyVsbHUpLCAlcGRcXG5cIixcbiBcdFx0XHRkaXItXHUwMDNlaV9zYi1cdTAwM2VzX2lkLCBkaXItXHUwMDNlaV9pbm8sIGRlbnRyeSk7XG4gXG4rXHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcbitcdFx0b3Blbl9mbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0ZXJyID0gbmZzX2NoZWNrX2ZsYWdzKG9wZW5fZmxhZ3MpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC0yMzEzLDYgKzIzMTYsOSBAQCBpbnQgbmZzX2F0b21pY19vcGVuX3YyMyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0ICovXG4gXHRpbnQgZXJyb3IgPSAwO1xuIFxuK1x0aWYgKE9fSVNfTUtESVIob3Blbl9mbGFncykpXG4rXHRcdG9wZW5fZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChkZW50cnktXHUwMDNlZF9uYW1lLmxlbiBcdTAwM2UgTkZTX1NFUlZFUihkaXIpLVx1MDAzZW5hbWVsZW4pXG4gXHRcdHJldHVybiAtRU5BTUVUT09MT05HO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uY1xuaW5kZXggNmIxYzE0ZTY4NGE5My4uNmNiNWUyYWQ3ODFmMyAxMDA2NDRcbi0tLSBhL2ZzL29wZW4uY1xuKysrIGIvZnMvb3Blbi5jXG5AQCAtMTIzOSwyOSArMTIzOSwzMCBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcdGlmIChXSUxMX0NSRUFURShmbGFncykpIHtcbiBcdFx0aWYgKGhvdy1cdTAwM2Vtb2RlIFx1MDAyNiB+U19JQUxMVUdPKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGUkVHO1xuK1x0XHRpZiAoT19JU19NS0RJUihmbGFncykpXG4rXHRcdFx0b3AtXHUwMDNlbW9kZSA9IGhvdy1cdTAwM2Vtb2RlIHwgU19JRkRJUjtcbitcdFx0ZWxzZVxuK1x0XHRcdG9wLVx1MDAzZW1vZGUgPSBob3ctXHUwMDNlbW9kZSB8IFNfSUZSRUc7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAoaG93LVx1MDAzZW1vZGUgIT0gMClcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0b3AtXHUwMDNlbW9kZSA9IDA7XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogQmxvY2sgYnVncyB3aGVyZSBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQgY3JlYXRlZCByZWd1bGFyIGZpbGVzLlxuLVx0ICogTm90ZSwgdGhhdCBibG9ja2luZyBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQgaGVyZSBhbHNvIHByb3RlY3RzXG4tXHQgKiBPX1RNUEZJTEUgYmVsb3cgd2hpY2ggcmVxdWlyZXMgT19ESVJFQ1RPUlkgYmVpbmcgcmFpc2VkLlxuLVx0ICovXG4tXHRpZiAoKGZsYWdzIFx1MDAyNiAoT19ESVJFQ1RPUlkgfCBPX0NSRUFUKSkgPT0gKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0LyogTm93IGhhbmRsZSB0aGUgY3JlYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgT19UTVBGSUxFLiAqL1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBfX09fVE1QRklMRSkge1xuIFx0XHQvKlxuIFx0XHQgKiBJbiBvcmRlciB0byBlbnN1cmUgcHJvZ3JhbXMgZ2V0IGV4cGxpY2l0IGVycm9ycyB3aGVuIHRyeWluZ1xuIFx0XHQgKiB0byB1c2UgT19UTVBGSUxFIG9uIG9sZCBrZXJuZWxzIHdlIGVuZm9yY2UgdGhhdCBPX0RJUkVDVE9SWVxuLVx0XHQgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLlxuK1x0XHQgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLCBidXQgd2l0aG91dCBPX0NSRUFULiBUaGVcbitcdFx0ICogcmVhc29uIGZvciBkaXNhbGxvd2luZyBPX0NSRUFUfE9fVE1QRklMRSBpcyB0aGF0XG4rXHRcdCAqIE9fRElSRUNUT1JZfE9fQ1JFQVQgdXNlZCB0byB3b3JrIGFuZCBjcmVhdGVkIGEgcmVndWxhciBmaWxlXG4rXHRcdCAqIGlmIG5vdGhpbmcgZXhpc3RlZCBhdCB0aGUgb3BlbiBwYXRoLiBIZW5jZSwgYWxsb3dpbmcgdGhlXG4rXHRcdCAqIGNvbWJpbmF0aW9uIHdvdWxkIGhhdmUgY2F1c2VkIE9fQ1JFQVR8T19UTVBGSUxFIHRvIGNyZWF0ZSBhXG4rXHRcdCAqIHJlZ3VsYXIgKG5vbi10ZW1wb3JhcnkpIGZpbGUgb24gb2xkIGtlcm5lbHMsIHdoaWxlIHRoZSBjYWxsZXJcbitcdFx0ICogd291bGQgYmVsaWV2ZSB0aGV5IGNyZWF0ZWQgYW4gYWN0dWFsIE9fVE1QRklMRS5cbiBcdFx0ICovXG4tXHRcdGlmICghKGZsYWdzIFx1MDAyNiBPX0RJUkVDVE9SWSkpXG4rXHRcdGlmICghKGZsYWdzIFx1MDAyNiBPX0RJUkVDVE9SWSkgfHwgKGZsYWdzIFx1MDAyNiBPX0NSRUFUKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0aWYgKCEoYWNjX21vZGUgXHUwMDI2IE1BWV9XUklURSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTMxOCw2ICsxMzE5LDE1IEBAIGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxuIFxuIFx0b3AtXHUwMDNlaW50ZW50ID0gZmxhZ3MgXHUwMDI2IE9fUEFUSCA/IDAgOiBMT09LVVBfT1BFTjtcbiBcbitcdC8qXG4rXHQgKiBSZXF1ZXN0aW5nIHdyaXRlIGFjY2VzcyBvbiBhIGRpcmVjdG9yeSBjYW4gbmV2ZXIgc3VjY2VlZC4gUmF0aGVyXG4rXHQgKiB0aGFuIHBlcmZvcm1pbmcgYSBwYXRoLXdhbGsgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHRhcmdldCBpc1xuK1x0ICogYWN0dWFsbHkgYSBkaXJlY3RvcnkgKC1FSVNESVIpIG9yIG5vdCAoLUVOT1RESVIpLCB3ZSBzaG9ydC1jaXJjdWl0XG4rXHQgKiB0byAtRU5PVERJUi5cbitcdCAqL1xuK1x0aWYgKChmbGFncyBcdTAwMjYgT19ESVJFQ1RPUlkpIFx1MDAyNlx1MDAyNiAhKGZsYWdzIFx1MDAyNiBfX09fVE1QRklMRSkgXHUwMDI2XHUwMDI2IChhY2NfbW9kZSBcdTAwMjYgTUFZX1dSSVRFKSlcbitcdFx0cmV0dXJuIC1FTk9URElSO1xuK1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBPX0NSRUFUKSB7XG4gXHRcdG9wLVx1MDAzZWludGVudCB8PSBMT09LVVBfQ1JFQVRFO1xuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE9fRVhDTCkge1xuZGlmZiAtLWdpdCBhL2ZzL3NtYi9jbGllbnQvZGlyLmMgYi9mcy9zbWIvY2xpZW50L2Rpci5jXG5pbmRleCA3ODAzYmQ1YmQwMWY4Li5kMWFmOTBjOTgxY2Q0IDEwMDY0NFxuLS0tIGEvZnMvc21iL2NsaWVudC9kaXIuY1xuKysrIGIvZnMvc21iL2NsaWVudC9kaXIuY1xuQEAgLTUzOCw2ICs1MzgsOSBAQCBpbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXG4gXHRpZiAodW5saWtlbHkoY2lmc19mb3JjZWRfc2h1dGRvd24oY2lmc19zYikpKVxuIFx0XHRyZXR1cm4gc21iX0VJTyhzbWJfZWlvX3RyYWNlX2ZvcmNlZF9zaHV0ZG93bik7XG4gXG4rXHRpZiAoT19JU19NS0RJUihvZmxhZ3MpKVxuK1x0XHRvZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdC8qXG4gXHQgKiBQb3NpeCBvcGVuIGlzIG9ubHkgY2FsbGVkIChhdCBsb29rdXAgdGltZSkgZm9yIGZpbGUgY3JlYXRlIG5vdy4gRm9yXG4gXHQgKiBvcGVucyAocmF0aGVyIHRoYW4gY3JlYXRlcyksIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cgaWYgaXQgaXMgYSBmaWxlXG5kaWZmIC0tZ2l0IGEvZnMvdmJveHNmL2Rpci5jIGIvZnMvdmJveHNmL2Rpci5jXG5pbmRleCAwYjllYWIxNTc0MzJkLi42ZTMwNmRkZDcyMmJmIDEwMDY0NFxuLS0tIGEvZnMvdmJveHNmL2Rpci5jXG4rKysgYi9mcy92Ym94c2YvZGlyLmNcbkBAIC0zMTgsNiArMzE4LDkgQEAgc3RhdGljIGludCB2Ym94c2ZfZGlyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHR1NjQgaGFuZGxlO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHZib3hzZl9kaXJfbG9va3VwKHBhcmVudCwgZGVudHJ5LCAwKTtcbiBcdFx0aWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmNudGwuaCBiL2luY2x1ZGUvbGludXgvZmNudGwuaFxuaW5kZXggNmFkNmI5ZTdhMjI2YS4uMjA0ZTE2YmJlMjYzNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmNudGwuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mY250bC5oXG5AQCAtMzAsNiArMzAsMTIgQEBcbiAgKi9cbiAjZGVmaW5lIF9fT19SRUdVTEFSXHRcdCgxIFx1MDAzY1x1MDAzYyAzMClcbiBcbisjZGVmaW5lIE9fTUtESVJfTUFTS1x0KE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSlcbitzdGF0aWMgaW5saW5lIGJvb2wgT19JU19NS0RJUih1bnNpZ25lZCBpbnQgZmxhZ3MpXG4re1xuK1x0cmV0dXJuIChmbGFncyBcdTAwMjYgT19NS0RJUl9NQVNLKSA9PSBPX01LRElSX01BU0s7XG4rfVxuK1xuIC8qIExpc3Qgb2YgYWxsIHZhbGlkIGZsYWdzIGZvciB0aGUgaG93LVx1MDAzZXJlc29sdmUgYXJndW1lbnQ6ICovXG4gI2RlZmluZSBWQUxJRF9SRVNPTFZFX0ZMQUdTIFxcXG4gXHQoUkVTT0xWRV9OT19YREVWIHwgUkVTT0xWRV9OT19NQUdJQ0xJTktTIHwgUkVTT0xWRV9OT19TWU1MSU5LUyB8IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbmluZGV4IDllYjE4NWZiMmY5ZGQuLjAxYzU4OGQ0Yzg0ZjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlXG5AQCAtMSw0ICsxLDUgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbitvcGVuX29fY3JlYXRfb19kaXJcbiBkbm90aWZ5X3Rlc3RcbiBkZXZwdHNfcHRzXG4gZmNsb2dcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlXG5pbmRleCAwM2JlMzM3YzFmMzUxLi4wOTU5YmQyNjg3NWFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlXG5AQCAtMSw3ICsxLDcgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4gQ0ZMQUdTICs9ICQoS0hEUl9JTkNMVURFUylcbi1URVNUX0dFTl9QUk9HUyA6PSBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nIHVzdGF0X3Rlc3RcbitURVNUX0dFTl9QUk9HUyA6PSBvcGVuX29fY3JlYXRfb19kaXIgZGV2cHRzX3B0cyBmaWxlX3N0cmVzc29yIGFub25faW5vZGVfdGVzdCBrZXJuZnNfdGVzdCBmY2xvZyB1c3RhdF90ZXN0XG4gVEVTVF9HRU5fUFJPR1MgKz0gaWRtYXBwZWRfdG1wZmlsZVxuIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEIDo9IGRub3RpZnlfdGVzdFxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iZTBhYjM0MjY3ZTFkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuY1xuQEAgLTAsMCArMSwyMDEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbisjaW5jbHVkZSBcIndyYXBwZXJzLmhcIlxuK1xuKyNkZWZpbmUgb3BlbmF0X29fbWtkaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCBmbGFncykgKHtcdFxcXG4rXHRzdHJ1Y3Qgc3RhdCBfX3N0O1x0XHRcdFx0XHRcdFxcXG4rXHRpbnQgX19mZCA9IG9wZW5hdF9vX21rZGlyKGRmZCwgcGF0aG5hbWUsIGZsYWdzLCBTX0lSV1hVKTtcdFxcXG4rXHRBU1NFUlRfR0UoX19mZCwgMCk7XHRcdFx0XHRcdFx0XFxcbitcdEFTU0VSVF9FUShmc3RhdChfX2ZkLCBcdTAwMjZfX3N0KSwgMCk7XHRcdFx0XHRcXFxuK1x0RVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTtcdFx0XHRcdFxcXG4rXHRfX2ZkO1x0XHRcdFx0XHRcdFx0XHRcXFxuK30pXG4rXG4rI2RlZmluZSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKGRmZCwgcGF0aG5hbWUpIFxcXG4rXHRvcGVuYXRfb19ta2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIE9fUkRPTkxZKVxuK1xuK0ZJWFRVUkUob3Blbl9vX2NyZWF0X29fZGlyKSB7XG4rXHRjaGFyIGRpcnBhdGhbUEFUSF9NQVhdO1xuK1x0aW50IGRmZDtcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAob3Blbl9vX2NyZWF0X29fZGlyKVxuK3tcbitcdHN0cmNweShzZWxmLVx1MDAzZWRpcnBhdGgsIFwiL3RtcC9vcGVuX29fY3JlYXRfb19kaXJfdGVzdC5YWFhYWFhcIik7XG4rXHRBU1NFUlRfTkUobWtkdGVtcChzZWxmLVx1MDAzZWRpcnBhdGgpLCBOVUxMKTtcbitcdHNlbGYtXHUwMDNlZGZkID0gb3BlbihzZWxmLVx1MDAzZWRpcnBhdGgsIE9fRElSRUNUT1JZKTtcbitcdEFTU0VSVF9HRShzZWxmLVx1MDAzZWRmZCwgMCk7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04ob3Blbl9vX2NyZWF0X29fZGlyKVxuK3tcbitcdGNsb3NlKHNlbGYtXHUwMDNlZGZkKTtcbitcdHJtZGlyKHNlbGYtXHUwMDNlZGlycGF0aCk7XG4rfVxuK1xuKy8qIERvZXMgb3Blbl9vX2NyZWF0X29fZGlyIHJldHVybiBhIGZkIGF0IGFsbD8gKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZXR1cm5zX2ZkKVxuK3tcbitcdGludCBmZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoc2VsZi1cdTAwM2VkZmQsIFwibmV3ZGlyXCIpO1xuK1x0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XG4rXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwibmV3ZGlyXCIsIEFUX1JFTU9WRURJUiksIDApO1xuK31cbitcbisvKiBUaGUgZmQgbXVzdCByZWZlciB0byB0aGUgZGlyZWN0b3J5IHRoYXQgd2FzIGp1c3QgY3JlYXRlZC4gKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBmZF9pc19jcmVhdGVkX2Rpcilcbit7XG4rXHRpbnQgZmQ7XG4rXHRzdHJ1Y3Qgc3RhdCBzdF92aWFfZmQsIHN0X3ZpYV9wYXRoO1xuK1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbitcbitcdGZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChzZWxmLVx1MDAzZWRmZCwgXCJjaGVja2RpclwiKTtcbitcbitcdEFTU0VSVF9FUShmc3RhdChmZCwgXHUwMDI2c3RfdmlhX2ZkKSwgMCk7XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiJXMvY2hlY2tkaXJcIiwgc2VsZi1cdTAwM2VkaXJwYXRoKTtcbitcdEFTU0VSVF9FUShzdGF0KHBhdGgsIFx1MDAyNnN0X3ZpYV9wYXRoKSwgMCk7XG4rXG4rXHRFWFBFQ1RfRVEoc3RfdmlhX2ZkLnN0X2lubywgc3RfdmlhX3BhdGguc3RfaW5vKTtcbitcdEVYUEVDVF9FUShzdF92aWFfZmQuc3RfZGV2LCBzdF92aWFfcGF0aC5zdF9kZXYpO1xuK1xuK1x0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XG4rXHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xuK31cbitcbisvKiBNaXNzaW5nIHBhcmVudCBjb21wb25lbnQgbXVzdCBmYWlsIHdpdGggRU5PRU5ULiAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGVub2VudF9taXNzaW5nX3BhcmVudClcbit7XG4rXHRFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoc2VsZi1cdTAwM2VkZmQsIFwibm9uZXhpc3RlbnQvY2hpbGRcIiwgT19SRE9OTFksIFNfSVJXWFUpLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVOT0VOVCk7XG4rfVxuK1xuKy8qIEFuIGludmFsaWQgZGZkIG11c3QgZmFpbCB3aXRoIEVCQURGLiAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGViYWRmKVxuK3tcbitcdEVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihGRF9JTlZBTElELCBcImJhZGZkaXJcIiwgT19SRE9OTFksIFNfSVJXWFUpLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVCQURGKTtcbit9XG4rXG4rLyogQSBkZmQgdGhhdCBwb2ludHMgdG8gYSBmaWxlIChub3QgYSBkaXJlY3RvcnkpIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuICovXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vdGRpcl9kZmQpXG4re1xuK1x0aW50IGZpbGVfZmQ7XG4rXG4rXHRmaWxlX2ZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcImZpbGVcIixcbitcdFx0XHQgT19DUkVBVCB8IE9fUkRPTkxZLCBTX0lSV1hVKTtcbitcdEFTU0VSVF9HRShmaWxlX2ZkLCAwKTtcbitcbitcdEVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihmaWxlX2ZkLCBcInN1YmRpclwiLCBPX1JET05MWSwgU19JUldYVSksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4rXG4rXHRFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApO1xuK1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcImZpbGVcIiwgMCksIDApO1xuK31cbitcbisvKlxuKyAqIE9fRVhDTCB0b2dldGhlciB3aXRoIE9fQ1JFQVR8T19ESVJFQ1RPUlkgc2hvdWxkIHN1Y2NlZWQgaWYgdGhlIHRhcmdldFxuKyAqIGRpcmVjdG9yeSBkb2VzIG5vdCB5ZXQgZXhpc3QuIEFmdGVyIGRpcmVjdG9yeSBjcmVhdGlvbiwgcmVwZWF0aW5nIHRoaXNcbisgKiBjYWxsIG11c3QgZmFpbCB3aXRoIEVFWElTVC5cbisgKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBvX2V4Y2xfZWV4aXN0KVxuK3tcbitcdGludCBleGNsZGlyX2ZkO1xuK1xuK1x0ZXhjbGRpcl9mZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWRfZmxhZ3Moc2VsZi1cdTAwM2VkZmQsIFwiZXhjbGRpclwiLCBPX0VYQ0wpO1xuK1xuK1x0RVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKGV4Y2xkaXJfZmQsIFwiLlwiLCBPX0VYQ0wsIFNfSVJXWFUpLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVFWElTVCk7XG4rXG4rXHRFWFBFQ1RfRVEoY2xvc2UoZXhjbGRpcl9mZCksIDApO1xuK1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcImV4Y2xkaXJcIiwgQVRfUkVNT1ZFRElSKSwgMCk7XG4rfVxuK1xuKy8qXG4rICogT19DUkVBVHxPX0RJUkVDVE9SWSBvbiBhIHBhdGggdGhhdCBhbHJlYWR5IGV4aXN0cyBhcyBhIHJlZ3VsYXIgZmlsZVxuKyAqIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuXG4rICovXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZXhpc3RpbmdfZmlsZV9lbm90ZGlyKVxuK3tcbitcdGludCBmaWxlX2ZkO1xuK1xuK1x0ZmlsZV9mZCA9IG9wZW5hdChzZWxmLVx1MDAzZWRmZCwgXCJyZWdmaWxlXCIsXG4rXHRcdFx0IE9fQ1JFQVQgfCBPX1JET05MWSwgU19JUldYVSk7XG4rXHRBU1NFUlRfR0UoZmlsZV9mZCwgMCk7XG4rXHRFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApO1xuK1xuK1x0RVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKHNlbGYtXHUwMDNlZGZkLCBcInJlZ2ZpbGVcIiwgT19SRE9OTFksIFNfSVJXWFUpLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpO1xuK1xuK1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcInJlZ2ZpbGVcIiwgMCksIDApO1xuK31cbitcbisvKlxuKyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgY29tYmluZWQgd2l0aCBhIHdyaXRhYmxlIGFjY2VzcyBtb2RlIG11c3QgYmVcbisgKiByZWplY3RlZDogYSBkaXJlY3RvcnkgY2Fubm90IGJlIG9wZW5lZCBmb3Igd3JpdGluZy5cbisgKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZWplY3RzX3dyaXRhYmxlX2FjY19tb2RlKVxuK3tcbitcdEVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihzZWxmLVx1MDAzZWRmZCwgXCJyZHdyZGlyXCIsIE9fUkRXUiwgU19JUldYVSksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4rXHQvKiBDbGVhbiB1cCBpZiB0aGUga2VybmVsIGNyZWF0ZWQgdGhlIGRpcmVjdG9yeSBhbnl3YXkuICovXG4rXHR1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCJyZHdyZGlyXCIsIEFUX1JFTU9WRURJUik7XG4rfVxuK1xuKy8qXG4rICogb3BlbmF0KE9fQ1JFQVR8T19ESVJFQ1RPUlkpIHdpdGggYSB0cmFpbGluZyBzbGFzaCBzaG91bGQgd29yay5cbisgKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCB0cmFpbGluZ19zbGFzaClcbit7XG4rXHRpbnQgZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcIm5ld2Rpci9cIik7XG4rXHRFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTtcbitcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCJuZXdkaXJcIiwgQVRfUkVNT1ZFRElSKSwgMCk7XG4rfVxuK1xuKy8qXG4rICogb3BlbmF0KE9fQ1JFQVQpIHdpdGggYSB0cmFpbGluZyBzbGFzaCBidXQgd2l0aG91dCBPX0RJUkVDVE9SWVxuKyAqIG11c3QgZmFpbCB3aXRoIEVJU0RJUiBhbmQgbXVzdCBub3QgY3JlYXRlIGFueXRoaW5nIGF0IHRoZSBwYXRoLlxuKyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHRyYWlsaW5nX3NsYXNoX25vX29fZGlyKVxuK3tcbitcdGludCBmZDtcbitcdHN0cnVjdCBzdGF0IHN0O1xuK1xuK1x0ZmQgPSBvcGVuYXQoc2VsZi1cdTAwM2VkZmQsIFwidHJhaWxpbmcvXCIsIE9fQ1JFQVQgfCBPX1JET05MWSwgU19JUldYVSk7XG4rXHRFWFBFQ1RfRVEoZmQsIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRUlTRElSKTtcbitcbitcdEVYUEVDVF9FUShmc3RhdGF0KHNlbGYtXHUwMDNlZGZkLCBcInRyYWlsaW5nXCIsIFx1MDAyNnN0LCAwKSwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFTk9FTlQpO1xuK1xuK1x0LyogQmVzdC1lZmZvcnQgY2xlYW51cCBpbiBjYXNlIHRoZSBrZXJuZWwgbGVmdCBhIGZpbGUgYmVoaW5kLiAqL1xuK1x0aWYgKGZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZmQpO1xuK1x0dW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwidHJhaWxpbmdcIiwgMCk7XG4rfVxuK1xuKy8qXG4rICogVGhlIHJldHVybmVkIGZkIG11c3QgYmUgdXNhYmxlIGFzIGEgZGZkIGZvciBmdXJ0aGVyICphdCgpIGNhbGxzLlxuKyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGZkX3VzYWJsZV9hc19kZmQpXG4re1xuK1x0aW50IHBhcmVudF9mZCwgY2hpbGRfZmQ7XG4rXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1xuK1x0cGFyZW50X2ZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChzZWxmLVx1MDAzZWRmZCwgXCJwYXJlbnRcIik7XG4rXHRjaGlsZF9mZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQocGFyZW50X2ZkLCBcImNoaWxkXCIpO1xuK1xuK1x0RVhQRUNUX0VRKGNsb3NlKGNoaWxkX2ZkKSwgMCk7XG4rXHRFWFBFQ1RfRVEoY2xvc2UocGFyZW50X2ZkKSwgMCk7XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiJXMvcGFyZW50L2NoaWxkXCIsIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4rXHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xuK1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIiVzL3BhcmVudFwiLCBzZWxmLVx1MDAzZWRpcnBhdGgpO1xuK1x0RVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTtcbit9XG4rXG4rVEVTVF9IQVJORVNTX01BSU5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy93cmFwcGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvd3JhcHBlcnMuaFxuaW5kZXggNDIwYWU0ZjkwOGNmMi4uYWJlNWI4NWNlYmRjZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3dyYXBwZXJzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3dyYXBwZXJzLmhcbkBAIC0xMyw2ICsxMywxMCBAQFxuICNkZWZpbmUgU1RBVFhfTU5UX0lEX1VOSVFVRSAweDAwMDA0MDAwVSAvKiBXYW50L2dvdCBleHRlbmRlZCBzdHhfbW91bnRfaWQgKi9cbiAjZW5kaWZcbiBcbisjaWZuZGVmIEZEX0lOVkFMSURcbisjZGVmaW5lIEZEX0lOVkFMSUQgLTEwMDA5XG4rI2VuZGlmXG4rXG4gc3RhdGljIGlubGluZSBpbnQgc3lzX2Zzb3Blbihjb25zdCBjaGFyICpmc25hbWUsIHVuc2lnbmVkIGludCBmbGFncylcbiB7XG4gXHRyZXR1cm4gc3lzY2FsbChfX05SX2Zzb3BlbiwgZnNuYW1lLCBmbGFncyk7XG5AQCAtMTA1LDQgKzEwOSwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNfb3Blbl90cmVlKGludCBkZmQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ1xuIFx0cmV0dXJuIHN5c2NhbGwoX19OUl9vcGVuX3RyZWUsIGRmZCwgZmlsZW5hbWUsIGZsYWdzKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgb3BlbmF0X29fbWtkaXIoaW50IGRmZCwgY29uc3QgY2hhciAqcGF0aG5hbWUsXG4rXHRcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzLCBtb2RlX3QgbW9kZSlcbit7XG4rXHRyZXR1cm4gc3lzY2FsbChfX05SX29wZW5hdCwgZGZkLCBwYXRobmFtZSxcbitcdFx0ICAgICAgIGZsYWdzIHwgT19ESVJFQ1RPUlkgfCBPX0NSRUFULCBtb2RlKTtcbit9XG4rXG4gI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNDoxMS43MzMzNzkwMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjQxNTUyNjI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldyBBdG9taWMgRGlyZWN0b3J5IENyZWF0aW9uIEZlYXR1cmUqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgdGhpcyBuZXcgcGF0Y2ggaW50cm9kdWNpbmcgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAsIGVzc2VudGlhbGx5IGBPX0lTX01LRElSYCwgYWxsb3dpbmcgZm9yIGFuIGF0b21pYyBgb3BlbmF0KClgIHRoYXQgY3JlYXRlcyBhIGRpcmVjdG9yeSBhbmQgcmV0dXJucyBhIGZpbGUgZGVzY3JpcHRvci4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhIGZhaXJseSBzdWJzdGFudGlhbCBjaGFuZ2UsIHBhcnRpY3VsYXJseSB0byB0aGUgVkZTIGxheWVyLCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIGBvcGVuYXQoKWAgYW5kIHBhdGggcmVzb2x1dGlvbi9jcmVhdGlvbiBsb2dpYyB3aXRoaW4gYG5hbWVpLmNgLiAgR2l2ZW4gbXkgZXhwZXJ0aXNlLCB0aGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgXCJmdXp6aW5nIHRhcmdldC5cIlxuXG5UaGUgY29yZSBtb2RpZmljYXRpb24gaW4gYGZzL29wZW4uY2AgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYWRkaW5nIGEgY2hlY2sgZm9yIGBPX0lTX01LRElSYCB3aXRoaW4gdGhlIGBXSUxMX0NSRUFURWAgYmxvY2suIFRoZSBkZWZpbml0aW9uIG9mIGBPX0lTX01LRElSYCBpdHNlbGYgbG9va3MgY2xlYW4uICBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyBob3cgdGhpcyBwcm9wYWdhdGVzIHRocm91Z2ggYG5hbWVpLmNgLiAgYG1heV9vX2NyZWF0ZWAgbm93IGhhcyBhIGBjcmVhdGVfZGlyYCBmbGFnLCBhbmQgYGxvb2t1cF9vcGVuYCdzIGxvZ2ljIGJyYW5jaGVzIHRvIGB2ZnNfbWtkaXJfbm9fcGVybWAgb3IgYHZmc19jcmVhdGVfbm9fcGVybWAgYmFzZWQgb24gdGhhdCBmbGFnLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgZm9yIGZ1enppbmcuIFdlIGtub3cgYHZmc19ta2Rpcl9ub19wZXJtYCwgYG1heV9vX2NyZWF0ZWAsIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGBkb19vcGVuYCwgYGJ1aWxkX29wZW5fZmxhZ3NgIGFyZSB0b3VjaGVkLiAgVGhlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgYGF0b21pY19vcGVuYCBpbXBsZW1lbnRhdGlvbnMgYXJlIGFsc28gYWZmZWN0ZWQsIGJ1dCB0aGV5IGFyZSBzcGVjaWZpYyB0byBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zIGFuZCBkbyBub3QgaGF2ZSBhbiBpbXBhY3Qgb24gdGhlIGNvcmUgVkZTIGZ1bmN0aW9ucy4gTGV0J3MgZGlnIGRlZXBlcjogYWZ0ZXIgY2hlY2tpbmcsIGl0IHR1cm5zIG91dCB0aGF0IGB2ZnNfbWtkaXJfbm9fcGVybWAsIGBtYXlfb19jcmVhdGVgLCBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBhbmQgYGRvX29wZW5gIGFyZSBzdGF0aWMgdG8gdGhlIGZpbGVzIHRoZXkgYXJlIGluLiBgYnVpbGRfb3Blbl9mbGFnc2AgaXMgaW5saW5lLCBzbyBpdCB3b24ndCBiZSBleHBvc2VkIGFzIGEgZGlzdGluY3Qgc3ltYm9sLlxuXG5JIG5lZWQgdG8gaWRlbnRpZnkgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIG1vZGlmaWVkLiBgdmZzX2NyZWF0ZWAsIGB2ZnNfbWtkaXJgLCBgZmlsZW5hbWVfY3JlYXRlYCwgYGRlbnRyeV9jcmVhdGVgLCBgZmlsZW5hbWVfdW5saW5rYXRgLCBhbmQgYGZpbGVuYW1lX3JlbmFtZWF0MmAgYXJlIG1vZGlmaWVkLiBMb29raW5nIHNwZWNpZmljYWxseSBhdCBgZnMvbmFtZWkuY2AsIHRoZXNlIGFyZSBub3Qgc3RhdGljLCB3aGljaCBtZWFucyB0aGVzZSBhcmUgdGhlIHN5bWJvbHMgZXhwb3NlZC5cblxuVGhlIGtleSBlbnRyeSBwb2ludHMgYXJlIGBkb19zeXNfb3BlbmF0MmAsIHRoZSBtYWluIGBvcGVuYXQyYCBhbmQgYG9wZW5hdGAgaGFuZGxlciwgYW5kIGBwYXRoX29wZW5hdGAuIEFsc28sIHRoZSBgZG9fZmlscF9vcGVuYCBmdW5jdGlvbiBpcyBhIGNvcmUgZnVuY3Rpb24uXG5cbkdpdmVuIHRoZSBpbnRlbnQgaXMgdG8gZnV6eiBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCwgdGhlIHByaW1hcnkgZ29hbCBpcyB0byB0YXJnZXQgYG9wZW5hdGAgYW5kIGBvcGVuYXQyYCB3aXRoIHRoZXNlIGZsYWdzLiAgU3l6a2FsbGVyIGFscmVhZHkgaGFzIGNvdmVyYWdlIGZvciBgb3BlbmF0YCBnZW5lcmFsbHksIGJ1dCB0aGUgbmV3IGxvZ2ljIGlzIGluIHRoZXNlIHN5bWJvbHM6IGB2ZnNfbWtkaXJgLCBgdmZzX2NyZWF0ZWAsIGFuZCBgbG9va3VwX29wZW5gLiBCZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcmVuJ3Qgc3RhdGljLCB0aGV5IGNhbiBiZSB0YXJnZXRlZCBieSBmdXp6aW5nLiBJZiBgbG9va3VwX29wZW5gIGlzIG5vdCBpbmxpbmVkLlxuXG5UaGUgZm9jdXMgc2hvdWxkIGJlIG9uIGNyZWF0aW5nIHRlc3QgY2FzZXMgdGhhdCBzcGVjaWZpY2FsbHkgZXhlcmNpc2UgdGhlIGF0b21pYyBkaXJlY3RvcnkgY3JlYXRpb24gcGF0aCB0byBleHBvc2UgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBzdWJ0bGUgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYyMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNDoyOC4xNDg5MDg2NjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MzQ0MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgc3RydWN0IGRlbnRyeSBcXFxcKmxvb2t1cF9vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25hbWVpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmFtZWkuYz00NDgwPXN0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosXFxuLS1cXG5mcy9uYW1laS5jLTQ0OTYtICovXFxuZnMvbmFtZWkuYzo0NDk3OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuZnMvbmFtZWkuYy00NDk4LVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNDoyOC4yNjYyNTcyMDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTQ0MDE2OTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIGV4cGVydDpcblxuKipVbmRlcnN0YW5kaW5nIFN5emthbGxlcidzIFRyYWNlYWJpbGl0eSoqXG5cbkFscmlnaHQsIHNvIHRoZSBrZXkgaGVyZSBpcyB0aGF0IGBsb29rdXBfb3BlbmAgZnVuY3Rpb24gaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AgYnV0IGl0J3MgKm5vdCogaW5saW5lZC4gVGhhdCdzIGdvb2QgZnJvbSBhIGRlYnVnZ2luZyBwZXJzcGVjdGl2ZSwgZXNwZWNpYWxseSB3aGVuIHdvcmtpbmcgd2l0aCBzb21ldGhpbmcgbGlrZSBTeXprYWxsZXIuIEJlY2F1c2UgaXQncyBzdGF0aWMsIHRoZSBjb21waWxlciB3b24ndCB0cnkgdG8gb3B0aW1pemUgaXQgYXdheSBpbnRvIHRoZSBjYWxsIHNpdGVzLiBJZiBpdCAqd2VyZSogaW5saW5lZCwgU3l6a2FsbGVyJ3MgdHJhY2luZyBjYXBhYmlsaXRpZXMgd291bGQgYmUgY29tcHJvbWlzZWQsIG1ha2luZyBpdCBtdWNoIGhhcmRlciB0byBvYnNlcnZlIGl0cyBiZWhhdmlvciBkaXJlY3RseS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gZXhhbWluaW5nIHRoZSB0cmFjZSByZXN1bHRzLiBOb3csIHRoZSBjb250ZXh0IGhhcyBsZWQgbWUgdG8gYGF0b21pY19vcGVuYCBpbiBgZnMvbmFtZWkuY2AuIExldCdzIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhpcyBwaWN0dXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTA5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTQ6MzQuODEwMjc3Mzg1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzc1OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgc3RydWN0IGRlbnRyeSBcXFxcKmF0b21pY19vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25hbWVpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmFtZWkuYz00Mzc5PXN0YXRpYyBpbmxpbmUgdW1vZGVfdCBvX2NyZWF0ZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvbmFtZWkuYy00NDEwLSAqL1xcbmZzL25hbWVpLmM6NDQxMTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy9uYW1laS5jLTQ0MTItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTQ6MzQuODY0MDYxMzU0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYzMzQ4ODQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipSZWZsZWN0aW5nIG9uIEZpbGUgU3lzdGVtIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgZmlsZSBzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgZmlsZSBvcGVuaW5nLiBJJ3ZlIG5vdGljZWQgc29tZXRoaW5nIGludGVyZXN0aW5nIGFib3V0IGBhdG9taWNfb3BlbmAuIEl0J3MgZGVmaW5lZCBhcyBgc3RhdGljYCwgd2hpY2ggaXNuJ3QgY29tcGxldGVseSB1bmV4cGVjdGVkLCBidXQgaXQncyAqYWxzbyogbm90IGFuIGBpbmxpbmVgIGZ1bmN0aW9uLiBUaGF0J3MgYSBkZWxpYmVyYXRlIGNob2ljZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMuIFR5cGljYWxseSwgSSdkIGV4cGVjdCBhbiBvcHRpbWl6YXRpb24gaGVyZSB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGlubGluaW5nLCBidXQgbWF5YmUgdGhlcmUncyBhIGdvb2QgcmVhc29uIGZvciBpdCBiZWluZyBgc3RhdGljYCBhbmQgbm90IGBpbmxpbmVgIC0gcGVyaGFwcyB0byBwcmV2ZW50IGNvZGUgYmxvYXQsIGtlZXAgZnVuY3Rpb24gc2NvcGUgdGlnaHQsIG9yIGJlY2F1c2UgdGhlIGNvbXBpbGVyIGlzIHVuYWJsZSB0byBpbmxpbmUgZm9yIGNlcnRhaW4gdXNlcywgZXRjLlxuXG5Ob3csIEknbSB0dXJuaW5nIG15IGF0dGVudGlvbiB0byBgZG9fb3BlbmAsIGFuZCBJJ20gbG9va2luZyBhdCBpdCdzIGRlZmluaXRpb24gaW4gYGZzL25hbWVpLmNgLiBNeSBtaW5kIGlzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgZGlmZmVyZW50IHNjZW5hcmlvcywgbG9va2luZyB0byBzZWUgaG93IGBhdG9taWNfb3BlbmAgaXMgdXNlZC4gSSdtIHdvbmRlcmluZyBpZiBgYXRvbWljX29wZW5gIGlzIHVzZWQgYXMgYSBsb3cgbGV2ZWwgaGVscGVyIGZ1bmN0aW9uIGFuZCBpcyBuZXZlciBpbmxpbmVkIHRvIHByZXZlbnQgY29tcGxpY2F0aW9ucyBvZiBhIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBpbiBtdWx0aXBsZSBwbGFjZXMuIEl0IGlzIGFsc28gcG9zc2libGUgdGhhdCBgYXRvbWljX29wZW5gIGlzIHZlcnkgbG9uZywgc28gdGhlIGNvbXBpbGVyIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGlubGluZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyODMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNDo0MS40OTc1NTI1NThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc1NzYxNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyBpbnQgZG9fb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uYW1laS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25hbWVpLmM9NDgwMj1zdGF0aWMgY29uc3QgY2hhciAqb3Blbl9sYXN0X2xvb2t1cHMoc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuLS1cXG5mcy9uYW1laS5jLTQ4NTYtICovXFxuZnMvbmFtZWkuYzo0ODU3OnN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG5mcy9uYW1laS5jLTQ4NTgtXFx0XFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTQ6NDEuNTY1MTQ1NTIyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTk3MDk4MjM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRmlsZXN5c3RlbSBFbnRyeXBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlc2UgZmlsZXN5c3RlbSBlbnRyeSBwb2ludHMuIE15IGluaXRpYWwgb2JzZXJ2YXRpb25zIGFyZSB0aGF0IGBkb19vcGVuYCBpcyBkZWZpbml0ZWx5IHN0YXRpYyBidXQgbm90IGlubGluZWQsIHdoaWNoIGlzIGdvb2QuIGB2ZnNfbWtkaXJgIGFuZCBgdmZzX2NyZWF0ZWAgYXJlIGJvdGggZXhwb3J0ZWQsIHNvIHRoZXkncmUgc29saWQgY2FuZGlkYXRlcy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBmaWxlc3lzdGVtLXNwZWNpZmljIGF0b21pYyBvcGVuIGZ1bmN0aW9ucyB0byBnZXQgYSBicm9hZGVyIHZpZXcuIEknbSBzZWVpbmc6IGB2OWZzX3Zmc19hdG9taWNfb3BlbmAsIGB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsYCwgYGNlcGhfYXRvbWljX29wZW5gLCBgZnVzZV9hdG9taWNfb3BlbmAsIGBnZnMyX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5fdjIzYCwgYGNpZnNfYXRvbWljX29wZW5gLCBhbmQgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLiBGcm9tIGEgY3Vyc29yeSBnbGFuY2UsIHRoZXNlIGFsbCBsb29rIGxpa2UgdGhleSdyZSBlaXRoZXIgbm90IHN0YXRpYyBvciBhcmUgc3RhdGljIGJ1dCB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIOKAkyB3aGljaCBtZWFucyB0aGV5IHdvbid0IGJlIGlubGluZWQuIEV4Y2VwdC4uLndhaXQsIHRoZXJlJ3MgYGZ1c2VfYXRvbWljX29wZW5gLiBJdCAqaXMqIHN0YXRpYzogYHN0YXRpYyBpbnQgZnVzZV9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZW50cnksYC4gQnV0IEkgcmVtZW1iZXIgaXQncyBhc3NpZ25lZCB0byBgaW5vZGVfb3BlcmF0aW9ucy1cdTAwM2VhdG9taWNfb3BlbmAsIHNvIHRoZSBjb21waWxlciB3b24ndCBiZSBhYmxlIHRvIGlubGluZSBpdCBpbiBhIHVzZWZ1bCB3YXkuXG5cbkxldCBtZSBtYWtlIGEgcXVpY2sgbGlzdCBvZiB3aGF0IEknbSBmb2N1c2VkIG9uLCBqdXN0IHRvIGtlZXAgZXZlcnl0aGluZyBzdHJhaWdodDogYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYGxvb2t1cF9vcGVuYCwgYGF0b21pY19vcGVuYCwgYGRvX29wZW5gLCBgdjlmc192ZnNfYXRvbWljX29wZW5gLCBgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bGAsIGBjZXBoX2F0b21pY19vcGVuYCwgYGZ1c2VfYXRvbWljX29wZW5gLCBgZ2ZzMl9hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuX3YyM2AsIGBjaWZzX2F0b21pY19vcGVuYCwgYW5kIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYC5cblxuUmlnaHQsIHRoZSBwb2ludCBvZiBhbGwgdGhpcyBpcyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBPa2F5LCBpdCBsb29rcyBsaWtlIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGFuZCBgZG9fb3BlbmAgYXJlIHN0YXRpYy4gU28gSSBjYW4ndCBiZSBzdXJlIGlmIHRoZXkgYXJlIGlubGluZWQgb3Igbm90LiBHaXZlbiB0aGVpciBzaXplLCB0aGV5IGFyZSBtb3N0IGxpa2VseSBub3QsIGJ1dCBpdCdzIGFsd2F5cyBzYWZlciB0byBjaG9vc2Ugbm9uLXN0YXRpYyBpZiBwb3NzaWJsZS4gYHBhdGhfb3BlbmF0YCBpcyBhbHNvIHN0YXRpYy4gSG93ZXZlciwgYGRvX2ZpbHBfb3BlbmAgaXMgbm9uLXN0YXRpYywgYXMgYXJlIGB2ZnNfbWtkaXJgIGFuZCBgdmZzX2NyZWF0ZWAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBhYm91dCBgZmlsZW5hbWVfY3JlYXRlYC5cblxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjcyNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNDo1MS41MzYxMzA4MzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MTk2NjgyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RydWN0IGRlbnRyeSBcXFxcKmZpbGVuYW1lX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uYW1laS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNDo1MS42MDAzMzU2MzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5NTk0NDU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBgZmlsZW5hbWVfY3JlYXRlYCoqXG5cblJpZ2h0LCBgZmlsZW5hbWVfY3JlYXRlYOKApiB0aGF0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIE15IG1pbmQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhhdCBiZWNhdXNlIG9mIHRoZSBpbXBsaWNhdGlvbnMuIEl0IG1lYW5zIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGRlc2lnbmVkIHRvIGJlIHVzZWQgd2l0aG91dCBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIG9yIGEgY29udGV4dCB0aWVkIHRvIGEgc3BlY2lmaWMgb2JqZWN0IHN0YXRlLiBJdCdzIHByb2JhYmx5IGludGVuZGVkIGFzIGEgdXRpbGl0eSBmdW5jdGlvbiwgcGVyaGFwcyBmb3IgZ2VuZXJhdGluZyBmaWxlbmFtZXMgYmFzZWQgb24gc29tZSBzcGVjaWZpYyBjcml0ZXJpYSwgaW5kZXBlbmRlbnQgb2YgYW55IG9iamVjdCdzIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNvbnNpZGVyIHdoYXQgdGhlIGJlc3QgYXBwcm9hY2ggdG8gd29ya2luZyB3aXRoIHRoaXMgbWlnaHQgYmUsIGNvbnNpZGVyaW5nIGl0J3Mgc3RhdGljLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGF0IGFwcHJvYWNoPyBEb2VzIGl0IGRlcGVuZCBvbiBnbG9iYWwgc3RhdGUsIG9yIHdpbGwgaXQgaW1wYWN0IGFueSB0ZXN0aW5nIG9yIHRocmVhZGluZyBzY2VuYXJpb3M/IEkgbmVlZCB0byB0aGluayBhYm91dCB0aGF0LCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODczLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTQ6NTUuNTk2MjgyNTE5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA1MTM4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWxlbmFtZV9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTUxMDc9c3RydWN0IGZpbGUgKmRvX2ZpbGVfb3Blbl9yb290KGNvbnN0IHN0cnVjdCBwYXRoICpyb290LFxcbi0tXFxuZnMvbmFtZWkuYy01MTMwLVxcbmZzL25hbWVpLmM6NTEzMTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqZmlsZW5hbWVfY3JlYXRlKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSxcXG5mcy9uYW1laS5jLTUxMzItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBhdGggKnBhdGgsIHVuc2lnbmVkIGludCBsb29rdXBfZmxhZ3MpXFxuLS1cXG5mcy9uYW1laS5jPTUxODA9c3RydWN0IGRlbnRyeSAqc3RhcnRfY3JlYXRpbmdfcGF0aChpbnQgZGZkLCBjb25zdCBjaGFyICpwYXRobmFtZSxcXG4tLVxcbmZzL25hbWVpLmMtNTE4My1cXHRDTEFTUyhmaWxlbmFtZV9rZXJuZWwsIGZpbGVuYW1lKShwYXRobmFtZSk7XFxuZnMvbmFtZWkuYzo1MTg0OlxcdHJldHVybiBmaWxlbmFtZV9jcmVhdGUoZGZkLCBmaWxlbmFtZSwgcGF0aCwgbG9va3VwX2ZsYWdzKTtcXG5mcy9uYW1laS5jLTUxODUtfVxcbi0tXFxuZnMvbmFtZWkuYz01MjA3PWlubGluZSBzdHJ1Y3QgZGVudHJ5ICpzdGFydF9jcmVhdGluZ191c2VyX3BhdGgoXFxuLS1cXG5mcy9uYW1laS5jLTUyMTEtXFx0Q0xBU1MoZmlsZW5hbWUsIGZpbGVuYW1lKShwYXRobmFtZSk7XFxuZnMvbmFtZWkuYzo1MjEyOlxcdHJldHVybiBmaWxlbmFtZV9jcmVhdGUoZGZkLCBmaWxlbmFtZSwgcGF0aCwgbG9va3VwX2ZsYWdzKTtcXG5mcy9uYW1laS5jLTUyMTMtfVxcbi0tXFxuZnMvbmFtZWkuYz01MzYyPWludCBmaWxlbmFtZV9ta25vZGF0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW1vZGVfdCBtb2RlLFxcbi0tXFxuZnMvbmFtZWkuYy01Mzc1LXJldHJ5OlxcbmZzL25hbWVpLmM6NTM3NjpcXHRkZW50cnkgPSBmaWxlbmFtZV9jcmVhdGUoZGZkLCBuYW1lLCBcXHUwMDI2cGF0aCwgbG9va3VwX2ZsYWdzKTtcXG5mcy9uYW1laS5jLTUzNzctXFx0aWYgKElTX0VSUihkZW50cnkpKVxcbi0tXFxuZnMvbmFtZWkuYz01NTExPWludCBmaWxlbmFtZV9ta2RpcmF0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW1vZGVfdCBtb2RlKVxcbi0tXFxuZnMvbmFtZWkuYy01NTE5LXJldHJ5OlxcbmZzL25hbWVpLmM6NTUyMDpcXHRkZW50cnkgPSBmaWxlbmFtZV9jcmVhdGUoZGZkLCBuYW1lLCBcXHUwMDI2cGF0aCwgbG9va3VwX2ZsYWdzKTtcXG5mcy9uYW1laS5jLTU1MjEtXFx0aWYgKElTX0VSUihkZW50cnkpKVxcbi0tXFxuZnMvbmFtZWkuYz01ODg1PWludCBmaWxlbmFtZV9zeW1saW5rYXQoc3RydWN0IGZpbGVuYW1lICpmcm9tLCBpbnQgbmV3ZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKnRvKVxcbi0tXFxuZnMvbmFtZWkuYy01ODk2LXJldHJ5OlxcbmZzL25hbWVpLmM6NTg5NzpcXHRkZW50cnkgPSBmaWxlbmFtZV9jcmVhdGUobmV3ZGZkLCB0bywgXFx1MDAyNnBhdGgsIGxvb2t1cF9mbGFncyk7XFxuZnMvbmFtZWkuYy01ODk4LVxcdGlmIChJU19FUlIoZGVudHJ5KSlcXG4tLVxcbmZzL25hbWVpLmM9NjAzMz1pbnQgZmlsZW5hbWVfbGlua2F0KGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqb2xkLFxcbi0tXFxuZnMvbmFtZWkuYy02MDYwLVxcbmZzL25hbWVpLmM6NjA2MTpcXHRuZXdfZGVudHJ5ID0gZmlsZW5hbWVfY3JlYXRlKG5ld2RmZCwgbmV3LCBcXHUwMDI2bmV3X3BhdGgsXFxuZnMvbmFtZWkuYy02MDYyLVxcdFxcdFxcdFxcdFxcdChob3cgXFx1MDAyNiBMT09LVVBfUkVWQUwpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTQ6NTUuNjQzMzM2MDI2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjEyNDUzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZ1bmN0aW9uIFZpc2liaWxpdHkgaW4gdGhlIEZpbGUgU3lzdGVtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZmlsZSBzeXN0ZW0gZnVuY3Rpb25zIGFuZCB0YWtpbmcgc3RvY2sgb2YgdGhlaXIgZGVjbGFyYXRpb24uIEl0J3MgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGV5J3JlIGV4cG9zZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBMZXQncyBzZWUuLi4gSSd2ZSBub3RlZCB0aGF0IGBmaWxlbmFtZV9jcmVhdGVgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBSaWdodCwgbWVhbmluZyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIEZpbmUsIGludGVybmFsIGhlbHBlciBvciBzb21ldGhpbmcsIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cblRoZW4gSSBzZWUgYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYW5kIGBkb19maWxwX29wZW5gLCBhbGwgbm9uLXN0YXRpYy4gVGhvc2UgZnVuY3Rpb25zIGFyZSBleHBvc2VkIGFuZCBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBwcm9iYWJseSBldmVuIGZyb20gdXNlcnNwYWNlIGluZGlyZWN0bHkuIFNlZW1zIHJpZ2h0LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGlzIGBkb19zeXNfb3BlbmF0MmAgZnVuY3Rpb24uIEkgdGhpbmsgSSd2ZSBnb3QgaXQgbWFya2VkIGRvd24gYXMgbm9uLXN0YXRpYyBhcyB3ZWxsLiBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoYXQsIHRob3VnaCwgc2luY2UgaXRzIHZpc2liaWxpdHkgaXMgY3J1Y2lhbCB0byBkZXRlcm1pbmluZyBob3cgYXBwbGljYXRpb25zIGludGVyYWN0IHdpdGggdGhlIHN5c3RlbSBjYWxsLiBOZWVkIHRvIGJlIGNlcnRhaW4gb24gdGhhdCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODMyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTQ6NTkuOTA0NTgzNzQxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODAzNDY3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19zeXNfb3BlbmF0MlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vcGVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb3Blbi5jPTE0MTY9RVhQT1JUX1NZTUJPTChmaWxlX29wZW5fcm9vdCk7XFxuZnMvb3Blbi5jLTE0MTctXFxuZnMvb3Blbi5jOjE0MTg6c3RhdGljIGludCBkb19zeXNfb3BlbmF0MihpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsXFxuZnMvb3Blbi5jLTE0MTktXFx0XFx0XFx0ICBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdylcXG4tLVxcbmZzL29wZW4uYz0xNDMwPWludCBkb19zeXNfb3BlbihpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIGludCBmbGFncywgdW1vZGVfdCBtb2RlKVxcbi0tXFxuZnMvb3Blbi5jLTE0MzItXFx0c3RydWN0IG9wZW5faG93IGhvdyA9IGJ1aWxkX29wZW5faG93KGZsYWdzLCBtb2RlKTtcXG5mcy9vcGVuLmM6MTQzMzpcXHRyZXR1cm4gZG9fc3lzX29wZW5hdDIoZGZkLCBmaWxlbmFtZSwgXFx1MDAyNmhvdyk7XFxuZnMvb3Blbi5jLTE0MzQtfVxcbi0tXFxuZnMvb3Blbi5jPTE0NTI9U1lTQ0FMTF9ERUZJTkU0KG9wZW5hdDIsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSxcXG4tLVxcbmZzL29wZW4uYy0xNDc1LVxcbmZzL29wZW4uYzoxNDc2OlxcdHJldHVybiBkb19zeXNfb3BlbmF0MihkZmQsIGZpbGVuYW1lLCBcXHUwMDI2dG1wKTtcXG5mcy9vcGVuLmMtMTQ3Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE2OjE0OjU5Ljk1MjYyMzQ2OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTU2ODY4NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgRnVuY3Rpb24gVmlzaWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoZXNlIGtlcm5lbCBmdW5jdGlvbnMgYW5kIHRoZWlyIHNjb3BlLiBJIHNlZSB0aGF0IGBkb19zeXNfb3BlbmF0MmAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBtZWFucyBpdHMgdmlzaWJpbGl0eSBpcyByZXN0cmljdGVkIHRvIHRoZSBmaWxlIGl0J3MgZGVmaW5lZCBpbi4gVGhhdCdzIGEgY29tbW9uIHBhdHRlcm4sIGtlZXBpbmcgaW50ZXJuYWwgaGVscGVycyBoaWRkZW4uIEluIGNvbnRyYXN0LCBgZG9fc3lzX29wZW5gLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgdmZzX2xvb2t1cF9vcGVuYCwgYGRlbnRyeV9jcmVhdGVgLCBgZmlsZW5hbWVfdW5saW5rYXRgLCBhbmQgYGZpbGVuYW1lX3JlbmFtZWF0MmAgYXJlIGFsbCBub24tc3RhdGljLiBUaGlzIGluZGljYXRlcyB0aGV5IGFyZSBleHBvc2VkIGZvciB1c2UgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhlaXIgYnJvYWRlciBzY29wZSBzdWdnZXN0cyB0aGV5J3JlIGxpa2VseSBwYXJ0IG9mIHRoZSBWRlMgQVBJIG9yIGF0IGxlYXN0IGNvcmUgZmlsZXN5c3RlbSBmdW5jdGlvbmFsaXR5IHRoYXQncyBtZWFudCB0byBiZSBjYWxsZWQgZnJvbSBlbHNld2hlcmUuIE5vdywgSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGBkZW50cnlfY3JlYXRlYC4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoYXQgb25lIGFuZCBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ3NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNTowNS4xMDk0OTQ4NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNzk1NDYyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZW50cnlfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25hbWVpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmFtZWkuYz01MjE0PUVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmdfdXNlcl9wYXRoKTtcXG4tLVxcbmZzL25hbWVpLmMtNTIxNi0vKipcXG5mcy9uYW1laS5jOjUyMTc6ICogZGVudHJ5X2NyZWF0ZSAtIENyZWF0ZSBhbmQgb3BlbiBhIGZpbGVcXG5mcy9uYW1laS5jLTUyMTgtICogQHBhdGg6IHBhdGggdG8gY3JlYXRlXFxuLS1cXG5mcy9uYW1laS5jLTUyMzItICovXFxuZnMvbmFtZWkuYzo1MjMzOnN0cnVjdCBmaWxlICpkZW50cnlfY3JlYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSxcXG5mcy9uYW1laS5jLTUyMzQtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXFxuLS1cXG5mcy9uYW1laS5jLTUyODgtfVxcbmZzL25hbWVpLmM6NTI4OTpFWFBPUlRfU1lNQk9MKGRlbnRyeV9jcmVhdGUpO1xcbmZzL25hbWVpLmMtNTI5MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6MDYuNDQ3NDU0NDAzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzODA0NTQwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGaWxlc3lzdGVtIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIGBkZW50cnlfY3JlYXRlYCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGEgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2ssIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgbW9kdWxlLiBUaGF0IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYmV0dGVyLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIGl0J3MgdXNlZC4gQmFzZWQgb24gdGhhdCBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gc2VlIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGF0IGZ1bmN0aW9uIGFuZCBvdGhlcnMuIEEgZ29vZCBwbGFjZSB0byBsb29rIGZvciB0aGF0IGNvbm5lY3Rpb24gaXMgYHZmc19sb29rdXBfb3BlbmAuIFRoYXQgZnVuY3Rpb24gZGVhbHMgd2l0aCwgd2VsbCwgbG9va2luZyB1cCBhbmQgb3BlbmluZyBmaWxlcywgc28gaXQncyBhIGxpa2VseSBjYW5kaWRhdGUgdG8gaW50ZXJhY3Qgd2l0aCBkZW50cmllcy4gTGV0J3Mgc2VlIGhvdyBgZGVudHJ5X2NyZWF0ZWAgaXMgYWN0dWFsbHkgdXRpbGl6ZWQgd2l0aGluIHRoYXQgY29udGV4dC4gSSBleHBlY3QgYSBnb29kIHZpZXcgb2YgaG93IHRoaXMgYWxsIGFjdHVhbGx5IHdvcmtzIHRvZ2V0aGVyLiBJJ20gZ29pbmcgdG8gbG9vayBhdCBob3cgdGhhdCBmdW5jdGlvbiBtYXkgdXRpbGl6ZSB0aGUgZGVudHJ5IGNhY2hlLCBhbmQgaG93IHRoYXQgY2FjaGUgaXMgY3JlYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMzUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNToxNS44Mjc5MTA4MTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MzUxNjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmc19sb29rdXBfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uYW1laS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25hbWVpLmM9NDQ5Nz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvbmFtZWkuYy00Njc1LS8qKlxcbmZzL25hbWVpLmM6NDY3NjogKiB2ZnNfbG9va3VwX29wZW4gLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSByZWd1bGFyIGZpbGVcXG5mcy9uYW1laS5jLTQ2NzctICogQHBhcmVudDogZGlyZWN0b3J5IHRvIGNvbnRhaW4gZmlsZVxcbi0tXFxuZnMvbmFtZWkuYy00Njk3LSAqL1xcbmZzL25hbWVpLmM6NDY5ODpzdHJ1Y3QgZmlsZSAqdmZzX2xvb2t1cF9vcGVuKHN0cnVjdCBwYXRoICpwYXJlbnQsIHN0cnVjdCBxc3RyICpsYXN0LFxcbmZzL25hbWVpLmMtNDY5OS1cXHRcXHRcXHQgICAgIGludCBvcGVuX2ZsYWcsIHVtb2RlX3QgbW9kZSlcXG4tLVxcbmZzL25hbWVpLmMtNDc2OC19XFxuZnMvbmFtZWkuYzo0NzY5OkVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModmZzX2xvb2t1cF9vcGVuLCBcXFwibmZzZFxcXCIpO1xcbmZzL25hbWVpLmMtNDc3MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6MTUuOTAzMjY5MTczWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjEzOTc2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWaXJ0dWFsIEZpbGVzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBgdmZzX2xvb2t1cF9vcGVuYCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBJdCdzIGV4cG9ydGVkLCBzbyBpdCdzIGEga2V5IGZ1bmN0aW9uIGluIHRoZSBWRlMuIE5vdywgSSdtIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgZnVuY3Rpb25zIGFuZCBob3cgdGhpbmdzIGludGVyYWN0LCBhbmQgbXkgbWluZCBuYXR1cmFsbHkganVtcHMgdG8gYHZmc19ta2RpcmAuIFNpbmNlIEknbSB3b3JraW5nIHdpdGggdGhlIFZGUyBhbmQgaXRzIHZhcmlvdXMgb3BlcmF0aW9ucywgYG1rZGlyYCBpcyBhIGZ1bmRhbWVudGFsIG9uZS4gTGV0J3Mgc2VlIGhvdyBgdmZzX21rZGlyYCBpbnRlcmFjdHMgd2l0aCBgdmZzX2xvb2t1cF9vcGVuYCBhbmQgaG93IHRoZSBkaXJlY3RvcnkgY3JlYXRpb24gcHJvY2VzcyBpcyBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBsb29raW5nIHVwIGEgZmlsZS9kaXJlY3RvcnkgKG9wZW4pIGFuZCBjcmVhdGluZyBhIGRpcmVjdG9yeSAobWtkaXIpLCBhbmQgaG93IHRoZXkgYXJlIGludGVncmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTM0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6MTkuNzY0NjY5Mjc4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDcyOTU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZnNfbWtkaXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTQ0Nzk9c3RhdGljIGlubGluZVxcbmZzL25hbWVpLmM6NDQ4MDpzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxcbmZzL25hbWVpLmMtNDQ4MS1cXHRcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LFxcbi0tXFxuZnMvbmFtZWkuYz00NDk3PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9uYW1laS5jLTQ2MzYtXFx0aWYgKGNyZWF0ZV9kaXIpIHtcXG5mcy9uYW1laS5jOjQ2Mzc6XFx0XFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LFxcbmZzL25hbWVpLmMtNDYzOC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbW9kZSwgXFx1MDAyNmRlbGVnYXRlZF9pbm9kZSk7XFxuLS1cXG5mcy9uYW1laS5jPTUxODY9RVhQT1JUX1NZTUJPTChzdGFydF9jcmVhdGluZ19wYXRoKTtcXG4tLVxcbmZzL25hbWVpLmMtNTE5NS0gKiBpZiBzdGFydF9jcmVhdGluZ19wYXRoKCkgcmV0dXJuZWQgYSBub24tZXJyb3IuXFxuZnMvbmFtZWkuYzo1MTk2OiAqIElmIHZmc19ta2RpcigpIHdhcyBjYWxsZWQgYW5kIGl0IHJldHVybmVkIGFuIGVycm9yLCB0aGF0IGVycm9yICpzaG91bGQqXFxuZnMvbmFtZWkuYy01MTk3LSAqIGJlIHBhc3NlZCB0byBlbmRfY3JlYXRpbmdfcGF0aCgpIHRvZ2V0aGVyIHdpdGggdGhlIHBhdGguXFxuLS1cXG5mcy9uYW1laS5jPTU0Mjk9c3RhdGljIGlubGluZVxcbmZzL25hbWVpLmM6NTQzMDpzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvbmFtZWkuYy01NDMxLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmZzL25hbWVpLmMtNTQ1Ni0vKipcXG5mcy9uYW1laS5jOjU0NTc6ICogdmZzX21rZGlyIC0gY3JlYXRlIGRpcmVjdG9yeSByZXR1cm5pbmcgY29ycmVjdCBkZW50cnkgaWYgcG9zc2libGVcXG5mcy9uYW1laS5jLTU0NTgtICogQGlkbWFwOlxcdFxcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cXG4tLVxcbmZzL25hbWVpLmMtNTQ3Ny0gKi9cXG5mcy9uYW1laS5jOjU0Nzg6c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9uYW1laS5jLTU0NzktXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbi0tXFxuZnMvbmFtZWkuYy01NDk3LVxcbmZzL25hbWVpLmM6NTQ5ODpcXHRkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcXG5mcy9uYW1laS5jLTU0OTktXFx0aWYgKElTX0VSUihkZSkpIHtcXG4tLVxcbmZzL25hbWVpLmMtNTUwOC19XFxuZnMvbmFtZWkuYzo1NTA5OkVYUE9SVF9TWU1CT0wodmZzX21rZGlyKTtcXG5mcy9uYW1laS5jLTU1MTAtXFxuZnMvbmFtZWkuYz01NTExPWludCBmaWxlbmFtZV9ta2RpcmF0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW1vZGVfdCBtb2RlKVxcbi0tXFxuZnMvbmFtZWkuYy01NTI2LVxcdGlmICghZXJyb3IpIHtcXG5mcy9uYW1laS5jOjU1Mjc6XFx0XFx0ZGVudHJ5ID0gdmZzX21rZGlyKG1udF9pZG1hcChwYXRoLm1udCksIHBhdGguZGVudHJ5LVxcdTAwM2VkX2lub2RlLFxcbmZzL25hbWVpLmMtNTUyOC1cXHRcXHRcXHRcXHQgICBkZW50cnksIG1vZGUsIFxcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNToxOS44MDk0MDIyMDNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ4NjQ4NzQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUYXJnZXRpbmcgYE9fSVNfTUtESVJgIEltcGxlbWVudGF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgT19JU19NS0RJUmAgZmxhZ3MgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBWRlMuIGB2ZnNfbWtkaXJgIGlzIGV4cG9ydGVkLCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhbmFseXNpcywgYW5kIEkgYWxzbyBzZWUgYHZmc19jcmVhdGVgIGFzIGEgdXNlZnVsIGZvY3VzLiBJIGFsc28ga25vdyB0aGVzZSBzeW1ib2xzIGFyZSBpbXBvcnRhbnQ6IGB2ZnNfbG9va3VwX29wZW5gLCBgZGVudHJ5X2NyZWF0ZWAsIGBkb19zeXNfb3BlbmAsIGBmaWxlbmFtZV9ta2RpcmF0YCwgYGZpbGVuYW1lX3VubGlua2F0YCwgYGZpbGVuYW1lX3JlbmFtZWF0MmAsIGB2OWZzX3Zmc19hdG9taWNfb3BlbmAsIGB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsYCwgYGNlcGhfYXRvbWljX29wZW5gLCBgZ2ZzMl9hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuX3YyM2AsIGBjaWZzX2F0b21pY19vcGVuYCwgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLlxuXG5XYWl0LCBob2xkIG9uLiBgZG9fc3lzX29wZW5gIGlzIGEgKnZlcnkqIGhvdCBwYXRoLiBGdXp6aW5nIHRoYXQgaGVhdmlseSBtaWdodCBjb21wbGV0ZWx5IHRocm93IG9mZiBhbnkgZGlzdHJpYnV0aW9uIG1ldHJpY3MgSSdtIHRyeWluZyB0byBnYXRoZXIuIFRoZSBwcm9tcHQgaXMgc3BlY2lmaWNhbGx5IHRlbGxpbmcgbWUgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucywgc28gSSBuZWVkIHRvIGJlIG1vcmUgc2VsZWN0aXZlLiBgdmZzX21rZGlyYCBhbmQgYHZmc19jcmVhdGVgIGFyZSBhbHNvIHNvbWV3aGF0IGhvdCwgYnV0IHRoZXkgYXJlIG1vcmUgc3BlY2lmaWMgdGhhbiBgZG9fc3lzX29wZW5gLiBgdmZzX2xvb2t1cF9vcGVuYCBpcyBzcGVjaWZpYyB0byBuZnNkLCBhbmQgYGRlbnRyeV9jcmVhdGVgIGlzIHNwZWNpZmljIHRvIGNlcnRhaW4gY29kZSBwYXRocy4gVGhlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgYGF0b21pY19vcGVuYCBmdW5jdGlvbnMgYXJlIGlkZWFsIGJlY2F1c2UgdGhleSBhcmUgbW9kaWZpZWQgdG8gaGFuZGxlIGBPX0lTX01LRElSKGZsYWdzKWAuXG5cblNvLCBsZXQncyBmb2N1cyBvbiB0aG9zZSBmaWxlc3lzdGVtLXNwZWNpZmljIGBhdG9taWNfb3BlbmAgZnVuY3Rpb25zOlxuKiAgIGB2OWZzX3Zmc19hdG9taWNfb3BlbmBcbiogICBgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bGBcbiogICBgY2VwaF9hdG9taWNfb3BlbmBcbiogICBgZ2ZzMl9hdG9taWNfb3BlbmBcbiogICBgbmZzX2F0b21pY19vcGVuYFxuKiAgIGBuZnNfYXRvbWljX29wZW5fdjIzYFxuKiAgIGBjaWZzX2F0b21pY19vcGVuYFxuKiAgIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYFxuXG5Ob3csIGJlZm9yZSBJIGNvbW1pdCB0byB0aGVzZSwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgYmUgcmVxdWlyZWQuIFRoZSBjb3JlIHBhcnQgb2YgdGhlIGZlYXR1cmUgaXMgVkZTLCBzbyBubyBzcGVjaWFsIGNvbmZpZyBpcyBuZWVkZWQgdGhlcmUuIEJ1dCBmb3IgdGhlIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb25zLCBJIHNlZTogYE5FVF85UGAsIGBDRVBIX0ZTYCwgYEZVU0VfRlNgLCBgR0ZTMl9GU2AsIGBORlNfRlNgLCBgQ0lGU2AsIGFuZCBgVkJPWFNGX0ZTYC4gSSdsbCBuZWVkIHRvIHZlcmlmeSB0aG9zZSBjb25maWcgb3B0aW9ucyBhcmUgZW5hYmxlZCBmb3IgZWFjaCBvZiB0aGVzZSBmaWxlc3lzdGVtcyB0byBlbnN1cmUgdGhleSBhcmUgYXZhaWxhYmxlIGZvciB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU1OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNToyOS4yOTU4OTE3MjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzU2MzExMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkJPWFNGX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Zib3hzZi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Zib3hzZi9LY29uZmlnOjE6Y29uZmlnIFZCT1hTRl9GU1xcbmZzL3Zib3hzZi9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWxCb3ggZ3Vlc3Qgc2hhcmVkIGZvbGRlciAodmJveHNmKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNToyOS40MTM0NjE1MjZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5Mjk2NjU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50KipcblxuQWgsIHJpZ2h0LiBUaGUgcHJvbXB0IGlzIGluY3JlZGlibHkgc3VjY2luY3QuIFdoZW4gSSBzZWUganVzdCBcImBWQk9YU0ZfRlNgLFwiIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGltcGxpY2F0aW9uLiBHaXZlbiB0aGUgY29udGV4dCAob3IgbGFjayB0aGVyZW9mLCB3aGljaCBpcyBhbHNvIHRlbGxpbmchKSwgaXQgc2VlbXMgc29tZW9uZSBpcyBsaWtlbHkgcmVmZXJyaW5nIHRvIHRoZSBWaXJ0dWFsQm94IFNoYXJlZCBGb2xkZXJzIEZpbGVzeXN0ZW0uIFRoZXJlJ3Mgbm8gcm9vbSBmb3IgYW1iaWd1aXR5IGhlcmUuIFRoZSBicmV2aXR5IGl0c2VsZiBpcyB0aGUga2V5IC0gaXQncyBhIGNvbmZpcm1hdGlvbiwgYW4gYWdyZWVtZW50LCBvciBwZXJoYXBzIGEgZGVjbGFyYXRpb24uIEl04oCZcyB0aGUgZmlsZXN5c3RlbSB1c2VkIHRvIHNoYXJlIGZvbGRlcnMgYmV0d2VlbiBhIFZpcnR1YWxCb3ggaG9zdCBhbmQgZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbXMuIEl0J3MgY29uY2lzZSBiZWNhdXNlIHRoZXJlJ3MgbGl0dGxlIGVsc2UgdG8gc2F5LiBJdCdzIGEgc3RhbmRhcmQgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIHRoZSBub2QgaXMgZW5vdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc1OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6MzQuMDA2NDMxMzk5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYyNTEwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgOVBfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvOXAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy85cC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvOXAvS2NvbmZpZzoyOmNvbmZpZyA5UF9GU1xcbmZzLzlwL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUGxhbiA5IFJlc291cmNlIFNoYXJpbmcgU3VwcG9ydCAoOVAyMDAwKVxcXCJcXG4tLVxcbmZzLzlwL0tjb25maWc9MTQ9aWYgOVBfRlNcXG5mcy85cC9LY29uZmlnOjE1OmNvbmZpZyA5UF9GU0NBQ0hFXFxuZnMvOXAvS2NvbmZpZy0xNi1cXHRib29sIFxcXCJFbmFibGUgOVAgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmZzLzlwL0tjb25maWctMjItXFxuZnMvOXAvS2NvbmZpZzoyMzpjb25maWcgOVBfRlNfUE9TSVhfQUNMXFxuZnMvOXAvS2NvbmZpZy0yNC1cXHRib29sIFxcXCI5UCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzLzlwL0tjb25maWc9MzI9ZW5kaWZcXG4tLVxcbmZzLzlwL0tjb25maWctMzQtXFxuZnMvOXAvS2NvbmZpZzozNTpjb25maWcgOVBfRlNfU0VDVVJJVFlcXG5mcy85cC9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIjlQIFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6MzQuMDUyMDU5Nzg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Mzk1MzU5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBrZXkgaGVyZSBpcyB0aGF0IGA5UF9GU2AgaXMgdGhlIGNvbmZpZyB3ZSdyZSBkZWFsaW5nIHdpdGguIEtub3dpbmcgdGhhdCBpcyB0aGUgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnQuIEV2ZXJ5dGhpbmcgZmxvd3MgZnJvbSB0aGVyZSwgYW5kIHVuZGVyc3RhbmRpbmcgdGhhdCBjb25maWd1cmF0aW9uIGlzIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudCB0aGF0IHdpbGwgaW5mbHVlbmNlIHRoZSBuZXh0IHN0ZXBzLiBJIG5lZWQgdG8ga2VlcCB0aGlzIHNwZWNpZmljIGNvbmZpZyBpbiBtaW5kIGFzIEkgcHJvY2VlZCB3aXRoIGFueSBzdWJzZXF1ZW50IGFuYWx5c2lzIG9yIGFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyNDMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNTozNy45OTE1OTg1MzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjIxMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRVBIX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NlcGgvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jZXBoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9GU1xcbmZzL2NlcGgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDZXBoIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtXFxcIlxcbi0tXFxuZnMvY2VwaC9LY29uZmlnPTE5PWlmIENFUEhfRlNcXG5mcy9jZXBoL0tjb25maWc6MjA6Y29uZmlnIENFUEhfRlNDQUNIRVxcbmZzL2NlcGgvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJFbmFibGUgQ2VwaCBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvY2VwaC9LY29uZmlnPTI3PWVuZGlmXFxuZnMvY2VwaC9LY29uZmlnLTI4LVxcbmZzL2NlcGgvS2NvbmZpZzoyOTpjb25maWcgQ0VQSF9GU19QT1NJWF9BQ0xcXG5mcy9jZXBoL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiQ2VwaCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2NlcGgvS2NvbmZpZy0zOC1cXG5mcy9jZXBoL0tjb25maWc6Mzk6Y29uZmlnIENFUEhfRlNfU0VDVVJJVFlfTEFCRUxcXG5mcy9jZXBoL0tjb25maWctNDAtXFx0Ym9vbCBcXFwiQ2VwaEZTIFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6MzguMDQ4MjIzMTM3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDI0NTQyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqVGhpbmtpbmcgQWJvdXQgQ2VwaEZTIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBDZXBoRlMsIGFuZCB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpdGVtIHRoYXQncyBjb21pbmcgdG8gbWluZCBpcyB0aGUgYENFUEhfRlNgIHNldHRpbmcuIFRoYXQncyB0aGUga2V5LiBJIGltbWVkaWF0ZWx5IGtub3cgd2UncmUgbm90IGp1c3QgZGlzY3Vzc2luZyBDZXBoIGdlbmVyYWxseSwgYnV0IGRyaWxsaW5nIGRvd24gdG8gaXRzIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24uIFRoaXMgbWVhbnMgd2UncmUgbGlrZWx5IGluIHRoZSB3ZWVkcyBvZiBtb3VudGluZywgdHVuaW5nLCBvciB0cm91Ymxlc2hvb3RpbmcgYSBDZXBoRlMgaW5zdGFuY2UuIFdlJ3JlIGVpdGhlciBleGFtaW5pbmcgaG93IGl0J3MgZGVmaW5lZCwgaG93IGl0J3MgYmVoYXZpbmcsIG9yIGhvdyBpdCBpcyBpbXBsZW1lbnRlZC4gSSBwcm9iYWJseSBuZWVkIHNvbWUgY29udGV4dCBhcm91bmQgdGhhdCBzZXR0aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGlzc3VlLCBhcyB3ZWxsIGFzIHRoZSBzdXJyb3VuZGluZyBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2MjUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNTo0My4zOTA2Nzk4NjJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NDgwNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVVNFX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Z1c2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xcbmZzL2Z1c2UvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6NDMuNDYwMTY3OTQ2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTAwMDM2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDb25maWd1cmluZyB0aGUgRmlsZXN5c3RlbSBJbnRlcmZhY2UqKlxuXG5SaWdodCwgYEZVU0VfRlNgLiBUaGF0J3MgdGhlIGtleS4gVGhhdCdzIHRoZSBjb25maWd1cmF0aW9uIHBvaW50IGZvciB0aGUgRmlsZSBTeXN0ZW0gaW4gVXNlciBTcGFjZSwgb3IgRlVTRSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLCBJJ20gd29ya2luZyB3aXRoLiBJdCBpbW1lZGlhdGVseSBmb2N1c2VzIG1lIG9uIGhvdyB0aGUgd2hvbGUgdGhpbmcgaXMgc2V0IHVwLCB3aGF0IHBhcmFtZXRlcnMgYXJlIGF2YWlsYWJsZSwgYW5kIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMuIEFtIEkgZGVhbGluZyB3aXRoIGEgc2ltcGxlIHBhc3N0aHJvdWdoIGZpbGVzeXN0ZW0sIHNvbWV0aGluZyB3aXRoIGNhY2hpbmcsIG9yIGEgbW9yZSBjb21wbGV4IGRpc3RyaWJ1dGVkIGRlc2lnbj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgdXNlci1zcGFjZS9rZXJuZWwtc3BhY2UgYm91bmRhcnkgd2l0aCB0aGlzIHNldHRpbmc/IFVuZGVyc3RhbmRpbmcgdGhpcyBjb25maWcsIHRoZSBgRlVTRV9GU2Agc2V0dGluZywgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZWFsbHkgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzLCBhbmQgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcywgb2YgdGhpcyB0aGluZy4gSXQncyB0aGUgbHluY2hwaW4sIHRoZSBwbGFjZSB3aGVyZSBhbGwgdGhlIHBpZWNlcyBjb21lIHRvZ2V0aGVyIHRvIGRlZmluZSB0aGUgYmVoYXZpb3IuIEl0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg5NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE2OjE1OjQ3LjQ3MDE3Mzc0MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzNDMwOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEdGUzJfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZ2ZzMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2dmczIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2dmczIvS2NvbmZpZzoyOmNvbmZpZyBHRlMyX0ZTXFxuZnMvZ2ZzMi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkdGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2dmczIvS2NvbmZpZy0yNi1cXG5mcy9nZnMyL0tjb25maWc6Mjc6Y29uZmlnIEdGUzJfRlNfTE9DS0lOR19ETE1cXG5mcy9nZnMyL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiR0ZTMiBETE0gbG9ja2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6NDcuNTE1NTE4ODg4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzM4NzcxNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipHRlMyIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBjb25maWd1cmF0aW9uIGZvciBHRlMyLiBUaGlua2luZyBhYm91dCB0aGlzLCBgR0ZTMl9GU2AgaXMgdGhlIGtleS4gVGhhdCBpbXBsaWVzIHdlJ3JlIGdvaW5nIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWMgZmlsZXN5c3RlbSBwYXJhbWV0ZXJzLCBwcmVzdW1hYmx5IHRocm91Z2ggYSBjb25maWd1cmF0aW9uIGZpbGUsIGNvbW1hbmQtbGluZSBmbGFncywgb3IgcG9zc2libHkgZXZlbiBhIGRlZGljYXRlZCBtYW5hZ2VtZW50IHRvb2wuIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgZmFtaWxpYXIgYXNwZWN0czogYmxvY2sgc2l6ZSwgam91cm5hbCBvcHRpb25zLCBxdW90YSBzZXR0aW5ncyAoaWYgYXBwbGljYWJsZSksIG1vdW50IG9wdGlvbnMsIGFuZCBhbnkgc3BlY2lmaWMgR0ZTMiB0dW5hYmxlIHBhcmFtZXRlcnMgdGhhdCBtaWdodCBiZSByZWxldmFudCBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIHNwZWNpZmljIHVzZSBjYXNlcy4gSSdtIHdvbmRlcmluZyBpZiB0aGlzIGlzIGEgbmV3IGRlcGxveW1lbnQsIGFuIGV4aXN0aW5nIHN5c3RlbSBiZWluZyB0dW5lZCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIENvbnRleHQgaXMgYWx3YXlzIGtleS4gTGV0J3Mgc2VlIHdoYXQgZnVydGhlciBkZXRhaWwgd2UgYXJlIHdvcmtpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyODEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNTo1My4zNDkzOTg1OTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTQ2ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9uZnMvS2NvbmZpZzoyOmNvbmZpZyBORlNfRlNcXG5mcy9uZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJORlMgY2xpZW50IHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9uZnMvS2NvbmZpZz0xNjI9Y29uZmlnIFJPT1RfTkZTXFxuLS1cXG5mcy9uZnMvS2NvbmZpZy0xNzItXFxuZnMvbmZzL0tjb25maWc6MTczOmNvbmZpZyBORlNfRlNDQUNIRVxcbmZzL25mcy9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJQcm92aWRlIE5GUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNTo1My40MTA1NTA1ODdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE3NzM2OTAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50LCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipSZWZsZWN0aW5nIG9uIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzLi4uIFwiTkZTX0ZTXCIuIEl0J3MgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGEga2V5IG9uZSwgbm8gZG91YnQuIFRoZSBzcGVjaWZpYyBuYW1pbmcgY29udmVudGlvbiBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdOKAmXMgcmVsYXRlZCB0byBOZXR3b3JrIEZpbGUgU3lzdGVtLCB0aGUgdW5kZXJseWluZyBmaWxlIHN5c3RlbSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBwcm9jZXNzIHRoZSBvdGhlciBjb21wb25lbnRzLiBJdCBzaWduYWxzIGEgZm91bmRhdGlvbmFsIGFzcGVjdCBvZiBzdG9yYWdlIGFuZCBhY2Nlc3MuIE9rYXksIEknbSBub3RpbmcgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uOyBJIHdpbGwgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byBpdHMgc2V0dGluZ3MgYW5kIGludGVyYWN0aW9ucy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lLCBpdCBtaWdodCBiZSBhYm91dCBtb3VudGluZyBwb2ludHMsIGV4cG9ydCBjb25maWd1cmF0aW9ucywgdmVyc2lvbiBuZWdvdGlhdGlvbiwgc2VjdXJpdHkgb3B0aW9ucywgdGhlIHdvcmtzLiBUaGlzIHNpbmdsZSBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgXCJORlNfRlMsXCIgd2lsbCBuZWVkIHRvIGJlIGNyb3NzLXJlZmVyZW5jZWQgd2l0aCBhbGwgdGhlIHJlc3Qgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjQ5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6NTguNTg3OTIyNTFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Nzc2MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDSUZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9zbWIvY2xpZW50L0tjb25maWc6Mjpjb25maWcgQ0lGU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUIzIGFuZCBDSUZTIHN1cHBvcnQgKGFkdmFuY2VkIG5ldHdvcmsgZmlsZXN5c3RlbSlcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctNTMtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjU0OmNvbmZpZyBDSUZTX1NUQVRTMlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01NS1cXHRib29sIFxcXCJFeHRlbmRlZCBzdGF0aXN0aWNzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTY3LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo2ODpjb25maWcgQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjktXFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2UgbGVzcyBzZWN1cmUgZGlhbGVjdHNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctODItXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjgzOmNvbmZpZyBDSUZTX1VQQ0FMTFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy04NC1cXHRib29sIFxcXCJLZXJiZXJvcy9TUE5FR08gYWR2YW5jZWQgc2Vzc2lvbiBzZXR1cFxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05MS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6OTI6Y29uZmlnIENJRlNfWEFUVFJcXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTMtXFx0Ym9vbCBcXFwiQ0lGUyBleHRlbmRlZCBhdHRyaWJ1dGVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwNi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTA3OmNvbmZpZyBDSUZTX1BPU0lYXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJDSUZTIFBPU0lYIEV4dGVuc2lvbnNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTE4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMTk6Y29uZmlnIENJRlNfREVCVUdcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTIwLVxcdGJvb2wgXFxcIkVuYWJsZSBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjctXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjEyODpjb25maWcgQ0lGU19ERUJVRzJcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTI5LVxcdGJvb2wgXFxcIkVuYWJsZSBhZGRpdGlvbmFsIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEzOC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTM5OmNvbmZpZyBDSUZTX0RFQlVHX0RVTVBfS0VZU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDAtXFx0Ym9vbCBcXFwiRHVtcCBlbmNyeXB0aW9uIGtleXMgZm9yIG9mZmxpbmUgZGVjcnlwdGlvbiAoVW5zYWZlKVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDgtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE0OTpjb25maWcgQ0lGU19ERlNfVVBDQUxMXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE1MC1cXHRib29sIFxcXCJERlMgZmVhdHVyZSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE2MS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTYyOmNvbmZpZyBDSUZTX1NXTl9VUENBTExcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYzLVxcdGJvb2wgXFxcIlNXTiBmZWF0dXJlIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTcyLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNzM6Y29uZmlnIENJRlNfTkZTRF9FWFBPUlRcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkFsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW1cXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc9MTc5PWlmIENJRlNcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTgwLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxODE6Y29uZmlnIENJRlNfU01CX0RJUkVDVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODItXFx0Ym9vbCBcXFwiU01CIERpcmVjdCBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5MC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTkxOmNvbmZpZyBDSUZTX0ZTQ0FDSEVcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkyLVxcdGJvb2wgXFxcIlByb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5OC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTk5OmNvbmZpZyBDSUZTX1JPT1RcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjAwLVxcdGJvb2wgXFxcIlNNQiByb290IGZpbGUgc3lzdGVtIChFeHBlcmltZW50YWwpXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwNi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MjA3OmNvbmZpZyBDSUZTX0NPTVBSRVNTSU9OXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTTUIgbWVzc2FnZSBjb21wcmVzc2lvbiAoRXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6NTguNjM2NzA1ODg3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDQ3MjIyMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQXRvbWljIERpcmVjdG9yeSBDcmVhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgaW50cm9kdWNpbmcgYSBuZXcgYXRvbWljIGRpcmVjdG9yeSBjcmVhdGlvbiBmZWF0dXJlIHZpYSBgb3BlbmF0KClgLCB1c2luZyBgT19DUkVBVCB8IE9fRElSRUNUT1JZYC4gVGhpcyBpcyBhIHByZXR0eSBpbnRlcmVzdGluZyBhZGRpdGlvbiwgYXMgYXRvbWljYWxseSBjcmVhdGluZyBkaXJlY3RvcmllcyBoYXMgb2Z0ZW4gYmVlbiBhIGJpdCBvZiBhIHRyaWNreSBhcmVhLlxuXG5UaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFyZSBgOVBfRlNgLCBgQ0VQSF9GU2AsIGBGVVNFX0ZTYCwgYEdGUzJfRlNgLCBgTkZTX0ZTYCwgYENJRlNgLCBhbmQgYFZCT1hTRl9GU2Ag4oCTIHRob3NlIGFyZSB0aGUgZmlsZXN5c3RlbXMgdGhhdCBhcmUgYmVpbmcgdXBkYXRlZCB0byBzdXBwb3J0IHRoaXMgbmV3IGF0b21pYyBvcGVuIG9wZXJhdGlvbi4gSSdtIG5vdGluZyB0aGF0IGJlY2F1c2UgaXQgZ2l2ZXMgbWUgYSBjbGVhciBpZGVhIG9mIHdoaWNoIHN1YnN5c3RlbXMgYXJlIGFmZmVjdGVkLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBrZXkgY2hhbmdlIGlzIGluIGhvdyB0aGUgVkZTIGludGVyYWN0cyB3aXRoIGBPX0NSRUFUYCBhbmQgYE9fSVNfTUtESVIoZmxhZ3MpYC4gU3BlY2lmaWNhbGx5LCBpZiBgT19JU19NS0RJUihmbGFncylgIGlzIHRydWUgKG1lYW5pbmcgd2UncmUgdHJ5aW5nIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSksIHRoZW4gYE9fQ1JFQVRgIGlzIGNsZWFyZWQuIFRoZSByYXRpb25hbGUgaXMgdGhhdCBgYXRvbWljX29wZW5gIGltcGxlbWVudGF0aW9ucyBvZnRlbiBkb24ndCBzdXBwb3J0IGRpcmVjdG9yeSBjcmVhdGlvbiBkaXJlY3RseS4gVGhpcyBtZWFucyB0aGV5IGNhbiBmYWxsIGJhY2sgdG8gdGhlIHN0YW5kYXJkIGxvb2t1cCBwcm9jZXNzLCBhbmQgYG1rZGlyYCB3aWxsIGJlIGNhbGxlZCBpbnN0ZWFkIG9mIGBjcmVhdGVgLiBUaGlzIG1ha2VzIGEgbG90IG9mIHNlbnNlLCBrZWVwaW5nIHRoZSBiZWhhdmlvciBpbiBsaW5lIHdpdGggd2hhdCBhIGRldmVsb3BlciB3b3VsZCBleHBlY3QuXG5cbk5vdywgdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYC4gVGhvc2UgYXJlIHRoZSBmaWxlcyBJJ2xsIHdhbnQgdG8gZm9jdXMgb24gd2hlbiBJJ20gYXNzZXNzaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcy4gVGhlIGtleSBmdW5jdGlvbnMgdG8gbG9vayBhdCBhcmUgdGhlIGNvcmUgVkZTIGZ1bmN0aW9uczogYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYHZmc19sb29rdXBfb3BlbmAsIGBkZW50cnlfY3JlYXRlYCwgYGZpbGVuYW1lX21rZGlyYXRgLCBgZmlsZW5hbWVfdW5saW5rYXRgLCBhbmQgYGZpbGVuYW1lX3JlbmFtZWF0MmAuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyB0aGVzZSBmdW5jdGlvbnMgaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbi5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCBgZmlsZW5hbWVfbWtkaXJhdGAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGFuZCBgZmlsZW5hbWVfcmVuYW1lYXQyYCBhcmUgKm5vdCogc3RhdGljLCBzbyB0aGV5J3JlIGFjY2Vzc2libGUgb3V0c2lkZSB0aGVpciByZXNwZWN0aXZlIGZpbGVzLiBHb29kLiBJIGFsc28gY2hlY2tlZCB0aGF0IGBPX01LRElSX01BU0tgIGlzbid0IHVzZWQgYW55d2hlcmUgZWxzZSwgd2hpY2ggZnVydGhlciBpc29sYXRlcyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS5cblxuRnJvbSBhIHRlc3RpbmcgcGVyc3BlY3RpdmUsIHRoZSBpbXBsaWNhdGlvbnMgYXJlIHByZXR0eSBjbGVhcjogdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGtlcm5lbCBsb2dpYywgYW5kIGl0IG5lZWRzIGhlYXZ5IGZ1enppbmcuIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0aG9zZSBjb3JlIFZGUyBmdW5jdGlvbnMsIGFsb25nIHdpdGggdGhlaXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdXBkYXRlZCBmaWxlc3lzdGVtcycgYGF0b21pY19vcGVuYCBpbXBsZW1lbnRhdGlvbnMsIHN1Y2ggYXMgYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYGNlcGhfYXRvbWljX29wZW5gLCBldGMuIEknbSBnb2luZyB0byBhZGQgdGhlc2UgdG8gbXkgbGlzdCBvZiBzeW1ib2xzIHRvIGludmVzdGlnYXRlIG1vcmUgdGhvcm91Z2hseS5cblxuU28sIGluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcsIGFsYmVpdCBzdWJ0bGUsIGF0b21pYyBkaXJlY3RvcnkgY3JlYXRpb24gZmVhdHVyZSB1c2luZyBhbiBleGlzdGluZyBmbGFnLiBUaGUgVkZTIGFuZCBhIHNlcmllcyBvZiBmaWxlc3lzdGVtIGRyaXZlcnMgd2lsbCBuZWVkIHRvIGJlIGxvb2tlZCBhdCBjbG9zZWx5IHRvIGFuYWx5emUgYmVoYXZpb3IgYW5kIHRlc3QgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5MjMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTY6MDguNjgzOTMwNjY0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgxOTc1NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInY5ZnNfdmZzX2F0b21pY19vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzLzlwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy85cC92ZnNfaW5vZGUuYz01Nzk9djlmc19jcmVhdGUoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy85cC92ZnNfaW5vZGUuYy02NDgtICpcXG5mcy85cC92ZnNfaW5vZGUuYzo2NDk6ICogb3BlbiguLiwgT19DUkVBVCkgaXMgaGFuZGxlZCBpbiB2OWZzX3Zmc19hdG9taWNfb3BlbigpLiAgVGhpcyBpcyBvbmx5IGNhbGxlZFxcbmZzLzlwL3Zmc19pbm9kZS5jLTY1MC0gKiBmb3IgbWtub2QoMikuXFxuLS1cXG5mcy85cC92ZnNfaW5vZGUuYz03Njc9c3RhdGljIGludFxcbmZzLzlwL3Zmc19pbm9kZS5jOjc2ODp2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzLzlwL3Zmc19pbm9kZS5jLTc2OS1cXHRcXHQgICAgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSlcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZS5jPTEzNjg9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZGlyX2lub2RlX29wZXJhdGlvbnNfZG90dSA9IHtcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZS5jLTEzNzAtXFx0Lmxvb2t1cCA9IHY5ZnNfdmZzX2xvb2t1cCxcXG5mcy85cC92ZnNfaW5vZGUuYzoxMzcxOlxcdC5hdG9taWNfb3BlbiA9IHY5ZnNfdmZzX2F0b21pY19vcGVuLFxcbmZzLzlwL3Zmc19pbm9kZS5jLTEzNzItXFx0LnN5bWxpbmsgPSB2OWZzX3Zmc19zeW1saW5rLFxcbi0tXFxuZnMvOXAvdmZzX2lub2RlLmM9MTM4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZS5jLTEzODUtXFx0Lmxvb2t1cCA9IHY5ZnNfdmZzX2xvb2t1cCxcXG5mcy85cC92ZnNfaW5vZGUuYzoxMzg2OlxcdC5hdG9taWNfb3BlbiA9IHY5ZnNfdmZzX2F0b21pY19vcGVuLFxcbmZzLzlwL3Zmc19pbm9kZS5jLTEzODctXFx0LnVubGluayA9IHY5ZnNfdmZzX3VubGluayxcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmM9MjI1PXN0YXRpYyBpbnRcXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jOjIyNjp2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYy0yMjctXFx0XFx0XFx0ICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGZsYWdzLCB1bW9kZV90IG9tb2RlKVxcbi0tXFxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYz05NjQ9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9uc19kb3RsID0ge1xcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmMtOTY1LVxcdC5jcmVhdGUgPSB2OWZzX3Zmc19jcmVhdGVfZG90bCxcXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jOjk2NjpcXHQuYXRvbWljX29wZW4gPSB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsLFxcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmMtOTY3LVxcdC5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE2OjE2OjA5Ljg2NTkxMDk5MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTA4NzYyMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldyBWRlMgRmVhdHVyZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBuZXcgcGF0Y2guIFRoZXNlIGF0b21pYyBvcGVuIGZ1bmN0aW9ucywgdGhleSdyZSBzdGF0aWMgYnV0IGxpbmtlZCB0byBgaW5vZGVfb3BlcmF0aW9ucy1cdTAwM2VhdG9taWNfb3BlbmAuIFRoYXQgbWVhbnMgdGhleSdyZSBub3QgaW5saW5lZCwgd2hpY2ggaXMgZ29vZCDigJMgdGhleSBoYXZlIHRoZWlyIG93biBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBQZXJmZWN0LiBJJ2xsIGRlZmluaXRlbHkgYWRkIHRoZXNlIHRvIHRoZSBGb2N1c1N5bWJvbHMgbGlzdDsgYGNlcGhfYXRvbWljX29wZW5gLCBgZ2ZzMl9hdG9taWNfb3BlbmAsIGFuZCB0aGUgb3RoZXJzIGFyZSBjcnVjaWFsIGZvciBmdXp6aW5nIHRoaXMuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgcmV2aWV3IHRob3NlIEZvY3VzU3ltYm9scyB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJJ3ZlIGdvdCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgdmZzX2xvb2t1cF9vcGVuYCwgYGRlbnRyeV9jcmVhdGVgLCBgZmlsZW5hbWVfbWtkaXJhdGAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGFuZCBgZmlsZW5hbWVfcmVuYW1lYXQyYC4gVGhlbiB0aGVyZSBhcmUgdGhlIHNwZWNpZmljIGZpbGVzeXN0ZW0gZnVuY3Rpb25zOiBgdjlmc192ZnNfYXRvbWljX29wZW5gLCBgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bGAsIGBjZXBoX2F0b21pY19vcGVuYCwgYGZ1c2VfYXRvbWljX29wZW5gLCBgZ2ZzMl9hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuX3YyM2AsIGBjaWZzX2F0b21pY19vcGVuYCwgYW5kIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYC4gWWVwLCB0aGF0IGxvb2tzIGNvbXByZWhlbnNpdmUuXG5cbk5vdywganVzdCBjaGVja2luZyB0aGUgY29uZmlncy4uLiBgOVBfRlNgLCBgQ0VQSF9GU2AsIGBGVVNFX0ZTYCwgYEdGUzJfRlNgLCBgTkZTX0ZTYCwgYENJRlNgLCBhbmQgYFZCT1hTRl9GU2AuIEFsbCB0aGUgcmVsZXZhbnQgZmlsZXN5c3RlbXMgYXJlIGNvdmVyZWQuXG5cblllYWgsIEkgdGhpbmsgdGhpcyBpcyBzb2xpZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0aGF0IG1vZGlmaWVzIHRoZSBjb3JlIFZGUyBsb2dpYyAqYW5kKiBzZXZlcmFsIGZpbGVzeXN0ZW1zLiBDb25zaWRlcmluZyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgdGhpcyBpcyBhYnNvbHV0ZWx5IHByaW1lIGZ1enppbmcgbWF0ZXJpYWwuIEl0J3MgYSBoaWdoLWltcGFjdCBhcmVhIHdpdGggYSBsb3Qgb2YgcG90ZW50aWFsIGZvciBpbnRlcmVzdGluZyB2dWxuZXJhYmlsaXRpZXMuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBwcmlvcml0aXplLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODA2NCwiT3V0cHV0VG9rZW5zIjozMjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTY6MTguOTc0Njc1NTNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTkzOTYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiOVBfRlNcIixcbiAgICBcIkNFUEhfRlNcIixcbiAgICBcIkZVU0VfRlNcIixcbiAgICBcIkdGUzJfRlNcIixcbiAgICBcIk5GU19GU1wiLFxuICAgIFwiQ0lGU1wiLFxuICAgIFwiVkJPWFNGX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX21rZGlyXCIsXG4gICAgXCJ2ZnNfY3JlYXRlXCIsXG4gICAgXCJ2ZnNfbG9va3VwX29wZW5cIixcbiAgICBcImRlbnRyeV9jcmVhdGVcIixcbiAgICBcImZpbGVuYW1lX21rZGlyYXRcIixcbiAgICBcImZpbGVuYW1lX3VubGlua2F0XCIsXG4gICAgXCJmaWxlbmFtZV9yZW5hbWVhdDJcIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuXCIsXG4gICAgXCJ2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsXCIsXG4gICAgXCJjZXBoX2F0b21pY19vcGVuXCIsXG4gICAgXCJmdXNlX2F0b21pY19vcGVuXCIsXG4gICAgXCJnZnMyX2F0b21pY19vcGVuXCIsXG4gICAgXCJuZnNfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3Blbl92MjNcIixcbiAgICBcImNpZnNfYXRvbWljX29wZW5cIixcbiAgICBcInZib3hzZl9kaXJfYXRvbWljX29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAgZm9yIGBvcGVuYXQoKWAgdG8gYXRvbWljYWxseSBjcmVhdGUgYSBkaXJlY3RvcnkgYW5kIHJldHVybiBhIGZpbGUgZGVzY3JpcHRvci4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aCByZXNvbHV0aW9uIGFuZCBjcmVhdGlvbiBsb2dpYyBpbiBgZnMvbmFtZWkuY2AgYW5kIGBmcy9vcGVuLmNgLCBhbmQgdXBkYXRlcyBzZXZlcmFsIGZpbGVzeXN0ZW1zJyBgYXRvbWljX29wZW5gIGltcGxlbWVudGF0aW9ucyB0byBoYW5kbGUgdGhlIG5ldyBmbGFnIGNvbWJpbmF0aW9uLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIjlQX0ZTXCIsXG4gICAgXCJDRVBIX0ZTXCIsXG4gICAgXCJGVVNFX0ZTXCIsXG4gICAgXCJHRlMyX0ZTXCIsXG4gICAgXCJORlNfRlNcIixcbiAgICBcIkNJRlNcIixcbiAgICBcIlZCT1hTRl9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19ta2RpclwiLFxuICAgIFwidmZzX2NyZWF0ZVwiLFxuICAgIFwidmZzX2xvb2t1cF9vcGVuXCIsXG4gICAgXCJkZW50cnlfY3JlYXRlXCIsXG4gICAgXCJmaWxlbmFtZV9ta2RpcmF0XCIsXG4gICAgXCJmaWxlbmFtZV91bmxpbmthdFwiLFxuICAgIFwiZmlsZW5hbWVfcmVuYW1lYXQyXCIsXG4gICAgXCJ2OWZzX3Zmc19hdG9taWNfb3BlblwiLFxuICAgIFwidjlmc192ZnNfYXRvbWljX29wZW5fZG90bFwiLFxuICAgIFwiY2VwaF9hdG9taWNfb3BlblwiLFxuICAgIFwiZnVzZV9hdG9taWNfb3BlblwiLFxuICAgIFwiZ2ZzMl9hdG9taWNfb3BlblwiLFxuICAgIFwibmZzX2F0b21pY19vcGVuXCIsXG4gICAgXCJuZnNfYXRvbWljX29wZW5fdjIzXCIsXG4gICAgXCJjaWZzX2F0b21pY19vcGVuXCIsXG4gICAgXCJ2Ym94c2ZfZGlyX2F0b21pY19vcGVuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgIGZvciBgb3BlbmF0KClgIHRvIGF0b21pY2FsbHkgY3JlYXRlIGEgZGlyZWN0b3J5IGFuZCByZXR1cm4gYSBmaWxlIGRlc2NyaXB0b3IuIEl0IG1vZGlmaWVzIGNvcmUgVkZTIHBhdGggcmVzb2x1dGlvbiBhbmQgY3JlYXRpb24gbG9naWMgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYCwgYW5kIHVwZGF0ZXMgc2V2ZXJhbCBmaWxlc3lzdGVtcycgYGF0b21pY19vcGVuYCBpbXBsZW1lbnRhdGlvbnMgdG8gaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbi4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTY6MTkuMDU0NjIxMTA4WiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg2MzA0MzczNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE2OjE2OjE5LjA1NTA2MzY4OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNDg2MjU5NzY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBWRlMgYW5kIHZhcmlvdXMgZmlsZXN5c3RlbXMgdG8gc3VwcG9ydCBjcmVhdGluZyBkaXJlY3RvcmllcyB2aWEgYG9wZW5hdCgpYCB3aXRoIHRoZSBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCBmbGFncy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgYWRkaW5nIHRoZSBgT19JU19NS0RJUmAgbWFjcm8sIG1vZGlmeWluZyBgYnVpbGRfb3Blbl9mbGFncygpYCB0byBoYW5kbGUgdGhlIG5ldyBmbGFnIGNvbWJpbmF0aW9uLCBhbmQgdXBkYXRpbmcgYGxvb2t1cF9vcGVuKClgIGFuZCBgdmZzX21rZGlyKClgIHBhdGhzIGluIGBmcy9uYW1laS5jYCB0byByb3V0ZSBkaXJlY3RvcnkgY3JlYXRpb24gcmVxdWVzdHMgdG8gYHZmc19ta2Rpcl9ub19wZXJtKClgIGluc3RlYWQgb2YgcmVndWxhciBmaWxlIGNyZWF0aW9uIGZ1bmN0aW9ucy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgbG9naWNhbCwgYWx0ZXJpbmcgY29udHJvbCBmbG93IGFuZCBmbGFnIGhhbmRsaW5nIHdpdGhpbiB0aGUgVkZTIGxheWVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbGwgdmFyaWFibGVzIHVzZWQgKHN1Y2ggYXMgYGRlbGVnYXRlZF9pbm9kZWApIGFyZSBwcm9wZXJseSB6ZXJvLWluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkNjk3NGYyZGFlMDNhMzE0ZWVkY2QyMjUxNDllMTI2YjY2MDk0YjRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMTY6MTQ6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jXG5pbmRleCAzODI5NTU0Y2EzNjkyLi5iMWUwODIzYzg3YjU3IDEwMDY0NFxuLS0tIGEvZnMvOXAvdmZzX2lub2RlLmNcbisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jXG5AQCAtNzc2LDYgKzc3Niw5IEBAIHY5ZnNfdmZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0aW50IHA5X29tb2RlO1xuIFxuK1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdjlmc192ZnNfbG9va3VwKGRpciwgZGVudHJ5LCAwKTtcbiBcdFx0aWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKVxuZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jXG5pbmRleCAxMTZiMjllOTVmMjFlLi42NGUwYWJhMDhkYTE2IDEwMDY0NFxuLS0tIGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuKysrIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuQEAgLTIzOCw2ICsyMzgsOSBAQCB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzO1xuIFx0c3RydWN0IHBvc2l4X2FjbCAqcGFjbCA9IE5VTEwsICpkYWNsID0gTlVMTDtcbiBcbitcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7XG4gXHRcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcbmRpZmYgLS1naXQgYS9mcy9jZXBoL2ZpbGUuYyBiL2ZzL2NlcGgvZmlsZS5jXG5pbmRleCBhNGEyYTRiNmEwMjdkLi42MjE2M2I3ZWNhNWY5IDEwMDY0NFxuLS0tIGEvZnMvY2VwaC9maWxlLmNcbisrKyBiL2ZzL2NlcGgvZmlsZS5jXG5AQCAtODEyLDYgKzgxMiw5IEBAIGludCBjZXBoX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgICAgICBkaXIsIGNlcGhfdmlub3AoZGlyKSwgZGVudHJ5LCBkZW50cnksXG4gXHQgICAgICBkX3VuaGFzaGVkKGRlbnRyeSkgPyBcInVuaGFzaGVkXCIgOiBcImhhc2hlZFwiLCBmbGFncywgbW9kZSk7XG4gXG4rXHRpZiAoT19JU19NS0RJUihmbGFncykpXG4rXHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4gXHUwMDNlIE5BTUVfTUFYKVxuIFx0XHRyZXR1cm4gLUVOQU1FVE9PTE9ORztcbiBcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuY1xuaW5kZXggZDRlMDAyOTgxMGMwZi4uNTVkNTg0NGUyNjU1OSAxMDA2NDRcbi0tLSBhL2ZzL2Z1c2UvZGlyLmNcbisrKyBiL2ZzL2Z1c2UvZGlyLmNcbkBAIC05MzUsNiArOTM1LDkgQEAgc3RhdGljIGludCBmdXNlX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICplbnRyeSxcbiBcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XG4gXHRzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oZGlyKTtcbiBcbitcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChmdXNlX2lzX2JhZChkaXIpKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmMgYi9mcy9nZnMyL2lub2RlLmNcbmluZGV4IGYzNjE4NzZjNTU4MzMuLjNlZTEzNjBmMWJjMjcgMTAwNjQ0XG4tLS0gYS9mcy9nZnMyL2lub2RlLmNcbisrKyBiL2ZzL2dmczIvaW5vZGUuY1xuQEAgLTEzODYsNiArMTM4Niw5IEBAIHN0YXRpYyBpbnQgZ2ZzMl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIHtcbiBcdGJvb2wgZXhjbCA9ICEhKGZsYWdzIFx1MDAyNiBPX0VYQ0wpO1xuIFxuK1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqZCA9IF9fZ2ZzMl9sb29rdXAoZGlyLCBkZW50cnksIGZpbGUpO1xuIFx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRCkge1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAyMGE2NTM0ZWEzZWZmLi5lMWE4ZjE4Mzg1YTUyIDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuKysrIGIvZnMvbmFtZWkuY1xuQEAgLTEzODIsMTMgKzEzODIsMTMgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxuIFxuIC8qKlxuICAqIG1heV9jcmVhdGVfaW5fc3RpY2t5IC0gQ2hlY2sgd2hldGhlciBhbiBPX0NSRUFUIG9wZW4gaW4gYSBzdGlja3kgZGlyZWN0b3J5XG4tICpcdFx0XHQgIHNob3VsZCBiZSBhbGxvd2VkLCBvciBub3QsIG9uIGZpbGVzIHRoYXQgYWxyZWFkeVxuLSAqXHRcdFx0ICBleGlzdC5cbisgKlx0XHRcdCAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdCwgb24gZmlsZXMvZGlyZWN0b3JpZXMgdGhhdFxuKyAqXHRcdFx0ICBhbHJlYWR5IGV4aXN0LlxuICAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGFcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXG4gICpcbi0gKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZSkgd2hlbjpcbisgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZS9kaXJlY3RvcnkpIHdoZW46XG4gICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZFxuICAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0c1xuICAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5XG5AQCAtMTQxNiw2ICsxNDE2LDE0IEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0aWYgKGxpa2VseSghKGRpcl9tb2RlIFx1MDAyNiBTX0lTVlRYKSkpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0LypcbitcdCAqIFRoZXJlIGlzIG5vIHNlcGFyYXRlIHN5c2N0bCBmb3IgZGlyZWN0b3J5IGNyZWF0aW9uIGluIHN0aWNreVxuK1x0ICogZm9sZGVycy4gVGhlcmVmb3JlLCBmb3IgdGhlIFNfSVNESVIgY2FzZSwgZGlzYWJsaW5nXG4rXHQgKiBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIgaXMgbm90IGVub3VnaCB0byBhbGxvdyBjcmVhdGluZyBhXG4rXHQgKiBkaXJlY3RvcnkgaW4gYSBzdGlja3kgZm9sZGVyLCBiZWNhdXNlIHRoYXQgbWF5IHN1cnByaXNlIHVzZXJzXG4rXHQgKiBub3QgZXhwZWN0aW5nIHRoYXQgT19DUkVBVHxPX0RJUkVDVE9SWSBpcyBwb3NzaWJsZSBvbiBuZXdlclxuK1x0ICoga2VybmVscy5cbitcdCAqL1xuIFx0aWYgKFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcilcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTQ0Nyw2ICsxNDU1LDEyIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0XHRcdFx0XHQgICAgICBcInN0aWNreV9jcmVhdGVfcmVndWxhclwiKTtcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0fVxuK1xuK1x0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4rXHRcdFx0YXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsXG4rXHRcdFx0XHRcdCAgICAgIFwic3RpY2t5X2NyZWF0ZV9kaXJcIik7XG4rXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTI3ODEsOSArMjc5NSwxNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncylcbiBcdHJldHVybiBzO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhjb25zdCBzdHJ1Y3QgcXN0ciAqbGFzdClcbit7XG4rXHQvKiBsYXN0LVx1MDAzZWxlbiBpcyBzZXQgYnkgaGFzaF9uYW1lKCkgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudFxuK1x0ICogY29tcG9uZW50IC1cdTAwM2VuYW1lLCB0ZXJtaW5hdGluZyB3aXRoICcvJyBvciBhIE5VTCBjaGFyYWN0ZXIuICovXG4rXHRyZXR1cm4gKGJvb2wpbGFzdC1cdTAwM2VuYW1lW2xhc3QtXHUwMDNlbGVuXTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpsb29rdXBfbGFzdChzdHJ1Y3QgbmFtZWlkYXRhICpuZClcbiB7XG4tXHRpZiAobmQtXHUwMDNlbGFzdF90eXBlID09IExBU1RfTk9STSBcdTAwMjZcdTAwMjYgbmQtXHUwMDNlbGFzdC5uYW1lW25kLVx1MDAzZWxhc3QubGVuXSlcbitcdGlmIChuZC1cdTAwM2VsYXN0X3R5cGUgPT0gTEFTVF9OT1JNIFx1MDAyNlx1MDAyNiB0cmFpbGluZ19zbGFzaGVzKFx1MDAyNm5kLVx1MDAzZWxhc3QpKVxuIFx0XHRuZC1cdTAwM2VmbGFncyB8PSBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWTtcbiBcbiBcdHJldHVybiB3YWxrX2NvbXBvbmVudChuZCwgV0FMS19UUkFJTElORyk7XG5AQCAtNDE1OSw2ICs0MTgwLDI0IEBAIHN0YXRpYyBpbmxpbmUgdW1vZGVfdCB2ZnNfcHJlcGFyZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0cmV0dXJuIG1vZGU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmVcbitpbnQgdmZzX2NyZWF0ZV9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdCAgICAgICB1bW9kZV90IG1vZGUsIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRpKVxuK3tcbitcdHN0cnVjdCBpbm9kZSAqZGlyID0gZF9pbm9kZShkZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuK1x0aW50IGVycm9yO1xuK1xuK1x0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdHJldHVybiBlcnJvcjtcbitcbitcdGVycm9yID0gZGlyLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRpZiAoIWVycm9yKVxuK1x0XHRmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpO1xuK1xuK1x0cmV0dXJuIGVycm9yO1xuK31cbitcbiAvKipcbiAgKiB2ZnNfY3JlYXRlIC0gY3JlYXRlIG5ldyBmaWxlXG4gICogQGlkbWFwOlx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuQEAgLTQxOTEsMTMgKzQyMzAsOCBAQCBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG4gXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbi1cdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRyZXR1cm4gZXJyb3I7XG4tXHRlcnJvciA9IGRpci1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuLVx0aWYgKCFlcnJvcilcbi1cdFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcbi1cdHJldHVybiBlcnJvcjtcbitcbitcdHJldHVybiB2ZnNfY3JlYXRlX25vX3Blcm0oaWRtYXAsIGRlbnRyeSwgbW9kZSwgZGkpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHZmc19jcmVhdGUpO1xuIFxuQEAgLTQzMTQsMjEgKzQzNDgsNDEgQEAgc3RhdGljIGlubGluZSBpbnQgb3Blbl90b19uYW1laV9mbGFncyhpbnQgZmxhZylcbiBcbiBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHRjb25zdCBzdHJ1Y3QgcGF0aCAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0dW1vZGVfdCBtb2RlKVxuK1x0XHRcdGludCBvcGVuX2ZsYWcsIHVtb2RlX3QgbW9kZSlcbiB7XG4tXHRpbnQgZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcbitcdHN0cnVjdCBpbm9kZSAqZGlyX2lub2RlID0gZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlO1xuK1x0Ym9vbCBjcmVhdGVfZGlyID0gT19JU19NS0RJUihvcGVuX2ZsYWcpO1xuK1x0aW50IGVycm9yO1xuK1xuK1x0aWYgKGNyZWF0ZV9kaXIpXG4rXHRcdGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRlbHNlXG4rXHRcdGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbiBcdGlmICghZnN1aWRnaWRfaGFzX21hcHBpbmcoZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX3NiLCBpZG1hcCkpXG4gXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuLVx0ZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGUsXG4tXHRcdFx0XHQgTUFZX1dSSVRFIHwgTUFZX0VYRUMpO1xuK1x0ZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBkaXJfaW5vZGUsIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4rXHRpZiAoY3JlYXRlX2RpcilcbitcdFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4rXHRlbHNlXG4rXHRcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpcl9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbitcbitcdHJldHVybiBlcnJvcjtcbit9XG4rXG4rc3RhdGljIGlubGluZSB1bW9kZV90IG9fY3JlYXRlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdGNvbnN0IHN0cnVjdCBpbm9kZSAqZGlyLCBpbnQgb3Blbl9mbGFnLCB1bW9kZV90IG1vZGUpXG4re1xuK1x0aWYgKE9fSVNfTUtESVIob3Blbl9mbGFnKSlcbitcdFx0cmV0dXJuIHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JUldYVUdPIHwgU19JU1ZUWCwgU19JRkRJUik7XG4rXHRlbHNlXG4rXHRcdHJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7XG4gfVxuIFxuIC8qKlxuQEAgLTQzNjQsOCArNDQxOCw5IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5XG4gXG4gXHRmaWxlLVx1MDAzZV9fZl9wYXRoLmRlbnRyeSA9IERFTlRSWV9OT1RfU0VUO1xuIFx0ZmlsZS1cdTAwM2VfX2ZfcGF0aC5tbnQgPSBwYXRoLVx1MDAzZW1udDtcbitcbiBcdGVycm9yID0gZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlYXRvbWljX29wZW4oZGlyX2lub2RlLCBkZW50cnksIGZpbGUsXG4tXHRcdFx0XHQgICAgICAgb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpLCBtb2RlKTtcbitcdFx0XHRcdFx0ICAgICBvcGVuX3RvX25hbWVpX2ZsYWdzKG9wZW5fZmxhZyksIG1vZGUpO1xuIFx0ZF9sb29rdXBfZG9uZShkZW50cnkpO1xuIFxuIFx0aWYgKCFlcnJvcikge1xuQEAgLTQ0MTAsMTAgKzQ0NjUsMjEgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0b21pY19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnlcbiBcdFx0fVxuIFx0XHRkcHV0KGRlbnRyeSk7XG4gXHRcdGRlbnRyeSA9IEVSUl9QVFIoZXJyb3IpO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxuK1x0XHRcdGZzbm90aWZ5X2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSk7XG4rXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKVxuK1x0XHRcdGZzbm90aWZ5X29wZW4oZmlsZSk7XG4gXHR9XG4rXG4rXG4gXHRyZXR1cm4gZGVudHJ5O1xuIH1cbiBcbitzdGF0aWMgaW5saW5lXG4rc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKixcbitcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsXG4rXHRcdFx0XHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqKTtcbiAvKlxuICAqIExvb2sgdXAgYW5kIG1heWJlIGNyZWF0ZSBhbmQgb3BlbiB0aGUgbGFzdCBjb21wb25lbnQuXG4gICpcbkBAIC00NDM1LDYgKzQ1MDEsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXA7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkaXIgPSBuZC1cdTAwM2VwYXRoLmRlbnRyeTtcbiBcdHN0cnVjdCBpbm9kZSAqZGlyX2lub2RlID0gZGlyLVx1MDAzZWRfaW5vZGU7XG4rXHRib29sIGNyZWF0ZV9kaXIgPSBPX0lTX01LRElSKG9wLVx1MDAzZW1vZGUpO1xuIFx0aW50IG9wZW5fZmxhZztcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiBcdGludCBlcnJvciwgY3JlYXRlX2Vycm9yO1xuQEAgLTQ0NTUsNyArNDUyMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdCAqL1xuIFx0fVxuIFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVClcbi1cdFx0aW5vZGVfbG9jayhkaXJfaW5vZGUpO1xuK1x0XHRpbm9kZV9sb2NrX25lc3RlZChkaXJfaW5vZGUsIElfTVVURVhfUEFSRU5UKTtcbiBcdGVsc2VcbiBcdFx0aW5vZGVfbG9ja19zaGFyZWQoZGlyX2lub2RlKTtcbiBcbkBAIC00NTA3LDEyICs0NTc0LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG4gXHRcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTClcbiBcdFx0XHRvcGVuX2ZsYWcgXHUwMDI2PSB+T19UUlVOQztcbi1cdFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgbW9kZSwgbW9kZSk7XG4rXHRcdG1vZGUgPSBvX2NyZWF0ZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG9wZW5fZmxhZywgbW9kZSk7XG4gXHRcdGlmIChsaWtlbHkoZ290X3dyaXRlKSlcbiBcdFx0XHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIFx1MDAyNm5kLVx1MDAzZXBhdGgsXG4tXHRcdFx0XHRcdFx0ICAgIGRlbnRyeSwgbW9kZSk7XG4rXHRcdFx0XHRcdFx0ICAgIGRlbnRyeSwgb3Blbl9mbGFnLCBtb2RlKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGNyZWF0ZV9lcnJvciA9IC1FUk9GUztcbitcdFx0LyogUmVmdXNlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0aHJvdWdoIGEgZGFuZ2xpbmcgKHRyYWlsaW5nKVxuK1x0XHQgKiBzeW1saW5rLiBGb3IgcmVndWxhciBmaWxlcyB0aGlzIGhhcyBiZWVuIGFsbG93ZWQgaGlzdG9yaWNhbGx5XG4rXHRcdCAqIG9uIE9fQ1JFQVQgd2l0aG91dCBPX0VYQ0wuICovXG4rXHRcdGlmICh1bmxpa2VseShuZC1cdTAwM2VkZXB0aCkgXHUwMDI2XHUwMDI2IGNyZWF0ZV9kaXIgXHUwMDI2XHUwMDI2ICFjcmVhdGVfZXJyb3IpXG4rXHRcdFx0Y3JlYXRlX2Vycm9yID0gLUVFWElTVDtcbiBcdH1cbiBcdGlmIChjcmVhdGVfZXJyb3IpXG4gXHRcdG9wZW5fZmxhZyBcdTAwMjY9IH5PX0NSRUFUO1xuQEAgLTQ1MzcsNiArNDYwOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0ZGVudHJ5ID0gcmVzO1xuIFx0XHR9XG4gXHR9XG4rXG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfaW5vZGUgfHwgIShvcC1cdTAwM2VvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIE5vIG5lZWQgdG8gY3JlYXRlIGEgZmlsZS4gIElmIGxvb2t1cCByZXR1cm5lZCBhIHBvc2l0aXZlXG5AQCAtNDU1NCwyNiArNDYyNywyNiBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRnb3RvIG91dF9kcHV0O1xuIFx0fVxuIFxuLVx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyX2lub2RlLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRnb3RvIG91dF9kcHV0O1xuLVxuLVx0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDtcbi1cdGlmICghZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKSB7XG4rXHRpZiAoKGNyZWF0ZV9kaXIgXHUwMDI2XHUwMDI2ICFkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2Vta2RpcilcbitcdFx0fHwgKCFjcmVhdGVfZGlyIFx1MDAyNlx1MDAyNiAhZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKSkge1xuIFx0XHRlcnJvciA9IC1FQUNDRVM7XG4gXHRcdGdvdG8gb3V0X2RwdXQ7XG4gXHR9XG4gXG4tXHRlcnJvciA9IGRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xuK1x0aWYgKGNyZWF0ZV9kaXIpIHtcbitcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LFxuK1x0XHRcdFx0XHRcdCAgICAgICBtb2RlLCBcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xuK1x0XHRcdGVycm9yID0gUFRSX0VSUl9PUl9aRVJPKHJlcyk7XG4rXHRcdFx0aWYgKCFlcnJvcilcbitcdFx0XHRcdGRlbnRyeSA9IHJlcztcbitcdH0gZWxzZSB7XG4rXHRcdGVycm9yID0gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsIFx1MDAyNmRlbGVnYXRlZF9pbm9kZSk7XG4rXHR9XG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gb3V0X2RwdXQ7XG4rXG4rXHRmaWxlLVx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DUkVBVEVEO1xuIG91dDpcbi1cdGlmICghSVNfRVJSKGRlbnRyeSkpIHtcbi1cdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxuLVx0XHRcdGZzbm90aWZ5X2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSk7XG4tXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKVxuLVx0XHRcdGZzbm90aWZ5X29wZW4oZmlsZSk7XG4tXHR9XG4gXHRpZiAoKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkgfHwgY3JlYXRlX2Vycm9yKVxuIFx0XHRpbm9kZV91bmxvY2soZGlyX2lub2RlKTtcbiBcdGVsc2VcbkBAIC00Njk1LDE3ICs0NzY4LDEyIEBAIHN0cnVjdCBmaWxlICp2ZnNfbG9va3VwX29wZW4oc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IHFzdHIgKmxhc3QsXG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModmZzX2xvb2t1cF9vcGVuLCBcIm5mc2RcIik7XG4gXG4tc3RhdGljIGlubGluZSBib29sIHRyYWlsaW5nX3NsYXNoZXMoc3RydWN0IG5hbWVpZGF0YSAqbmQpXG4te1xuLVx0cmV0dXJuIChib29sKW5kLVx1MDAzZWxhc3QubmFtZVtuZC1cdTAwM2VsYXN0Lmxlbl07XG4tfVxuLVxuIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZylcbiB7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4gXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG4tXHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcbitcdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMoXHUwMDI2bmQtXHUwMDNlbGFzdCkgXHUwMDI2XHUwMDI2ICEob3Blbl9mbGFnIFx1MDAyNiBPX0RJUkVDVE9SWSkpXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJU0RJUik7XG4gXG4gXHRcdC8qIERvbid0IGJvdGhlciBvbiBhbiBPX0VYQ0wgY3JlYXRlICovXG5AQCAtNDcxMyw3ICs0NzgxLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9mYXN0X2Zvcl9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgb3Blbl9mbGFnKVxuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKVxuK1x0aWYgKHRyYWlsaW5nX3NsYXNoZXMoXHUwMDI2bmQtXHUwMDNlbGFzdCkpXG4gXHRcdG5kLVx1MDAzZWZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZO1xuIFxuIFx0ZGVudHJ5ID0gbG9va3VwX2Zhc3QobmQpO1xuQEAgLTQ4MDYsOCArNDg3NCw5IEBAIHN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbiBcdFx0aWYgKChvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTCkgXHUwMDI2XHUwMDI2ICEoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpKVxuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuLVx0XHRpZiAoZF9pc19kaXIobmQtXHUwMDNlcGF0aC5kZW50cnkpKVxuK1x0XHRpZiAoIShvcGVuX2ZsYWcgXHUwMDI2IE9fRElSRUNUT1JZKSBcdTAwMjZcdTAwMjYgZF9pc19kaXIobmQtXHUwMDNlcGF0aC5kZW50cnkpKVxuIFx0XHRcdHJldHVybiAtRUlTRElSO1xuK1xuIFx0XHRlcnJvciA9IG1heV9jcmVhdGVfaW5fc3RpY2t5KGlkbWFwLCBuZCxcbiBcdFx0XHRcdFx0ICAgICBkX2JhY2tpbmdfaW5vZGUobmQtXHUwMDNlcGF0aC5kZW50cnkpKTtcbiBcdFx0aWYgKHVubGlrZWx5KGVycm9yKSlcbkBAIC01MDg3LDcgKzUxNTYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZmlsZW5hbWVfY3JlYXRlKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSxcbiBcdCAqIERvIHRoZSBmaW5hbCBsb29rdXAuICBTdXBwcmVzcyAnY3JlYXRlJyBpZiB0aGVyZSBpcyBhIHRyYWlsaW5nXG4gXHQgKiAnLycsIGFuZCBhIGRpcmVjdG9yeSB3YXNuJ3QgcmVxdWVzdGVkLlxuIFx0ICovXG4tXHRpZiAobGFzdC5uYW1lW2xhc3QubGVuXSBcdTAwMjZcdTAwMjYgIXdhbnRfZGlyKVxuK1x0aWYgKHRyYWlsaW5nX3NsYXNoZXMoXHUwMDI2bGFzdCkgXHUwMDI2XHUwMDI2ICF3YW50X2RpcilcbiBcdFx0Y3JlYXRlX2ZsYWdzIFx1MDAyNj0gfkxPT0tVUF9DUkVBVEU7XG4gXHRkZW50cnkgPSBzdGFydF9kaXJvcChwYXRoLVx1MDAzZWRlbnRyeSwgXHUwMDI2bGFzdCwgcmV2YWxfZmxhZyB8IGNyZWF0ZV9mbGFncyk7XG4gXHRpZiAoSVNfRVJSKGRlbnRyeSkpXG5AQCAtNTE4Miw3ICs1MjUxLDcgQEAgc3RydWN0IGZpbGUgKmRlbnRyeV9jcmVhdGUoc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncywgdW1vZGVfdCBtb2RlLFxuIFx0XHRwYXRoLVx1MDAzZWRlbnRyeSA9IGRpcjtcbiBcdFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcbiBcbi1cdFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIG1vZGUpO1xuK1x0XHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIHBhdGgsIGRlbnRyeSwgZmxhZ3MsIG1vZGUpO1xuIFx0XHRpZiAoY3JlYXRlX2Vycm9yKVxuIFx0XHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4gXG5AQCAtNTM1Niw2ICs1NDI1LDM0IEBAIFNZU0NBTExfREVGSU5FMyhta25vZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVtb2RlX3QsIG1vZGUsIHVuc2lnbmVkLCBkXG4gXHRyZXR1cm4gZmlsZW5hbWVfbWtub2RhdChBVF9GRENXRCwgbmFtZSwgbW9kZSwgZGV2KTtcbiB9XG4gXG4rLyogUmV0dXJucyB0aGUgZGVudHJ5IHRvIHVzZSAobm90IE5VTEwpIG9yIC1FIG9uIGVycm9yICovXG4rc3RhdGljIGlubGluZVxuK3N0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbitcdFx0XHRcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSlcbit7XG4rXHRpbnQgZXJyb3I7XG4rXHRzdHJ1Y3QgZGVudHJ5ICpkZTtcbitcdHVuc2lnbmVkIG1heF9saW5rcyA9IGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfbWF4X2xpbmtzO1xuK1xuK1x0aWYgKG1heF9saW5rcyBcdTAwMjZcdTAwMjYgZGlyLVx1MDAzZWlfbmxpbmsgXHUwMDNlPSBtYXhfbGlua3MpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTUxJTkspO1xuK1xuK1x0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcbitcbitcdGRlID0gZGlyLVx1MDAzZWlfb3AtXHUwMDNlbWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdGlmIChJU19FUlIoZGUpKVxuK1x0XHRyZXR1cm4gZGU7XG4rXHRpZiAoZGUpIHtcbitcdFx0ZHB1dChkZW50cnkpO1xuK1x0XHRkZW50cnkgPSBkZTtcbitcdH1cbitcdGZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTtcbitcdHJldHVybiBkZW50cnk7XG4rfVxuK1xuIC8qKlxuICAqIHZmc19ta2RpciAtIGNyZWF0ZSBkaXJlY3RvcnkgcmV0dXJuaW5nIGNvcnJlY3QgZGVudHJ5IGlmIHBvc3NpYmxlXG4gICogQGlkbWFwOlx0XHRpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXG5AQCAtNTM4Myw3ICs1NDgwLDYgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGVsZWdhdGVkX2lub2RlKVxuIHtcbiBcdGludCBlcnJvcjtcbi1cdHVuc2lnbmVkIG1heF9saW5rcyA9IGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfbWF4X2xpbmtzO1xuIFx0c3RydWN0IGRlbnRyeSAqZGU7XG4gXG4gXHRlcnJvciA9IG1heV9jcmVhdGVfZGVudHJ5KGlkbWFwLCBkaXIsIGRlbnRyeSk7XG5AQCAtNTM5OSwyNCArNTQ5NSwxMiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGVycjtcbiBcbi1cdGVycm9yID0gLUVNTElOSztcbi1cdGlmIChtYXhfbGlua3MgXHUwMDI2XHUwMDI2IGRpci1cdTAwM2VpX25saW5rIFx1MDAzZT0gbWF4X2xpbmtzKVxuLVx0XHRnb3RvIGVycjtcbi1cbi1cdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGVsZWdhdGVkX2lub2RlKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBlcnI7XG4tXG4tXHRkZSA9IGRpci1cdTAwM2VpX29wLVx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4tXHRlcnJvciA9IFBUUl9FUlIoZGUpO1xuLVx0aWYgKElTX0VSUihkZSkpXG4rXHRkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcbitcdGlmIChJU19FUlIoZGUpKSB7XG4rXHRcdGVycm9yID0gUFRSX0VSUihkZSk7XG4gXHRcdGdvdG8gZXJyO1xuLVx0aWYgKGRlKSB7XG4tXHRcdGRwdXQoZGVudHJ5KTtcbi1cdFx0ZGVudHJ5ID0gZGU7XG4gXHR9XG4tXHRmc25vdGlmeV9ta2RpcihkaXIsIGRlbnRyeSk7XG4tXHRyZXR1cm4gZGVudHJ5O1xuK1x0cmV0dXJuIGRlO1xuIFxuIGVycjpcbiBcdGVuZF9jcmVhdGluZyhkZW50cnkpO1xuQEAgLTU3MDMsNyArNTc4Nyw3IEBAIGludCBmaWxlbmFtZV91bmxpbmthdChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpXG4gXHRcdGdvdG8gZXhpdF9kcm9wX3dyaXRlO1xuIFxuIFx0LyogV2h5IG5vdCBiZWZvcmU/IEJlY2F1c2Ugd2Ugd2FudCBjb3JyZWN0IGVycm9yIHZhbHVlICovXG4tXHRpZiAodW5saWtlbHkobGFzdC5uYW1lW2xhc3QubGVuXSkpIHtcbitcdGlmICh1bmxpa2VseSh0cmFpbGluZ19zbGFzaGVzKFx1MDAyNmxhc3QpKSkge1xuIFx0XHRpZiAoZF9pc19kaXIoZGVudHJ5KSlcbiBcdFx0XHRlcnJvciA9IC1FSVNESVI7XG4gXHRcdGVsc2VcbkBAIC02MzA1LDE2ICs2Mzg5LDE2IEBAIGludCBmaWxlbmFtZV9yZW5hbWVhdDIoaW50IG9sZGRmZCwgc3RydWN0IGZpbGVuYW1lICpmcm9tLFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIHtcbiBcdFx0aWYgKCFkX2lzX2RpcihyZC5uZXdfZGVudHJ5KSkge1xuIFx0XHRcdGVycm9yID0gLUVOT1RESVI7XG4tXHRcdFx0aWYgKG5ld19sYXN0Lm5hbWVbbmV3X2xhc3QubGVuXSlcbitcdFx0XHRpZiAodHJhaWxpbmdfc2xhc2hlcyhcdTAwMjZuZXdfbGFzdCkpXG4gXHRcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIFx0XHR9XG4gXHR9XG4gXHQvKiB1bmxlc3MgdGhlIHNvdXJjZSBpcyBhIGRpcmVjdG9yeSB0cmFpbGluZyBzbGFzaGVzIGdpdmUgLUVOT1RESVIgKi9cbiBcdGlmICghZF9pc19kaXIocmQub2xkX2RlbnRyeSkpIHtcbiBcdFx0ZXJyb3IgPSAtRU5PVERJUjtcbi1cdFx0aWYgKG9sZF9sYXN0Lm5hbWVbb2xkX2xhc3QubGVuXSlcbitcdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMoXHUwMDI2b2xkX2xhc3QpKVxuIFx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4tXHRcdGlmICghKGZsYWdzIFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIFx1MDAyNlx1MDAyNiBuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pXG4rXHRcdGlmICghKGZsYWdzIFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIFx1MDAyNlx1MDAyNiB0cmFpbGluZ19zbGFzaGVzKFx1MDAyNm5ld19sYXN0KSlcbiBcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuY1xuaW5kZXggMzZmMmU4NTg4OTIyMC4uYjRkYjcwM2M5ZThjNyAxMDA2NDRcbi0tLSBhL2ZzL25mcy9kaXIuY1xuKysrIGIvZnMvbmZzL2Rpci5jXG5AQCAtMjEyMSw2ICsyMTIxLDkgQEAgaW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0ZGZwcmludGsoVkZTLCBcIk5GUzogYXRvbWljX29wZW4oJXMvJWxsdSksICVwZFxcblwiLFxuIFx0XHRcdGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGRpci1cdTAwM2VpX2lubywgZGVudHJ5KTtcbiBcbitcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxuK1x0XHRvcGVuX2ZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRlcnIgPSBuZnNfY2hlY2tfZmxhZ3Mob3Blbl9mbGFncyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTIzMTMsNiArMjMxNiw5IEBAIGludCBuZnNfYXRvbWljX29wZW5fdjIzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgKi9cbiBcdGludCBlcnJvciA9IDA7XG4gXG4rXHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcbitcdFx0b3Blbl9mbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX25hbWUubGVuIFx1MDAzZSBORlNfU0VSVkVSKGRpciktXHUwMDNlbmFtZWxlbilcbiBcdFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXG5pbmRleCA2YjFjMTRlNjg0YTkzLi42Y2I1ZTJhZDc4MWYzIDEwMDY0NFxuLS0tIGEvZnMvb3Blbi5jXG4rKysgYi9mcy9vcGVuLmNcbkBAIC0xMjM5LDI5ICsxMjM5LDMwIEBAIGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxuIFx0aWYgKFdJTExfQ1JFQVRFKGZsYWdzKSkge1xuIFx0XHRpZiAoaG93LVx1MDAzZW1vZGUgXHUwMDI2IH5TX0lBTExVR08pXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdG9wLVx1MDAzZW1vZGUgPSBob3ctXHUwMDNlbW9kZSB8IFNfSUZSRUc7XG4rXHRcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGRElSO1xuK1x0XHRlbHNlXG4rXHRcdFx0b3AtXHUwMDNlbW9kZSA9IGhvdy1cdTAwM2Vtb2RlIHwgU19JRlJFRztcbiBcdH0gZWxzZSB7XG4gXHRcdGlmIChob3ctXHUwMDNlbW9kZSAhPSAwKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRvcC1cdTAwM2Vtb2RlID0gMDtcbiBcdH1cbiBcbi1cdC8qXG4tXHQgKiBCbG9jayBidWdzIHdoZXJlIE9fRElSRUNUT1JZIHwgT19DUkVBVCBjcmVhdGVkIHJlZ3VsYXIgZmlsZXMuXG4tXHQgKiBOb3RlLCB0aGF0IGJsb2NraW5nIE9fRElSRUNUT1JZIHwgT19DUkVBVCBoZXJlIGFsc28gcHJvdGVjdHNcbi1cdCAqIE9fVE1QRklMRSBiZWxvdyB3aGljaCByZXF1aXJlcyBPX0RJUkVDVE9SWSBiZWluZyByYWlzZWQuXG4tXHQgKi9cbi1cdGlmICgoZmxhZ3MgXHUwMDI2IChPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpKSA9PSAoT19ESVJFQ1RPUlkgfCBPX0NSRUFUKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4gXHQvKiBOb3cgaGFuZGxlIHRoZSBjcmVhdGl2ZSBpbXBsZW1lbnRhdGlvbiBvZiBPX1RNUEZJTEUuICovXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IF9fT19UTVBGSUxFKSB7XG4gXHRcdC8qXG4gXHRcdCAqIEluIG9yZGVyIHRvIGVuc3VyZSBwcm9ncmFtcyBnZXQgZXhwbGljaXQgZXJyb3JzIHdoZW4gdHJ5aW5nXG4gXHRcdCAqIHRvIHVzZSBPX1RNUEZJTEUgb24gb2xkIGtlcm5lbHMgd2UgZW5mb3JjZSB0aGF0IE9fRElSRUNUT1JZXG4tXHRcdCAqIGlzIHJhaXNlZCBhbG9uZ3NpZGUgX19PX1RNUEZJTEUuXG4rXHRcdCAqIGlzIHJhaXNlZCBhbG9uZ3NpZGUgX19PX1RNUEZJTEUsIGJ1dCB3aXRob3V0IE9fQ1JFQVQuIFRoZVxuK1x0XHQgKiByZWFzb24gZm9yIGRpc2FsbG93aW5nIE9fQ1JFQVR8T19UTVBGSUxFIGlzIHRoYXRcbitcdFx0ICogT19ESVJFQ1RPUll8T19DUkVBVCB1c2VkIHRvIHdvcmsgYW5kIGNyZWF0ZWQgYSByZWd1bGFyIGZpbGVcbitcdFx0ICogaWYgbm90aGluZyBleGlzdGVkIGF0IHRoZSBvcGVuIHBhdGguIEhlbmNlLCBhbGxvd2luZyB0aGVcbitcdFx0ICogY29tYmluYXRpb24gd291bGQgaGF2ZSBjYXVzZWQgT19DUkVBVHxPX1RNUEZJTEUgdG8gY3JlYXRlIGFcbitcdFx0ICogcmVndWxhciAobm9uLXRlbXBvcmFyeSkgZmlsZSBvbiBvbGQga2VybmVscywgd2hpbGUgdGhlIGNhbGxlclxuK1x0XHQgKiB3b3VsZCBiZWxpZXZlIHRoZXkgY3JlYXRlZCBhbiBhY3R1YWwgT19UTVBGSUxFLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE9fRElSRUNUT1JZKSlcbitcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE9fRElSRUNUT1JZKSB8fCAoZmxhZ3MgXHUwMDI2IE9fQ1JFQVQpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRpZiAoIShhY2NfbW9kZSBcdTAwMjYgTUFZX1dSSVRFKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xMzE4LDYgKzEzMTksMTUgQEAgaW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG4gXG4gXHRvcC1cdTAwM2VpbnRlbnQgPSBmbGFncyBcdTAwMjYgT19QQVRIID8gMCA6IExPT0tVUF9PUEVOO1xuIFxuK1x0LypcbitcdCAqIFJlcXVlc3Rpbmcgd3JpdGUgYWNjZXNzIG9uIGEgZGlyZWN0b3J5IGNhbiBuZXZlciBzdWNjZWVkLiBSYXRoZXJcbitcdCAqIHRoYW4gcGVyZm9ybWluZyBhIHBhdGgtd2FsayB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgdGFyZ2V0IGlzXG4rXHQgKiBhY3R1YWxseSBhIGRpcmVjdG9yeSAoLUVJU0RJUikgb3Igbm90ICgtRU5PVERJUiksIHdlIHNob3J0LWNpcmN1aXRcbitcdCAqIHRvIC1FTk9URElSLlxuK1x0ICovXG4rXHRpZiAoKGZsYWdzIFx1MDAyNiBPX0RJUkVDVE9SWSkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IF9fT19UTVBGSUxFKSBcdTAwMjZcdTAwMjYgKGFjY19tb2RlIFx1MDAyNiBNQVlfV1JJVEUpKVxuK1x0XHRyZXR1cm4gLUVOT1RESVI7XG4rXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IE9fQ1JFQVQpIHtcbiBcdFx0b3AtXHUwMDNlaW50ZW50IHw9IExPT0tVUF9DUkVBVEU7XG4gXHRcdGlmIChmbGFncyBcdTAwMjYgT19FWENMKSB7XG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9kaXIuYyBiL2ZzL3NtYi9jbGllbnQvZGlyLmNcbmluZGV4IDc4MDNiZDViZDAxZjguLmQxYWY5MGM5ODFjZDQgMTAwNjQ0XG4tLS0gYS9mcy9zbWIvY2xpZW50L2Rpci5jXG4rKysgYi9mcy9zbWIvY2xpZW50L2Rpci5jXG5AQCAtNTM4LDYgKzUzOCw5IEBAIGludCBjaWZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSxcbiBcdGlmICh1bmxpa2VseShjaWZzX2ZvcmNlZF9zaHV0ZG93bihjaWZzX3NiKSkpXG4gXHRcdHJldHVybiBzbWJfRUlPKHNtYl9laW9fdHJhY2VfZm9yY2VkX3NodXRkb3duKTtcbiBcbitcdGlmIChPX0lTX01LRElSKG9mbGFncykpXG4rXHRcdG9mbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0LypcbiBcdCAqIFBvc2l4IG9wZW4gaXMgb25seSBjYWxsZWQgKGF0IGxvb2t1cCB0aW1lKSBmb3IgZmlsZSBjcmVhdGUgbm93LiBGb3JcbiBcdCAqIG9wZW5zIChyYXRoZXIgdGhhbiBjcmVhdGVzKSwgYmVjYXVzZSB3ZSBkbyBub3Qga25vdyBpZiBpdCBpcyBhIGZpbGVcbmRpZmYgLS1naXQgYS9mcy92Ym94c2YvZGlyLmMgYi9mcy92Ym94c2YvZGlyLmNcbmluZGV4IDBiOWVhYjE1NzQzMmQuLjZlMzA2ZGRkNzIyYmYgMTAwNjQ0XG4tLS0gYS9mcy92Ym94c2YvZGlyLmNcbisrKyBiL2ZzL3Zib3hzZi9kaXIuY1xuQEAgLTMxOCw2ICszMTgsOSBAQCBzdGF0aWMgaW50IHZib3hzZl9kaXJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdHU2NCBoYW5kbGU7XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmJveHNmX2Rpcl9sb29rdXAocGFyZW50LCBkZW50cnksIDApO1xuIFx0XHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mY250bC5oIGIvaW5jbHVkZS9saW51eC9mY250bC5oXG5pbmRleCA2YWQ2YjllN2EyMjZhLi4yMDRlMTZiYmUyNjM0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mY250bC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcbkBAIC0zMCw2ICszMCwxMiBAQFxuICAqL1xuICNkZWZpbmUgX19PX1JFR1VMQVJcdFx0KDEgXHUwMDNjXHUwMDNjIDMwKVxuIFxuKyNkZWZpbmUgT19NS0RJUl9NQVNLXHQoT19DUkVBVCB8IE9fRElSRUNUT1JZKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBPX0lTX01LRElSKHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRyZXR1cm4gKGZsYWdzIFx1MDAyNiBPX01LRElSX01BU0spID09IE9fTUtESVJfTUFTSztcbit9XG4rXG4gLyogTGlzdCBvZiBhbGwgdmFsaWQgZmxhZ3MgZm9yIHRoZSBob3ctXHUwMDNlcmVzb2x2ZSBhcmd1bWVudDogKi9cbiAjZGVmaW5lIFZBTElEX1JFU09MVkVfRkxBR1MgXFxcbiBcdChSRVNPTFZFX05PX1hERVYgfCBSRVNPTFZFX05PX01BR0lDTElOS1MgfCBSRVNPTFZFX05PX1NZTUxJTktTIHwgXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZVxuaW5kZXggOWViMTg1ZmIyZjlkZC4uMDFjNTg4ZDRjODRmNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbkBAIC0xLDQgKzEsNSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuK29wZW5fb19jcmVhdF9vX2RpclxuIGRub3RpZnlfdGVzdFxuIGRldnB0c19wdHNcbiBmY2xvZ1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcbmluZGV4IDAzYmUzMzdjMWYzNTEuLjA5NTliZDI2ODc1YWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcbkBAIC0xLDcgKzEsNyBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiBcbiBDRkxBR1MgKz0gJChLSERSX0lOQ0xVREVTKVxuLVRFU1RfR0VOX1BST0dTIDo9IGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2cgdXN0YXRfdGVzdFxuK1RFU1RfR0VOX1BST0dTIDo9IG9wZW5fb19jcmVhdF9vX2RpciBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nIHVzdGF0X3Rlc3RcbiBURVNUX0dFTl9QUk9HUyArPSBpZG1hcHBlZF90bXBmaWxlXG4gVEVTVF9HRU5fUFJPR1NfRVhURU5ERUQgOj0gZG5vdGlmeV90ZXN0XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJlMGFiMzQyNjdlMWRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jXG5AQCAtMCwwICsxLDIwMSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuKyNpbmNsdWRlIFwid3JhcHBlcnMuaFwiXG4rXG4rI2RlZmluZSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIGZsYWdzKSAoe1x0XFxcbitcdHN0cnVjdCBzdGF0IF9fc3Q7XHRcdFx0XHRcdFx0XFxcbitcdGludCBfX2ZkID0gb3BlbmF0X29fbWtkaXIoZGZkLCBwYXRobmFtZSwgZmxhZ3MsIFNfSVJXWFUpO1x0XFxcbitcdEFTU0VSVF9HRShfX2ZkLCAwKTtcdFx0XHRcdFx0XHRcXFxuK1x0QVNTRVJUX0VRKGZzdGF0KF9fZmQsIFx1MDAyNl9fc3QpLCAwKTtcdFx0XHRcdFxcXG4rXHRFWFBFQ1RfVFJVRShTX0lTRElSKF9fc3Quc3RfbW9kZSkpO1x0XHRcdFx0XFxcbitcdF9fZmQ7XHRcdFx0XHRcdFx0XHRcdFxcXG4rfSlcbitcbisjZGVmaW5lIG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoZGZkLCBwYXRobmFtZSkgXFxcbitcdG9wZW5hdF9vX21rZGlyX2NoZWNrZWRfZmxhZ3MoZGZkLCBwYXRobmFtZSwgT19SRE9OTFkpXG4rXG4rRklYVFVSRShvcGVuX29fY3JlYXRfb19kaXIpIHtcbitcdGNoYXIgZGlycGF0aFtQQVRIX01BWF07XG4rXHRpbnQgZGZkO1xuK307XG4rXG4rRklYVFVSRV9TRVRVUChvcGVuX29fY3JlYXRfb19kaXIpXG4re1xuK1x0c3RyY3B5KHNlbGYtXHUwMDNlZGlycGF0aCwgXCIvdG1wL29wZW5fb19jcmVhdF9vX2Rpcl90ZXN0LlhYWFhYWFwiKTtcbitcdEFTU0VSVF9ORShta2R0ZW1wKHNlbGYtXHUwMDNlZGlycGF0aCksIE5VTEwpO1xuK1x0c2VsZi1cdTAwM2VkZmQgPSBvcGVuKHNlbGYtXHUwMDNlZGlycGF0aCwgT19ESVJFQ1RPUlkpO1xuK1x0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZGZkLCAwKTtcbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTihvcGVuX29fY3JlYXRfb19kaXIpXG4re1xuK1x0Y2xvc2Uoc2VsZi1cdTAwM2VkZmQpO1xuK1x0cm1kaXIoc2VsZi1cdTAwM2VkaXJwYXRoKTtcbit9XG4rXG4rLyogRG9lcyBvcGVuX29fY3JlYXRfb19kaXIgcmV0dXJuIGEgZmQgYXQgYWxsPyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJldHVybnNfZmQpXG4re1xuK1x0aW50IGZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChzZWxmLVx1MDAzZWRmZCwgXCJuZXdkaXJcIik7XG4rXHRFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTtcbitcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCJuZXdkaXJcIiwgQVRfUkVNT1ZFRElSKSwgMCk7XG4rfVxuK1xuKy8qIFRoZSBmZCBtdXN0IHJlZmVyIHRvIHRoZSBkaXJlY3RvcnkgdGhhdCB3YXMganVzdCBjcmVhdGVkLiAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGZkX2lzX2NyZWF0ZWRfZGlyKVxuK3tcbitcdGludCBmZDtcbitcdHN0cnVjdCBzdGF0IHN0X3ZpYV9mZCwgc3RfdmlhX3BhdGg7XG4rXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1xuK1x0ZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcImNoZWNrZGlyXCIpO1xuK1xuK1x0QVNTRVJUX0VRKGZzdGF0KGZkLCBcdTAwMjZzdF92aWFfZmQpLCAwKTtcbitcbitcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIlcy9jaGVja2RpclwiLCBzZWxmLVx1MDAzZWRpcnBhdGgpO1xuK1x0QVNTRVJUX0VRKHN0YXQocGF0aCwgXHUwMDI2c3RfdmlhX3BhdGgpLCAwKTtcbitcbitcdEVYUEVDVF9FUShzdF92aWFfZmQuc3RfaW5vLCBzdF92aWFfcGF0aC5zdF9pbm8pO1xuK1x0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9kZXYsIHN0X3ZpYV9wYXRoLnN0X2Rldik7XG4rXG4rXHRFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTtcbitcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XG4rfVxuK1xuKy8qIE1pc3NpbmcgcGFyZW50IGNvbXBvbmVudCBtdXN0IGZhaWwgd2l0aCBFTk9FTlQuICovXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vZW50X21pc3NpbmdfcGFyZW50KVxuK3tcbitcdEVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihzZWxmLVx1MDAzZWRmZCwgXCJub25leGlzdGVudC9jaGlsZFwiLCBPX1JET05MWSwgU19JUldYVSksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcbit9XG4rXG4rLyogQW4gaW52YWxpZCBkZmQgbXVzdCBmYWlsIHdpdGggRUJBREYuICovXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZWJhZGYpXG4re1xuK1x0RVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKEZEX0lOVkFMSUQsIFwiYmFkZmRpclwiLCBPX1JET05MWSwgU19JUldYVSksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRUJBREYpO1xuK31cbitcbisvKiBBIGRmZCB0aGF0IHBvaW50cyB0byBhIGZpbGUgKG5vdCBhIGRpcmVjdG9yeSkgbXVzdCBmYWlsIHdpdGggRU5PVERJUi4gKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlbm90ZGlyX2RmZClcbit7XG4rXHRpbnQgZmlsZV9mZDtcbitcbitcdGZpbGVfZmQgPSBvcGVuYXQoc2VsZi1cdTAwM2VkZmQsIFwiZmlsZVwiLFxuK1x0XHRcdCBPX0NSRUFUIHwgT19SRE9OTFksIFNfSVJXWFUpO1xuK1x0QVNTRVJUX0dFKGZpbGVfZmQsIDApO1xuK1xuK1x0RVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKGZpbGVfZmQsIFwic3ViZGlyXCIsIE9fUkRPTkxZLCBTX0lSV1hVKSwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTtcbitcbitcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XG4rXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwiZmlsZVwiLCAwKSwgMCk7XG4rfVxuK1xuKy8qXG4rICogT19FWENMIHRvZ2V0aGVyIHdpdGggT19DUkVBVHxPX0RJUkVDVE9SWSBzaG91bGQgc3VjY2VlZCBpZiB0aGUgdGFyZ2V0XG4rICogZGlyZWN0b3J5IGRvZXMgbm90IHlldCBleGlzdC4gQWZ0ZXIgZGlyZWN0b3J5IGNyZWF0aW9uLCByZXBlYXRpbmcgdGhpc1xuKyAqIGNhbGwgbXVzdCBmYWlsIHdpdGggRUVYSVNULlxuKyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIG9fZXhjbF9lZXhpc3QpXG4re1xuK1x0aW50IGV4Y2xkaXJfZmQ7XG4rXG4rXHRleGNsZGlyX2ZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZF9mbGFncyhzZWxmLVx1MDAzZWRmZCwgXCJleGNsZGlyXCIsIE9fRVhDTCk7XG4rXG4rXHRFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoZXhjbGRpcl9mZCwgXCIuXCIsIE9fRVhDTCwgU19JUldYVSksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRUVYSVNUKTtcbitcbitcdEVYUEVDVF9FUShjbG9zZShleGNsZGlyX2ZkKSwgMCk7XG4rXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwiZXhjbGRpclwiLCBBVF9SRU1PVkVESVIpLCAwKTtcbit9XG4rXG4rLypcbisgKiBPX0NSRUFUfE9fRElSRUNUT1JZIG9uIGEgcGF0aCB0aGF0IGFscmVhZHkgZXhpc3RzIGFzIGEgcmVndWxhciBmaWxlXG4rICogbXVzdCBmYWlsIHdpdGggRU5PVERJUi5cbisgKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBleGlzdGluZ19maWxlX2Vub3RkaXIpXG4re1xuK1x0aW50IGZpbGVfZmQ7XG4rXG4rXHRmaWxlX2ZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcInJlZ2ZpbGVcIixcbitcdFx0XHQgT19DUkVBVCB8IE9fUkRPTkxZLCBTX0lSV1hVKTtcbitcdEFTU0VSVF9HRShmaWxlX2ZkLCAwKTtcbitcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XG4rXG4rXHRFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoc2VsZi1cdTAwM2VkZmQsIFwicmVnZmlsZVwiLCBPX1JET05MWSwgU19JUldYVSksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4rXG4rXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwicmVnZmlsZVwiLCAwKSwgMCk7XG4rfVxuK1xuKy8qXG4rICogT19DUkVBVHxPX0RJUkVDVE9SWSBjb21iaW5lZCB3aXRoIGEgd3JpdGFibGUgYWNjZXNzIG1vZGUgbXVzdCBiZVxuKyAqIHJlamVjdGVkOiBhIGRpcmVjdG9yeSBjYW5ub3QgYmUgb3BlbmVkIGZvciB3cml0aW5nLlxuKyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJlamVjdHNfd3JpdGFibGVfYWNjX21vZGUpXG4re1xuK1x0RVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKHNlbGYtXHUwMDNlZGZkLCBcInJkd3JkaXJcIiwgT19SRFdSLCBTX0lSV1hVKSwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTtcbitcdC8qIENsZWFuIHVwIGlmIHRoZSBrZXJuZWwgY3JlYXRlZCB0aGUgZGlyZWN0b3J5IGFueXdheS4gKi9cbitcdHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcInJkd3JkaXJcIiwgQVRfUkVNT1ZFRElSKTtcbit9XG4rXG4rLypcbisgKiBvcGVuYXQoT19DUkVBVHxPX0RJUkVDVE9SWSkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIHNob3VsZCB3b3JrLlxuKyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHRyYWlsaW5nX3NsYXNoKVxuK3tcbitcdGludCBmZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoc2VsZi1cdTAwM2VkZmQsIFwibmV3ZGlyL1wiKTtcbitcdEVYUEVDVF9FUShjbG9zZShmZCksIDApO1xuK1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcIm5ld2RpclwiLCBBVF9SRU1PVkVESVIpLCAwKTtcbit9XG4rXG4rLypcbisgKiBvcGVuYXQoT19DUkVBVCkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIGJ1dCB3aXRob3V0IE9fRElSRUNUT1JZXG4rICogbXVzdCBmYWlsIHdpdGggRUlTRElSIGFuZCBtdXN0IG5vdCBjcmVhdGUgYW55dGhpbmcgYXQgdGhlIHBhdGguXG4rICovXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgdHJhaWxpbmdfc2xhc2hfbm9fb19kaXIpXG4re1xuK1x0aW50IGZkO1xuK1x0c3RydWN0IHN0YXQgc3Q7XG4rXG4rXHRmZCA9IG9wZW5hdChzZWxmLVx1MDAzZWRmZCwgXCJ0cmFpbGluZy9cIiwgT19DUkVBVCB8IE9fUkRPTkxZLCBTX0lSV1hVKTtcbitcdEVYUEVDVF9FUShmZCwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFSVNESVIpO1xuK1xuK1x0RVhQRUNUX0VRKGZzdGF0YXQoc2VsZi1cdTAwM2VkZmQsIFwidHJhaWxpbmdcIiwgXHUwMDI2c3QsIDApLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVOT0VOVCk7XG4rXG4rXHQvKiBCZXN0LWVmZm9ydCBjbGVhbnVwIGluIGNhc2UgdGhlIGtlcm5lbCBsZWZ0IGEgZmlsZSBiZWhpbmQuICovXG4rXHRpZiAoZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShmZCk7XG4rXHR1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCJ0cmFpbGluZ1wiLCAwKTtcbit9XG4rXG4rLypcbisgKiBUaGUgcmV0dXJuZWQgZmQgbXVzdCBiZSB1c2FibGUgYXMgYSBkZmQgZm9yIGZ1cnRoZXIgKmF0KCkgY2FsbHMuXG4rICovXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfdXNhYmxlX2FzX2RmZClcbit7XG4rXHRpbnQgcGFyZW50X2ZkLCBjaGlsZF9mZDtcbitcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXG4rXHRwYXJlbnRfZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcInBhcmVudFwiKTtcbitcdGNoaWxkX2ZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChwYXJlbnRfZmQsIFwiY2hpbGRcIik7XG4rXG4rXHRFWFBFQ1RfRVEoY2xvc2UoY2hpbGRfZmQpLCAwKTtcbitcdEVYUEVDVF9FUShjbG9zZShwYXJlbnRfZmQpLCAwKTtcbitcbitcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIlcy9wYXJlbnQvY2hpbGRcIiwgc2VsZi1cdTAwM2VkaXJwYXRoKTtcbitcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiJXMvcGFyZW50XCIsIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4rXHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xuK31cbitcbitURVNUX0hBUk5FU1NfTUFJTlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3dyYXBwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy93cmFwcGVycy5oXG5pbmRleCA0MjBhZTRmOTA4Y2YyLi5hYmU1Yjg1Y2ViZGNkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvd3JhcHBlcnMuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvd3JhcHBlcnMuaFxuQEAgLTEzLDYgKzEzLDEwIEBAXG4gI2RlZmluZSBTVEFUWF9NTlRfSURfVU5JUVVFIDB4MDAwMDQwMDBVIC8qIFdhbnQvZ290IGV4dGVuZGVkIHN0eF9tb3VudF9pZCAqL1xuICNlbmRpZlxuIFxuKyNpZm5kZWYgRkRfSU5WQUxJRFxuKyNkZWZpbmUgRkRfSU5WQUxJRCAtMTAwMDlcbisjZW5kaWZcbitcbiBzdGF0aWMgaW5saW5lIGludCBzeXNfZnNvcGVuKGNvbnN0IGNoYXIgKmZzbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuIHtcbiBcdHJldHVybiBzeXNjYWxsKF9fTlJfZnNvcGVuLCBmc25hbWUsIGZsYWdzKTtcbkBAIC0xMDUsNCArMTA5LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IHN5c19vcGVuX3RyZWUoaW50IGRmZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIGludCBmbGFnXG4gXHRyZXR1cm4gc3lzY2FsbChfX05SX29wZW5fdHJlZSwgZGZkLCBmaWxlbmFtZSwgZmxhZ3MpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGludCBvcGVuYXRfb19ta2RpcihpbnQgZGZkLCBjb25zdCBjaGFyICpwYXRobmFtZSxcbitcdFx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlKVxuK3tcbitcdHJldHVybiBzeXNjYWxsKF9fTlJfb3BlbmF0LCBkZmQsIHBhdGhuYW1lLFxuK1x0XHQgICAgICAgZmxhZ3MgfCBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQsIG1vZGUpO1xuK31cbitcbiAjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE2OjE2OjE5LjA1NTA2NDY2OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDY1MTYxODAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gRXZhbHVhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJdCdzIGZvY3VzZWQgb24gZW5hYmxpbmcgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAgdmlhIGBvcGVuYXRgLCB3aGljaCBpcyBhIG5lYXQgZmVhdHVyZS4gVGhlIGNoYW5nZXMgdG91Y2ggYSBsb3Qgb2YgY29kZTogdGhlIFZGUywgcGx1cyBhIGJ1bmNoIG9mIGZpbGVzeXN0ZW1zIOKAkyA5cCwgQ2VwaCwgRlVTRSwgR0ZTMiwgTkZTLCBTTUIsIHZib3hzZi4gV2UncmUgbG9va2luZyBhdCBjaGFuZ2VzIGluIGB2ZnNfaW5vZGUuY2AsIHZhcmlvdXMgZGlyZWN0b3J5IGhhbmRsaW5nIGluIHRoZSBmaWxlIHN5c3RlbXMsIGBuYW1laS5jYCwgYG9wZW4uY2AsIGFuZCBhIG5ldyBzZWxmdGVzdC5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBhY3R1YWxseSBjaGFuZ2luZy4gTW9zdGx5LCB0aGVyZSBhcmUgdGhlc2UgYE9fSVNfTUtESVIoZmxhZ3MpYCBjaGVja3MgYW5kIGZsYWcgbWFuaXB1bGF0aW9ucyBpbiB0aG9zZSBgKl9hdG9taWNfb3BlbmAgZnVuY3Rpb25zIHRvIHRyZWF0IHRoZSByZXF1ZXN0IHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSBhcyBgT19DUkVBVGAgKndpdGhvdXQqIGBPX0RJUkVDVE9SWWAgYXMgdGhlIGNvbW1vbiBiZWhhdmlvciBvZiB0aGUgcGF0Y2guXG5cbkluIGBuYW1laS5jYCwgaXQncyBtb2RpZnlpbmcgdGhlIHN0aWNreSBiaXQgaGFuZGxpbmcsIGhvdyBkaXJlY3RvcnkgY3JlYXRpb24gaXMgaGFuZGxlZCBpbiBwZXJtaXNzaW9uIGNoZWNrcyBhbmQgdGhlIG1vZGUgaXMgc2V0LCBhcyB3ZWxsIGFzIGhhbmRsaW5nIGBmc25vdGlmeWAgZXZlbnRzIGFuZCB0aGUga2V5IGBsb29rdXBfb3BlbmAgY2FsbHMuIEl0IGludHJvZHVjZXMgYHZmc19ta2Rpcl9ub19wZXJtYCBhbmQgYHZmc19ta2RpcmAuIEFsc28sIGl0IGNhbGxzIGB2ZnNfbWtkaXJfbm9fcGVybWAgd2hlcmUgaXQgdXNlZCB0byBjYWxsIGB2ZnNfY3JlYXRlX25vX3Blcm1gLlxuXG5gb3Blbi5jYCBpcyB1cGRhdGVkIHRvIHNldCB0aGUgbW9kZSBhbmQgaGFuZGxlIHRoZSB0bXBmaWxlIGZsYWcgYW5kIHJldHVybiBgLUVOT1RESVJgIGNvcnJlY3RseSwgYmFzZWQgb24gdGhlc2UgbmV3IGZsYWdzLlxuXG5XZSd2ZSBnb3QgdGhlIG5ldyBgT19JU19NS0RJUmAgbWFjcm8gZGVmaW5lZCBpbiBgZmNudGwuaGAgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0LlxuXG5TbywgYW0gSSBzZWVpbmcgbmV3IFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzPyBOb3QgZnJvbSB0aGUgaW5pdGlhbCByZXZpZXcuIFRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1c2VyLXNwYWNlIGV4cG9zZWQgZGF0YSBzdHJ1Y3R1cmVzLCBvciBhbGxvY2F0aW9ucyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBpbnRyb2R1Y2UgYW55IG5ldyBidWZmZXJzIG9yIGFueSBjb3B5IGNhbGxzLiBJdCdzIHByaW1hcmlseSBjb250cm9sIGZsb3cgYW5kIGZsYWcgaGFuZGxpbmcsIG1ha2luZyBpdCBhIGxvZ2ljIGNoYW5nZS4gSWYgdGhlcmUgYXJlIGJ1Z3MsIHRoZXkncmUgbW9zdCBsaWtlbHkgbG9naWMgZXJyb3JzLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSB1c3VhbCBidWcgZGV0ZWN0b3JzICpzaG91bGQqIGNhdGNoIHRob3NlLlxuXG5Pa2F5LCBsZXQncyBqdXN0IG1ha2UgKnN1cmUqIHdlJ3JlIG5vdCBhY2NpZGVudGFsbHkgdXNpbmcgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhbnl3aGVyZS4gYHZmc19ta2Rpcl9ub19wZXJtYCB0YWtlcyBhbGwgdGhlIGV4cGVjdGVkIGFyZ3VtZW50czogYW4gaW5vZGUsIGRlbnRyeSwgbW9kZSwgZXRjLiBhbmQgY2FsbHMgdGhlIGlub2RlJ3MgbWtkaXIgbWV0aG9kLiBBbGwgZ29vZC5cblxuTm93IGluIGBsb29rdXBfb3BlbmA6IElmIHRoZSBjcmVhdGVfZGlyIGZsYWcgaXMgc2V0LCBpdCBjYWxscyBgdmZzX21rZGlyX25vX3Blcm1gLiBJdCB1c2VzIHRoZSBgZGVsZWdhdGVkX2lub2RlYCBzdHJ1Y3QsIGRlZmluZWQgYXMgYHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlO2AuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCB2YXJpYWJsZSBpbiBgZnMvbmFtZWkuY2Agc291cmNlIGNvZGUuIEl0IHNlZW1zIGxpa2UgdGhlIHZhcmlhYmxlIGlzIGRlY2xhcmVkIGFuZCB1c2VkIGluIGEgd2F5IHRoYXQgKnNob3VsZCogYmUgc2FmZS5cblxuQmFzZWQgb24gdGhlIGV2aWRlbmNlIEkgc2VlLCB0aGlzIGRvZXMgKm5vdCogbG9vayBsaWtlIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MjAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTY6MzMuNzA2Njg1MDE1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE0NzI1NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGRlbGVnYXRlZF9pbm9kZSBkZWxlZ2F0ZWRfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTQ0OTc9c3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL25hbWVpLmMtNDQ5OS17XFxuZnMvbmFtZWkuYzo0NTAwOlxcdHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlID0geyB9O1xcbmZzL25hbWVpLmMtNDUwMS1cXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcDtcXG4tLVxcbmZzL25hbWVpLmM9NTUxMT1pbnQgZmlsZW5hbWVfbWtkaXJhdChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIHVtb2RlX3QgbW9kZSlcXG4tLVxcbmZzL25hbWVpLmMtNTUxNi1cXHR1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzID0gTE9PS1VQX0RJUkVDVE9SWTtcXG5mcy9uYW1laS5jOjU1MTc6XFx0c3RydWN0IGRlbGVnYXRlZF9pbm9kZSBkZWxlZ2F0ZWRfaW5vZGUgPSB7IH07XFxuZnMvbmFtZWkuYy01NTE4LVxcbi0tXFxuZnMvbmFtZWkuYz01NjE3PWludCBmaWxlbmFtZV9ybWRpcihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpXFxuLS1cXG5mcy9uYW1laS5jLTU2MjQtXFx0dW5zaWduZWQgaW50IGxvb2t1cF9mbGFncyA9IDA7XFxuZnMvbmFtZWkuYzo1NjI1OlxcdHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlID0geyB9O1xcbmZzL25hbWVpLmMtNTYyNi1yZXRyeTpcXG4tLVxcbmZzL25hbWVpLmM9NTc2MT1pbnQgZmlsZW5hbWVfdW5saW5rYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKVxcbi0tXFxuZnMvbmFtZWkuYy01NzY4LVxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuZnMvbmFtZWkuYzo1NzY5OlxcdHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlID0geyB9O1xcbmZzL25hbWVpLmMtNTc3MC1cXHR1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzID0gMDtcXG4tLVxcbmZzL25hbWVpLmM9NTg4NT1pbnQgZmlsZW5hbWVfc3ltbGlua2F0KHN0cnVjdCBmaWxlbmFtZSAqZnJvbSwgaW50IG5ld2RmZCwgc3RydWN0IGZpbGVuYW1lICp0bylcXG4tLVxcbmZzL25hbWVpLmMtNTg5MC1cXHR1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzID0gMDtcXG5mcy9uYW1laS5jOjU4OTE6XFx0c3RydWN0IGRlbGVnYXRlZF9pbm9kZSBkZWxlZ2F0ZWRfaW5vZGUgPSB7IH07XFxuZnMvbmFtZWkuYy01ODkyLVxcbi0tXFxuZnMvbmFtZWkuYz02MDMzPWludCBmaWxlbmFtZV9saW5rYXQoaW50IG9sZGRmZCwgc3RydWN0IGZpbGVuYW1lICpvbGQsXFxuLS1cXG5mcy9uYW1laS5jLTYwMzgtXFx0c3RydWN0IHBhdGggb2xkX3BhdGgsIG5ld19wYXRoO1xcbmZzL25hbWVpLmM6NjAzOTpcXHRzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlIGRlbGVnYXRlZF9pbm9kZSA9IHsgfTtcXG5mcy9uYW1laS5jLTYwNDAtXFx0aW50IGhvdyA9IDA7XFxuLS1cXG5mcy9uYW1laS5jPTYzMzE9aW50IGZpbGVuYW1lX3JlbmFtZWF0MihpbnQgb2xkZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZyb20sXFxuLS1cXG5mcy9uYW1laS5jLTYzMzctXFx0ZW51bSBsYXN0X3R5cGUgb2xkX3R5cGUsIG5ld190eXBlO1xcbmZzL25hbWVpLmM6NjMzODpcXHRzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlIGRlbGVnYXRlZF9pbm9kZSA9IHsgfTtcXG5mcy9uYW1laS5jLTYzMzktXFx0dW5zaWduZWQgaW50IGxvb2t1cF9mbGFncyA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE2OjE2OjMzLjg1ODE2MTQ3OVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDA1OTQ3OTY1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBPcGVuYXQgT19DUkVBVCB8IE9fRElSRUNUT1JZIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgbG9va3MgY2xlYW4gZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIFRoZXkncmUgYWRkaW5nIGEgZmVhdHVyZSwgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAsIHRvIGBvcGVuYXRgLCB3aGljaCBpcyBzZW5zaWJsZSBmb3IgbWFuYWdpbmcgZGlyZWN0b3J5IGNyZWF0aW9uLiBUaGUgYGRlbGVnYXRlZF9pbm9kZWAgaXMgaW5pdGlhbGl6ZWQgYXMgYHsgfWAsIHNvIHdlJ3JlIHN0YXJ0aW5nIHdpdGggYSBjbGVhbiBzbGF0ZSB0aGVyZS5cblxuVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgZmxhZyBoYW5kbGluZyBhbmQgY29udHJvbCBmbG93IHdpdGhpbiB0aGUgVkZTIGFuZCBmaWxlc3lzdGVtcy4gSXQncyBlc3NlbnRpYWxseSBhYm91dCByb3V0aW5nIGRpcmVjdG9yeSBjcmVhdGlvbiByZXF1ZXN0cyB2aWEgYG9wZW5hdGAgbW9yZSBjb25zaXN0ZW50bHkuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgdGhlIGBPX0lTX01LRElSYCBtYWNybywgbW9kaWZpY2F0aW9ucyB0byBgYnVpbGRfb3Blbl9mbGFncygpYCwgYW5kIHVwZGF0ZXMgdG8gZnVuY3Rpb25zIGxpa2UgYGxvb2t1cF9vcGVuKClgLCBgdmZzX21rZGlyKClgLCBhbmQgYGF0b21pY19vcGVuKClgLiBJbXBvcnRhbnRseSwgaXQgc2VlbXMgbGlrZSB0aGV5J3JlIGVuc3VyaW5nIGRpcmVjdG9yeSBjcmVhdGlvbiBnb2VzIGRvd24gdGhlIHByb3BlciwgbWtkaXItc3BlY2lmaWMgcGF0aHMsIGxldmVyYWdpbmcgZXhpc3RpbmcgbWVjaGFuaXNtcyBsaWtlIGB2ZnNfbWtkaXJfbm9fcGVybSgpYCBhbmQgYHNlY3VyaXR5X3BhdGhfbWtkaXIoKWAuXG5cblRoaW5raW5nIGFib3V0IHBvdGVudGlhbCByaXNrcywgYmVjYXVzZSBpdCBpcyBwdXJlbHkgbG9naWNhbCBjaGFuZ2VzLCBhbmQgaXQncyBub3QgaW50cm9kdWNpbmcgY29tcGxleCBuZXcgZGF0YSBzdHJ1Y3R1cmVzIG9yIGRpcmVjdGx5IGV4cG9zaW5nIGludGVybmFsIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlIHRyYWRpdGlvbmFsIG1lbW9yeSBlcnJvciBkZXRlY3RvcnMsIHBhcnRpY3VsYXJseSBLQVNBTiwgYXJlIGxpa2VseSBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgaXNzdWVzLiBBbnkgYnVncyBhcmUgbXVjaCBtb3JlIGxpa2VseSB0byBtYW5pZmVzdCBhcyBsb2dpYyBlcnJvcnMsIGRlcmVmZXJlbmNlcywgb3Igb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMuIFRoZXNlIGFyZSBhbGwgdGhpbmdzIHRoYXQgS0FTQU4gc2hvdWxkIGJlIGFibGUgdG8gZmxhZyBlZmZlY3RpdmVseS4gVGhlIGRlc2lnbiBzZWVtcyBzb3VuZCBhbmQgYXZvaWRzIHRoZSBwaXRmYWxscyB0aGF0IHdvdWxkIHdhcnJhbnQgS01TQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjIyLCJPdXRwdXRUb2tlbnMiOjI2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNjo0My45MTc2NDM1MTNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgVkZTIGFuZCB2YXJpb3VzIGZpbGVzeXN0ZW1zIHRvIHN1cHBvcnQgY3JlYXRpbmcgZGlyZWN0b3JpZXMgdmlhIGBvcGVuYXQoKWAgd2l0aCB0aGUgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAgZmxhZ3MuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIGFkZGluZyB0aGUgYE9fSVNfTUtESVJgIG1hY3JvLCBtb2RpZnlpbmcgYGJ1aWxkX29wZW5fZmxhZ3MoKWAgdG8gaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbiwgYW5kIHVwZGF0aW5nIGBsb29rdXBfb3BlbigpYCBhbmQgYHZmc19ta2RpcigpYCBwYXRocyBpbiBgZnMvbmFtZWkuY2AgdG8gcm91dGUgZGlyZWN0b3J5IGNyZWF0aW9uIHJlcXVlc3RzIHRvIGB2ZnNfbWtkaXJfbm9fcGVybSgpYCBpbnN0ZWFkIG9mIHJlZ3VsYXIgZmlsZSBjcmVhdGlvbiBmdW5jdGlvbnMuXFxuXFxuVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IGxvZ2ljYWwsIGFsdGVyaW5nIGNvbnRyb2wgZmxvdyBhbmQgZmxhZyBoYW5kbGluZyB3aXRoaW4gdGhlIFZGUyBsYXllci4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gQWxsIHZhcmlhYmxlcyB1c2VkIChzdWNoIGFzIGBkZWxlZ2F0ZWRfaW5vZGVgKSBhcmUgcHJvcGVybHkgemVyby1pbml0aWFsaXplZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgbG9naWMgZXJyb3JzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBWRlMgYW5kIHZhcmlvdXMgZmlsZXN5c3RlbXMgdG8gc3VwcG9ydCBjcmVhdGluZyBkaXJlY3RvcmllcyB2aWEgYG9wZW5hdCgpYCB3aXRoIHRoZSBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCBmbGFncy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgYWRkaW5nIHRoZSBgT19JU19NS0RJUmAgbWFjcm8sIG1vZGlmeWluZyBgYnVpbGRfb3Blbl9mbGFncygpYCB0byBoYW5kbGUgdGhlIG5ldyBmbGFnIGNvbWJpbmF0aW9uLCBhbmQgdXBkYXRpbmcgYGxvb2t1cF9vcGVuKClgIGFuZCBgdmZzX21rZGlyKClgIHBhdGhzIGluIGBmcy9uYW1laS5jYCB0byByb3V0ZSBkaXJlY3RvcnkgY3JlYXRpb24gcmVxdWVzdHMgdG8gYHZmc19ta2Rpcl9ub19wZXJtKClgIGluc3RlYWQgb2YgcmVndWxhciBmaWxlIGNyZWF0aW9uIGZ1bmN0aW9ucy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgbG9naWNhbCwgYWx0ZXJpbmcgY29udHJvbCBmbG93IGFuZCBmbGFnIGhhbmRsaW5nIHdpdGhpbiB0aGUgVkZTIGxheWVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbGwgdmFyaWFibGVzIHVzZWQgKHN1Y2ggYXMgYGRlbGVnYXRlZF9pbm9kZWApIGFyZSBwcm9wZXJseSB6ZXJvLWluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowlgk96[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-23 16:12:41 +0000 UTC FinishedAt: 2026-08-23 16:16:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "66fb95a521110da673090294561844c9f76ebe64", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "9P_FS", "CEPH_FS", "FUSE_FS", "GFS2_FS", "NFS_FS", "CIFS", "VBOXSF_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "66fb95a521110da673090294561844c9f76ebe64", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "9P_FS", "CEPH_FS", "FUSE_FS", "GFS2_FS", "NFS_FS", "CIFS", "VBOXSF_FS" ], "series_id": "9c6e0cff-a88b-4746-8ab0-9db0532c23f8" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "vfs_mkdir", "vfs_create", "vfs_lookup_open", "dentry_create", "filename_mkdirat", "filename_unlinkat", "filename_renameat2", "v9fs_vfs_atomic_open", "v9fs_vfs_atomic_open_dotl", "ceph_atomic_open", "fuse_atomic_open", "gfs2_atomic_open", "nfs_atomic_open", "nfs_atomic_open_v23", "cifs_atomic_open", "vboxsf_dir_atomic_open" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "512f2832-177b-4b65-b835-bdff3e4402bc", "7bdf5f73-8cce-4785-aa9e-dd89622cf613", "6d4f386f-fb66-4862-b644-4ac19c79f6a3" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7LAogICAgJiMzNDtHRlMyX0ZTJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O1ZCT1hTRl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19ta2RpciYjMzQ7LAogICAgJiMzNDt2ZnNfY3JlYXRlJiMzNDssCiAgICAmIzM0O3Zmc19sb29rdXBfb3BlbiYjMzQ7LAogICAgJiMzNDtkZW50cnlfY3JlYXRlJiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX21rZGlyYXQmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfdW5saW5rYXQmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfcmVuYW1lYXQyJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwmIzM0OywKICAgICYjMzQ7Y2VwaF9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtmdXNlX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O2dmczJfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3Blbl92MjMmIzM0OywKICAgICYjMzQ7Y2lmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2Ym94c2ZfZGlyX2F0b21pY19vcGVuJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBWRlMgYW5kIHZhcmlvdXMgZmlsZXN5c3RlbXMgdG8gc3VwcG9ydCBjcmVhdGluZyBkaXJlY3RvcmllcyB2aWEgYG9wZW5hdCgpYCB3aXRoIHRoZSBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCBmbGFncy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgYWRkaW5nIHRoZSBgT19JU19NS0RJUmAgbWFjcm8sIG1vZGlmeWluZyBgYnVpbGRfb3Blbl9mbGFncygpYCB0byBoYW5kbGUgdGhlIG5ldyBmbGFnIGNvbWJpbmF0aW9uLCBhbmQgdXBkYXRpbmcgYGxvb2t1cF9vcGVuKClgIGFuZCBgdmZzX21rZGlyKClgIHBhdGhzIGluIGBmcy9uYW1laS5jYCB0byByb3V0ZSBkaXJlY3RvcnkgY3JlYXRpb24gcmVxdWVzdHMgdG8gYHZmc19ta2Rpcl9ub19wZXJtKClgIGluc3RlYWQgb2YgcmVndWxhciBmaWxlIGNyZWF0aW9uIGZ1bmN0aW9ucy5cblxuVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IGxvZ2ljYWwsIGFsdGVyaW5nIGNvbnRyb2wgZmxvdyBhbmQgZmxhZyBoYW5kbGluZyB3aXRoaW4gdGhlIFZGUyBsYXllci4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gQWxsIHZhcmlhYmxlcyB1c2VkIChzdWNoIGFzIGBkZWxlZ2F0ZWRfaW5vZGVgKSBhcmUgcHJvcGVybHkgemVyby1pbml0aWFsaXplZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgbG9naWMgZXJyb3JzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCBmb3IgYG9wZW5hdCgpYCB0byBhdG9taWNhbGx5IGNyZWF0ZSBhIGRpcmVjdG9yeSBhbmQgcmV0dXJuIGEgZmlsZSBkZXNjcmlwdG9yLiBJdCBtb2RpZmllcyBjb3JlIFZGUyBwYXRoIHJlc29sdXRpb24gYW5kIGNyZWF0aW9uIGxvZ2ljIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AsIGFuZCB1cGRhdGVzIHNldmVyYWwgZmlsZXN5c3RlbXMmIzM5OyBgYXRvbWljX29wZW5gIGltcGxlbWVudGF0aW9ucyB0byBoYW5kbGUgdGhlIG5ldyBmbGFnIGNvbWJpbmF0aW9uLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDY5NzRmMmRhZTAzYTMxNGVlZGNkMjI1MTQ5ZTEyNmI2NjA5NGI0ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDE2OjE0OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmNcbmluZGV4IDM4Mjk1NTRjYTM2OTIuLmIxZTA4MjNjODdiNTcgMTAwNjQ0XG4tLS0gYS9mcy85cC92ZnNfaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvOXAvdmZzX2lub2RlLmNcbkBAIC03NzYsNiAmIzQzOzc3Niw5IEBAIHY5ZnNfdmZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0aW50IHA5X29tb2RlO1xuIFxuJiM0MztcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbiYjNDM7XHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4mIzQzO1xuIFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdjlmc192ZnNfbG9va3VwKGRpciwgZGVudHJ5LCAwKTtcbiBcdFx0aWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKVxuZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jXG5pbmRleCAxMTZiMjllOTVmMjFlLi42NGUwYWJhMDhkYTE2IDEwMDY0NFxuLS0tIGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuQEAgLTIzOCw2ICYjNDM7MjM4LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0c3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcztcbiBcdHN0cnVjdCBwb3NpeF9hY2wgKnBhY2wgPSBOVUxMLCAqZGFjbCA9IE5VTEw7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2OWZzX3Zmc19sb29rdXAoZGlyLCBkZW50cnksIDApO1xuIFx0XHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXG5kaWZmIC0tZ2l0IGEvZnMvY2VwaC9maWxlLmMgYi9mcy9jZXBoL2ZpbGUuY1xuaW5kZXggYTRhMmE0YjZhMDI3ZC4uNjIxNjNiN2VjYTVmOSAxMDA2NDRcbi0tLSBhL2ZzL2NlcGgvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9jZXBoL2ZpbGUuY1xuQEAgLTgxMiw2ICYjNDM7ODEyLDkgQEAgaW50IGNlcGhfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdCAgICAgIGRpciwgY2VwaF92aW5vcChkaXIpLCBkZW50cnksIGRlbnRyeSxcbiBcdCAgICAgIGRfdW5oYXNoZWQoZGVudHJ5KSA/IFwmIzM0O3VuaGFzaGVkXCYjMzQ7IDogXCYjMzQ7aGFzaGVkXCYjMzQ7LCBmbGFncywgbW9kZSk7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4gXHUwMDNlIE5BTUVfTUFYKVxuIFx0XHRyZXR1cm4gLUVOQU1FVE9PTE9ORztcbiBcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuY1xuaW5kZXggZDRlMDAyOTgxMGMwZi4uNTVkNTg0NGUyNjU1OSAxMDA2NDRcbi0tLSBhL2ZzL2Z1c2UvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Z1c2UvZGlyLmNcbkBAIC05MzUsNiAmIzQzOzkzNSw5IEBAIHN0YXRpYyBpbnQgZnVzZV9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZW50cnksXG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuIFx0c3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRpZiAoZnVzZV9pc19iYWQoZGlyKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jXG5pbmRleCBmMzYxODc2YzU1ODMzLi4zZWUxMzYwZjFiYzI3IDEwMDY0NFxuLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9nZnMyL2lub2RlLmNcbkBAIC0xMzg2LDYgJiM0MzsxMzg2LDkgQEAgc3RhdGljIGludCBnZnMyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4ge1xuIFx0Ym9vbCBleGNsID0gISEoZmxhZ3MgXHUwMDI2IE9fRVhDTCk7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbiYjNDM7XG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpkID0gX19nZnMyX2xvb2t1cChkaXIsIGRlbnRyeSwgZmlsZSk7XG4gXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKSB7XG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcbmluZGV4IDIwYTY1MzRlYTNlZmYuLmUxYThmMTgzODVhNTIgMTAwNjQ0XG4tLS0gYS9mcy9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jXG5AQCAtMTM4MiwxMyAmIzQzOzEzODIsMTMgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxuIFxuIC8qKlxuICAqIG1heV9jcmVhdGVfaW5fc3RpY2t5IC0gQ2hlY2sgd2hldGhlciBhbiBPX0NSRUFUIG9wZW4gaW4gYSBzdGlja3kgZGlyZWN0b3J5XG4tICpcdFx0XHQgIHNob3VsZCBiZSBhbGxvd2VkLCBvciBub3QsIG9uIGZpbGVzIHRoYXQgYWxyZWFkeVxuLSAqXHRcdFx0ICBleGlzdC5cbiYjNDM7ICpcdFx0XHQgIHNob3VsZCBiZSBhbGxvd2VkLCBvciBub3QsIG9uIGZpbGVzL2RpcmVjdG9yaWVzIHRoYXRcbiYjNDM7ICpcdFx0XHQgIGFscmVhZHkgZXhpc3QuXG4gICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXG4gICogQG5kOiBuYW1laWRhdGEgcGF0aHdhbGsgZGF0YVxuICAqIEBpbm9kZTogdGhlIGlub2RlIG9mIHRoZSBmaWxlIHRvIG9wZW5cbiAgKlxuLSAqIEJsb2NrIGFuIE9fQ1JFQVQgb3BlbiBvZiBhIEZJRk8gKG9yIGEgcmVndWxhciBmaWxlKSB3aGVuOlxuJiM0MzsgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZS9kaXJlY3RvcnkpIHdoZW46XG4gICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZFxuICAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0c1xuICAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5XG5AQCAtMTQxNiw2ICYjNDM7MTQxNiwxNCBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdGlmIChsaWtlbHkoIShkaXJfbW9kZSBcdTAwMjYgU19JU1ZUWCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZXJlIGlzIG5vIHNlcGFyYXRlIHN5c2N0bCBmb3IgZGlyZWN0b3J5IGNyZWF0aW9uIGluIHN0aWNreVxuJiM0MztcdCAqIGZvbGRlcnMuIFRoZXJlZm9yZSwgZm9yIHRoZSBTX0lTRElSIGNhc2UsIGRpc2FibGluZ1xuJiM0MztcdCAqIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhciBpcyBub3QgZW5vdWdoIHRvIGFsbG93IGNyZWF0aW5nIGFcbiYjNDM7XHQgKiBkaXJlY3RvcnkgaW4gYSBzdGlja3kgZm9sZGVyLCBiZWNhdXNlIHRoYXQgbWF5IHN1cnByaXNlIHVzZXJzXG4mIzQzO1x0ICogbm90IGV4cGVjdGluZyB0aGF0IE9fQ1JFQVR8T19ESVJFQ1RPUlkgaXMgcG9zc2libGUgb24gbmV3ZXJcbiYjNDM7XHQgKiBrZXJuZWxzLlxuJiM0MztcdCAqL1xuIFx0aWYgKFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcilcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTQ0Nyw2ICYjNDM7MTQ1NSwxMiBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdFx0XHRcdFx0ICAgICAgXCYjMzQ7c3RpY2t5X2NyZWF0ZV9yZWd1bGFyXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiYjNDM7XHRcdFx0YXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBcJiMzNDtzdGlja3lfY3JlYXRlX2RpclwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUFDQ0VTO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMjc4MSw5ICYjNDM7Mjc5NSwxNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncylcbiBcdHJldHVybiBzO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHRyYWlsaW5nX3NsYXNoZXMoY29uc3Qgc3RydWN0IHFzdHIgKmxhc3QpXG4mIzQzO3tcbiYjNDM7XHQvKiBsYXN0LVx1MDAzZWxlbiBpcyBzZXQgYnkgaGFzaF9uYW1lKCkgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudFxuJiM0MztcdCAqIGNvbXBvbmVudCAtXHUwMDNlbmFtZSwgdGVybWluYXRpbmcgd2l0aCAmIzM5Oy8mIzM5OyBvciBhIE5VTCBjaGFyYWN0ZXIuICovXG4mIzQzO1x0cmV0dXJuIChib29sKWxhc3QtXHUwMDNlbmFtZVtsYXN0LVx1MDAzZWxlbl07XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpsb29rdXBfbGFzdChzdHJ1Y3QgbmFtZWlkYXRhICpuZClcbiB7XG4tXHRpZiAobmQtXHUwMDNlbGFzdF90eXBlID09IExBU1RfTk9STSBcdTAwMjZcdTAwMjYgbmQtXHUwMDNlbGFzdC5uYW1lW25kLVx1MDAzZWxhc3QubGVuXSlcbiYjNDM7XHRpZiAobmQtXHUwMDNlbGFzdF90eXBlID09IExBU1RfTk9STSBcdTAwMjZcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhcdTAwMjZuZC1cdTAwM2VsYXN0KSlcbiBcdFx0bmQtXHUwMDNlZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7XG4gXG4gXHRyZXR1cm4gd2Fsa19jb21wb25lbnQobmQsIFdBTEtfVFJBSUxJTkcpO1xuQEAgLTQxNTksNiAmIzQzOzQxODAsMjQgQEAgc3RhdGljIGlubGluZSB1bW9kZV90IHZmc19wcmVwYXJlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRyZXR1cm4gbW9kZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmVcbiYjNDM7aW50IHZmc19jcmVhdGVfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0ICAgICAgIHVtb2RlX3QgbW9kZSwgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmRpciA9IGRfaW5vZGUoZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbiYjNDM7XHRpbnQgZXJyb3I7XG4mIzQzO1xuJiM0MztcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbiYjNDM7XHRpZiAoIWVycm9yKVxuJiM0MztcdFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycm9yO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHZmc19jcmVhdGUgLSBjcmVhdGUgbmV3IGZpbGVcbiAgKiBAaWRtYXA6XHRpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXG5AQCAtNDE5MSwxMyAmIzQzOzQyMzAsOCBAQCBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG4gXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbi1cdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRyZXR1cm4gZXJyb3I7XG4tXHRlcnJvciA9IGRpci1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuLVx0aWYgKCFlcnJvcilcbi1cdFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcbi1cdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZmc19jcmVhdGVfbm9fcGVybShpZG1hcCwgZGVudHJ5LCBtb2RlLCBkaSk7XG4gfVxuIEVYUE9SVF9TWU1CT0wodmZzX2NyZWF0ZSk7XG4gXG5AQCAtNDMxNCwyMSAmIzQzOzQzNDgsNDEgQEAgc3RhdGljIGlubGluZSBpbnQgb3Blbl90b19uYW1laV9mbGFncyhpbnQgZmxhZylcbiBcbiBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHRjb25zdCBzdHJ1Y3QgcGF0aCAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0dW1vZGVfdCBtb2RlKVxuJiM0MztcdFx0XHRpbnQgb3Blbl9mbGFnLCB1bW9kZV90IG1vZGUpXG4ge1xuLVx0aW50IGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XG4mIzQzO1x0c3RydWN0IGlub2RlICpkaXJfaW5vZGUgPSBkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4mIzQzO1x0Ym9vbCBjcmVhdGVfZGlyID0gT19JU19NS0RJUihvcGVuX2ZsYWcpO1xuJiM0MztcdGludCBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0aWYgKGNyZWF0ZV9kaXIpXG4mIzQzO1x0XHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbiBcdGlmICghZnN1aWRnaWRfaGFzX21hcHBpbmcoZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX3NiLCBpZG1hcCkpXG4gXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuLVx0ZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGUsXG4tXHRcdFx0XHQgTUFZX1dSSVRFIHwgTUFZX0VYRUMpO1xuJiM0MztcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdGlmIChjcmVhdGVfZGlyKVxuJiM0MztcdFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyb3I7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdW1vZGVfdCBvX2NyZWF0ZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGlub2RlICpkaXIsIGludCBvcGVuX2ZsYWcsIHVtb2RlX3QgbW9kZSlcbiYjNDM7e1xuJiM0MztcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZykpXG4mIzQzO1x0XHRyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lSV1hVR08gfCBTX0lTVlRYLCBTX0lGRElSKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuIH1cbiBcbiAvKipcbkBAIC00MzY0LDggJiM0Mzs0NDE4LDkgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0b21pY19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnlcbiBcbiBcdGZpbGUtXHUwMDNlX19mX3BhdGguZGVudHJ5ID0gREVOVFJZX05PVF9TRVQ7XG4gXHRmaWxlLVx1MDAzZV9fZl9wYXRoLm1udCA9IHBhdGgtXHUwMDNlbW50O1xuJiM0MztcbiBcdGVycm9yID0gZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlYXRvbWljX29wZW4oZGlyX2lub2RlLCBkZW50cnksIGZpbGUsXG4tXHRcdFx0XHQgICAgICAgb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpLCBtb2RlKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpLCBtb2RlKTtcbiBcdGRfbG9va3VwX2RvbmUoZGVudHJ5KTtcbiBcbiBcdGlmICghZXJyb3IpIHtcbkBAIC00NDEwLDEwICYjNDM7NDQ2NSwyMSBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeVxuIFx0XHR9XG4gXHRcdGRwdXQoZGVudHJ5KTtcbiBcdFx0ZGVudHJ5ID0gRVJSX1BUUihlcnJvcik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQ1JFQVRFRClcbiYjNDM7XHRcdFx0ZnNub3RpZnlfY3JlYXRlKGRpcl9pbm9kZSwgZGVudHJ5KTtcbiYjNDM7XHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKVxuJiM0MztcdFx0XHRmc25vdGlmeV9vcGVuKGZpbGUpO1xuIFx0fVxuJiM0MztcbiYjNDM7XG4gXHRyZXR1cm4gZGVudHJ5O1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZVxuJiM0MztzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKik7XG4gLypcbiAgKiBMb29rIHVwIGFuZCBtYXliZSBjcmVhdGUgYW5kIG9wZW4gdGhlIGxhc3QgY29tcG9uZW50LlxuICAqXG5AQCAtNDQzNSw2ICYjNDM7NDUwMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcDtcbiBcdHN0cnVjdCBkZW50cnkgKmRpciA9IG5kLVx1MDAzZXBhdGguZGVudHJ5O1xuIFx0c3RydWN0IGlub2RlICpkaXJfaW5vZGUgPSBkaXItXHUwMDNlZF9pbm9kZTtcbiYjNDM7XHRib29sIGNyZWF0ZV9kaXIgPSBPX0lTX01LRElSKG9wLVx1MDAzZW1vZGUpO1xuIFx0aW50IG9wZW5fZmxhZztcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiBcdGludCBlcnJvciwgY3JlYXRlX2Vycm9yO1xuQEAgLTQ0NTUsNyAmIzQzOzQ1MjIsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHQgKi9cbiBcdH1cbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpXG4tXHRcdGlub2RlX2xvY2soZGlyX2lub2RlKTtcbiYjNDM7XHRcdGlub2RlX2xvY2tfbmVzdGVkKGRpcl9pbm9kZSwgSV9NVVRFWF9QQVJFTlQpO1xuIFx0ZWxzZVxuIFx0XHRpbm9kZV9sb2NrX3NoYXJlZChkaXJfaW5vZGUpO1xuIFxuQEAgLTQ1MDcsMTIgJiM0Mzs0NTc0LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG4gXHRcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTClcbiBcdFx0XHRvcGVuX2ZsYWcgXHUwMDI2PSB+T19UUlVOQztcbi1cdFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgbW9kZSwgbW9kZSk7XG4mIzQzO1x0XHRtb2RlID0gb19jcmVhdGVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBvcGVuX2ZsYWcsIG1vZGUpO1xuIFx0XHRpZiAobGlrZWx5KGdvdF93cml0ZSkpXG4gXHRcdFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBcdTAwMjZuZC1cdTAwM2VwYXRoLFxuLVx0XHRcdFx0XHRcdCAgICBkZW50cnksIG1vZGUpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgZGVudHJ5LCBvcGVuX2ZsYWcsIG1vZGUpO1xuIFx0XHRlbHNlXG4gXHRcdFx0Y3JlYXRlX2Vycm9yID0gLUVST0ZTO1xuJiM0MztcdFx0LyogUmVmdXNlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0aHJvdWdoIGEgZGFuZ2xpbmcgKHRyYWlsaW5nKVxuJiM0MztcdFx0ICogc3ltbGluay4gRm9yIHJlZ3VsYXIgZmlsZXMgdGhpcyBoYXMgYmVlbiBhbGxvd2VkIGhpc3RvcmljYWxseVxuJiM0MztcdFx0ICogb24gT19DUkVBVCB3aXRob3V0IE9fRVhDTC4gKi9cbiYjNDM7XHRcdGlmICh1bmxpa2VseShuZC1cdTAwM2VkZXB0aCkgXHUwMDI2XHUwMDI2IGNyZWF0ZV9kaXIgXHUwMDI2XHUwMDI2ICFjcmVhdGVfZXJyb3IpXG4mIzQzO1x0XHRcdGNyZWF0ZV9lcnJvciA9IC1FRVhJU1Q7XG4gXHR9XG4gXHRpZiAoY3JlYXRlX2Vycm9yKVxuIFx0XHRvcGVuX2ZsYWcgXHUwMDI2PSB+T19DUkVBVDtcbkBAIC00NTM3LDYgJiM0Mzs0NjA5LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0XHRkZW50cnkgPSByZXM7XG4gXHRcdH1cbiBcdH1cbiYjNDM7XG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfaW5vZGUgfHwgIShvcC1cdTAwM2VvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIE5vIG5lZWQgdG8gY3JlYXRlIGEgZmlsZS4gIElmIGxvb2t1cCByZXR1cm5lZCBhIHBvc2l0aXZlXG5AQCAtNDU1NCwyNiAmIzQzOzQ2MjcsMjYgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0Z290byBvdXRfZHB1dDtcbiBcdH1cbiBcbi1cdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpcl9pbm9kZSwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBvdXRfZHB1dDtcbi1cbi1cdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7XG4tXHRpZiAoIWRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZSkge1xuJiM0MztcdGlmICgoY3JlYXRlX2RpciBcdTAwMjZcdTAwMjYgIWRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZW1rZGlyKVxuJiM0MztcdFx0fHwgKCFjcmVhdGVfZGlyIFx1MDAyNlx1MDAyNiAhZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKSkge1xuIFx0XHRlcnJvciA9IC1FQUNDRVM7XG4gXHRcdGdvdG8gb3V0X2RwdXQ7XG4gXHR9XG4gXG4tXHRlcnJvciA9IGRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xuJiM0MztcdGlmIChjcmVhdGVfZGlyKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBtb2RlLCBcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xuJiM0MztcdFx0XHRlcnJvciA9IFBUUl9FUlJfT1JfWkVSTyhyZXMpO1xuJiM0MztcdFx0XHRpZiAoIWVycm9yKVxuJiM0MztcdFx0XHRcdGRlbnRyeSA9IHJlcztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ZXJyb3IgPSB2ZnNfY3JlYXRlX25vX3Blcm0oaWRtYXAsIGRlbnRyeSwgbW9kZSwgXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcbiYjNDM7XHR9XG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gb3V0X2RwdXQ7XG4mIzQzO1xuJiM0MztcdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7XG4gb3V0OlxuLVx0aWYgKCFJU19FUlIoZGVudHJ5KSkge1xuLVx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpXG4tXHRcdFx0ZnNub3RpZnlfY3JlYXRlKGRpcl9pbm9kZSwgZGVudHJ5KTtcbi1cdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpXG4tXHRcdFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcbi1cdH1cbiBcdGlmICgob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB8fCBjcmVhdGVfZXJyb3IpXG4gXHRcdGlub2RlX3VubG9jayhkaXJfaW5vZGUpO1xuIFx0ZWxzZVxuQEAgLTQ2OTUsMTcgJiM0Mzs0NzY4LDEyIEBAIHN0cnVjdCBmaWxlICp2ZnNfbG9va3VwX29wZW4oc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IHFzdHIgKmxhc3QsXG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModmZzX2xvb2t1cF9vcGVuLCBcJiMzNDtuZnNkXCYjMzQ7KTtcbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZClcbi17XG4tXHRyZXR1cm4gKGJvb2wpbmQtXHUwMDNlbGFzdC5uYW1lW25kLVx1MDAzZWxhc3QubGVuXTtcbi19XG4tXG4gc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9mYXN0X2Zvcl9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgb3Blbl9mbGFnKVxuIHtcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiBcbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbi1cdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKVxuJiM0MztcdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMoXHUwMDI2bmQtXHUwMDNlbGFzdCkgXHUwMDI2XHUwMDI2ICEob3Blbl9mbGFnIFx1MDAyNiBPX0RJUkVDVE9SWSkpXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJU0RJUik7XG4gXG4gXHRcdC8qIERvbiYjMzk7dCBib3RoZXIgb24gYW4gT19FWENMIGNyZWF0ZSAqL1xuQEAgLTQ3MTMsNyAmIzQzOzQ3ODEsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZCkpXG4mIzQzO1x0aWYgKHRyYWlsaW5nX3NsYXNoZXMoXHUwMDI2bmQtXHUwMDNlbGFzdCkpXG4gXHRcdG5kLVx1MDAzZWZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZO1xuIFxuIFx0ZGVudHJ5ID0gbG9va3VwX2Zhc3QobmQpO1xuQEAgLTQ4MDYsOCAmIzQzOzQ4NzQsOSBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG4gXHRcdGlmICgob3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0wpIFx1MDAyNlx1MDAyNiAhKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKSlcbiBcdFx0XHRyZXR1cm4gLUVFWElTVDtcbi1cdFx0aWYgKGRfaXNfZGlyKG5kLVx1MDAzZXBhdGguZGVudHJ5KSlcbiYjNDM7XHRcdGlmICghKG9wZW5fZmxhZyBcdTAwMjYgT19ESVJFQ1RPUlkpIFx1MDAyNlx1MDAyNiBkX2lzX2RpcihuZC1cdTAwM2VwYXRoLmRlbnRyeSkpXG4gXHRcdFx0cmV0dXJuIC1FSVNESVI7XG4mIzQzO1xuIFx0XHRlcnJvciA9IG1heV9jcmVhdGVfaW5fc3RpY2t5KGlkbWFwLCBuZCxcbiBcdFx0XHRcdFx0ICAgICBkX2JhY2tpbmdfaW5vZGUobmQtXHUwMDNlcGF0aC5kZW50cnkpKTtcbiBcdFx0aWYgKHVubGlrZWx5KGVycm9yKSlcbkBAIC01MDg3LDcgJiM0Mzs1MTU2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZShpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXG4gXHQgKiBEbyB0aGUgZmluYWwgbG9va3VwLiAgU3VwcHJlc3MgJiMzOTtjcmVhdGUmIzM5OyBpZiB0aGVyZSBpcyBhIHRyYWlsaW5nXG4gXHQgKiAmIzM5Oy8mIzM5OywgYW5kIGEgZGlyZWN0b3J5IHdhc24mIzM5O3QgcmVxdWVzdGVkLlxuIFx0ICovXG4tXHRpZiAobGFzdC5uYW1lW2xhc3QubGVuXSBcdTAwMjZcdTAwMjYgIXdhbnRfZGlyKVxuJiM0MztcdGlmICh0cmFpbGluZ19zbGFzaGVzKFx1MDAyNmxhc3QpIFx1MDAyNlx1MDAyNiAhd2FudF9kaXIpXG4gXHRcdGNyZWF0ZV9mbGFncyBcdTAwMjY9IH5MT09LVVBfQ1JFQVRFO1xuIFx0ZGVudHJ5ID0gc3RhcnRfZGlyb3AocGF0aC1cdTAwM2VkZW50cnksIFx1MDAyNmxhc3QsIHJldmFsX2ZsYWcgfCBjcmVhdGVfZmxhZ3MpO1xuIFx0aWYgKElTX0VSUihkZW50cnkpKVxuQEAgLTUxODIsNyAmIzQzOzUyNTEsNyBAQCBzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXG4gXHRcdHBhdGgtXHUwMDNlZGVudHJ5ID0gZGlyO1xuIFx0XHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuIFxuLVx0XHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIHBhdGgsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0XHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIHBhdGgsIGRlbnRyeSwgZmxhZ3MsIG1vZGUpO1xuIFx0XHRpZiAoY3JlYXRlX2Vycm9yKVxuIFx0XHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4gXG5AQCAtNTM1Niw2ICYjNDM7NTQyNSwzNCBAQCBTWVNDQUxMX0RFRklORTMobWtub2QsIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lLCB1bW9kZV90LCBtb2RlLCB1bnNpZ25lZCwgZFxuIFx0cmV0dXJuIGZpbGVuYW1lX21rbm9kYXQoQVRfRkRDV0QsIG5hbWUsIG1vZGUsIGRldik7XG4gfVxuIFxuJiM0MzsvKiBSZXR1cm5zIHRoZSBkZW50cnkgdG8gdXNlIChub3QgTlVMTCkgb3IgLUUgb24gZXJyb3IgKi9cbiYjNDM7c3RhdGljIGlubGluZVxuJiM0MztzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSlcbiYjNDM7e1xuJiM0MztcdGludCBlcnJvcjtcbiYjNDM7XHRzdHJ1Y3QgZGVudHJ5ICpkZTtcbiYjNDM7XHR1bnNpZ25lZCBtYXhfbGlua3MgPSBkaXItXHUwMDNlaV9zYi1cdTAwM2VzX21heF9saW5rcztcbiYjNDM7XG4mIzQzO1x0aWYgKG1heF9saW5rcyBcdTAwMjZcdTAwMjYgZGlyLVx1MDAzZWlfbmxpbmsgXHUwMDNlPSBtYXhfbGlua3MpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU1MSU5LKTtcbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xuJiM0MztcbiYjNDM7XHRkZSA9IGRpci1cdTAwM2VpX29wLVx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4mIzQzO1x0aWYgKElTX0VSUihkZSkpXG4mIzQzO1x0XHRyZXR1cm4gZGU7XG4mIzQzO1x0aWYgKGRlKSB7XG4mIzQzO1x0XHRkcHV0KGRlbnRyeSk7XG4mIzQzO1x0XHRkZW50cnkgPSBkZTtcbiYjNDM7XHR9XG4mIzQzO1x0ZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpO1xuJiM0MztcdHJldHVybiBkZW50cnk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogdmZzX21rZGlyIC0gY3JlYXRlIGRpcmVjdG9yeSByZXR1cm5pbmcgY29ycmVjdCBkZW50cnkgaWYgcG9zc2libGVcbiAgKiBAaWRtYXA6XHRcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cbkBAIC01MzgzLDcgJiM0Mzs1NDgwLDYgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGVsZWdhdGVkX2lub2RlKVxuIHtcbiBcdGludCBlcnJvcjtcbi1cdHVuc2lnbmVkIG1heF9saW5rcyA9IGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfbWF4X2xpbmtzO1xuIFx0c3RydWN0IGRlbnRyeSAqZGU7XG4gXG4gXHRlcnJvciA9IG1heV9jcmVhdGVfZGVudHJ5KGlkbWFwLCBkaXIsIGRlbnRyeSk7XG5AQCAtNTM5OSwyNCAmIzQzOzU0OTUsMTIgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBlcnI7XG4gXG4tXHRlcnJvciA9IC1FTUxJTks7XG4tXHRpZiAobWF4X2xpbmtzIFx1MDAyNlx1MDAyNiBkaXItXHUwMDNlaV9ubGluayBcdTAwM2U9IG1heF9saW5rcylcbi1cdFx0Z290byBlcnI7XG4tXG4tXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gZXJyO1xuLVxuLVx0ZGUgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2Vta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuLVx0ZXJyb3IgPSBQVFJfRVJSKGRlKTtcbi1cdGlmIChJU19FUlIoZGUpKVxuJiM0MztcdGRlID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpO1xuJiM0MztcdGlmIChJU19FUlIoZGUpKSB7XG4mIzQzO1x0XHRlcnJvciA9IFBUUl9FUlIoZGUpO1xuIFx0XHRnb3RvIGVycjtcbi1cdGlmIChkZSkge1xuLVx0XHRkcHV0KGRlbnRyeSk7XG4tXHRcdGRlbnRyeSA9IGRlO1xuIFx0fVxuLVx0ZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpO1xuLVx0cmV0dXJuIGRlbnRyeTtcbiYjNDM7XHRyZXR1cm4gZGU7XG4gXG4gZXJyOlxuIFx0ZW5kX2NyZWF0aW5nKGRlbnRyeSk7XG5AQCAtNTcwMyw3ICYjNDM7NTc4Nyw3IEBAIGludCBmaWxlbmFtZV91bmxpbmthdChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpXG4gXHRcdGdvdG8gZXhpdF9kcm9wX3dyaXRlO1xuIFxuIFx0LyogV2h5IG5vdCBiZWZvcmU/IEJlY2F1c2Ugd2Ugd2FudCBjb3JyZWN0IGVycm9yIHZhbHVlICovXG4tXHRpZiAodW5saWtlbHkobGFzdC5uYW1lW2xhc3QubGVuXSkpIHtcbiYjNDM7XHRpZiAodW5saWtlbHkodHJhaWxpbmdfc2xhc2hlcyhcdTAwMjZsYXN0KSkpIHtcbiBcdFx0aWYgKGRfaXNfZGlyKGRlbnRyeSkpXG4gXHRcdFx0ZXJyb3IgPSAtRUlTRElSO1xuIFx0XHRlbHNlXG5AQCAtNjMwNSwxNiAmIzQzOzYzODksMTYgQEAgaW50IGZpbGVuYW1lX3JlbmFtZWF0MihpbnQgb2xkZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZyb20sXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IFJFTkFNRV9FWENIQU5HRSkge1xuIFx0XHRpZiAoIWRfaXNfZGlyKHJkLm5ld19kZW50cnkpKSB7XG4gXHRcdFx0ZXJyb3IgPSAtRU5PVERJUjtcbi1cdFx0XHRpZiAobmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKVxuJiM0MztcdFx0XHRpZiAodHJhaWxpbmdfc2xhc2hlcyhcdTAwMjZuZXdfbGFzdCkpXG4gXHRcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIFx0XHR9XG4gXHR9XG4gXHQvKiB1bmxlc3MgdGhlIHNvdXJjZSBpcyBhIGRpcmVjdG9yeSB0cmFpbGluZyBzbGFzaGVzIGdpdmUgLUVOT1RESVIgKi9cbiBcdGlmICghZF9pc19kaXIocmQub2xkX2RlbnRyeSkpIHtcbiBcdFx0ZXJyb3IgPSAtRU5PVERJUjtcbi1cdFx0aWYgKG9sZF9sYXN0Lm5hbWVbb2xkX2xhc3QubGVuXSlcbiYjNDM7XHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKFx1MDAyNm9sZF9sYXN0KSlcbiBcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuLVx0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgbmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKVxuJiM0MztcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IFJFTkFNRV9FWENIQU5HRSkgXHUwMDI2XHUwMDI2IHRyYWlsaW5nX3NsYXNoZXMoXHUwMDI2bmV3X2xhc3QpKVxuIFx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jXG5pbmRleCAzNmYyZTg1ODg5MjIwLi5iNGRiNzAzYzllOGM3IDEwMDY0NFxuLS0tIGEvZnMvbmZzL2Rpci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uZnMvZGlyLmNcbkBAIC0yMTIxLDYgJiM0MzsyMTIxLDkgQEAgaW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0ZGZwcmludGsoVkZTLCBcJiMzNDtORlM6IGF0b21pY19vcGVuKCVzLyVsbHUpLCAlcGRcXG5cJiMzNDssXG4gXHRcdFx0ZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19pZCwgZGlyLVx1MDAzZWlfaW5vLCBkZW50cnkpO1xuIFxuJiM0MztcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxuJiM0MztcdFx0b3Blbl9mbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuJiM0MztcbiBcdGVyciA9IG5mc19jaGVja19mbGFncyhvcGVuX2ZsYWdzKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG5AQCAtMjMxMyw2ICYjNDM7MjMxNiw5IEBAIGludCBuZnNfYXRvbWljX29wZW5fdjIzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgKi9cbiBcdGludCBlcnJvciA9IDA7XG4gXG4mIzQzO1x0aWYgKE9fSVNfTUtESVIob3Blbl9mbGFncykpXG4mIzQzO1x0XHRvcGVuX2ZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4mIzQzO1xuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX25hbWUubGVuIFx1MDAzZSBORlNfU0VSVkVSKGRpciktXHUwMDNlbmFtZWxlbilcbiBcdFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXG5pbmRleCA2YjFjMTRlNjg0YTkzLi42Y2I1ZTJhZDc4MWYzIDEwMDY0NFxuLS0tIGEvZnMvb3Blbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vcGVuLmNcbkBAIC0xMjM5LDI5ICYjNDM7MTIzOSwzMCBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcdGlmIChXSUxMX0NSRUFURShmbGFncykpIHtcbiBcdFx0aWYgKGhvdy1cdTAwM2Vtb2RlIFx1MDAyNiB+U19JQUxMVUdPKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGUkVHO1xuJiM0MztcdFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuJiM0MztcdFx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGRElSO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGUkVHO1xuIFx0fSBlbHNlIHtcbiBcdFx0aWYgKGhvdy1cdTAwM2Vtb2RlICE9IDApXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdG9wLVx1MDAzZW1vZGUgPSAwO1xuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIEJsb2NrIGJ1Z3Mgd2hlcmUgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGNyZWF0ZWQgcmVndWxhciBmaWxlcy5cbi1cdCAqIE5vdGUsIHRoYXQgYmxvY2tpbmcgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGhlcmUgYWxzbyBwcm90ZWN0c1xuLVx0ICogT19UTVBGSUxFIGJlbG93IHdoaWNoIHJlcXVpcmVzIE9fRElSRUNUT1JZIGJlaW5nIHJhaXNlZC5cbi1cdCAqL1xuLVx0aWYgKChmbGFncyBcdTAwMjYgKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpID09IChPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbiBcdC8qIE5vdyBoYW5kbGUgdGhlIGNyZWF0aXZlIGltcGxlbWVudGF0aW9uIG9mIE9fVE1QRklMRS4gKi9cbiBcdGlmIChmbGFncyBcdTAwMjYgX19PX1RNUEZJTEUpIHtcbiBcdFx0LypcbiBcdFx0ICogSW4gb3JkZXIgdG8gZW5zdXJlIHByb2dyYW1zIGdldCBleHBsaWNpdCBlcnJvcnMgd2hlbiB0cnlpbmdcbiBcdFx0ICogdG8gdXNlIE9fVE1QRklMRSBvbiBvbGQga2VybmVscyB3ZSBlbmZvcmNlIHRoYXQgT19ESVJFQ1RPUllcbi1cdFx0ICogaXMgcmFpc2VkIGFsb25nc2lkZSBfX09fVE1QRklMRS5cbiYjNDM7XHRcdCAqIGlzIHJhaXNlZCBhbG9uZ3NpZGUgX19PX1RNUEZJTEUsIGJ1dCB3aXRob3V0IE9fQ1JFQVQuIFRoZVxuJiM0MztcdFx0ICogcmVhc29uIGZvciBkaXNhbGxvd2luZyBPX0NSRUFUfE9fVE1QRklMRSBpcyB0aGF0XG4mIzQzO1x0XHQgKiBPX0RJUkVDVE9SWXxPX0NSRUFUIHVzZWQgdG8gd29yayBhbmQgY3JlYXRlZCBhIHJlZ3VsYXIgZmlsZVxuJiM0MztcdFx0ICogaWYgbm90aGluZyBleGlzdGVkIGF0IHRoZSBvcGVuIHBhdGguIEhlbmNlLCBhbGxvd2luZyB0aGVcbiYjNDM7XHRcdCAqIGNvbWJpbmF0aW9uIHdvdWxkIGhhdmUgY2F1c2VkIE9fQ1JFQVR8T19UTVBGSUxFIHRvIGNyZWF0ZSBhXG4mIzQzO1x0XHQgKiByZWd1bGFyIChub24tdGVtcG9yYXJ5KSBmaWxlIG9uIG9sZCBrZXJuZWxzLCB3aGlsZSB0aGUgY2FsbGVyXG4mIzQzO1x0XHQgKiB3b3VsZCBiZWxpZXZlIHRoZXkgY3JlYXRlZCBhbiBhY3R1YWwgT19UTVBGSUxFLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE9fRElSRUNUT1JZKSlcbiYjNDM7XHRcdGlmICghKGZsYWdzIFx1MDAyNiBPX0RJUkVDVE9SWSkgfHwgKGZsYWdzIFx1MDAyNiBPX0NSRUFUKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0aWYgKCEoYWNjX21vZGUgXHUwMDI2IE1BWV9XUklURSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTMxOCw2ICYjNDM7MTMxOSwxNSBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcbiBcdG9wLVx1MDAzZWludGVudCA9IGZsYWdzIFx1MDAyNiBPX1BBVEggPyAwIDogTE9PS1VQX09QRU47XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSZXF1ZXN0aW5nIHdyaXRlIGFjY2VzcyBvbiBhIGRpcmVjdG9yeSBjYW4gbmV2ZXIgc3VjY2VlZC4gUmF0aGVyXG4mIzQzO1x0ICogdGhhbiBwZXJmb3JtaW5nIGEgcGF0aC13YWxrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0YXJnZXQgaXNcbiYjNDM7XHQgKiBhY3R1YWxseSBhIGRpcmVjdG9yeSAoLUVJU0RJUikgb3Igbm90ICgtRU5PVERJUiksIHdlIHNob3J0LWNpcmN1aXRcbiYjNDM7XHQgKiB0byAtRU5PVERJUi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKGZsYWdzIFx1MDAyNiBPX0RJUkVDVE9SWSkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IF9fT19UTVBGSUxFKSBcdTAwMjZcdTAwMjYgKGFjY19tb2RlIFx1MDAyNiBNQVlfV1JJVEUpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9URElSO1xuJiM0MztcbiBcdGlmIChmbGFncyBcdTAwMjYgT19DUkVBVCkge1xuIFx0XHRvcC1cdTAwM2VpbnRlbnQgfD0gTE9PS1VQX0NSRUFURTtcbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBPX0VYQ0wpIHtcbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2Rpci5jIGIvZnMvc21iL2NsaWVudC9kaXIuY1xuaW5kZXggNzgwM2JkNWJkMDFmOC4uZDFhZjkwYzk4MWNkNCAxMDA2NDRcbi0tLSBhL2ZzL3NtYi9jbGllbnQvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NtYi9jbGllbnQvZGlyLmNcbkBAIC01MzgsNiAmIzQzOzUzOCw5IEBAIGludCBjaWZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSxcbiBcdGlmICh1bmxpa2VseShjaWZzX2ZvcmNlZF9zaHV0ZG93bihjaWZzX3NiKSkpXG4gXHRcdHJldHVybiBzbWJfRUlPKHNtYl9laW9fdHJhY2VfZm9yY2VkX3NodXRkb3duKTtcbiBcbiYjNDM7XHRpZiAoT19JU19NS0RJUihvZmxhZ3MpKVxuJiM0MztcdFx0b2ZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFBvc2l4IG9wZW4gaXMgb25seSBjYWxsZWQgKGF0IGxvb2t1cCB0aW1lKSBmb3IgZmlsZSBjcmVhdGUgbm93LiBGb3JcbiBcdCAqIG9wZW5zIChyYXRoZXIgdGhhbiBjcmVhdGVzKSwgYmVjYXVzZSB3ZSBkbyBub3Qga25vdyBpZiBpdCBpcyBhIGZpbGVcbmRpZmYgLS1naXQgYS9mcy92Ym94c2YvZGlyLmMgYi9mcy92Ym94c2YvZGlyLmNcbmluZGV4IDBiOWVhYjE1NzQzMmQuLjZlMzA2ZGRkNzIyYmYgMTAwNjQ0XG4tLS0gYS9mcy92Ym94c2YvZGlyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zib3hzZi9kaXIuY1xuQEAgLTMxOCw2ICYjNDM7MzE4LDkgQEAgc3RhdGljIGludCB2Ym94c2ZfZGlyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHR1NjQgaGFuZGxlO1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHRpZiAoT19JU19NS0RJUihmbGFncykpXG4mIzQzO1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuJiM0MztcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHZib3hzZl9kaXJfbG9va3VwKHBhcmVudCwgZGVudHJ5LCAwKTtcbiBcdFx0aWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmNudGwuaCBiL2luY2x1ZGUvbGludXgvZmNudGwuaFxuaW5kZXggNmFkNmI5ZTdhMjI2YS4uMjA0ZTE2YmJlMjYzNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmNudGwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mY250bC5oXG5AQCAtMzAsNiAmIzQzOzMwLDEyIEBAXG4gICovXG4gI2RlZmluZSBfX09fUkVHVUxBUlx0XHQoMSBcdTAwM2NcdTAwM2MgMzApXG4gXG4mIzQzOyNkZWZpbmUgT19NS0RJUl9NQVNLXHQoT19DUkVBVCB8IE9fRElSRUNUT1JZKVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgT19JU19NS0RJUih1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKGZsYWdzIFx1MDAyNiBPX01LRElSX01BU0spID09IE9fTUtESVJfTUFTSztcbiYjNDM7fVxuJiM0MztcbiAvKiBMaXN0IG9mIGFsbCB2YWxpZCBmbGFncyBmb3IgdGhlIGhvdy1cdTAwM2VyZXNvbHZlIGFyZ3VtZW50OiAqL1xuICNkZWZpbmUgVkFMSURfUkVTT0xWRV9GTEFHUyBcXFxuIFx0KFJFU09MVkVfTk9fWERFViB8IFJFU09MVkVfTk9fTUFHSUNMSU5LUyB8IFJFU09MVkVfTk9fU1lNTElOS1MgfCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlXG5pbmRleCA5ZWIxODVmYjJmOWRkLi4wMWM1ODhkNGM4NGY2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZVxuQEAgLTEsNCAmIzQzOzEsNSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MztvcGVuX29fY3JlYXRfb19kaXJcbiBkbm90aWZ5X3Rlc3RcbiBkZXZwdHNfcHRzXG4gZmNsb2dcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlXG5pbmRleCAwM2JlMzM3YzFmMzUxLi4wOTU5YmQyNjg3NWFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlXG5AQCAtMSw3ICYjNDM7MSw3IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuIENGTEFHUyAmIzQzOz0gJChLSERSX0lOQ0xVREVTKVxuLVRFU1RfR0VOX1BST0dTIDo9IGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2cgdXN0YXRfdGVzdFxuJiM0MztURVNUX0dFTl9QUk9HUyA6PSBvcGVuX29fY3JlYXRfb19kaXIgZGV2cHRzX3B0cyBmaWxlX3N0cmVzc29yIGFub25faW5vZGVfdGVzdCBrZXJuZnNfdGVzdCBmY2xvZyB1c3RhdF90ZXN0XG4gVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGlkbWFwcGVkX3RtcGZpbGVcbiBURVNUX0dFTl9QUk9HU19FWFRFTkRFRCA6PSBkbm90aWZ5X3Rlc3RcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYmUwYWIzNDI2N2UxZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmNcbkBAIC0wLDAgJiM0MzsxLDIwMSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt3cmFwcGVycy5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIG9wZW5hdF9vX21rZGlyX2NoZWNrZWRfZmxhZ3MoZGZkLCBwYXRobmFtZSwgZmxhZ3MpICh7XHRcXFxuJiM0MztcdHN0cnVjdCBzdGF0IF9fc3Q7XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRpbnQgX19mZCA9IG9wZW5hdF9vX21rZGlyKGRmZCwgcGF0aG5hbWUsIGZsYWdzLCBTX0lSV1hVKTtcdFxcXG4mIzQzO1x0QVNTRVJUX0dFKF9fZmQsIDApO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0QVNTRVJUX0VRKGZzdGF0KF9fZmQsIFx1MDAyNl9fc3QpLCAwKTtcdFx0XHRcdFxcXG4mIzQzO1x0RVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTtcdFx0XHRcdFxcXG4mIzQzO1x0X19mZDtcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7XG4mIzQzOyNkZWZpbmUgb3BlbmF0X29fbWtkaXJfY2hlY2tlZChkZmQsIHBhdGhuYW1lKSBcXFxuJiM0MztcdG9wZW5hdF9vX21rZGlyX2NoZWNrZWRfZmxhZ3MoZGZkLCBwYXRobmFtZSwgT19SRE9OTFkpXG4mIzQzO1xuJiM0MztGSVhUVVJFKG9wZW5fb19jcmVhdF9vX2Rpcikge1xuJiM0MztcdGNoYXIgZGlycGF0aFtQQVRIX01BWF07XG4mIzQzO1x0aW50IGRmZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0ZJWFRVUkVfU0VUVVAob3Blbl9vX2NyZWF0X29fZGlyKVxuJiM0Mzt7XG4mIzQzO1x0c3RyY3B5KHNlbGYtXHUwMDNlZGlycGF0aCwgXCYjMzQ7L3RtcC9vcGVuX29fY3JlYXRfb19kaXJfdGVzdC5YWFhYWFhcJiMzNDspO1xuJiM0MztcdEFTU0VSVF9ORShta2R0ZW1wKHNlbGYtXHUwMDNlZGlycGF0aCksIE5VTEwpO1xuJiM0MztcdHNlbGYtXHUwMDNlZGZkID0gb3BlbihzZWxmLVx1MDAzZWRpcnBhdGgsIE9fRElSRUNUT1JZKTtcbiYjNDM7XHRBU1NFUlRfR0Uoc2VsZi1cdTAwM2VkZmQsIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztGSVhUVVJFX1RFQVJET1dOKG9wZW5fb19jcmVhdF9vX2RpcilcbiYjNDM7e1xuJiM0MztcdGNsb3NlKHNlbGYtXHUwMDNlZGZkKTtcbiYjNDM7XHRybWRpcihzZWxmLVx1MDAzZWRpcnBhdGgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBEb2VzIG9wZW5fb19jcmVhdF9vX2RpciByZXR1cm4gYSBmZCBhdCBhbGw/ICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJldHVybnNfZmQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtuZXdkaXJcJiMzNDspO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmZCksIDApO1xuJiM0MztcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7bmV3ZGlyXCYjMzQ7LCBBVF9SRU1PVkVESVIpLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogVGhlIGZkIG11c3QgcmVmZXIgdG8gdGhlIGRpcmVjdG9yeSB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQuICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGZkX2lzX2NyZWF0ZWRfZGlyKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkO1xuJiM0MztcdHN0cnVjdCBzdGF0IHN0X3ZpYV9mZCwgc3RfdmlhX3BhdGg7XG4mIzQzO1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbiYjNDM7XG4mIzQzO1x0ZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtjaGVja2RpclwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9FUShmc3RhdChmZCwgXHUwMDI2c3RfdmlhX2ZkKSwgMCk7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCYjMzQ7JXMvY2hlY2tkaXJcJiMzNDssIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4mIzQzO1x0QVNTRVJUX0VRKHN0YXQocGF0aCwgXHUwMDI2c3RfdmlhX3BhdGgpLCAwKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9pbm8sIHN0X3ZpYV9wYXRoLnN0X2lubyk7XG4mIzQzO1x0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9kZXYsIHN0X3ZpYV9wYXRoLnN0X2Rldik7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShjbG9zZShmZCksIDApO1xuJiM0MztcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIE1pc3NpbmcgcGFyZW50IGNvbXBvbmVudCBtdXN0IGZhaWwgd2l0aCBFTk9FTlQuICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGVub2VudF9taXNzaW5nX3BhcmVudClcbiYjNDM7e1xuJiM0MztcdEVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7bm9uZXhpc3RlbnQvY2hpbGRcJiMzNDssIE9fUkRPTkxZLCBTX0lSV1hVKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQW4gaW52YWxpZCBkZmQgbXVzdCBmYWlsIHdpdGggRUJBREYuICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGViYWRmKVxuJiM0Mzt7XG4mIzQzO1x0RVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKEZEX0lOVkFMSUQsIFwmIzM0O2JhZGZkaXJcJiMzNDssIE9fUkRPTkxZLCBTX0lSV1hVKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRUJBREYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBBIGRmZCB0aGF0IHBvaW50cyB0byBhIGZpbGUgKG5vdCBhIGRpcmVjdG9yeSkgbXVzdCBmYWlsIHdpdGggRU5PVERJUi4gKi9cbiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vdGRpcl9kZmQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmlsZV9mZDtcbiYjNDM7XG4mIzQzO1x0ZmlsZV9mZCA9IG9wZW5hdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7ZmlsZVwmIzM0OyxcbiYjNDM7XHRcdFx0IE9fQ1JFQVQgfCBPX1JET05MWSwgU19JUldYVSk7XG4mIzQzO1x0QVNTRVJUX0dFKGZpbGVfZmQsIDApO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoZmlsZV9mZCwgXCYjMzQ7c3ViZGlyXCYjMzQ7LCBPX1JET05MWSwgU19JUldYVSksIC0xKTtcbiYjNDM7XHRFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApO1xuJiM0MztcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7ZmlsZVwmIzM0OywgMCksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBPX0VYQ0wgdG9nZXRoZXIgd2l0aCBPX0NSRUFUfE9fRElSRUNUT1JZIHNob3VsZCBzdWNjZWVkIGlmIHRoZSB0YXJnZXRcbiYjNDM7ICogZGlyZWN0b3J5IGRvZXMgbm90IHlldCBleGlzdC4gQWZ0ZXIgZGlyZWN0b3J5IGNyZWF0aW9uLCByZXBlYXRpbmcgdGhpc1xuJiM0MzsgKiBjYWxsIG11c3QgZmFpbCB3aXRoIEVFWElTVC5cbiYjNDM7ICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIG9fZXhjbF9lZXhpc3QpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXhjbGRpcl9mZDtcbiYjNDM7XG4mIzQzO1x0ZXhjbGRpcl9mZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWRfZmxhZ3Moc2VsZi1cdTAwM2VkZmQsIFwmIzM0O2V4Y2xkaXJcJiMzNDssIE9fRVhDTCk7XG4mIzQzO1xuJiM0MztcdEVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihleGNsZGlyX2ZkLCBcJiMzNDsuXCYjMzQ7LCBPX0VYQ0wsIFNfSVJXWFUpLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFRVhJU1QpO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoY2xvc2UoZXhjbGRpcl9mZCksIDApO1xuJiM0MztcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7ZXhjbGRpclwmIzM0OywgQVRfUkVNT1ZFRElSKSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgb24gYSBwYXRoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXMgYSByZWd1bGFyIGZpbGVcbiYjNDM7ICogbXVzdCBmYWlsIHdpdGggRU5PVERJUi5cbiYjNDM7ICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGV4aXN0aW5nX2ZpbGVfZW5vdGRpcilcbiYjNDM7e1xuJiM0MztcdGludCBmaWxlX2ZkO1xuJiM0MztcbiYjNDM7XHRmaWxlX2ZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtyZWdmaWxlXCYjMzQ7LFxuJiM0MztcdFx0XHQgT19DUkVBVCB8IE9fUkRPTkxZLCBTX0lSV1hVKTtcbiYjNDM7XHRBU1NFUlRfR0UoZmlsZV9mZCwgMCk7XG4mIzQzO1x0RVhQRUNUX0VRKGNsb3NlKGZpbGVfZmQpLCAwKTtcbiYjNDM7XG4mIzQzO1x0RVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtyZWdmaWxlXCYjMzQ7LCBPX1JET05MWSwgU19JUldYVSksIC0xKTtcbiYjNDM7XHRFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O3JlZ2ZpbGVcJiMzNDssIDApLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogT19DUkVBVHxPX0RJUkVDVE9SWSBjb21iaW5lZCB3aXRoIGEgd3JpdGFibGUgYWNjZXNzIG1vZGUgbXVzdCBiZVxuJiM0MzsgKiByZWplY3RlZDogYSBkaXJlY3RvcnkgY2Fubm90IGJlIG9wZW5lZCBmb3Igd3JpdGluZy5cbiYjNDM7ICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJlamVjdHNfd3JpdGFibGVfYWNjX21vZGUpXG4mIzQzO3tcbiYjNDM7XHRFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O3Jkd3JkaXJcJiMzNDssIE9fUkRXUiwgU19JUldYVSksIC0xKTtcbiYjNDM7XHRFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpO1xuJiM0MztcdC8qIENsZWFuIHVwIGlmIHRoZSBrZXJuZWwgY3JlYXRlZCB0aGUgZGlyZWN0b3J5IGFueXdheS4gKi9cbiYjNDM7XHR1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7cmR3cmRpclwmIzM0OywgQVRfUkVNT1ZFRElSKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogb3BlbmF0KE9fQ1JFQVR8T19ESVJFQ1RPUlkpIHdpdGggYSB0cmFpbGluZyBzbGFzaCBzaG91bGQgd29yay5cbiYjNDM7ICovXG4mIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHRyYWlsaW5nX3NsYXNoKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7bmV3ZGlyL1wmIzM0Oyk7XG4mIzQzO1x0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XG4mIzQzO1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDtuZXdkaXJcJiMzNDssIEFUX1JFTU9WRURJUiksIDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBvcGVuYXQoT19DUkVBVCkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIGJ1dCB3aXRob3V0IE9fRElSRUNUT1JZXG4mIzQzOyAqIG11c3QgZmFpbCB3aXRoIEVJU0RJUiBhbmQgbXVzdCBub3QgY3JlYXRlIGFueXRoaW5nIGF0IHRoZSBwYXRoLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgdHJhaWxpbmdfc2xhc2hfbm9fb19kaXIpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZmQ7XG4mIzQzO1x0c3RydWN0IHN0YXQgc3Q7XG4mIzQzO1xuJiM0MztcdGZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcJiMzNDt0cmFpbGluZy9cJiMzNDssIE9fQ1JFQVQgfCBPX1JET05MWSwgU19JUldYVSk7XG4mIzQzO1x0RVhQRUNUX0VRKGZkLCAtMSk7XG4mIzQzO1x0RVhQRUNUX0VRKGVycm5vLCBFSVNESVIpO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoZnN0YXRhdChzZWxmLVx1MDAzZWRmZCwgXCYjMzQ7dHJhaWxpbmdcJiMzNDssIFx1MDAyNnN0LCAwKSwgLTEpO1xuJiM0MztcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcbiYjNDM7XG4mIzQzO1x0LyogQmVzdC1lZmZvcnQgY2xlYW51cCBpbiBjYXNlIHRoZSBrZXJuZWwgbGVmdCBhIGZpbGUgYmVoaW5kLiAqL1xuJiM0MztcdGlmIChmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShmZCk7XG4mIzQzO1x0dW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O3RyYWlsaW5nXCYjMzQ7LCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVGhlIHJldHVybmVkIGZkIG11c3QgYmUgdXNhYmxlIGFzIGEgZGZkIGZvciBmdXJ0aGVyICphdCgpIGNhbGxzLlxuJiM0MzsgKi9cbiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfdXNhYmxlX2FzX2RmZClcbiYjNDM7e1xuJiM0MztcdGludCBwYXJlbnRfZmQsIGNoaWxkX2ZkO1xuJiM0MztcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4mIzQzO1xuJiM0MztcdHBhcmVudF9mZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoc2VsZi1cdTAwM2VkZmQsIFwmIzM0O3BhcmVudFwmIzM0Oyk7XG4mIzQzO1x0Y2hpbGRfZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHBhcmVudF9mZCwgXCYjMzQ7Y2hpbGRcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRFWFBFQ1RfRVEoY2xvc2UoY2hpbGRfZmQpLCAwKTtcbiYjNDM7XHRFWFBFQ1RfRVEoY2xvc2UocGFyZW50X2ZkKSwgMCk7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCYjMzQ7JXMvcGFyZW50L2NoaWxkXCYjMzQ7LCBzZWxmLVx1MDAzZWRpcnBhdGgpO1xuJiM0MztcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XG4mIzQzO1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcJiMzNDslcy9wYXJlbnRcJiMzNDssIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4mIzQzO1x0RVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7VEVTVF9IQVJORVNTX01BSU5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy93cmFwcGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvd3JhcHBlcnMuaFxuaW5kZXggNDIwYWU0ZjkwOGNmMi4uYWJlNWI4NWNlYmRjZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3dyYXBwZXJzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3dyYXBwZXJzLmhcbkBAIC0xMyw2ICYjNDM7MTMsMTAgQEBcbiAjZGVmaW5lIFNUQVRYX01OVF9JRF9VTklRVUUgMHgwMDAwNDAwMFUgLyogV2FudC9nb3QgZXh0ZW5kZWQgc3R4X21vdW50X2lkICovXG4gI2VuZGlmXG4gXG4mIzQzOyNpZm5kZWYgRkRfSU5WQUxJRFxuJiM0MzsjZGVmaW5lIEZEX0lOVkFMSUQgLTEwMDA5XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGludCBzeXNfZnNvcGVuKGNvbnN0IGNoYXIgKmZzbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuIHtcbiBcdHJldHVybiBzeXNjYWxsKF9fTlJfZnNvcGVuLCBmc25hbWUsIGZsYWdzKTtcbkBAIC0xMDUsNCAmIzQzOzEwOSwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNfb3Blbl90cmVlKGludCBkZmQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ1xuIFx0cmV0dXJuIHN5c2NhbGwoX19OUl9vcGVuX3RyZWUsIGRmZCwgZmlsZW5hbWUsIGZsYWdzKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG9wZW5hdF9vX21rZGlyKGludCBkZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLFxuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN5c2NhbGwoX19OUl9vcGVuYXQsIGRmZCwgcGF0aG5hbWUsXG4mIzQzO1x0XHQgICAgICAgZmxhZ3MgfCBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQsIG1vZGUpO1xuJiM0Mzt9XG4mIzQzO1xuICNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDs5UF9GUyYjMzQ7LAogICAgJiMzNDtDRVBIX0ZTJiMzNDssCiAgICAmIzM0O0ZVU0VfRlMmIzM0OywKICAgICYjMzQ7R0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtORlNfRlMmIzM0OywKICAgICYjMzQ7Q0lGUyYjMzQ7LAogICAgJiMzNDtWQk9YU0ZfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfbWtkaXImIzM0OywKICAgICYjMzQ7dmZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2ZnNfbG9va3VwX29wZW4mIzM0OywKICAgICYjMzQ7ZGVudHJ5X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtmaWxlbmFtZV9ta2RpcmF0JiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX3VubGlua2F0JiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX3JlbmFtZWF0MiYjMzQ7LAogICAgJiMzNDt2OWZzX3Zmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsJiMzNDssCiAgICAmIzM0O2NlcGhfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7ZnVzZV9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtnZnMyX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtuZnNfYXRvbWljX29wZW5fdjIzJiMzNDssCiAgICAmIzM0O2NpZnNfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7dmJveHNmX2Rpcl9hdG9taWNfb3BlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAgZm9yIGBvcGVuYXQoKWAgdG8gYXRvbWljYWxseSBjcmVhdGUgYSBkaXJlY3RvcnkgYW5kIHJldHVybiBhIGZpbGUgZGVzY3JpcHRvci4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aCByZXNvbHV0aW9uIGFuZCBjcmVhdGlvbiBsb2dpYyBpbiBgZnMvbmFtZWkuY2AgYW5kIGBmcy9vcGVuLmNgLCBhbmQgdXBkYXRlcyBzZXZlcmFsIGZpbGVzeXN0ZW1zJiMzOTsgYGF0b21pY19vcGVuYCBpbXBsZW1lbnRhdGlvbnMgdG8gaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbi4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ2OTc0ZjJkYWUwM2EzMTRlZWRjZDIyNTE0OWUxMjZiNjYwOTRiNGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyMyAxNjoxNDowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmMKaW5kZXggMzgyOTU1NGNhMzY5Mi4uYjFlMDgyM2M4N2I1NyAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvOXAvdmZzX2lub2RlLmMKQEAgLTc3Niw2ICYjNDM7Nzc2LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCWludCBwOV9vbW9kZTsKIAomIzQzOwlpZiAoT19JU19NS0RJUihmbGFncykpCiYjNDM7CQlmbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJaWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHsKIAkJc3RydWN0IGRlbnRyeSAqcmVzID0gdjlmc192ZnNfbG9va3VwKGRpciwgZGVudHJ5LCAwKTsKIAkJaWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKQpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuYyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMKaW5kZXggMTE2YjI5ZTk1ZjIxZS4uNjRlMGFiYTA4ZGExNiAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jCkBAIC0yMzgsNiAmIzQzOzIzOCw5IEBAIHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAlzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzOwogCXN0cnVjdCBwb3NpeF9hY2wgKnBhY2wgPSBOVUxMLCAqZGFjbCA9IE5VTEw7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIoZmxhZ3MpKQomIzQzOwkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7CiAJCXN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7CiAJCWlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSkKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZmlsZS5jIGIvZnMvY2VwaC9maWxlLmMKaW5kZXggYTRhMmE0YjZhMDI3ZC4uNjIxNjNiN2VjYTVmOSAxMDA2NDQKLS0tIGEvZnMvY2VwaC9maWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvY2VwaC9maWxlLmMKQEAgLTgxMiw2ICYjNDM7ODEyLDkgQEAgaW50IGNlcGhfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkgICAgICBkaXIsIGNlcGhfdmlub3AoZGlyKSwgZGVudHJ5LCBkZW50cnksCiAJICAgICAgZF91bmhhc2hlZChkZW50cnkpID8gJiMzNDt1bmhhc2hlZCYjMzQ7IDogJiMzNDtoYXNoZWQmIzM0OywgZmxhZ3MsIG1vZGUpOwogCiYjNDM7CWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZGVudHJ5LSZndDtkX25hbWUubGVuICZndDsgTkFNRV9NQVgpCiAJCXJldHVybiAtRU5BTUVUT09MT05HOwogCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCBkNGUwMDI5ODEwYzBmLi41NWQ1ODQ0ZTI2NTU5IDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTkzNSw2ICYjNDM7OTM1LDkgQEAgc3RhdGljIGludCBmdXNlX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICplbnRyeSwKIAlzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihkaXIpOwogCiYjNDM7CWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZnVzZV9pc19iYWQoZGlyKSkKIAkJcmV0dXJuIC1FSU87CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuYwppbmRleCBmMzYxODc2YzU1ODMzLi4zZWUxMzYwZjFiYzI3IDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZ2ZzMi9pbm9kZS5jCkBAIC0xMzg2LDYgJiM0MzsxMzg2LDkgQEAgc3RhdGljIGludCBnZnMyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiB7CiAJYm9vbCBleGNsID0gISEoZmxhZ3MgJmFtcDsgT19FWENMKTsKIAomIzQzOwlpZiAoT19JU19NS0RJUihmbGFncykpCiYjNDM7CQlmbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJaWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHsKIAkJc3RydWN0IGRlbnRyeSAqZCA9IF9fZ2ZzMl9sb29rdXAoZGlyLCBkZW50cnksIGZpbGUpOwogCQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX09QRU5FRCkgewpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggMjBhNjUzNGVhM2VmZi4uZTFhOGYxODM4NWE1MiAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1laS5jCkBAIC0xMzgyLDEzICYjNDM7MTM4MiwxMyBAQCBpbnQgbWF5X2xpbmthdChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKmxpbmspCiAKIC8qKgogICogbWF5X2NyZWF0ZV9pbl9zdGlja3kgLSBDaGVjayB3aGV0aGVyIGFuIE9fQ1JFQVQgb3BlbiBpbiBhIHN0aWNreSBkaXJlY3RvcnkKLSAqCQkJICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcyB0aGF0IGFscmVhZHkKLSAqCQkJICBleGlzdC4KJiM0MzsgKgkJCSAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdCwgb24gZmlsZXMvZGlyZWN0b3JpZXMgdGhhdAomIzQzOyAqCQkJICBhbHJlYWR5IGV4aXN0LgogICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tCiAgKiBAbmQ6IG5hbWVpZGF0YSBwYXRod2FsayBkYXRhCiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuCiAgKgotICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUpIHdoZW46CiYjNDM7ICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUvZGlyZWN0b3J5KSB3aGVuOgogICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZAogICogICAtIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzCiAgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeQpAQCAtMTQxNiw2ICYjNDM7MTQxNiwxNCBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCwKIAlpZiAobGlrZWx5KCEoZGlyX21vZGUgJmFtcDsgU19JU1ZUWCkpKQogCQlyZXR1cm4gMDsKIAomIzQzOwkvKgomIzQzOwkgKiBUaGVyZSBpcyBubyBzZXBhcmF0ZSBzeXNjdGwgZm9yIGRpcmVjdG9yeSBjcmVhdGlvbiBpbiBzdGlja3kKJiM0MzsJICogZm9sZGVycy4gVGhlcmVmb3JlLCBmb3IgdGhlIFNfSVNESVIgY2FzZSwgZGlzYWJsaW5nCiYjNDM7CSAqIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhciBpcyBub3QgZW5vdWdoIHRvIGFsbG93IGNyZWF0aW5nIGEKJiM0MzsJICogZGlyZWN0b3J5IGluIGEgc3RpY2t5IGZvbGRlciwgYmVjYXVzZSB0aGF0IG1heSBzdXJwcmlzZSB1c2VycwomIzQzOwkgKiBub3QgZXhwZWN0aW5nIHRoYXQgT19DUkVBVHxPX0RJUkVDVE9SWSBpcyBwb3NzaWJsZSBvbiBuZXdlcgomIzQzOwkgKiBrZXJuZWxzLgomIzQzOwkgKi8KIAlpZiAoU19JU1JFRyhpbm9kZS0mZ3Q7aV9tb2RlKSAmYW1wOyZhbXA7ICFzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpCiAJCXJldHVybiAwOwogCkBAIC0xNDQ3LDYgJiM0MzsxNDU1LDEyIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLAogCQkJCQkgICAgICAmIzM0O3N0aWNreV9jcmVhdGVfcmVndWxhciYjMzQ7KTsKIAkJCXJldHVybiAtRUFDQ0VTOwogCQl9CiYjNDM7CiYjNDM7CQlpZiAoU19JU0RJUihpbm9kZS0mZ3Q7aV9tb2RlKSkgewomIzQzOwkJCWF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULAomIzQzOwkJCQkJICAgICAgJiMzNDtzdGlja3lfY3JlYXRlX2RpciYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVBQ0NFUzsKJiM0MzsJCX0KIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI3ODEsOSAmIzQzOzI3OTUsMTYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnBhdGhfaW5pdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgZmxhZ3MpCiAJcmV0dXJuIHM7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhjb25zdCBzdHJ1Y3QgcXN0ciAqbGFzdCkKJiM0Mzt7CiYjNDM7CS8qIGxhc3QtJmd0O2xlbiBpcyBzZXQgYnkgaGFzaF9uYW1lKCkgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudAomIzQzOwkgKiBjb21wb25lbnQgLSZndDtuYW1lLCB0ZXJtaW5hdGluZyB3aXRoICYjMzk7LyYjMzk7IG9yIGEgTlVMIGNoYXJhY3Rlci4gKi8KJiM0MzsJcmV0dXJuIChib29sKWxhc3QtJmd0O25hbWVbbGFzdC0mZ3Q7bGVuXTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmxvb2t1cF9sYXN0KHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCWlmIChuZC0mZ3Q7bGFzdF90eXBlID09IExBU1RfTk9STSAmYW1wOyZhbXA7IG5kLSZndDtsYXN0Lm5hbWVbbmQtJmd0O2xhc3QubGVuXSkKJiM0MzsJaWYgKG5kLSZndDtsYXN0X3R5cGUgPT0gTEFTVF9OT1JNICZhbXA7JmFtcDsgdHJhaWxpbmdfc2xhc2hlcygmYW1wO25kLSZndDtsYXN0KSkKIAkJbmQtJmd0O2ZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZOwogCiAJcmV0dXJuIHdhbGtfY29tcG9uZW50KG5kLCBXQUxLX1RSQUlMSU5HKTsKQEAgLTQxNTksNiAmIzQzOzQxODAsMjQgQEAgc3RhdGljIGlubGluZSB1bW9kZV90IHZmc19wcmVwYXJlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJcmV0dXJuIG1vZGU7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7aW50IHZmc19jcmVhdGVfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJICAgICAgIHVtb2RlX3QgbW9kZSwgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW5vZGUgKmRpciA9IGRfaW5vZGUoZGVudHJ5LSZndDtkX3BhcmVudCk7CiYjNDM7CWludCBlcnJvcjsKJiM0MzsKJiM0MzsJZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJZXJyb3IgPSBkaXItJmd0O2lfb3AtJmd0O2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwlpZiAoIWVycm9yKQomIzQzOwkJZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKIC8qKgogICogdmZzX2NyZWF0ZSAtIGNyZWF0ZSBuZXcgZmlsZQogICogQGlkbWFwOglpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tCkBAIC00MTkxLDEzICYjNDM7NDIzMCw4IEBAIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwKIAllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7Ci0JZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0JZXJyb3IgPSBkaXItJmd0O2lfb3AtJmd0O2NyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwotCWlmICghZXJyb3IpCi0JCWZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7Ci0JcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwlyZXR1cm4gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsIGRpKTsKIH0KIEVYUE9SVF9TWU1CT0wodmZzX2NyZWF0ZSk7CiAKQEAgLTQzMTQsMjEgJiM0Mzs0MzQ4LDQxIEBAIHN0YXRpYyBpbmxpbmUgaW50IG9wZW5fdG9fbmFtZWlfZmxhZ3MoaW50IGZsYWcpCiAKIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJY29uc3Qgc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJdW1vZGVfdCBtb2RlKQomIzQzOwkJCWludCBvcGVuX2ZsYWcsIHVtb2RlX3QgbW9kZSkKIHsKLQlpbnQgZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKJiM0MzsJc3RydWN0IGlub2RlICpkaXJfaW5vZGUgPSBkaXItJmd0O2RlbnRyeS0mZ3Q7ZF9pbm9kZTsKJiM0MzsJYm9vbCBjcmVhdGVfZGlyID0gT19JU19NS0RJUihvcGVuX2ZsYWcpOwomIzQzOwlpbnQgZXJyb3I7CiYjNDM7CiYjNDM7CWlmIChjcmVhdGVfZGlyKQomIzQzOwkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rZGlyKGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJZWxzZQomIzQzOwkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAogCWlmICghZnN1aWRnaWRfaGFzX21hcHBpbmcoZGlyLSZndDtkZW50cnktJmd0O2Rfc2IsIGlkbWFwKSkKIAkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAKLQllcnJvciA9IGlub2RlX3Blcm1pc3Npb24oaWRtYXAsIGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLAotCQkJCSBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7CiYjNDM7CWVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlLCBkZW50cnksIG1vZGUpOwomIzQzOwlpZiAoY3JlYXRlX2RpcikKJiM0MzsJCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpOwomIzQzOwllbHNlCiYjNDM7CQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnJvcjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1bW9kZV90IG9fY3JlYXRlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiYjNDM7CQljb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgaW50IG9wZW5fZmxhZywgdW1vZGVfdCBtb2RlKQomIzQzO3sKJiM0MzsJaWYgKE9fSVNfTUtESVIob3Blbl9mbGFnKSkKJiM0MzsJCXJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIFNfSUZESVIpOwomIzQzOwllbHNlCiYjNDM7CQlyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpOwogfQogCiAvKioKQEAgLTQzNjQsOCAmIzQzOzQ0MTgsOSBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeQogCiAJZmlsZS0mZ3Q7X19mX3BhdGguZGVudHJ5ID0gREVOVFJZX05PVF9TRVQ7CiAJZmlsZS0mZ3Q7X19mX3BhdGgubW50ID0gcGF0aC0mZ3Q7bW50OwomIzQzOwogCWVycm9yID0gZGlyX2lub2RlLSZndDtpX29wLSZndDthdG9taWNfb3BlbihkaXJfaW5vZGUsIGRlbnRyeSwgZmlsZSwKLQkJCQkgICAgICAgb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpLCBtb2RlKTsKJiM0MzsJCQkJCSAgICAgb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpLCBtb2RlKTsKIAlkX2xvb2t1cF9kb25lKGRlbnRyeSk7CiAKIAlpZiAoIWVycm9yKSB7CkBAIC00NDEwLDEwICYjNDM7NDQ2NSwyMSBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeQogCQl9CiAJCWRwdXQoZGVudHJ5KTsKIAkJZGVudHJ5ID0gRVJSX1BUUihlcnJvcik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX0NSRUFURUQpCiYjNDM7CQkJZnNub3RpZnlfY3JlYXRlKGRpcl9pbm9kZSwgZGVudHJ5KTsKJiM0MzsJCWlmIChmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfT1BFTkVEKQomIzQzOwkJCWZzbm90aWZ5X29wZW4oZmlsZSk7CiAJfQomIzQzOwomIzQzOwogCXJldHVybiBkZW50cnk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKiwKJiM0MzsJCQkJIHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCwKJiM0MzsJCQkJIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKik7CiAvKgogICogTG9vayB1cCBhbmQgbWF5YmUgY3JlYXRlIGFuZCBvcGVuIHRoZSBsYXN0IGNvbXBvbmVudC4KICAqCkBAIC00NDM1LDYgJiM0Mzs0NTAxLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlzdHJ1Y3QgbW50X2lkbWFwICppZG1hcDsKIAlzdHJ1Y3QgZGVudHJ5ICpkaXIgPSBuZC0mZ3Q7cGF0aC5kZW50cnk7CiAJc3RydWN0IGlub2RlICpkaXJfaW5vZGUgPSBkaXItJmd0O2RfaW5vZGU7CiYjNDM7CWJvb2wgY3JlYXRlX2RpciA9IE9fSVNfTUtESVIob3AtJmd0O21vZGUpOwogCWludCBvcGVuX2ZsYWc7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCWludCBlcnJvciwgY3JlYXRlX2Vycm9yOwpAQCAtNDQ1NSw3ICYjNDM7NDUyMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAqLwogCX0KIAlpZiAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpCi0JCWlub2RlX2xvY2soZGlyX2lub2RlKTsKJiM0MzsJCWlub2RlX2xvY2tfbmVzdGVkKGRpcl9pbm9kZSwgSV9NVVRFWF9QQVJFTlQpOwogCWVsc2UKIAkJaW5vZGVfbG9ja19zaGFyZWQoZGlyX2lub2RlKTsKIApAQCAtNDUwNywxMiAmIzQzOzQ1NzQsMTcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAlpZiAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpIHsKIAkJaWYgKG9wZW5fZmxhZyAmYW1wOyBPX0VYQ0wpCiAJCQlvcGVuX2ZsYWcgJmFtcDs9IH5PX1RSVU5DOwotCQltb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBtb2RlLCBtb2RlLCBtb2RlKTsKJiM0MzsJCW1vZGUgPSBvX2NyZWF0ZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG9wZW5fZmxhZywgbW9kZSk7CiAJCWlmIChsaWtlbHkoZ290X3dyaXRlKSkKIAkJCWNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgJmFtcDtuZC0mZ3Q7cGF0aCwKLQkJCQkJCSAgICBkZW50cnksIG1vZGUpOwomIzQzOwkJCQkJCSAgICBkZW50cnksIG9wZW5fZmxhZywgbW9kZSk7CiAJCWVsc2UKIAkJCWNyZWF0ZV9lcnJvciA9IC1FUk9GUzsKJiM0MzsJCS8qIFJlZnVzZSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgdGhyb3VnaCBhIGRhbmdsaW5nICh0cmFpbGluZykKJiM0MzsJCSAqIHN5bWxpbmsuIEZvciByZWd1bGFyIGZpbGVzIHRoaXMgaGFzIGJlZW4gYWxsb3dlZCBoaXN0b3JpY2FsbHkKJiM0MzsJCSAqIG9uIE9fQ1JFQVQgd2l0aG91dCBPX0VYQ0wuICovCiYjNDM7CQlpZiAodW5saWtlbHkobmQtJmd0O2RlcHRoKSAmYW1wOyZhbXA7IGNyZWF0ZV9kaXIgJmFtcDsmYW1wOyAhY3JlYXRlX2Vycm9yKQomIzQzOwkJCWNyZWF0ZV9lcnJvciA9IC1FRVhJU1Q7CiAJfQogCWlmIChjcmVhdGVfZXJyb3IpCiAJCW9wZW5fZmxhZyAmYW1wOz0gfk9fQ1JFQVQ7CkBAIC00NTM3LDYgJiM0Mzs0NjA5LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCWRlbnRyeSA9IHJlczsKIAkJfQogCX0KJiM0MzsKIAlpZiAoZGVudHJ5LSZndDtkX2lub2RlIHx8ICEob3AtJmd0O29wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSkgewogCQkvKgogCQkgKiBObyBuZWVkIHRvIGNyZWF0ZSBhIGZpbGUuICBJZiBsb29rdXAgcmV0dXJuZWQgYSBwb3NpdGl2ZQpAQCAtNDU1NCwyNiAmIzQzOzQ2MjcsMjYgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJZ290byBvdXRfZHB1dDsKIAl9CiAKLQllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXJfaW5vZGUsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsICZhbXA7ZGVsZWdhdGVkX2lub2RlKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2RwdXQ7Ci0KLQlmaWxlLSZndDtmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDsKLQlpZiAoIWRpcl9pbm9kZS0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKSB7CiYjNDM7CWlmICgoY3JlYXRlX2RpciAmYW1wOyZhbXA7ICFkaXJfaW5vZGUtJmd0O2lfb3AtJmd0O21rZGlyKQomIzQzOwkJfHwgKCFjcmVhdGVfZGlyICZhbXA7JmFtcDsgIWRpcl9pbm9kZS0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKSkgewogCQllcnJvciA9IC1FQUNDRVM7CiAJCWdvdG8gb3V0X2RwdXQ7CiAJfQogCi0JZXJyb3IgPSBkaXJfaW5vZGUtJmd0O2lfb3AtJmd0O2NyZWF0ZShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksIG1vZGUpOwomIzQzOwlpZiAoY3JlYXRlX2RpcikgewomIzQzOwkJc3RydWN0IGRlbnRyeSAqcmVzID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LAomIzQzOwkJCQkJCSAgICAgICBtb2RlLCAmYW1wO2RlbGVnYXRlZF9pbm9kZSk7CiYjNDM7CQkJZXJyb3IgPSBQVFJfRVJSX09SX1pFUk8ocmVzKTsKJiM0MzsJCQlpZiAoIWVycm9yKQomIzQzOwkJCQlkZW50cnkgPSByZXM7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQllcnJvciA9IHZmc19jcmVhdGVfbm9fcGVybShpZG1hcCwgZGVudHJ5LCBtb2RlLCAmYW1wO2RlbGVnYXRlZF9pbm9kZSk7CiYjNDM7CX0KIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2RwdXQ7CiYjNDM7CiYjNDM7CWZpbGUtJmd0O2ZfbW9kZSB8PSBGTU9ERV9DUkVBVEVEOwogb3V0OgotCWlmICghSVNfRVJSKGRlbnRyeSkpIHsKLQkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9DUkVBVEVEKQotCQkJZnNub3RpZnlfY3JlYXRlKGRpcl9pbm9kZSwgZGVudHJ5KTsKLQkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9PUEVORUQpCi0JCQlmc25vdGlmeV9vcGVuKGZpbGUpOwotCX0KIAlpZiAoKG9wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSB8fCBjcmVhdGVfZXJyb3IpCiAJCWlub2RlX3VubG9jayhkaXJfaW5vZGUpOwogCWVsc2UKQEAgLTQ2OTUsMTcgJiM0Mzs0NzY4LDEyIEBAIHN0cnVjdCBmaWxlICp2ZnNfbG9va3VwX29wZW4oc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IHFzdHIgKmxhc3QsCiB9CiBFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHZmc19sb29rdXBfb3BlbiwgJiMzNDtuZnNkJiMzNDspOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKLXsKLQlyZXR1cm4gKGJvb2wpbmQtJmd0O2xhc3QubmFtZVtuZC0mZ3Q7bGFzdC5sZW5dOwotfQotCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpCiB7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCiAJaWYgKG9wZW5fZmxhZyAmYW1wOyBPX0NSRUFUKSB7Ci0JCWlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSkKJiM0MzsJCWlmICh0cmFpbGluZ19zbGFzaGVzKCZhbXA7bmQtJmd0O2xhc3QpICZhbXA7JmFtcDsgIShvcGVuX2ZsYWcgJmFtcDsgT19ESVJFQ1RPUlkpKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVJU0RJUik7CiAKIAkJLyogRG9uJiMzOTt0IGJvdGhlciBvbiBhbiBPX0VYQ0wgY3JlYXRlICovCkBAIC00NzEzLDcgJiM0Mzs0NzgxLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9mYXN0X2Zvcl9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgb3Blbl9mbGFnKQogCQkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKQomIzQzOwlpZiAodHJhaWxpbmdfc2xhc2hlcygmYW1wO25kLSZndDtsYXN0KSkKIAkJbmQtJmd0O2ZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZOwogCiAJZGVudHJ5ID0gbG9va3VwX2Zhc3QobmQpOwpAQCAtNDgwNiw4ICYjNDM7NDg3NCw5IEBAIHN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwKIAlpZiAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpIHsKIAkJaWYgKChvcGVuX2ZsYWcgJmFtcDsgT19FWENMKSAmYW1wOyZhbXA7ICEoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX0NSRUFURUQpKQogCQkJcmV0dXJuIC1FRVhJU1Q7Ci0JCWlmIChkX2lzX2RpcihuZC0mZ3Q7cGF0aC5kZW50cnkpKQomIzQzOwkJaWYgKCEob3Blbl9mbGFnICZhbXA7IE9fRElSRUNUT1JZKSAmYW1wOyZhbXA7IGRfaXNfZGlyKG5kLSZndDtwYXRoLmRlbnRyeSkpCiAJCQlyZXR1cm4gLUVJU0RJUjsKJiM0MzsKIAkJZXJyb3IgPSBtYXlfY3JlYXRlX2luX3N0aWNreShpZG1hcCwgbmQsCiAJCQkJCSAgICAgZF9iYWNraW5nX2lub2RlKG5kLSZndDtwYXRoLmRlbnRyeSkpOwogCQlpZiAodW5saWtlbHkoZXJyb3IpKQpAQCAtNTA4Nyw3ICYjNDM7NTE1Niw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpmaWxlbmFtZV9jcmVhdGUoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLAogCSAqIERvIHRoZSBmaW5hbCBsb29rdXAuICBTdXBwcmVzcyAmIzM5O2NyZWF0ZSYjMzk7IGlmIHRoZXJlIGlzIGEgdHJhaWxpbmcKIAkgKiAmIzM5Oy8mIzM5OywgYW5kIGEgZGlyZWN0b3J5IHdhc24mIzM5O3QgcmVxdWVzdGVkLgogCSAqLwotCWlmIChsYXN0Lm5hbWVbbGFzdC5sZW5dICZhbXA7JmFtcDsgIXdhbnRfZGlyKQomIzQzOwlpZiAodHJhaWxpbmdfc2xhc2hlcygmYW1wO2xhc3QpICZhbXA7JmFtcDsgIXdhbnRfZGlyKQogCQljcmVhdGVfZmxhZ3MgJmFtcDs9IH5MT09LVVBfQ1JFQVRFOwogCWRlbnRyeSA9IHN0YXJ0X2Rpcm9wKHBhdGgtJmd0O2RlbnRyeSwgJmFtcDtsYXN0LCByZXZhbF9mbGFnIHwgY3JlYXRlX2ZsYWdzKTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpCkBAIC01MTgyLDcgJiM0Mzs1MjUxLDcgQEAgc3RydWN0IGZpbGUgKmRlbnRyeV9jcmVhdGUoc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncywgdW1vZGVfdCBtb2RlLAogCQlwYXRoLSZndDtkZW50cnkgPSBkaXI7CiAJCW1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7CiAKLQkJY3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIG1vZGUpOwomIzQzOwkJY3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIGZsYWdzLCBtb2RlKTsKIAkJaWYgKGNyZWF0ZV9lcnJvcikKIAkJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKIApAQCAtNTM1Niw2ICYjNDM7NTQyNSwzNCBAQCBTWVNDQUxMX0RFRklORTMobWtub2QsIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lLCB1bW9kZV90LCBtb2RlLCB1bnNpZ25lZCwgZAogCXJldHVybiBmaWxlbmFtZV9ta25vZGF0KEFUX0ZEQ1dELCBuYW1lLCBtb2RlLCBkZXYpOwogfQogCiYjNDM7LyogUmV0dXJucyB0aGUgZGVudHJ5IHRvIHVzZSAobm90IE5VTEwpIG9yIC1FIG9uIGVycm9yICovCiYjNDM7c3RhdGljIGlubGluZQomIzQzO3N0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLAomIzQzOwkJCQkgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpCiYjNDM7ewomIzQzOwlpbnQgZXJyb3I7CiYjNDM7CXN0cnVjdCBkZW50cnkgKmRlOwomIzQzOwl1bnNpZ25lZCBtYXhfbGlua3MgPSBkaXItJmd0O2lfc2ItJmd0O3NfbWF4X2xpbmtzOwomIzQzOwomIzQzOwlpZiAobWF4X2xpbmtzICZhbXA7JmFtcDsgZGlyLSZndDtpX25saW5rICZndDs9IG1heF9saW5rcykKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTUxJTkspOwomIzQzOwomIzQzOwllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwomIzQzOwomIzQzOwlkZSA9IGRpci0mZ3Q7aV9vcC0mZ3Q7bWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTsKJiM0MzsJaWYgKElTX0VSUihkZSkpCiYjNDM7CQlyZXR1cm4gZGU7CiYjNDM7CWlmIChkZSkgewomIzQzOwkJZHB1dChkZW50cnkpOwomIzQzOwkJZGVudHJ5ID0gZGU7CiYjNDM7CX0KJiM0MzsJZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpOwomIzQzOwlyZXR1cm4gZGVudHJ5OwomIzQzO30KJiM0MzsKIC8qKgogICogdmZzX21rZGlyIC0gY3JlYXRlIGRpcmVjdG9yeSByZXR1cm5pbmcgY29ycmVjdCBkZW50cnkgaWYgcG9zc2libGUKICAqIEBpZG1hcDoJCWlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb20KQEAgLTUzODMsNyAmIzQzOzU0ODAsNiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRlbGVnYXRlZF9pbm9kZSkKIHsKIAlpbnQgZXJyb3I7Ci0JdW5zaWduZWQgbWF4X2xpbmtzID0gZGlyLSZndDtpX3NiLSZndDtzX21heF9saW5rczsKIAlzdHJ1Y3QgZGVudHJ5ICpkZTsKIAogCWVycm9yID0gbWF5X2NyZWF0ZV9kZW50cnkoaWRtYXAsIGRpciwgZGVudHJ5KTsKQEAgLTUzOTksMjQgJiM0Mzs1NDk1LDEyIEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJaWYgKGVycm9yKQogCQlnb3RvIGVycjsKIAotCWVycm9yID0gLUVNTElOSzsKLQlpZiAobWF4X2xpbmtzICZhbXA7JmFtcDsgZGlyLSZndDtpX25saW5rICZndDs9IG1heF9saW5rcykKLQkJZ290byBlcnI7Ci0KLQllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGVycjsKLQotCWRlID0gZGlyLSZndDtpX29wLSZndDtta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwotCWVycm9yID0gUFRSX0VSUihkZSk7Ci0JaWYgKElTX0VSUihkZSkpCiYjNDM7CWRlID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlLCBkZWxlZ2F0ZWRfaW5vZGUpOwomIzQzOwlpZiAoSVNfRVJSKGRlKSkgewomIzQzOwkJZXJyb3IgPSBQVFJfRVJSKGRlKTsKIAkJZ290byBlcnI7Ci0JaWYgKGRlKSB7Ci0JCWRwdXQoZGVudHJ5KTsKLQkJZGVudHJ5ID0gZGU7CiAJfQotCWZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTsKLQlyZXR1cm4gZGVudHJ5OwomIzQzOwlyZXR1cm4gZGU7CiAKIGVycjoKIAllbmRfY3JlYXRpbmcoZGVudHJ5KTsKQEAgLTU3MDMsNyAmIzQzOzU3ODcsNyBAQCBpbnQgZmlsZW5hbWVfdW5saW5rYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKQogCQlnb3RvIGV4aXRfZHJvcF93cml0ZTsKIAogCS8qIFdoeSBub3QgYmVmb3JlPyBCZWNhdXNlIHdlIHdhbnQgY29ycmVjdCBlcnJvciB2YWx1ZSAqLwotCWlmICh1bmxpa2VseShsYXN0Lm5hbWVbbGFzdC5sZW5dKSkgewomIzQzOwlpZiAodW5saWtlbHkodHJhaWxpbmdfc2xhc2hlcygmYW1wO2xhc3QpKSkgewogCQlpZiAoZF9pc19kaXIoZGVudHJ5KSkKIAkJCWVycm9yID0gLUVJU0RJUjsKIAkJZWxzZQpAQCAtNjMwNSwxNiAmIzQzOzYzODksMTYgQEAgaW50IGZpbGVuYW1lX3JlbmFtZWF0MihpbnQgb2xkZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZyb20sCiAJaWYgKGZsYWdzICZhbXA7IFJFTkFNRV9FWENIQU5HRSkgewogCQlpZiAoIWRfaXNfZGlyKHJkLm5ld19kZW50cnkpKSB7CiAJCQllcnJvciA9IC1FTk9URElSOwotCQkJaWYgKG5ld19sYXN0Lm5hbWVbbmV3X2xhc3QubGVuXSkKJiM0MzsJCQlpZiAodHJhaWxpbmdfc2xhc2hlcygmYW1wO25ld19sYXN0KSkKIAkJCQlnb3RvIGV4aXRfdW5sb2NrOwogCQl9CiAJfQogCS8qIHVubGVzcyB0aGUgc291cmNlIGlzIGEgZGlyZWN0b3J5IHRyYWlsaW5nIHNsYXNoZXMgZ2l2ZSAtRU5PVERJUiAqLwogCWlmICghZF9pc19kaXIocmQub2xkX2RlbnRyeSkpIHsKIAkJZXJyb3IgPSAtRU5PVERJUjsKLQkJaWYgKG9sZF9sYXN0Lm5hbWVbb2xkX2xhc3QubGVuXSkKJiM0MzsJCWlmICh0cmFpbGluZ19zbGFzaGVzKCZhbXA7b2xkX2xhc3QpKQogCQkJZ290byBleGl0X3VubG9jazsKLQkJaWYgKCEoZmxhZ3MgJmFtcDsgUkVOQU1FX0VYQ0hBTkdFKSAmYW1wOyZhbXA7IG5ld19sYXN0Lm5hbWVbbmV3X2xhc3QubGVuXSkKJiM0MzsJCWlmICghKGZsYWdzICZhbXA7IFJFTkFNRV9FWENIQU5HRSkgJmFtcDsmYW1wOyB0cmFpbGluZ19zbGFzaGVzKCZhbXA7bmV3X2xhc3QpKQogCQkJZ290byBleGl0X3VubG9jazsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuYwppbmRleCAzNmYyZTg1ODg5MjIwLi5iNGRiNzAzYzllOGM3IDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmZzL2Rpci5jCkBAIC0yMTIxLDYgJiM0MzsyMTIxLDkgQEAgaW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCWRmcHJpbnRrKFZGUywgJiMzNDtORlM6IGF0b21pY19vcGVuKCVzLyVsbHUpLCAlcGRcbiYjMzQ7LAogCQkJZGlyLSZndDtpX3NiLSZndDtzX2lkLCBkaXItJmd0O2lfaW5vLCBkZW50cnkpOwogCiYjNDM7CWlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKQomIzQzOwkJb3Blbl9mbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJZXJyID0gbmZzX2NoZWNrX2ZsYWdzKG9wZW5fZmxhZ3MpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0yMzEzLDYgJiM0MzsyMzE2LDkgQEAgaW50IG5mc19hdG9taWNfb3Blbl92MjMoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkgKi8KIAlpbnQgZXJyb3IgPSAwOwogCiYjNDM7CWlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKQomIzQzOwkJb3Blbl9mbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJaWYgKGRlbnRyeS0mZ3Q7ZF9uYW1lLmxlbiAmZ3Q7IE5GU19TRVJWRVIoZGlyKS0mZ3Q7bmFtZWxlbikKIAkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCA2YjFjMTRlNjg0YTkzLi42Y2I1ZTJhZDc4MWYzIDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb3Blbi5jCkBAIC0xMjM5LDI5ICYjNDM7MTIzOSwzMCBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcCkKIAlpZiAoV0lMTF9DUkVBVEUoZmxhZ3MpKSB7CiAJCWlmIChob3ctJmd0O21vZGUgJmFtcDsgflNfSUFMTFVHTykKIAkJCXJldHVybiAtRUlOVkFMOwotCQlvcC0mZ3Q7bW9kZSA9IGhvdy0mZ3Q7bW9kZSB8IFNfSUZSRUc7CiYjNDM7CQlpZiAoT19JU19NS0RJUihmbGFncykpCiYjNDM7CQkJb3AtJmd0O21vZGUgPSBob3ctJmd0O21vZGUgfCBTX0lGRElSOwomIzQzOwkJZWxzZQomIzQzOwkJCW9wLSZndDttb2RlID0gaG93LSZndDttb2RlIHwgU19JRlJFRzsKIAl9IGVsc2UgewogCQlpZiAoaG93LSZndDttb2RlICE9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJb3AtJmd0O21vZGUgPSAwOwogCX0KIAotCS8qCi0JICogQmxvY2sgYnVncyB3aGVyZSBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQgY3JlYXRlZCByZWd1bGFyIGZpbGVzLgotCSAqIE5vdGUsIHRoYXQgYmxvY2tpbmcgT19ESVJFQ1RPUlkgfCBPX0NSRUFUIGhlcmUgYWxzbyBwcm90ZWN0cwotCSAqIE9fVE1QRklMRSBiZWxvdyB3aGljaCByZXF1aXJlcyBPX0RJUkVDVE9SWSBiZWluZyByYWlzZWQuCi0JICovCi0JaWYgKChmbGFncyAmYW1wOyAoT19ESVJFQ1RPUlkgfCBPX0NSRUFUKSkgPT0gKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJLyogTm93IGhhbmRsZSB0aGUgY3JlYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgT19UTVBGSUxFLiAqLwogCWlmIChmbGFncyAmYW1wOyBfX09fVE1QRklMRSkgewogCQkvKgogCQkgKiBJbiBvcmRlciB0byBlbnN1cmUgcHJvZ3JhbXMgZ2V0IGV4cGxpY2l0IGVycm9ycyB3aGVuIHRyeWluZwogCQkgKiB0byB1c2UgT19UTVBGSUxFIG9uIG9sZCBrZXJuZWxzIHdlIGVuZm9yY2UgdGhhdCBPX0RJUkVDVE9SWQotCQkgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLgomIzQzOwkJICogaXMgcmFpc2VkIGFsb25nc2lkZSBfX09fVE1QRklMRSwgYnV0IHdpdGhvdXQgT19DUkVBVC4gVGhlCiYjNDM7CQkgKiByZWFzb24gZm9yIGRpc2FsbG93aW5nIE9fQ1JFQVR8T19UTVBGSUxFIGlzIHRoYXQKJiM0MzsJCSAqIE9fRElSRUNUT1JZfE9fQ1JFQVQgdXNlZCB0byB3b3JrIGFuZCBjcmVhdGVkIGEgcmVndWxhciBmaWxlCiYjNDM7CQkgKiBpZiBub3RoaW5nIGV4aXN0ZWQgYXQgdGhlIG9wZW4gcGF0aC4gSGVuY2UsIGFsbG93aW5nIHRoZQomIzQzOwkJICogY29tYmluYXRpb24gd291bGQgaGF2ZSBjYXVzZWQgT19DUkVBVHxPX1RNUEZJTEUgdG8gY3JlYXRlIGEKJiM0MzsJCSAqIHJlZ3VsYXIgKG5vbi10ZW1wb3JhcnkpIGZpbGUgb24gb2xkIGtlcm5lbHMsIHdoaWxlIHRoZSBjYWxsZXIKJiM0MzsJCSAqIHdvdWxkIGJlbGlldmUgdGhleSBjcmVhdGVkIGFuIGFjdHVhbCBPX1RNUEZJTEUuCiAJCSAqLwotCQlpZiAoIShmbGFncyAmYW1wOyBPX0RJUkVDVE9SWSkpCiYjNDM7CQlpZiAoIShmbGFncyAmYW1wOyBPX0RJUkVDVE9SWSkgfHwgKGZsYWdzICZhbXA7IE9fQ1JFQVQpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICghKGFjY19tb2RlICZhbXA7IE1BWV9XUklURSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzMTgsNiAmIzQzOzEzMTksMTUgQEAgaW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApCiAKIAlvcC0mZ3Q7aW50ZW50ID0gZmxhZ3MgJmFtcDsgT19QQVRIID8gMCA6IExPT0tVUF9PUEVOOwogCiYjNDM7CS8qCiYjNDM7CSAqIFJlcXVlc3Rpbmcgd3JpdGUgYWNjZXNzIG9uIGEgZGlyZWN0b3J5IGNhbiBuZXZlciBzdWNjZWVkLiBSYXRoZXIKJiM0MzsJICogdGhhbiBwZXJmb3JtaW5nIGEgcGF0aC13YWxrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0YXJnZXQgaXMKJiM0MzsJICogYWN0dWFsbHkgYSBkaXJlY3RvcnkgKC1FSVNESVIpIG9yIG5vdCAoLUVOT1RESVIpLCB3ZSBzaG9ydC1jaXJjdWl0CiYjNDM7CSAqIHRvIC1FTk9URElSLgomIzQzOwkgKi8KJiM0MzsJaWYgKChmbGFncyAmYW1wOyBPX0RJUkVDVE9SWSkgJmFtcDsmYW1wOyAhKGZsYWdzICZhbXA7IF9fT19UTVBGSUxFKSAmYW1wOyZhbXA7IChhY2NfbW9kZSAmYW1wOyBNQVlfV1JJVEUpKQomIzQzOwkJcmV0dXJuIC1FTk9URElSOwomIzQzOwogCWlmIChmbGFncyAmYW1wOyBPX0NSRUFUKSB7CiAJCW9wLSZndDtpbnRlbnQgfD0gTE9PS1VQX0NSRUFURTsKIAkJaWYgKGZsYWdzICZhbXA7IE9fRVhDTCkgewpkaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9kaXIuYyBiL2ZzL3NtYi9jbGllbnQvZGlyLmMKaW5kZXggNzgwM2JkNWJkMDFmOC4uZDFhZjkwYzk4MWNkNCAxMDA2NDQKLS0tIGEvZnMvc21iL2NsaWVudC9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9zbWIvY2xpZW50L2Rpci5jCkBAIC01MzgsNiAmIzQzOzUzOCw5IEBAIGludCBjaWZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSwKIAlpZiAodW5saWtlbHkoY2lmc19mb3JjZWRfc2h1dGRvd24oY2lmc19zYikpKQogCQlyZXR1cm4gc21iX0VJTyhzbWJfZWlvX3RyYWNlX2ZvcmNlZF9zaHV0ZG93bik7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIob2ZsYWdzKSkKJiM0MzsJCW9mbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJLyoKIAkgKiBQb3NpeCBvcGVuIGlzIG9ubHkgY2FsbGVkIChhdCBsb29rdXAgdGltZSkgZm9yIGZpbGUgY3JlYXRlIG5vdy4gRm9yCiAJICogb3BlbnMgKHJhdGhlciB0aGFuIGNyZWF0ZXMpLCBiZWNhdXNlIHdlIGRvIG5vdCBrbm93IGlmIGl0IGlzIGEgZmlsZQpkaWZmIC0tZ2l0IGEvZnMvdmJveHNmL2Rpci5jIGIvZnMvdmJveHNmL2Rpci5jCmluZGV4IDBiOWVhYjE1NzQzMmQuLjZlMzA2ZGRkNzIyYmYgMTAwNjQ0Ci0tLSBhL2ZzL3Zib3hzZi9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy92Ym94c2YvZGlyLmMKQEAgLTMxOCw2ICYjNDM7MzE4LDkgQEAgc3RhdGljIGludCB2Ym94c2ZfZGlyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJdTY0IGhhbmRsZTsKIAlpbnQgZXJyOwogCiYjNDM7CWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2Ym94c2ZfZGlyX2xvb2t1cChwYXJlbnQsIGRlbnRyeSwgMCk7CiAJCWlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmNudGwuaCBiL2luY2x1ZGUvbGludXgvZmNudGwuaAppbmRleCA2YWQ2YjllN2EyMjZhLi4yMDRlMTZiYmUyNjM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZjbnRsLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mY250bC5oCkBAIC0zMCw2ICYjNDM7MzAsMTIgQEAKICAqLwogI2RlZmluZSBfX09fUkVHVUxBUgkJKDEgJmx0OyZsdDsgMzApCiAKJiM0MzsjZGVmaW5lIE9fTUtESVJfTUFTSwkoT19DUkVBVCB8IE9fRElSRUNUT1JZKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBPX0lTX01LRElSKHVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiAoZmxhZ3MgJmFtcDsgT19NS0RJUl9NQVNLKSA9PSBPX01LRElSX01BU0s7CiYjNDM7fQomIzQzOwogLyogTGlzdCBvZiBhbGwgdmFsaWQgZmxhZ3MgZm9yIHRoZSBob3ctJmd0O3Jlc29sdmUgYXJndW1lbnQ6ICovCiAjZGVmaW5lIFZBTElEX1JFU09MVkVfRkxBR1MgXAogCShSRVNPTFZFX05PX1hERVYgfCBSRVNPTFZFX05PX01BR0lDTElOS1MgfCBSRVNPTFZFX05PX1NZTUxJTktTIHwgXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmUKaW5kZXggOWViMTg1ZmIyZjlkZC4uMDFjNTg4ZDRjODRmNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlCkBAIC0xLDQgJiM0MzsxLDUgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzO29wZW5fb19jcmVhdF9vX2RpcgogZG5vdGlmeV90ZXN0CiBkZXZwdHNfcHRzCiBmY2xvZwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZQppbmRleCAwM2JlMzM3YzFmMzUxLi4wOTU5YmQyNjg3NWFjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZQpAQCAtMSw3ICYjNDM7MSw3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAKIENGTEFHUyAmIzQzOz0gJChLSERSX0lOQ0xVREVTKQotVEVTVF9HRU5fUFJPR1MgOj0gZGV2cHRzX3B0cyBmaWxlX3N0cmVzc29yIGFub25faW5vZGVfdGVzdCBrZXJuZnNfdGVzdCBmY2xvZyB1c3RhdF90ZXN0CiYjNDM7VEVTVF9HRU5fUFJPR1MgOj0gb3Blbl9vX2NyZWF0X29fZGlyIGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2cgdXN0YXRfdGVzdAogVEVTVF9HRU5fUFJPR1MgJiM0Mzs9IGlkbWFwcGVkX3RtcGZpbGUKIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEIDo9IGRub3RpZnlfdGVzdAogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmJlMGFiMzQyNjdlMWQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuYwpAQCAtMCwwICYjNDM7MSwyMDEgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW1pdHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZmNudGwuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdF9oYXJuZXNzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3JhcHBlcnMuaCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIGZsYWdzKSAoewlcCiYjNDM7CXN0cnVjdCBzdGF0IF9fc3Q7CQkJCQkJXAomIzQzOwlpbnQgX19mZCA9IG9wZW5hdF9vX21rZGlyKGRmZCwgcGF0aG5hbWUsIGZsYWdzLCBTX0lSV1hVKTsJXAomIzQzOwlBU1NFUlRfR0UoX19mZCwgMCk7CQkJCQkJXAomIzQzOwlBU1NFUlRfRVEoZnN0YXQoX19mZCwgJmFtcDtfX3N0KSwgMCk7CQkJCVwKJiM0MzsJRVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTsJCQkJXAomIzQzOwlfX2ZkOwkJCQkJCQkJXAomIzQzO30pCiYjNDM7CiYjNDM7I2RlZmluZSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKGRmZCwgcGF0aG5hbWUpIFwKJiM0MzsJb3BlbmF0X29fbWtkaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCBPX1JET05MWSkKJiM0MzsKJiM0MztGSVhUVVJFKG9wZW5fb19jcmVhdF9vX2RpcikgewomIzQzOwljaGFyIGRpcnBhdGhbUEFUSF9NQVhdOwomIzQzOwlpbnQgZGZkOwomIzQzO307CiYjNDM7CiYjNDM7RklYVFVSRV9TRVRVUChvcGVuX29fY3JlYXRfb19kaXIpCiYjNDM7ewomIzQzOwlzdHJjcHkoc2VsZi0mZ3Q7ZGlycGF0aCwgJiMzNDsvdG1wL29wZW5fb19jcmVhdF9vX2Rpcl90ZXN0LlhYWFhYWCYjMzQ7KTsKJiM0MzsJQVNTRVJUX05FKG1rZHRlbXAoc2VsZi0mZ3Q7ZGlycGF0aCksIE5VTEwpOwomIzQzOwlzZWxmLSZndDtkZmQgPSBvcGVuKHNlbGYtJmd0O2RpcnBhdGgsIE9fRElSRUNUT1JZKTsKJiM0MzsJQVNTRVJUX0dFKHNlbGYtJmd0O2RmZCwgMCk7CiYjNDM7fQomIzQzOwomIzQzO0ZJWFRVUkVfVEVBUkRPV04ob3Blbl9vX2NyZWF0X29fZGlyKQomIzQzO3sKJiM0MzsJY2xvc2Uoc2VsZi0mZ3Q7ZGZkKTsKJiM0MzsJcm1kaXIoc2VsZi0mZ3Q7ZGlycGF0aCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIERvZXMgb3Blbl9vX2NyZWF0X29fZGlyIHJldHVybiBhIGZkIGF0IGFsbD8gKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZXR1cm5zX2ZkKQomIzQzO3sKJiM0MzsJaW50IGZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChzZWxmLSZndDtkZmQsICYjMzQ7bmV3ZGlyJiMzNDspOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTsKJiM0MzsJRVhQRUNUX0VRKHVubGlua2F0KHNlbGYtJmd0O2RmZCwgJiMzNDtuZXdkaXImIzM0OywgQVRfUkVNT1ZFRElSKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIFRoZSBmZCBtdXN0IHJlZmVyIHRvIHRoZSBkaXJlY3RvcnkgdGhhdCB3YXMganVzdCBjcmVhdGVkLiAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGZkX2lzX2NyZWF0ZWRfZGlyKQomIzQzO3sKJiM0MzsJaW50IGZkOwomIzQzOwlzdHJ1Y3Qgc3RhdCBzdF92aWFfZmQsIHN0X3ZpYV9wYXRoOwomIzQzOwljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwomIzQzOwlmZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O2NoZWNrZGlyJiMzNDspOwomIzQzOwomIzQzOwlBU1NFUlRfRVEoZnN0YXQoZmQsICZhbXA7c3RfdmlhX2ZkKSwgMCk7CiYjNDM7CiYjNDM7CXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDslcy9jaGVja2RpciYjMzQ7LCBzZWxmLSZndDtkaXJwYXRoKTsKJiM0MzsJQVNTRVJUX0VRKHN0YXQocGF0aCwgJmFtcDtzdF92aWFfcGF0aCksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoc3RfdmlhX2ZkLnN0X2lubywgc3RfdmlhX3BhdGguc3RfaW5vKTsKJiM0MzsJRVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9kZXYsIHN0X3ZpYV9wYXRoLnN0X2Rldik7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShmZCksIDApOwomIzQzOwlFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiBNaXNzaW5nIHBhcmVudCBjb21wb25lbnQgbXVzdCBmYWlsIHdpdGggRU5PRU5ULiAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGVub2VudF9taXNzaW5nX3BhcmVudCkKJiM0Mzt7CiYjNDM7CUVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihzZWxmLSZndDtkZmQsICYjMzQ7bm9uZXhpc3RlbnQvY2hpbGQmIzM0OywgT19SRE9OTFksIFNfSVJXWFUpLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRU5PRU5UKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQW4gaW52YWxpZCBkZmQgbXVzdCBmYWlsIHdpdGggRUJBREYuICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZWJhZGYpCiYjNDM7ewomIzQzOwlFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoRkRfSU5WQUxJRCwgJiMzNDtiYWRmZGlyJiMzNDssIE9fUkRPTkxZLCBTX0lSV1hVKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVCQURGKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQSBkZmQgdGhhdCBwb2ludHMgdG8gYSBmaWxlIChub3QgYSBkaXJlY3RvcnkpIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vdGRpcl9kZmQpCiYjNDM7ewomIzQzOwlpbnQgZmlsZV9mZDsKJiM0MzsKJiM0MzsJZmlsZV9mZCA9IG9wZW5hdChzZWxmLSZndDtkZmQsICYjMzQ7ZmlsZSYjMzQ7LAomIzQzOwkJCSBPX0NSRUFUIHwgT19SRE9OTFksIFNfSVJXWFUpOwomIzQzOwlBU1NFUlRfR0UoZmlsZV9mZCwgMCk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihmaWxlX2ZkLCAmIzM0O3N1YmRpciYjMzQ7LCBPX1JET05MWSwgU19JUldYVSksIC0xKTsKJiM0MzsJRVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKGNsb3NlKGZpbGVfZmQpLCAwKTsKJiM0MzsJRVhQRUNUX0VRKHVubGlua2F0KHNlbGYtJmd0O2RmZCwgJiMzNDtmaWxlJiMzNDssIDApLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBPX0VYQ0wgdG9nZXRoZXIgd2l0aCBPX0NSRUFUfE9fRElSRUNUT1JZIHNob3VsZCBzdWNjZWVkIGlmIHRoZSB0YXJnZXQKJiM0MzsgKiBkaXJlY3RvcnkgZG9lcyBub3QgeWV0IGV4aXN0LiBBZnRlciBkaXJlY3RvcnkgY3JlYXRpb24sIHJlcGVhdGluZyB0aGlzCiYjNDM7ICogY2FsbCBtdXN0IGZhaWwgd2l0aCBFRVhJU1QuCiYjNDM7ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2Rpciwgb19leGNsX2VleGlzdCkKJiM0Mzt7CiYjNDM7CWludCBleGNsZGlyX2ZkOwomIzQzOwomIzQzOwlleGNsZGlyX2ZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZF9mbGFncyhzZWxmLSZndDtkZmQsICYjMzQ7ZXhjbGRpciYjMzQ7LCBPX0VYQ0wpOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoZXhjbGRpcl9mZCwgJiMzNDsuJiMzNDssIE9fRVhDTCwgU19JUldYVSksIC0xKTsKJiM0MzsJRVhQRUNUX0VRKGVycm5vLCBFRVhJU1QpOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoZXhjbGRpcl9mZCksIDApOwomIzQzOwlFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O2V4Y2xkaXImIzM0OywgQVRfUkVNT1ZFRElSKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogT19DUkVBVHxPX0RJUkVDVE9SWSBvbiBhIHBhdGggdGhhdCBhbHJlYWR5IGV4aXN0cyBhcyBhIHJlZ3VsYXIgZmlsZQomIzQzOyAqIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuCiYjNDM7ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZXhpc3RpbmdfZmlsZV9lbm90ZGlyKQomIzQzO3sKJiM0MzsJaW50IGZpbGVfZmQ7CiYjNDM7CiYjNDM7CWZpbGVfZmQgPSBvcGVuYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3JlZ2ZpbGUmIzM0OywKJiM0MzsJCQkgT19DUkVBVCB8IE9fUkRPTkxZLCBTX0lSV1hVKTsKJiM0MzsJQVNTRVJUX0dFKGZpbGVfZmQsIDApOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3JlZ2ZpbGUmIzM0OywgT19SRE9OTFksIFNfSVJXWFUpLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRU5PVERJUik7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUSh1bmxpbmthdChzZWxmLSZndDtkZmQsICYjMzQ7cmVnZmlsZSYjMzQ7LCAwKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogT19DUkVBVHxPX0RJUkVDVE9SWSBjb21iaW5lZCB3aXRoIGEgd3JpdGFibGUgYWNjZXNzIG1vZGUgbXVzdCBiZQomIzQzOyAqIHJlamVjdGVkOiBhIGRpcmVjdG9yeSBjYW5ub3QgYmUgb3BlbmVkIGZvciB3cml0aW5nLgomIzQzOyAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJlamVjdHNfd3JpdGFibGVfYWNjX21vZGUpCiYjNDM7ewomIzQzOwlFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3Jkd3JkaXImIzM0OywgT19SRFdSLCBTX0lSV1hVKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpOwomIzQzOwkvKiBDbGVhbiB1cCBpZiB0aGUga2VybmVsIGNyZWF0ZWQgdGhlIGRpcmVjdG9yeSBhbnl3YXkuICovCiYjNDM7CXVubGlua2F0KHNlbGYtJmd0O2RmZCwgJiMzNDtyZHdyZGlyJiMzNDssIEFUX1JFTU9WRURJUik7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogb3BlbmF0KE9fQ1JFQVR8T19ESVJFQ1RPUlkpIHdpdGggYSB0cmFpbGluZyBzbGFzaCBzaG91bGQgd29yay4KJiM0MzsgKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCB0cmFpbGluZ19zbGFzaCkKJiM0Mzt7CiYjNDM7CWludCBmZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O25ld2Rpci8mIzM0Oyk7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShmZCksIDApOwomIzQzOwlFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O25ld2RpciYjMzQ7LCBBVF9SRU1PVkVESVIpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBvcGVuYXQoT19DUkVBVCkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIGJ1dCB3aXRob3V0IE9fRElSRUNUT1JZCiYjNDM7ICogbXVzdCBmYWlsIHdpdGggRUlTRElSIGFuZCBtdXN0IG5vdCBjcmVhdGUgYW55dGhpbmcgYXQgdGhlIHBhdGguCiYjNDM7ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgdHJhaWxpbmdfc2xhc2hfbm9fb19kaXIpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CXN0cnVjdCBzdGF0IHN0OwomIzQzOwomIzQzOwlmZCA9IG9wZW5hdChzZWxmLSZndDtkZmQsICYjMzQ7dHJhaWxpbmcvJiMzNDssIE9fQ1JFQVQgfCBPX1JET05MWSwgU19JUldYVSk7CiYjNDM7CUVYUEVDVF9FUShmZCwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVJU0RJUik7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShmc3RhdGF0KHNlbGYtJmd0O2RmZCwgJiMzNDt0cmFpbGluZyYjMzQ7LCAmYW1wO3N0LCAwKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVOT0VOVCk7CiYjNDM7CiYjNDM7CS8qIEJlc3QtZWZmb3J0IGNsZWFudXAgaW4gY2FzZSB0aGUga2VybmVsIGxlZnQgYSBmaWxlIGJlaGluZC4gKi8KJiM0MzsJaWYgKGZkICZndDs9IDApCiYjNDM7CQljbG9zZShmZCk7CiYjNDM7CXVubGlua2F0KHNlbGYtJmd0O2RmZCwgJiMzNDt0cmFpbGluZyYjMzQ7LCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgZmQgbXVzdCBiZSB1c2FibGUgYXMgYSBkZmQgZm9yIGZ1cnRoZXIgKmF0KCkgY2FsbHMuCiYjNDM7ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfdXNhYmxlX2FzX2RmZCkKJiM0Mzt7CiYjNDM7CWludCBwYXJlbnRfZmQsIGNoaWxkX2ZkOwomIzQzOwljaGFyIHBhdGhbUEFUSF9NQVhdOwomIzQzOwomIzQzOwlwYXJlbnRfZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHNlbGYtJmd0O2RmZCwgJiMzNDtwYXJlbnQmIzM0Oyk7CiYjNDM7CWNoaWxkX2ZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChwYXJlbnRfZmQsICYjMzQ7Y2hpbGQmIzM0Oyk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShjaGlsZF9mZCksIDApOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UocGFyZW50X2ZkKSwgMCk7CiYjNDM7CiYjNDM7CXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDslcy9wYXJlbnQvY2hpbGQmIzM0Oywgc2VsZi0mZ3Q7ZGlycGF0aCk7CiYjNDM7CUVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7CiYjNDM7CXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgJiMzNDslcy9wYXJlbnQmIzM0Oywgc2VsZi0mZ3Q7ZGlycGF0aCk7CiYjNDM7CUVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzO1RFU1RfSEFSTkVTU19NQUlOCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy93cmFwcGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvd3JhcHBlcnMuaAppbmRleCA0MjBhZTRmOTA4Y2YyLi5hYmU1Yjg1Y2ViZGNkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy93cmFwcGVycy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3dyYXBwZXJzLmgKQEAgLTEzLDYgJiM0MzsxMywxMCBAQAogI2RlZmluZSBTVEFUWF9NTlRfSURfVU5JUVVFIDB4MDAwMDQwMDBVIC8qIFdhbnQvZ290IGV4dGVuZGVkIHN0eF9tb3VudF9pZCAqLwogI2VuZGlmCiAKJiM0MzsjaWZuZGVmIEZEX0lOVkFMSUQKJiM0MzsjZGVmaW5lIEZEX0lOVkFMSUQgLTEwMDA5CiYjNDM7I2VuZGlmCiYjNDM7CiBzdGF0aWMgaW5saW5lIGludCBzeXNfZnNvcGVuKGNvbnN0IGNoYXIgKmZzbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXJldHVybiBzeXNjYWxsKF9fTlJfZnNvcGVuLCBmc25hbWUsIGZsYWdzKTsKQEAgLTEwNSw0ICYjNDM7MTA5LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IHN5c19vcGVuX3RyZWUoaW50IGRmZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIGludCBmbGFnCiAJcmV0dXJuIHN5c2NhbGwoX19OUl9vcGVuX3RyZWUsIGRmZCwgZmlsZW5hbWUsIGZsYWdzKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IG9wZW5hdF9vX21rZGlyKGludCBkZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLAomIzQzOwkJCQkgdW5zaWduZWQgaW50IGZsYWdzLCBtb2RlX3QgbW9kZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBzeXNjYWxsKF9fTlJfb3BlbmF0LCBkZmQsIHBhdGhuYW1lLAomIzQzOwkJICAgICAgIGZsYWdzIHwgT19ESVJFQ1RPUlkgfCBPX0NSRUFULCBtb2RlKTsKJiM0Mzt9CiYjNDM7CiAjZW5kaWYKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MjMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV3IEF0b21pYyBEaXJlY3RvcnkgQ3JlYXRpb24gRmVhdHVyZSoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IHRoaXMgbmV3IHBhdGNoIGludHJvZHVjaW5nIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgLCBlc3NlbnRpYWxseSBgT19JU19NS0RJUmAsIGFsbG93aW5nIGZvciBhbiBhdG9taWMgYG9wZW5hdCgpYCB0aGF0IGNyZWF0ZXMgYSBkaXJlY3RvcnkgYW5kIHJldHVybnMgYSBmaWxlIGRlc2NyaXB0b3IuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgYSBmYWlybHkgc3Vic3RhbnRpYWwgY2hhbmdlLCBwYXJ0aWN1bGFybHkgdG8gdGhlIFZGUyBsYXllciwgc3BlY2lmaWNhbGx5IGltcGFjdGluZyBgb3BlbmF0KClgIGFuZCBwYXRoIHJlc29sdXRpb24vY3JlYXRpb24gbG9naWMgd2l0aGluIGBuYW1laS5jYC4gIEdpdmVuIG15IGV4cGVydGlzZSwgdGhpcyBpbW1lZGlhdGVseSBzY3JlYW1zICYjMzQ7ZnV6emluZyB0YXJnZXQuJiMzNDsKClRoZSBjb3JlIG1vZGlmaWNhdGlvbiBpbiBgZnMvb3Blbi5jYCBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBhZGRpbmcgYSBjaGVjayBmb3IgYE9fSVNfTUtESVJgIHdpdGhpbiB0aGUgYFdJTExfQ1JFQVRFYCBibG9jay4gVGhlIGRlZmluaXRpb24gb2YgYE9fSVNfTUtESVJgIGl0c2VsZiBsb29rcyBjbGVhbi4gIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIGhvdyB0aGlzIHByb3BhZ2F0ZXMgdGhyb3VnaCBgbmFtZWkuY2AuICBgbWF5X29fY3JlYXRlYCBub3cgaGFzIGEgYGNyZWF0ZV9kaXJgIGZsYWcsIGFuZCBgbG9va3VwX29wZW5gJiMzOTtzIGxvZ2ljIGJyYW5jaGVzIHRvIGB2ZnNfbWtkaXJfbm9fcGVybWAgb3IgYHZmc19jcmVhdGVfbm9fcGVybWAgYmFzZWQgb24gdGhhdCBmbGFnLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBmb3IgZnV6emluZy4gV2Uga25vdyBgdmZzX21rZGlyX25vX3Blcm1gLCBgbWF5X29fY3JlYXRlYCwgYGxvb2t1cF9vcGVuYCwgYGF0b21pY19vcGVuYCwgYGRvX29wZW5gLCBgYnVpbGRfb3Blbl9mbGFnc2AgYXJlIHRvdWNoZWQuICBUaGUgZmlsZXN5c3RlbS1zcGVjaWZpYyBgYXRvbWljX29wZW5gIGltcGxlbWVudGF0aW9ucyBhcmUgYWxzbyBhZmZlY3RlZCwgYnV0IHRoZXkgYXJlIHNwZWNpZmljIHRvIGRpZmZlcmVudCBmaWxlIHN5c3RlbXMgYW5kIGRvIG5vdCBoYXZlIGFuIGltcGFjdCBvbiB0aGUgY29yZSBWRlMgZnVuY3Rpb25zLiBMZXQmIzM5O3MgZGlnIGRlZXBlcjogYWZ0ZXIgY2hlY2tpbmcsIGl0IHR1cm5zIG91dCB0aGF0IGB2ZnNfbWtkaXJfbm9fcGVybWAsIGBtYXlfb19jcmVhdGVgLCBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBhbmQgYGRvX29wZW5gIGFyZSBzdGF0aWMgdG8gdGhlIGZpbGVzIHRoZXkgYXJlIGluLiBgYnVpbGRfb3Blbl9mbGFnc2AgaXMgaW5saW5lLCBzbyBpdCB3b24mIzM5O3QgYmUgZXhwb3NlZCBhcyBhIGRpc3RpbmN0IHN5bWJvbC4KCkkgbmVlZCB0byBpZGVudGlmeSBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQuIGB2ZnNfY3JlYXRlYCwgYHZmc19ta2RpcmAsIGBmaWxlbmFtZV9jcmVhdGVgLCBgZGVudHJ5X2NyZWF0ZWAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGFuZCBgZmlsZW5hbWVfcmVuYW1lYXQyYCBhcmUgbW9kaWZpZWQuIExvb2tpbmcgc3BlY2lmaWNhbGx5IGF0IGBmcy9uYW1laS5jYCwgdGhlc2UgYXJlIG5vdCBzdGF0aWMsIHdoaWNoIG1lYW5zIHRoZXNlIGFyZSB0aGUgc3ltYm9scyBleHBvc2VkLgoKVGhlIGtleSBlbnRyeSBwb2ludHMgYXJlIGBkb19zeXNfb3BlbmF0MmAsIHRoZSBtYWluIGBvcGVuYXQyYCBhbmQgYG9wZW5hdGAgaGFuZGxlciwgYW5kIGBwYXRoX29wZW5hdGAuIEFsc28sIHRoZSBgZG9fZmlscF9vcGVuYCBmdW5jdGlvbiBpcyBhIGNvcmUgZnVuY3Rpb24uCgpHaXZlbiB0aGUgaW50ZW50IGlzIHRvIGZ1enogYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAsIHRoZSBwcmltYXJ5IGdvYWwgaXMgdG8gdGFyZ2V0IGBvcGVuYXRgIGFuZCBgb3BlbmF0MmAgd2l0aCB0aGVzZSBmbGFncy4gIFN5emthbGxlciBhbHJlYWR5IGhhcyBjb3ZlcmFnZSBmb3IgYG9wZW5hdGAgZ2VuZXJhbGx5LCBidXQgdGhlIG5ldyBsb2dpYyBpcyBpbiB0aGVzZSBzeW1ib2xzOiBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBhbmQgYGxvb2t1cF9vcGVuYC4gQmVjYXVzZSB0aGVzZSBmdW5jdGlvbnMgYXJlbiYjMzk7dCBzdGF0aWMsIHRoZXkgY2FuIGJlIHRhcmdldGVkIGJ5IGZ1enppbmcuIElmIGBsb29rdXBfb3BlbmAgaXMgbm90IGlubGluZWQuCgpUaGUgZm9jdXMgc2hvdWxkIGJlIG9uIGNyZWF0aW5nIHRlc3QgY2FzZXMgdGhhdCBzcGVjaWZpY2FsbHkgZXhlcmNpc2UgdGhlIGF0b21pYyBkaXJlY3RvcnkgY3JlYXRpb24gcGF0aCB0byBleHBvc2UgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBzdWJ0bGUgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgc3RydWN0IGRlbnRyeSBcXCpsb29rdXBfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz00NDgwPXN0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosXG4tLVxuZnMvbmFtZWkuYy00NDk2LSAqL1xuZnMvbmFtZWkuYzo0NDk3OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG5mcy9uYW1laS5jLTQ0OTgtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTkwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBleHBlcnQ6CgoqKlVuZGVyc3RhbmRpbmcgU3l6a2FsbGVyJiMzOTtzIFRyYWNlYWJpbGl0eSoqCgpBbHJpZ2h0LCBzbyB0aGUga2V5IGhlcmUgaXMgdGhhdCBgbG9va3VwX29wZW5gIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgIGJ1dCBpdCYjMzk7cyAqbm90KiBpbmxpbmVkLiBUaGF0JiMzOTtzIGdvb2QgZnJvbSBhIGRlYnVnZ2luZyBwZXJzcGVjdGl2ZSwgZXNwZWNpYWxseSB3aGVuIHdvcmtpbmcgd2l0aCBzb21ldGhpbmcgbGlrZSBTeXprYWxsZXIuIEJlY2F1c2UgaXQmIzM5O3Mgc3RhdGljLCB0aGUgY29tcGlsZXIgd29uJiMzOTt0IHRyeSB0byBvcHRpbWl6ZSBpdCBhd2F5IGludG8gdGhlIGNhbGwgc2l0ZXMuIElmIGl0ICp3ZXJlKiBpbmxpbmVkLCBTeXprYWxsZXImIzM5O3MgdHJhY2luZyBjYXBhYmlsaXRpZXMgd291bGQgYmUgY29tcHJvbWlzZWQsIG1ha2luZyBpdCBtdWNoIGhhcmRlciB0byBvYnNlcnZlIGl0cyBiZWhhdmlvciBkaXJlY3RseS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gZXhhbWluaW5nIHRoZSB0cmFjZSByZXN1bHRzLiBOb3csIHRoZSBjb250ZXh0IGhhcyBsZWQgbWUgdG8gYGF0b21pY19vcGVuYCBpbiBgZnMvbmFtZWkuY2AuIExldCYjMzk7cyBzZWUgaG93IHRoYXQgZml0cyBpbnRvIHRoaXMgcGljdHVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgc3RydWN0IGRlbnRyeSBcXCphdG9taWNfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz00Mzc5PXN0YXRpYyBpbmxpbmUgdW1vZGVfdCBvX2NyZWF0ZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL25hbWVpLmMtNDQxMC0gKi9cbmZzL25hbWVpLmM6NDQxMTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbmZzL25hbWVpLmMtNDQxMi1cdFx0XHRcdCAgc3RydWN0IGZpbGUgKmZpbGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyODMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBzaXR1YXRpb246CgoqKlJlZmxlY3Rpbmcgb24gRmlsZSBTeXN0ZW0gT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGZpbGUgc3lzdGVtIGNvZGUsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGZpbGUgb3BlbmluZy4gSSYjMzk7dmUgbm90aWNlZCBzb21ldGhpbmcgaW50ZXJlc3RpbmcgYWJvdXQgYGF0b21pY19vcGVuYC4gSXQmIzM5O3MgZGVmaW5lZCBhcyBgc3RhdGljYCwgd2hpY2ggaXNuJiMzOTt0IGNvbXBsZXRlbHkgdW5leHBlY3RlZCwgYnV0IGl0JiMzOTtzICphbHNvKiBub3QgYW4gYGlubGluZWAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBkZWxpYmVyYXRlIGNob2ljZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMuIFR5cGljYWxseSwgSSYjMzk7ZCBleHBlY3QgYW4gb3B0aW1pemF0aW9uIGhlcmUgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byBpbmxpbmluZywgYnV0IG1heWJlIHRoZXJlJiMzOTtzIGEgZ29vZCByZWFzb24gZm9yIGl0IGJlaW5nIGBzdGF0aWNgIGFuZCBub3QgYGlubGluZWAgLSBwZXJoYXBzIHRvIHByZXZlbnQgY29kZSBibG9hdCwga2VlcCBmdW5jdGlvbiBzY29wZSB0aWdodCwgb3IgYmVjYXVzZSB0aGUgY29tcGlsZXIgaXMgdW5hYmxlIHRvIGlubGluZSBmb3IgY2VydGFpbiB1c2VzLCBldGMuCgpOb3csIEkmIzM5O20gdHVybmluZyBteSBhdHRlbnRpb24gdG8gYGRvX29wZW5gLCBhbmQgSSYjMzk7bSBsb29raW5nIGF0IGl0JiMzOTtzIGRlZmluaXRpb24gaW4gYGZzL25hbWVpLmNgLiBNeSBtaW5kIGlzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgZGlmZmVyZW50IHNjZW5hcmlvcywgbG9va2luZyB0byBzZWUgaG93IGBhdG9taWNfb3BlbmAgaXMgdXNlZC4gSSYjMzk7bSB3b25kZXJpbmcgaWYgYGF0b21pY19vcGVuYCBpcyB1c2VkIGFzIGEgbG93IGxldmVsIGhlbHBlciBmdW5jdGlvbiBhbmQgaXMgbmV2ZXIgaW5saW5lZCB0byBwcmV2ZW50IGNvbXBsaWNhdGlvbnMgb2YgYSBmdW5jdGlvbiBiZWluZyBjYWxsZWQgaW4gbXVsdGlwbGUgcGxhY2VzLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgYGF0b21pY19vcGVuYCBpcyB2ZXJ5IGxvbmcsIHNvIHRoZSBjb21waWxlciB3b3VsZCBub3QgYmUgYWJsZSB0byBpbmxpbmUgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYyBpbnQgZG9fb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz00ODAyPXN0YXRpYyBjb25zdCBjaGFyICpvcGVuX2xhc3RfbG9va3VwcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbi0tXG5mcy9uYW1laS5jLTQ4NTYtICovXG5mcy9uYW1laS5jOjQ4NTc6c3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuZnMvbmFtZWkuYy00ODU4LVx0XHQgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzI2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGaWxlc3lzdGVtIEVudHJ5cG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZXNlIGZpbGVzeXN0ZW0gZW50cnkgcG9pbnRzLiBNeSBpbml0aWFsIG9ic2VydmF0aW9ucyBhcmUgdGhhdCBgZG9fb3BlbmAgaXMgZGVmaW5pdGVseSBzdGF0aWMgYnV0IG5vdCBpbmxpbmVkLCB3aGljaCBpcyBnb29kLiBgdmZzX21rZGlyYCBhbmQgYHZmc19jcmVhdGVgIGFyZSBib3RoIGV4cG9ydGVkLCBzbyB0aGV5JiMzOTtyZSBzb2xpZCBjYW5kaWRhdGVzLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgZmlsZXN5c3RlbS1zcGVjaWZpYyBhdG9taWMgb3BlbiBmdW5jdGlvbnMgdG8gZ2V0IGEgYnJvYWRlciB2aWV3LiBJJiMzOTttIHNlZWluZzogYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgLCBgY2VwaF9hdG9taWNfb3BlbmAsIGBmdXNlX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBgY2lmc19hdG9taWNfb3BlbmAsIGFuZCBgdmJveHNmX2Rpcl9hdG9taWNfb3BlbmAuIEZyb20gYSBjdXJzb3J5IGdsYW5jZSwgdGhlc2UgYWxsIGxvb2sgbGlrZSB0aGV5JiMzOTtyZSBlaXRoZXIgbm90IHN0YXRpYyBvciBhcmUgc3RhdGljIGJ1dCB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIOKAkyB3aGljaCBtZWFucyB0aGV5IHdvbiYjMzk7dCBiZSBpbmxpbmVkLiBFeGNlcHQuLi53YWl0LCB0aGVyZSYjMzk7cyBgZnVzZV9hdG9taWNfb3BlbmAuIEl0ICppcyogc3RhdGljOiBgc3RhdGljIGludCBmdXNlX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICplbnRyeSxgLiBCdXQgSSByZW1lbWJlciBpdCYjMzk7cyBhc3NpZ25lZCB0byBgaW5vZGVfb3BlcmF0aW9ucy0mZ3Q7YXRvbWljX29wZW5gLCBzbyB0aGUgY29tcGlsZXIgd29uJiMzOTt0IGJlIGFibGUgdG8gaW5saW5lIGl0IGluIGEgdXNlZnVsIHdheS4KCkxldCBtZSBtYWtlIGEgcXVpY2sgbGlzdCBvZiB3aGF0IEkmIzM5O20gZm9jdXNlZCBvbiwganVzdCB0byBrZWVwIGV2ZXJ5dGhpbmcgc3RyYWlnaHQ6IGB2ZnNfbWtkaXJgLCBgdmZzX2NyZWF0ZWAsIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGBkb19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgLCBgY2VwaF9hdG9taWNfb3BlbmAsIGBmdXNlX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBgY2lmc19hdG9taWNfb3BlbmAsIGFuZCBgdmJveHNmX2Rpcl9hdG9taWNfb3BlbmAuCgpSaWdodCwgdGhlIHBvaW50IG9mIGFsbCB0aGlzIGlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuIE9rYXksIGl0IGxvb2tzIGxpa2UgYGxvb2t1cF9vcGVuYCwgYGF0b21pY19vcGVuYCwgYW5kIGBkb19vcGVuYCBhcmUgc3RhdGljLiBTbyBJIGNhbiYjMzk7dCBiZSBzdXJlIGlmIHRoZXkgYXJlIGlubGluZWQgb3Igbm90LiBHaXZlbiB0aGVpciBzaXplLCB0aGV5IGFyZSBtb3N0IGxpa2VseSBub3QsIGJ1dCBpdCYjMzk7cyBhbHdheXMgc2FmZXIgdG8gY2hvb3NlIG5vbi1zdGF0aWMgaWYgcG9zc2libGUuIGBwYXRoX29wZW5hdGAgaXMgYWxzbyBzdGF0aWMuIEhvd2V2ZXIsIGBkb19maWxwX29wZW5gIGlzIG5vbi1zdGF0aWMsIGFzIGFyZSBgdmZzX21rZGlyYCBhbmQgYHZmc19jcmVhdGVgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgYWJvdXQgYGZpbGVuYW1lX2NyZWF0ZWAuCgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdHJ1Y3QgZGVudHJ5IFxcKmZpbGVuYW1lX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzg3MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgYGZpbGVuYW1lX2NyZWF0ZWAqKgoKUmlnaHQsIGBmaWxlbmFtZV9jcmVhdGVg4oCmIHRoYXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24uIE15IG1pbmQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhhdCBiZWNhdXNlIG9mIHRoZSBpbXBsaWNhdGlvbnMuIEl0IG1lYW5zIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGRlc2lnbmVkIHRvIGJlIHVzZWQgd2l0aG91dCBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIG9yIGEgY29udGV4dCB0aWVkIHRvIGEgc3BlY2lmaWMgb2JqZWN0IHN0YXRlLiBJdCYjMzk7cyBwcm9iYWJseSBpbnRlbmRlZCBhcyBhIHV0aWxpdHkgZnVuY3Rpb24sIHBlcmhhcHMgZm9yIGdlbmVyYXRpbmcgZmlsZW5hbWVzIGJhc2VkIG9uIHNvbWUgc3BlY2lmaWMgY3JpdGVyaWEsIGluZGVwZW5kZW50IG9mIGFueSBvYmplY3QmIzM5O3MgY3VycmVudCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gY29uc2lkZXIgd2hhdCB0aGUgYmVzdCBhcHByb2FjaCB0byB3b3JraW5nIHdpdGggdGhpcyBtaWdodCBiZSwgY29uc2lkZXJpbmcgaXQmIzM5O3Mgc3RhdGljLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGF0IGFwcHJvYWNoPyBEb2VzIGl0IGRlcGVuZCBvbiBnbG9iYWwgc3RhdGUsIG9yIHdpbGwgaXQgaW1wYWN0IGFueSB0ZXN0aW5nIG9yIHRocmVhZGluZyBzY2VuYXJpb3M/IEkgbmVlZCB0byB0aGluayBhYm91dCB0aGF0LCB0b28uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbGVuYW1lX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz01MTA3PXN0cnVjdCBmaWxlICpkb19maWxlX29wZW5fcm9vdChjb25zdCBzdHJ1Y3QgcGF0aCAqcm9vdCxcbi0tXG5mcy9uYW1laS5jLTUxMzAtXG5mcy9uYW1laS5jOjUxMzE6c3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZShpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXG5mcy9uYW1laS5jLTUxMzItXHRcdFx0XHQgICAgICBzdHJ1Y3QgcGF0aCAqcGF0aCwgdW5zaWduZWQgaW50IGxvb2t1cF9mbGFncylcbi0tXG5mcy9uYW1laS5jPTUxODA9c3RydWN0IGRlbnRyeSAqc3RhcnRfY3JlYXRpbmdfcGF0aChpbnQgZGZkLCBjb25zdCBjaGFyICpwYXRobmFtZSxcbi0tXG5mcy9uYW1laS5jLTUxODMtXHRDTEFTUyhmaWxlbmFtZV9rZXJuZWwsIGZpbGVuYW1lKShwYXRobmFtZSk7XG5mcy9uYW1laS5jOjUxODQ6XHRyZXR1cm4gZmlsZW5hbWVfY3JlYXRlKGRmZCwgZmlsZW5hbWUsIHBhdGgsIGxvb2t1cF9mbGFncyk7XG5mcy9uYW1laS5jLTUxODUtfVxuLS1cbmZzL25hbWVpLmM9NTIwNz1pbmxpbmUgc3RydWN0IGRlbnRyeSAqc3RhcnRfY3JlYXRpbmdfdXNlcl9wYXRoKFxuLS1cbmZzL25hbWVpLmMtNTIxMS1cdENMQVNTKGZpbGVuYW1lLCBmaWxlbmFtZSkocGF0aG5hbWUpO1xuZnMvbmFtZWkuYzo1MjEyOlx0cmV0dXJuIGZpbGVuYW1lX2NyZWF0ZShkZmQsIGZpbGVuYW1lLCBwYXRoLCBsb29rdXBfZmxhZ3MpO1xuZnMvbmFtZWkuYy01MjEzLX1cbi0tXG5mcy9uYW1laS5jPTUzNjI9aW50IGZpbGVuYW1lX21rbm9kYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bW9kZV90IG1vZGUsXG4tLVxuZnMvbmFtZWkuYy01Mzc1LXJldHJ5OlxuZnMvbmFtZWkuYzo1Mzc2Olx0ZGVudHJ5ID0gZmlsZW5hbWVfY3JlYXRlKGRmZCwgbmFtZSwgXHUwMDI2cGF0aCwgbG9va3VwX2ZsYWdzKTtcbmZzL25hbWVpLmMtNTM3Ny1cdGlmIChJU19FUlIoZGVudHJ5KSlcbi0tXG5mcy9uYW1laS5jPTU1MTE9aW50IGZpbGVuYW1lX21rZGlyYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bW9kZV90IG1vZGUpXG4tLVxuZnMvbmFtZWkuYy01NTE5LXJldHJ5OlxuZnMvbmFtZWkuYzo1NTIwOlx0ZGVudHJ5ID0gZmlsZW5hbWVfY3JlYXRlKGRmZCwgbmFtZSwgXHUwMDI2cGF0aCwgbG9va3VwX2ZsYWdzKTtcbmZzL25hbWVpLmMtNTUyMS1cdGlmIChJU19FUlIoZGVudHJ5KSlcbi0tXG5mcy9uYW1laS5jPTU4ODU9aW50IGZpbGVuYW1lX3N5bWxpbmthdChzdHJ1Y3QgZmlsZW5hbWUgKmZyb20sIGludCBuZXdkZmQsIHN0cnVjdCBmaWxlbmFtZSAqdG8pXG4tLVxuZnMvbmFtZWkuYy01ODk2LXJldHJ5OlxuZnMvbmFtZWkuYzo1ODk3Olx0ZGVudHJ5ID0gZmlsZW5hbWVfY3JlYXRlKG5ld2RmZCwgdG8sIFx1MDAyNnBhdGgsIGxvb2t1cF9mbGFncyk7XG5mcy9uYW1laS5jLTU4OTgtXHRpZiAoSVNfRVJSKGRlbnRyeSkpXG4tLVxuZnMvbmFtZWkuYz02MDMzPWludCBmaWxlbmFtZV9saW5rYXQoaW50IG9sZGRmZCwgc3RydWN0IGZpbGVuYW1lICpvbGQsXG4tLVxuZnMvbmFtZWkuYy02MDYwLVxuZnMvbmFtZWkuYzo2MDYxOlx0bmV3X2RlbnRyeSA9IGZpbGVuYW1lX2NyZWF0ZShuZXdkZmQsIG5ldywgXHUwMDI2bmV3X3BhdGgsXG5mcy9uYW1laS5jLTYwNjItXHRcdFx0XHRcdChob3cgXHUwMDI2IExPT0tVUF9SRVZBTCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODgzMgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGdW5jdGlvbiBWaXNpYmlsaXR5IGluIHRoZSBGaWxlIFN5c3RlbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZmlsZSBzeXN0ZW0gZnVuY3Rpb25zIGFuZCB0YWtpbmcgc3RvY2sgb2YgdGhlaXIgZGVjbGFyYXRpb24uIEl0JiMzOTtzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhleSYjMzk7cmUgZXhwb3NlZCBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgbm90ZWQgdGhhdCBgZmlsZW5hbWVfY3JlYXRlYCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gUmlnaHQsIG1lYW5pbmcgaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiBpdHMgY29tcGlsYXRpb24gdW5pdC4gRmluZSwgaW50ZXJuYWwgaGVscGVyIG9yIHNvbWV0aGluZywgSSYjMzk7bGwga2VlcCB0aGF0IGluIG1pbmQuCgpUaGVuIEkgc2VlIGB2ZnNfbWtkaXJgLCBgdmZzX2NyZWF0ZWAsIGFuZCBgZG9fZmlscF9vcGVuYCwgYWxsIG5vbi1zdGF0aWMuIFRob3NlIGZ1bmN0aW9ucyBhcmUgZXhwb3NlZCBhbmQgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgcHJvYmFibHkgZXZlbiBmcm9tIHVzZXJzcGFjZSBpbmRpcmVjdGx5LiBTZWVtcyByaWdodC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGlzIGBkb19zeXNfb3BlbmF0MmAgZnVuY3Rpb24uIEkgdGhpbmsgSSYjMzk7dmUgZ290IGl0IG1hcmtlZCBkb3duIGFzIG5vbi1zdGF0aWMgYXMgd2VsbC4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgdGhhdCwgdGhvdWdoLCBzaW5jZSBpdHMgdmlzaWJpbGl0eSBpcyBjcnVjaWFsIHRvIGRldGVybWluaW5nIGhvdyBhcHBsaWNhdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgc3lzdGVtIGNhbGwuIE5lZWQgdG8gYmUgY2VydGFpbiBvbiB0aGF0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fc3lzX29wZW5hdDImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vcGVuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb3Blbi5jPTE0MTY9RVhQT1JUX1NZTUJPTChmaWxlX29wZW5fcm9vdCk7XG5mcy9vcGVuLmMtMTQxNy1cbmZzL29wZW4uYzoxNDE4OnN0YXRpYyBpbnQgZG9fc3lzX29wZW5hdDIoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLFxuZnMvb3Blbi5jLTE0MTktXHRcdFx0ICBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdylcbi0tXG5mcy9vcGVuLmM9MTQzMD1pbnQgZG9fc3lzX29wZW4oaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSlcbi0tXG5mcy9vcGVuLmMtMTQzMi1cdHN0cnVjdCBvcGVuX2hvdyBob3cgPSBidWlsZF9vcGVuX2hvdyhmbGFncywgbW9kZSk7XG5mcy9vcGVuLmM6MTQzMzpcdHJldHVybiBkb19zeXNfb3BlbmF0MihkZmQsIGZpbGVuYW1lLCBcdTAwMjZob3cpO1xuZnMvb3Blbi5jLTE0MzQtfVxuLS1cbmZzL29wZW4uYz0xNDUyPVNZU0NBTExfREVGSU5FNChvcGVuYXQyLCBpbnQsIGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsXG4tLVxuZnMvb3Blbi5jLTE0NzUtXG5mcy9vcGVuLmM6MTQ3NjpcdHJldHVybiBkb19zeXNfb3BlbmF0MihkZmQsIGZpbGVuYW1lLCBcdTAwMjZ0bXApO1xuZnMvb3Blbi5jLTE0NzctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ3NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIEZ1bmN0aW9uIFZpc2liaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoZXNlIGtlcm5lbCBmdW5jdGlvbnMgYW5kIHRoZWlyIHNjb3BlLiBJIHNlZSB0aGF0IGBkb19zeXNfb3BlbmF0MmAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBtZWFucyBpdHMgdmlzaWJpbGl0eSBpcyByZXN0cmljdGVkIHRvIHRoZSBmaWxlIGl0JiMzOTtzIGRlZmluZWQgaW4uIFRoYXQmIzM5O3MgYSBjb21tb24gcGF0dGVybiwga2VlcGluZyBpbnRlcm5hbCBoZWxwZXJzIGhpZGRlbi4gSW4gY29udHJhc3QsIGBkb19zeXNfb3BlbmAsIGB2ZnNfbWtkaXJgLCBgdmZzX2NyZWF0ZWAsIGB2ZnNfbG9va3VwX29wZW5gLCBgZGVudHJ5X2NyZWF0ZWAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGFuZCBgZmlsZW5hbWVfcmVuYW1lYXQyYCBhcmUgYWxsIG5vbi1zdGF0aWMuIFRoaXMgaW5kaWNhdGVzIHRoZXkgYXJlIGV4cG9zZWQgZm9yIHVzZSBieSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGVpciBicm9hZGVyIHNjb3BlIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGxpa2VseSBwYXJ0IG9mIHRoZSBWRlMgQVBJIG9yIGF0IGxlYXN0IGNvcmUgZmlsZXN5c3RlbSBmdW5jdGlvbmFsaXR5IHRoYXQmIzM5O3MgbWVhbnQgdG8gYmUgY2FsbGVkIGZyb20gZWxzZXdoZXJlLiBOb3csIEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gYGRlbnRyeV9jcmVhdGVgLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBpbnRvIHRoYXQgb25lIGFuZCBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZW50cnlfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uYW1laS5jPTUyMTQ9RVhQT1JUX1NZTUJPTChzdGFydF9jcmVhdGluZ191c2VyX3BhdGgpO1xuLS1cbmZzL25hbWVpLmMtNTIxNi0vKipcbmZzL25hbWVpLmM6NTIxNzogKiBkZW50cnlfY3JlYXRlIC0gQ3JlYXRlIGFuZCBvcGVuIGEgZmlsZVxuZnMvbmFtZWkuYy01MjE4LSAqIEBwYXRoOiBwYXRoIHRvIGNyZWF0ZVxuLS1cbmZzL25hbWVpLmMtNTIzMi0gKi9cbmZzL25hbWVpLmM6NTIzMzpzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsXG5mcy9uYW1laS5jLTUyMzQtXHRcdFx0ICAgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXG4tLVxuZnMvbmFtZWkuYy01Mjg4LX1cbmZzL25hbWVpLmM6NTI4OTpFWFBPUlRfU1lNQk9MKGRlbnRyeV9jcmVhdGUpO1xuZnMvbmFtZWkuYy01MjkwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAzNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgRmlsZXN5c3RlbSBMYW5kc2NhcGUqKgoKT2theSwgc28gYGRlbnRyeV9jcmVhdGVgIGlzIGV4cG9ydGVkLCBtZWFuaW5nIGl0JiMzOTtzIGEgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2ssIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgbW9kdWxlLiBUaGF0IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYmV0dGVyLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIGl0JiMzOTtzIHVzZWQuIEJhc2VkIG9uIHRoYXQgSSBpbW1lZGlhdGVseSB3YW50IHRvIHNlZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBmdW5jdGlvbiBhbmQgb3RoZXJzLiBBIGdvb2QgcGxhY2UgdG8gbG9vayBmb3IgdGhhdCBjb25uZWN0aW9uIGlzIGB2ZnNfbG9va3VwX29wZW5gLiBUaGF0IGZ1bmN0aW9uIGRlYWxzIHdpdGgsIHdlbGwsIGxvb2tpbmcgdXAgYW5kIG9wZW5pbmcgZmlsZXMsIHNvIGl0JiMzOTtzIGEgbGlrZWx5IGNhbmRpZGF0ZSB0byBpbnRlcmFjdCB3aXRoIGRlbnRyaWVzLiBMZXQmIzM5O3Mgc2VlIGhvdyBgZGVudHJ5X2NyZWF0ZWAgaXMgYWN0dWFsbHkgdXRpbGl6ZWQgd2l0aGluIHRoYXQgY29udGV4dC4gSSBleHBlY3QgYSBnb29kIHZpZXcgb2YgaG93IHRoaXMgYWxsIGFjdHVhbGx5IHdvcmtzIHRvZ2V0aGVyLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgaG93IHRoYXQgZnVuY3Rpb24gbWF5IHV0aWxpemUgdGhlIGRlbnRyeSBjYWNoZSwgYW5kIGhvdyB0aGF0IGNhY2hlIGlzIGNyZWF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zmc19sb29rdXBfb3BlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYz00NDk3PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvbmFtZWkuYy00Njc1LS8qKlxuZnMvbmFtZWkuYzo0Njc2OiAqIHZmc19sb29rdXBfb3BlbiAtIG9wZW4gYW5kIHBvc3NpYmx5IGNyZWF0ZSBhIHJlZ3VsYXIgZmlsZVxuZnMvbmFtZWkuYy00Njc3LSAqIEBwYXJlbnQ6IGRpcmVjdG9yeSB0byBjb250YWluIGZpbGVcbi0tXG5mcy9uYW1laS5jLTQ2OTctICovXG5mcy9uYW1laS5jOjQ2OTg6c3RydWN0IGZpbGUgKnZmc19sb29rdXBfb3BlbihzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqbGFzdCxcbmZzL25hbWVpLmMtNDY5OS1cdFx0XHQgICAgIGludCBvcGVuX2ZsYWcsIHVtb2RlX3QgbW9kZSlcbi0tXG5mcy9uYW1laS5jLTQ3NjgtfVxuZnMvbmFtZWkuYzo0NzY5OkVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModmZzX2xvb2t1cF9vcGVuLCBcJiMzNDtuZnNkXCYjMzQ7KTtcbmZzL25hbWVpLmMtNDc3MC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1MzQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgVmlydHVhbCBGaWxlc3lzdGVtKioKCk9rYXksIHNvIGB2ZnNfbG9va3VwX29wZW5gIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIEl0JiMzOTtzIGV4cG9ydGVkLCBzbyBpdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBpbiB0aGUgVkZTLiBOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcmVsYXRlZCBmdW5jdGlvbnMgYW5kIGhvdyB0aGluZ3MgaW50ZXJhY3QsIGFuZCBteSBtaW5kIG5hdHVyYWxseSBqdW1wcyB0byBgdmZzX21rZGlyYC4gU2luY2UgSSYjMzk7bSB3b3JraW5nIHdpdGggdGhlIFZGUyBhbmQgaXRzIHZhcmlvdXMgb3BlcmF0aW9ucywgYG1rZGlyYCBpcyBhIGZ1bmRhbWVudGFsIG9uZS4gTGV0JiMzOTtzIHNlZSBob3cgYHZmc19ta2RpcmAgaW50ZXJhY3RzIHdpdGggYHZmc19sb29rdXBfb3BlbmAgYW5kIGhvdyB0aGUgZGlyZWN0b3J5IGNyZWF0aW9uIHByb2Nlc3MgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gbG9va2luZyB1cCBhIGZpbGUvZGlyZWN0b3J5IChvcGVuKSBhbmQgY3JlYXRpbmcgYSBkaXJlY3RvcnkgKG1rZGlyKSwgYW5kIGhvdyB0aGV5IGFyZSBpbnRlZ3JhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZnNfbWtkaXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uYW1laS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25hbWVpLmM9NDQ3OT1zdGF0aWMgaW5saW5lXG5mcy9uYW1laS5jOjQ0ODA6c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKixcbmZzL25hbWVpLmMtNDQ4MS1cdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsXG4tLVxuZnMvbmFtZWkuYz00NDk3PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvbmFtZWkuYy00NjM2LVx0aWYgKGNyZWF0ZV9kaXIpIHtcbmZzL25hbWVpLmM6NDYzNzpcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LFxuZnMvbmFtZWkuYy00NjM4LVx0XHRcdFx0XHRcdCAgICAgICBtb2RlLCBcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xuLS1cbmZzL25hbWVpLmM9NTE4Nj1FWFBPUlRfU1lNQk9MKHN0YXJ0X2NyZWF0aW5nX3BhdGgpO1xuLS1cbmZzL25hbWVpLmMtNTE5NS0gKiBpZiBzdGFydF9jcmVhdGluZ19wYXRoKCkgcmV0dXJuZWQgYSBub24tZXJyb3IuXG5mcy9uYW1laS5jOjUxOTY6ICogSWYgdmZzX21rZGlyKCkgd2FzIGNhbGxlZCBhbmQgaXQgcmV0dXJuZWQgYW4gZXJyb3IsIHRoYXQgZXJyb3IgKnNob3VsZCpcbmZzL25hbWVpLmMtNTE5Ny0gKiBiZSBwYXNzZWQgdG8gZW5kX2NyZWF0aW5nX3BhdGgoKSB0b2dldGhlciB3aXRoIHRoZSBwYXRoLlxuLS1cbmZzL25hbWVpLmM9NTQyOT1zdGF0aWMgaW5saW5lXG5mcy9uYW1laS5jOjU0MzA6c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvbmFtZWkuYy01NDMxLVx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuLS1cbmZzL25hbWVpLmMtNTQ1Ni0vKipcbmZzL25hbWVpLmM6NTQ1NzogKiB2ZnNfbWtkaXIgLSBjcmVhdGUgZGlyZWN0b3J5IHJldHVybmluZyBjb3JyZWN0IGRlbnRyeSBpZiBwb3NzaWJsZVxuZnMvbmFtZWkuYy01NDU4LSAqIEBpZG1hcDpcdFx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuLS1cbmZzL25hbWVpLmMtNTQ3Ny0gKi9cbmZzL25hbWVpLmM6NTQ3ODpzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvbmFtZWkuYy01NDc5LVx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbi0tXG5mcy9uYW1laS5jLTU0OTctXG5mcy9uYW1laS5jOjU0OTg6XHRkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcbmZzL25hbWVpLmMtNTQ5OS1cdGlmIChJU19FUlIoZGUpKSB7XG4tLVxuZnMvbmFtZWkuYy01NTA4LX1cbmZzL25hbWVpLmM6NTUwOTpFWFBPUlRfU1lNQk9MKHZmc19ta2Rpcik7XG5mcy9uYW1laS5jLTU1MTAtXG5mcy9uYW1laS5jPTU1MTE9aW50IGZpbGVuYW1lX21rZGlyYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bW9kZV90IG1vZGUpXG4tLVxuZnMvbmFtZWkuYy01NTI2LVx0aWYgKCFlcnJvcikge1xuZnMvbmFtZWkuYzo1NTI3Olx0XHRkZW50cnkgPSB2ZnNfbWtkaXIobW50X2lkbWFwKHBhdGgubW50KSwgcGF0aC5kZW50cnktXHUwMDNlZF9pbm9kZSxcbmZzL25hbWVpLmMtNTUyOC1cdFx0XHRcdCAgIGRlbnRyeSwgbW9kZSwgXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA1MDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVGFyZ2V0aW5nIGBPX0lTX01LRElSYCBJbXBsZW1lbnRhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBgT19JU19NS0RJUmAgZmxhZ3MgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBWRlMuIGB2ZnNfbWtkaXJgIGlzIGV4cG9ydGVkLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgYW5hbHlzaXMsIGFuZCBJIGFsc28gc2VlIGB2ZnNfY3JlYXRlYCBhcyBhIHVzZWZ1bCBmb2N1cy4gSSBhbHNvIGtub3cgdGhlc2Ugc3ltYm9scyBhcmUgaW1wb3J0YW50OiBgdmZzX2xvb2t1cF9vcGVuYCwgYGRlbnRyeV9jcmVhdGVgLCBgZG9fc3lzX29wZW5gLCBgZmlsZW5hbWVfbWtkaXJhdGAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGBmaWxlbmFtZV9yZW5hbWVhdDJgLCBgdjlmc192ZnNfYXRvbWljX29wZW5gLCBgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bGAsIGBjZXBoX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBgY2lmc19hdG9taWNfb3BlbmAsIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYC4KCldhaXQsIGhvbGQgb24uIGBkb19zeXNfb3BlbmAgaXMgYSAqdmVyeSogaG90IHBhdGguIEZ1enppbmcgdGhhdCBoZWF2aWx5IG1pZ2h0IGNvbXBsZXRlbHkgdGhyb3cgb2ZmIGFueSBkaXN0cmlidXRpb24gbWV0cmljcyBJJiMzOTttIHRyeWluZyB0byBnYXRoZXIuIFRoZSBwcm9tcHQgaXMgc3BlY2lmaWNhbGx5IHRlbGxpbmcgbWUgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucywgc28gSSBuZWVkIHRvIGJlIG1vcmUgc2VsZWN0aXZlLiBgdmZzX21rZGlyYCBhbmQgYHZmc19jcmVhdGVgIGFyZSBhbHNvIHNvbWV3aGF0IGhvdCwgYnV0IHRoZXkgYXJlIG1vcmUgc3BlY2lmaWMgdGhhbiBgZG9fc3lzX29wZW5gLiBgdmZzX2xvb2t1cF9vcGVuYCBpcyBzcGVjaWZpYyB0byBuZnNkLCBhbmQgYGRlbnRyeV9jcmVhdGVgIGlzIHNwZWNpZmljIHRvIGNlcnRhaW4gY29kZSBwYXRocy4gVGhlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgYGF0b21pY19vcGVuYCBmdW5jdGlvbnMgYXJlIGlkZWFsIGJlY2F1c2UgdGhleSBhcmUgbW9kaWZpZWQgdG8gaGFuZGxlIGBPX0lTX01LRElSKGZsYWdzKWAuCgpTbywgbGV0JiMzOTtzIGZvY3VzIG9uIHRob3NlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgYGF0b21pY19vcGVuYCBmdW5jdGlvbnM6CiogICBgdjlmc192ZnNfYXRvbWljX29wZW5gCiogICBgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bGAKKiAgIGBjZXBoX2F0b21pY19vcGVuYAoqICAgYGdmczJfYXRvbWljX29wZW5gCiogICBgbmZzX2F0b21pY19vcGVuYAoqICAgYG5mc19hdG9taWNfb3Blbl92MjNgCiogICBgY2lmc19hdG9taWNfb3BlbmAKKiAgIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYAoKTm93LCBiZWZvcmUgSSBjb21taXQgdG8gdGhlc2UsIEkgbmVlZCB0byBjaGVjayBmb3IgYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlcXVpcmVkLiBUaGUgY29yZSBwYXJ0IG9mIHRoZSBmZWF0dXJlIGlzIFZGUywgc28gbm8gc3BlY2lhbCBjb25maWcgaXMgbmVlZGVkIHRoZXJlLiBCdXQgZm9yIHRoZSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9ucywgSSBzZWU6IGBORVRfOVBgLCBgQ0VQSF9GU2AsIGBGVVNFX0ZTYCwgYEdGUzJfRlNgLCBgTkZTX0ZTYCwgYENJRlNgLCBhbmQgYFZCT1hTRl9GU2AuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRob3NlIGNvbmZpZyBvcHRpb25zIGFyZSBlbmFibGVkIGZvciBlYWNoIG9mIHRoZXNlIGZpbGVzeXN0ZW1zIHRvIGVuc3VyZSB0aGV5IGFyZSBhdmFpbGFibGUgZm9yIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWQk9YU0ZfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy92Ym94c2YvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy92Ym94c2YvS2NvbmZpZzoxOmNvbmZpZyBWQk9YU0ZfRlNcbmZzL3Zib3hzZi9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsQm94IGd1ZXN0IHNoYXJlZCBmb2xkZXIgKHZib3hzZikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjc1OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50KioKCkFoLCByaWdodC4gVGhlIHByb21wdCBpcyBpbmNyZWRpYmx5IHN1Y2NpbmN0LiBXaGVuIEkgc2VlIGp1c3QgJiMzNDtgVkJPWFNGX0ZTYCwmIzM0OyBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHRoZSBpbXBsaWNhdGlvbi4gR2l2ZW4gdGhlIGNvbnRleHQgKG9yIGxhY2sgdGhlcmVvZiwgd2hpY2ggaXMgYWxzbyB0ZWxsaW5nISksIGl0IHNlZW1zIHNvbWVvbmUgaXMgbGlrZWx5IHJlZmVycmluZyB0byB0aGUgVmlydHVhbEJveCBTaGFyZWQgRm9sZGVycyBGaWxlc3lzdGVtLiBUaGVyZSYjMzk7cyBubyByb29tIGZvciBhbWJpZ3VpdHkgaGVyZS4gVGhlIGJyZXZpdHkgaXRzZWxmIGlzIHRoZSBrZXkgLSBpdCYjMzk7cyBhIGNvbmZpcm1hdGlvbiwgYW4gYWdyZWVtZW50LCBvciBwZXJoYXBzIGEgZGVjbGFyYXRpb24uIEl04oCZcyB0aGUgZmlsZXN5c3RlbSB1c2VkIHRvIHNoYXJlIGZvbGRlcnMgYmV0d2VlbiBhIFZpcnR1YWxCb3ggaG9zdCBhbmQgZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbXMuIEl0JiMzOTtzIGNvbmNpc2UgYmVjYXVzZSB0aGVyZSYjMzk7cyBsaXR0bGUgZWxzZSB0byBzYXkuIEl0JiMzOTtzIGEgc3RhbmRhcmQgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIHRoZSBub2QgaXMgZW5vdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgOVBfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy85cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzLzlwL0tjb25maWc6Mjpjb25maWcgOVBfRlNcbmZzLzlwL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1BsYW4gOSBSZXNvdXJjZSBTaGFyaW5nIFN1cHBvcnQgKDlQMjAwMClcJiMzNDtcbi0tXG5mcy85cC9LY29uZmlnPTE0PWlmIDlQX0ZTXG5mcy85cC9LY29uZmlnOjE1OmNvbmZpZyA5UF9GU0NBQ0hFXG5mcy85cC9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtFbmFibGUgOVAgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzLzlwL0tjb25maWctMjItXG5mcy85cC9LY29uZmlnOjIzOmNvbmZpZyA5UF9GU19QT1NJWF9BQ0xcbmZzLzlwL0tjb25maWctMjQtXHRib29sIFwmIzM0OzlQIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvOXAvS2NvbmZpZz0zMj1lbmRpZlxuLS1cbmZzLzlwL0tjb25maWctMzQtXG5mcy85cC9LY29uZmlnOjM1OmNvbmZpZyA5UF9GU19TRUNVUklUWVxuZnMvOXAvS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7OVAgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjQzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGVzKioKCkFscmlnaHQsIHNvIHRoZSBrZXkgaGVyZSBpcyB0aGF0IGA5UF9GU2AgaXMgdGhlIGNvbmZpZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBLbm93aW5nIHRoYXQgaXMgdGhlIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50LiBFdmVyeXRoaW5nIGZsb3dzIGZyb20gdGhlcmUsIGFuZCB1bmRlcnN0YW5kaW5nIHRoYXQgY29uZmlndXJhdGlvbiBpcyB0aGUgZm91bmRhdGlvbmFsIGVsZW1lbnQgdGhhdCB3aWxsIGluZmx1ZW5jZSB0aGUgbmV4dCBzdGVwcy4gSSBuZWVkIHRvIGtlZXAgdGhpcyBzcGVjaWZpYyBjb25maWcgaW4gbWluZCBhcyBJIHByb2NlZWQgd2l0aCBhbnkgc3Vic2VxdWVudCBhbmFseXNpcyBvciBhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDRVBIX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvY2VwaC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NlcGgvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvY2VwaC9LY29uZmlnOjI6Y29uZmlnIENFUEhfRlNcbmZzL2NlcGgvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Q2VwaCBkaXN0cmlidXRlZCBmaWxlIHN5c3RlbVwmIzM0O1xuLS1cbmZzL2NlcGgvS2NvbmZpZz0xOT1pZiBDRVBIX0ZTXG5mcy9jZXBoL0tjb25maWc6MjA6Y29uZmlnIENFUEhfRlNDQUNIRVxuZnMvY2VwaC9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtFbmFibGUgQ2VwaCBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvY2VwaC9LY29uZmlnPTI3PWVuZGlmXG5mcy9jZXBoL0tjb25maWctMjgtXG5mcy9jZXBoL0tjb25maWc6Mjk6Y29uZmlnIENFUEhfRlNfUE9TSVhfQUNMXG5mcy9jZXBoL0tjb25maWctMzAtXHRib29sIFwmIzM0O0NlcGggUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9jZXBoL0tjb25maWctMzgtXG5mcy9jZXBoL0tjb25maWc6Mzk6Y29uZmlnIENFUEhfRlNfU0VDVVJJVFlfTEFCRUxcbmZzL2NlcGgvS2NvbmZpZy00MC1cdGJvb2wgXCYjMzQ7Q2VwaEZTIFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzYyNQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqVGhpbmtpbmcgQWJvdXQgQ2VwaEZTIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IENlcGhGUywgYW5kIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGl0ZW0gdGhhdCYjMzk7cyBjb21pbmcgdG8gbWluZCBpcyB0aGUgYENFUEhfRlNgIHNldHRpbmcuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBpbW1lZGlhdGVseSBrbm93IHdlJiMzOTtyZSBub3QganVzdCBkaXNjdXNzaW5nIENlcGggZ2VuZXJhbGx5LCBidXQgZHJpbGxpbmcgZG93biB0byBpdHMgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgbGlrZWx5IGluIHRoZSB3ZWVkcyBvZiBtb3VudGluZywgdHVuaW5nLCBvciB0cm91Ymxlc2hvb3RpbmcgYSBDZXBoRlMgaW5zdGFuY2UuIFdlJiMzOTtyZSBlaXRoZXIgZXhhbWluaW5nIGhvdyBpdCYjMzk7cyBkZWZpbmVkLCBob3cgaXQmIzM5O3MgYmVoYXZpbmcsIG9yIGhvdyBpdCBpcyBpbXBsZW1lbnRlZC4gSSBwcm9iYWJseSBuZWVkIHNvbWUgY29udGV4dCBhcm91bmQgdGhhdCBzZXR0aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGlzc3VlLCBhcyB3ZWxsIGFzIHRoZSBzdXJyb3VuZGluZyBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZVU0VfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9mdXNlL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZnVzZS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xuZnMvZnVzZS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzg5NgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDb25maWd1cmluZyB0aGUgRmlsZXN5c3RlbSBJbnRlcmZhY2UqKgoKUmlnaHQsIGBGVVNFX0ZTYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0JiMzOTtzIHRoZSBjb25maWd1cmF0aW9uIHBvaW50IGZvciB0aGUgRmlsZSBTeXN0ZW0gaW4gVXNlciBTcGFjZSwgb3IgRlVTRSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLCBJJiMzOTttIHdvcmtpbmcgd2l0aC4gSXQgaW1tZWRpYXRlbHkgZm9jdXNlcyBtZSBvbiBob3cgdGhlIHdob2xlIHRoaW5nIGlzIHNldCB1cCwgd2hhdCBwYXJhbWV0ZXJzIGFyZSBhdmFpbGFibGUsIGFuZCB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLiBBbSBJIGRlYWxpbmcgd2l0aCBhIHNpbXBsZSBwYXNzdGhyb3VnaCBmaWxlc3lzdGVtLCBzb21ldGhpbmcgd2l0aCBjYWNoaW5nLCBvciBhIG1vcmUgY29tcGxleCBkaXN0cmlidXRlZCBkZXNpZ24/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHVzZXItc3BhY2Uva2VybmVsLXNwYWNlIGJvdW5kYXJ5IHdpdGggdGhpcyBzZXR0aW5nPyBVbmRlcnN0YW5kaW5nIHRoaXMgY29uZmlnLCB0aGUgYEZVU0VfRlNgIHNldHRpbmcsIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgcmVhbGx5IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscywgYW5kIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIG9mIHRoaXMgdGhpbmcuIEl0JiMzOTtzIHRoZSBseW5jaHBpbiwgdGhlIHBsYWNlIHdoZXJlIGFsbCB0aGUgcGllY2VzIGNvbWUgdG9nZXRoZXIgdG8gZGVmaW5lIHRoZSBiZWhhdmlvci4gSXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgR0ZTMl9GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2dmczIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9nZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2dmczIvS2NvbmZpZzoyOmNvbmZpZyBHRlMyX0ZTXG5mcy9nZnMyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0dGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2dmczIvS2NvbmZpZy0yNi1cbmZzL2dmczIvS2NvbmZpZzoyNzpjb25maWcgR0ZTMl9GU19MT0NLSU5HX0RMTVxuZnMvZ2ZzMi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtHRlMyIERMTSBsb2NraW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MjgxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkdGUzIgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBjb25maWd1cmF0aW9uIGZvciBHRlMyLiBUaGlua2luZyBhYm91dCB0aGlzLCBgR0ZTMl9GU2AgaXMgdGhlIGtleS4gVGhhdCBpbXBsaWVzIHdlJiMzOTtyZSBnb2luZyB0byBkaXZlIGludG8gdGhlIHNwZWNpZmljIGZpbGVzeXN0ZW0gcGFyYW1ldGVycywgcHJlc3VtYWJseSB0aHJvdWdoIGEgY29uZmlndXJhdGlvbiBmaWxlLCBjb21tYW5kLWxpbmUgZmxhZ3MsIG9yIHBvc3NpYmx5IGV2ZW4gYSBkZWRpY2F0ZWQgbWFuYWdlbWVudCB0b29sLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGZhbWlsaWFyIGFzcGVjdHM6IGJsb2NrIHNpemUsIGpvdXJuYWwgb3B0aW9ucywgcXVvdGEgc2V0dGluZ3MgKGlmIGFwcGxpY2FibGUpLCBtb3VudCBvcHRpb25zLCBhbmQgYW55IHNwZWNpZmljIEdGUzIgdHVuYWJsZSBwYXJhbWV0ZXJzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvciBzcGVjaWZpYyB1c2UgY2FzZXMuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoaXMgaXMgYSBuZXcgZGVwbG95bWVudCwgYW4gZXhpc3Rpbmcgc3lzdGVtIGJlaW5nIHR1bmVkLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4gQ29udGV4dCBpcyBhbHdheXMga2V5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgZnVydGhlciBkZXRhaWwgd2UgYXJlIHdvcmtpbmcgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GU19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25mcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25mcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9uZnMvS2NvbmZpZzoyOmNvbmZpZyBORlNfRlNcbmZzL25mcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtORlMgY2xpZW50IHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9uZnMvS2NvbmZpZz0xNjI9Y29uZmlnIFJPT1RfTkZTXG4tLVxuZnMvbmZzL0tjb25maWctMTcyLVxuZnMvbmZzL0tjb25maWc6MTczOmNvbmZpZyBORlNfRlNDQUNIRVxuZnMvbmZzL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtQcm92aWRlIE5GUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NjQ5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqUmVmbGVjdGluZyBvbiB0aGUgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzLi4uICYjMzQ7TkZTX0ZTJiMzNDsuIEl0JiMzOTtzIGEgY29uZmlndXJhdGlvbiBpdGVtLCBhIGtleSBvbmUsIG5vIGRvdWJ0LiBUaGUgc3BlY2lmaWMgbmFtaW5nIGNvbnZlbnRpb24gaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXTigJlzIHJlbGF0ZWQgdG8gTmV0d29yayBGaWxlIFN5c3RlbSwgdGhlIHVuZGVybHlpbmcgZmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGtlZXAgdGhpcyBpbiBtaW5kIGFzIEkgcHJvY2VzcyB0aGUgb3RoZXIgY29tcG9uZW50cy4gSXQgc2lnbmFscyBhIGZvdW5kYXRpb25hbCBhc3BlY3Qgb2Ygc3RvcmFnZSBhbmQgYWNjZXNzLiBPa2F5LCBJJiMzOTttIG5vdGluZyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb247IEkgd2lsbCBuZWVkIHRvIGRlbHZlIGRlZXBlciBpbnRvIGl0cyBzZXR0aW5ncyBhbmQgaW50ZXJhY3Rpb25zLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUsIGl0IG1pZ2h0IGJlIGFib3V0IG1vdW50aW5nIHBvaW50cywgZXhwb3J0IGNvbmZpZ3VyYXRpb25zLCB2ZXJzaW9uIG5lZ290aWF0aW9uLCBzZWN1cml0eSBvcHRpb25zLCB0aGUgd29ya3MuIFRoaXMgc2luZ2xlIHBpZWNlIG9mIGluZm9ybWF0aW9uLCAmIzM0O05GU19GUywmIzM0OyB3aWxsIG5lZWQgdG8gYmUgY3Jvc3MtcmVmZXJlbmNlZCB3aXRoIGFsbCB0aGUgcmVzdCBvZiB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENJRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9zbWIvY2xpZW50L0tjb25maWc6Mjpjb25maWcgQ0lGU1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtTTUIzIGFuZCBDSUZTIHN1cHBvcnQgKGFkdmFuY2VkIG5ldHdvcmsgZmlsZXN5c3RlbSlcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctNTMtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6NTQ6Y29uZmlnIENJRlNfU1RBVFMyXG5mcy9zbWIvY2xpZW50L0tjb25maWctNTUtXHRib29sIFwmIzM0O0V4dGVuZGVkIHN0YXRpc3RpY3NcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjctXG5mcy9zbWIvY2xpZW50L0tjb25maWc6Njg6Y29uZmlnIENJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjktXHRib29sIFwmIzM0O1N1cHBvcnQgbGVnYWN5IHNlcnZlcnMgd2hpY2ggdXNlIGxlc3Mgc2VjdXJlIGRpYWxlY3RzXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTgyLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjgzOmNvbmZpZyBDSUZTX1VQQ0FMTFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtLZXJiZXJvcy9TUE5FR08gYWR2YW5jZWQgc2Vzc2lvbiBzZXR1cFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05MS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo5Mjpjb25maWcgQ0lGU19YQVRUUlxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtDSUZTIGV4dGVuZGVkIGF0dHJpYnV0ZXNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA2LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjEwNzpjb25maWcgQ0lGU19QT1NJWFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwOC1cdGJvb2wgXCYjMzQ7Q0lGUyBQT1NJWCBFeHRlbnNpb25zXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTExOC1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMTk6Y29uZmlnIENJRlNfREVCVUdcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjAtXHRib29sIFwmIzM0O0VuYWJsZSBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjctXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTI4OmNvbmZpZyBDSUZTX0RFQlVHMlxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGFkZGl0aW9uYWwgQ0lGUyBkZWJ1Z2dpbmcgcm91dGluZXNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTM4LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjEzOTpjb25maWcgQ0lGU19ERUJVR19EVU1QX0tFWVNcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDAtXHRib29sIFwmIzM0O0R1bXAgZW5jcnlwdGlvbiBrZXlzIGZvciBvZmZsaW5lIGRlY3J5cHRpb24gKFVuc2FmZSlcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTQ4LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE0OTpjb25maWcgQ0lGU19ERlNfVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTUwLVx0Ym9vbCBcJiMzNDtERlMgZmVhdHVyZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE2MS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNjI6Y29uZmlnIENJRlNfU1dOX1VQQ0FMTFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE2My1cdGJvb2wgXCYjMzQ7U1dOIGZlYXR1cmUgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzItXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTczOmNvbmZpZyBDSUZTX05GU0RfRVhQT1JUXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtBbGxvdyBuZnNkIHRvIGV4cG9ydCBDSUZTIGZpbGUgc3lzdGVtXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnPTE3OT1pZiBDSUZTXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTgwLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE4MTpjb25maWcgQ0lGU19TTUJfRElSRUNUXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTgyLVx0Ym9vbCBcJiMzNDtTTUIgRGlyZWN0IHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkwLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE5MTpjb25maWcgQ0lGU19GU0NBQ0hFXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkyLVx0Ym9vbCBcJiMzNDtQcm92aWRlIENJRlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTk5OmNvbmZpZyBDSUZTX1JPT1RcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMDAtXHRib29sIFwmIzM0O1NNQiByb290IGZpbGUgc3lzdGVtIChFeHBlcmltZW50YWwpXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwNi1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyMDc6Y29uZmlnIENJRlNfQ09NUFJFU1NJT05cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMDgtXHRib29sIFwmIzM0O1NNQiBtZXNzYWdlIGNvbXByZXNzaW9uIChFeHBlcmltZW50YWwpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTIzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNjk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQXRvbWljIERpcmVjdG9yeSBDcmVhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgaW50cm9kdWNpbmcgYSBuZXcgYXRvbWljIGRpcmVjdG9yeSBjcmVhdGlvbiBmZWF0dXJlIHZpYSBgb3BlbmF0KClgLCB1c2luZyBgT19DUkVBVCB8IE9fRElSRUNUT1JZYC4gVGhpcyBpcyBhIHByZXR0eSBpbnRlcmVzdGluZyBhZGRpdGlvbiwgYXMgYXRvbWljYWxseSBjcmVhdGluZyBkaXJlY3RvcmllcyBoYXMgb2Z0ZW4gYmVlbiBhIGJpdCBvZiBhIHRyaWNreSBhcmVhLgoKVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcyBhcmUgYDlQX0ZTYCwgYENFUEhfRlNgLCBgRlVTRV9GU2AsIGBHRlMyX0ZTYCwgYE5GU19GU2AsIGBDSUZTYCwgYW5kIGBWQk9YU0ZfRlNgIOKAkyB0aG9zZSBhcmUgdGhlIGZpbGVzeXN0ZW1zIHRoYXQgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gc3VwcG9ydCB0aGlzIG5ldyBhdG9taWMgb3BlbiBvcGVyYXRpb24uIEkmIzM5O20gbm90aW5nIHRoYXQgYmVjYXVzZSBpdCBnaXZlcyBtZSBhIGNsZWFyIGlkZWEgb2Ygd2hpY2ggc3Vic3lzdGVtcyBhcmUgYWZmZWN0ZWQuCgpJdCBsb29rcyBsaWtlIHRoZSBrZXkgY2hhbmdlIGlzIGluIGhvdyB0aGUgVkZTIGludGVyYWN0cyB3aXRoIGBPX0NSRUFUYCBhbmQgYE9fSVNfTUtESVIoZmxhZ3MpYC4gU3BlY2lmaWNhbGx5LCBpZiBgT19JU19NS0RJUihmbGFncylgIGlzIHRydWUgKG1lYW5pbmcgd2UmIzM5O3JlIHRyeWluZyB0byBjcmVhdGUgYSBkaXJlY3RvcnkpLCB0aGVuIGBPX0NSRUFUYCBpcyBjbGVhcmVkLiBUaGUgcmF0aW9uYWxlIGlzIHRoYXQgYGF0b21pY19vcGVuYCBpbXBsZW1lbnRhdGlvbnMgb2Z0ZW4gZG9uJiMzOTt0IHN1cHBvcnQgZGlyZWN0b3J5IGNyZWF0aW9uIGRpcmVjdGx5LiBUaGlzIG1lYW5zIHRoZXkgY2FuIGZhbGwgYmFjayB0byB0aGUgc3RhbmRhcmQgbG9va3VwIHByb2Nlc3MsIGFuZCBgbWtkaXJgIHdpbGwgYmUgY2FsbGVkIGluc3RlYWQgb2YgYGNyZWF0ZWAuIFRoaXMgbWFrZXMgYSBsb3Qgb2Ygc2Vuc2UsIGtlZXBpbmcgdGhlIGJlaGF2aW9yIGluIGxpbmUgd2l0aCB3aGF0IGEgZGV2ZWxvcGVyIHdvdWxkIGV4cGVjdC4KCk5vdywgdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYC4gVGhvc2UgYXJlIHRoZSBmaWxlcyBJJiMzOTtsbCB3YW50IHRvIGZvY3VzIG9uIHdoZW4gSSYjMzk7bSBhc3Nlc3NpbmcgdGhlIGltcGFjdCBvZiB0aGlzLiBUaGUga2V5IGZ1bmN0aW9ucyB0byBsb29rIGF0IGFyZSB0aGUgY29yZSBWRlMgZnVuY3Rpb25zOiBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgdmZzX2xvb2t1cF9vcGVuYCwgYGRlbnRyeV9jcmVhdGVgLCBgZmlsZW5hbWVfbWtkaXJhdGAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGFuZCBgZmlsZW5hbWVfcmVuYW1lYXQyYC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyB0aGVzZSBmdW5jdGlvbnMgaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbi4KCkkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBmaWxlbmFtZV9ta2RpcmF0YCwgYGZpbGVuYW1lX3VubGlua2F0YCwgYW5kIGBmaWxlbmFtZV9yZW5hbWVhdDJgIGFyZSAqbm90KiBzdGF0aWMsIHNvIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgb3V0c2lkZSB0aGVpciByZXNwZWN0aXZlIGZpbGVzLiBHb29kLiBJIGFsc28gY2hlY2tlZCB0aGF0IGBPX01LRElSX01BU0tgIGlzbiYjMzk7dCB1c2VkIGFueXdoZXJlIGVsc2UsIHdoaWNoIGZ1cnRoZXIgaXNvbGF0ZXMgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UuCgpGcm9tIGEgdGVzdGluZyBwZXJzcGVjdGl2ZSwgdGhlIGltcGxpY2F0aW9ucyBhcmUgcHJldHR5IGNsZWFyOiB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgaXQgbmVlZHMgaGVhdnkgZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiB0aG9zZSBjb3JlIFZGUyBmdW5jdGlvbnMsIGFsb25nIHdpdGggdGhlaXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdXBkYXRlZCBmaWxlc3lzdGVtcyYjMzk7IGBhdG9taWNfb3BlbmAgaW1wbGVtZW50YXRpb25zLCBzdWNoIGFzIGB2OWZzX3Zmc19hdG9taWNfb3BlbmAsIGBjZXBoX2F0b21pY19vcGVuYCwgZXRjLiBJJiMzOTttIGdvaW5nIHRvIGFkZCB0aGVzZSB0byBteSBsaXN0IG9mIHN5bWJvbHMgdG8gaW52ZXN0aWdhdGUgbW9yZSB0aG9yb3VnaGx5LgoKU28sIGluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcsIGFsYmVpdCBzdWJ0bGUsIGF0b21pYyBkaXJlY3RvcnkgY3JlYXRpb24gZmVhdHVyZSB1c2luZyBhbiBleGlzdGluZyBmbGFnLiBUaGUgVkZTIGFuZCBhIHNlcmllcyBvZiBmaWxlc3lzdGVtIGRyaXZlcnMgd2lsbCBuZWVkIHRvIGJlIGxvb2tlZCBhdCBjbG9zZWx5IHRvIGFuYWx5emUgYmVoYXZpb3IgYW5kIHRlc3QgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7djlmc192ZnNfYXRvbWljX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy85cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvOXAvdmZzX2lub2RlLmM9NTc5PXY5ZnNfY3JlYXRlKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzLzlwL3Zmc19pbm9kZS5jLTY0OC0gKlxuZnMvOXAvdmZzX2lub2RlLmM6NjQ5OiAqIG9wZW4oLi4sIE9fQ1JFQVQpIGlzIGhhbmRsZWQgaW4gdjlmc192ZnNfYXRvbWljX29wZW4oKS4gIFRoaXMgaXMgb25seSBjYWxsZWRcbmZzLzlwL3Zmc19pbm9kZS5jLTY1MC0gKiBmb3IgbWtub2QoMikuXG4tLVxuZnMvOXAvdmZzX2lub2RlLmM9NzY3PXN0YXRpYyBpbnRcbmZzLzlwL3Zmc19pbm9kZS5jOjc2ODp2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZnMvOXAvdmZzX2lub2RlLmMtNzY5LVx0XHQgICAgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSlcbi0tXG5mcy85cC92ZnNfaW5vZGUuYz0xMzY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB2OWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zX2RvdHUgPSB7XG4tLVxuZnMvOXAvdmZzX2lub2RlLmMtMTM3MC1cdC5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsXG5mcy85cC92ZnNfaW5vZGUuYzoxMzcxOlx0LmF0b21pY19vcGVuID0gdjlmc192ZnNfYXRvbWljX29wZW4sXG5mcy85cC92ZnNfaW5vZGUuYy0xMzcyLVx0LnN5bWxpbmsgPSB2OWZzX3Zmc19zeW1saW5rLFxuLS1cbmZzLzlwL3Zmc19pbm9kZS5jPTEzODM9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvOXAvdmZzX2lub2RlLmMtMTM4NS1cdC5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsXG5mcy85cC92ZnNfaW5vZGUuYzoxMzg2Olx0LmF0b21pY19vcGVuID0gdjlmc192ZnNfYXRvbWljX29wZW4sXG5mcy85cC92ZnNfaW5vZGUuYy0xMzg3LVx0LnVubGluayA9IHY5ZnNfdmZzX3VubGluayxcbi0tXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jPTIyNT1zdGF0aWMgaW50XG5mcy85cC92ZnNfaW5vZGVfZG90bC5jOjIyNjp2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTIyNy1cdFx0XHQgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVtb2RlX3Qgb21vZGUpXG4tLVxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYz05NjQ9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9uc19kb3RsID0ge1xuZnMvOXAvdmZzX2lub2RlX2RvdGwuYy05NjUtXHQuY3JlYXRlID0gdjlmc192ZnNfY3JlYXRlX2RvdGwsXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jOjk2NjpcdC5hdG9taWNfb3BlbiA9IHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwsXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jLTk2Ny1cdC5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDY0CgkJCQkJCQlvdXRwdXQ6IDMyNAoJCQkJCQkJdGhvdWdodHM6IDI5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXcgVkZTIEZlYXR1cmUqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBuZXcgcGF0Y2guIFRoZXNlIGF0b21pYyBvcGVuIGZ1bmN0aW9ucywgdGhleSYjMzk7cmUgc3RhdGljIGJ1dCBsaW5rZWQgdG8gYGlub2RlX29wZXJhdGlvbnMtJmd0O2F0b21pY19vcGVuYC4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBub3QgaW5saW5lZCwgd2hpY2ggaXMgZ29vZCDigJMgdGhleSBoYXZlIHRoZWlyIG93biBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBQZXJmZWN0LiBJJiMzOTtsbCBkZWZpbml0ZWx5IGFkZCB0aGVzZSB0byB0aGUgRm9jdXNTeW1ib2xzIGxpc3Q7IGBjZXBoX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBhbmQgdGhlIG90aGVycyBhcmUgY3J1Y2lhbCBmb3IgZnV6emluZyB0aGlzLgoKTGV0IG1lIGp1c3QgcXVpY2tseSByZXZpZXcgdGhvc2UgRm9jdXNTeW1ib2xzIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJJiMzOTt2ZSBnb3QgYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYHZmc19sb29rdXBfb3BlbmAsIGBkZW50cnlfY3JlYXRlYCwgYGZpbGVuYW1lX21rZGlyYXRgLCBgZmlsZW5hbWVfdW5saW5rYXRgLCBhbmQgYGZpbGVuYW1lX3JlbmFtZWF0MmAuIFRoZW4gdGhlcmUgYXJlIHRoZSBzcGVjaWZpYyBmaWxlc3lzdGVtIGZ1bmN0aW9uczogYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYHY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxgLCBgY2VwaF9hdG9taWNfb3BlbmAsIGBmdXNlX2F0b21pY19vcGVuYCwgYGdmczJfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3Blbl92MjNgLCBgY2lmc19hdG9taWNfb3BlbmAsIGFuZCBgdmJveHNmX2Rpcl9hdG9taWNfb3BlbmAuIFllcCwgdGhhdCBsb29rcyBjb21wcmVoZW5zaXZlLgoKTm93LCBqdXN0IGNoZWNraW5nIHRoZSBjb25maWdzLi4uIGA5UF9GU2AsIGBDRVBIX0ZTYCwgYEZVU0VfRlNgLCBgR0ZTMl9GU2AsIGBORlNfRlNgLCBgQ0lGU2AsIGFuZCBgVkJPWFNGX0ZTYC4gQWxsIHRoZSByZWxldmFudCBmaWxlc3lzdGVtcyBhcmUgY292ZXJlZC4KClllYWgsIEkgdGhpbmsgdGhpcyBpcyBzb2xpZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0aGF0IG1vZGlmaWVzIHRoZSBjb3JlIFZGUyBsb2dpYyAqYW5kKiBzZXZlcmFsIGZpbGVzeXN0ZW1zLiBDb25zaWRlcmluZyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgdGhpcyBpcyBhYnNvbHV0ZWx5IHByaW1lIGZ1enppbmcgbWF0ZXJpYWwuIEl0JiMzOTtzIGEgaGlnaC1pbXBhY3QgYXJlYSB3aXRoIGEgbG90IG9mIHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIG5lZWQgdG8gcHJpb3JpdGl6ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OywKICAgICYjMzQ7RlVTRV9GUyYjMzQ7LAogICAgJiMzNDtHRlMyX0ZTJiMzNDssCiAgICAmIzM0O05GU19GUyYjMzQ7LAogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O1ZCT1hTRl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19ta2RpciYjMzQ7LAogICAgJiMzNDt2ZnNfY3JlYXRlJiMzNDssCiAgICAmIzM0O3Zmc19sb29rdXBfb3BlbiYjMzQ7LAogICAgJiMzNDtkZW50cnlfY3JlYXRlJiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX21rZGlyYXQmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfdW5saW5rYXQmIzM0OywKICAgICYjMzQ7ZmlsZW5hbWVfcmVuYW1lYXQyJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O3Y5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGwmIzM0OywKICAgICYjMzQ7Y2VwaF9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtmdXNlX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O2dmczJfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7bmZzX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3Blbl92MjMmIzM0OywKICAgICYjMzQ7Y2lmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2Ym94c2ZfZGlyX2F0b21pY19vcGVuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCBmb3IgYG9wZW5hdCgpYCB0byBhdG9taWNhbGx5IGNyZWF0ZSBhIGRpcmVjdG9yeSBhbmQgcmV0dXJuIGEgZmlsZSBkZXNjcmlwdG9yLiBJdCBtb2RpZmllcyBjb3JlIFZGUyBwYXRoIHJlc29sdXRpb24gYW5kIGNyZWF0aW9uIGxvZ2ljIGluIGBmcy9uYW1laS5jYCBhbmQgYGZzL29wZW4uY2AsIGFuZCB1cGRhdGVzIHNldmVyYWwgZmlsZXN5c3RlbXMmIzM5OyBgYXRvbWljX29wZW5gIGltcGxlbWVudGF0aW9ucyB0byBoYW5kbGUgdGhlIG5ldyBmbGFnIGNvbWJpbmF0aW9uLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDs5UF9GUyYjMzQ7LAogICAgJiMzNDtDRVBIX0ZTJiMzNDssCiAgICAmIzM0O0ZVU0VfRlMmIzM0OywKICAgICYjMzQ7R0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtORlNfRlMmIzM0OywKICAgICYjMzQ7Q0lGUyYjMzQ7LAogICAgJiMzNDtWQk9YU0ZfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfbWtkaXImIzM0OywKICAgICYjMzQ7dmZzX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDt2ZnNfbG9va3VwX29wZW4mIzM0OywKICAgICYjMzQ7ZGVudHJ5X2NyZWF0ZSYjMzQ7LAogICAgJiMzNDtmaWxlbmFtZV9ta2RpcmF0JiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX3VubGlua2F0JiMzNDssCiAgICAmIzM0O2ZpbGVuYW1lX3JlbmFtZWF0MiYjMzQ7LAogICAgJiMzNDt2OWZzX3Zmc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDt2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsJiMzNDssCiAgICAmIzM0O2NlcGhfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7ZnVzZV9hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtnZnMyX2F0b21pY19vcGVuJiMzNDssCiAgICAmIzM0O25mc19hdG9taWNfb3BlbiYjMzQ7LAogICAgJiMzNDtuZnNfYXRvbWljX29wZW5fdjIzJiMzNDssCiAgICAmIzM0O2NpZnNfYXRvbWljX29wZW4mIzM0OywKICAgICYjMzQ7dmJveHNmX2Rpcl9hdG9taWNfb3BlbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAgZm9yIGBvcGVuYXQoKWAgdG8gYXRvbWljYWxseSBjcmVhdGUgYSBkaXJlY3RvcnkgYW5kIHJldHVybiBhIGZpbGUgZGVzY3JpcHRvci4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aCByZXNvbHV0aW9uIGFuZCBjcmVhdGlvbiBsb2dpYyBpbiBgZnMvbmFtZWkuY2AgYW5kIGBmcy9vcGVuLmNgLCBhbmQgdXBkYXRlcyBzZXZlcmFsIGZpbGVzeXN0ZW1zJiMzOTsgYGF0b21pY19vcGVuYCBpbXBsZW1lbnRhdGlvbnMgdG8gaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbi4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIFZGUyBhbmQgdmFyaW91cyBmaWxlc3lzdGVtcyB0byBzdXBwb3J0IGNyZWF0aW5nIGRpcmVjdG9yaWVzIHZpYSBgb3BlbmF0KClgIHdpdGggdGhlIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgIGZsYWdzLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBhZGRpbmcgdGhlIGBPX0lTX01LRElSYCBtYWNybywgbW9kaWZ5aW5nIGBidWlsZF9vcGVuX2ZsYWdzKClgIHRvIGhhbmRsZSB0aGUgbmV3IGZsYWcgY29tYmluYXRpb24sIGFuZCB1cGRhdGluZyBgbG9va3VwX29wZW4oKWAgYW5kIGB2ZnNfbWtkaXIoKWAgcGF0aHMgaW4gYGZzL25hbWVpLmNgIHRvIHJvdXRlIGRpcmVjdG9yeSBjcmVhdGlvbiByZXF1ZXN0cyB0byBgdmZzX21rZGlyX25vX3Blcm0oKWAgaW5zdGVhZCBvZiByZWd1bGFyIGZpbGUgY3JlYXRpb24gZnVuY3Rpb25zLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgbG9naWNhbCwgYWx0ZXJpbmcgY29udHJvbCBmbG93IGFuZCBmbGFnIGhhbmRsaW5nIHdpdGhpbiB0aGUgVkZTIGxheWVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbGwgdmFyaWFibGVzIHVzZWQgKHN1Y2ggYXMgYGRlbGVnYXRlZF9pbm9kZWApIGFyZSBwcm9wZXJseSB6ZXJvLWluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDY5NzRmMmRhZTAzYTMxNGVlZGNkMjI1MTQ5ZTEyNmI2NjA5NGI0ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDE2OjE0OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuYwppbmRleCAzODI5NTU0Y2EzNjkyLi5iMWUwODIzYzg3YjU3IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy85cC92ZnNfaW5vZGUuYwpAQCAtNzc2LDYgJiM0Mzs3NzYsOSBAQCB2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IHA5X29tb2RlOwogCiYjNDM7CWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2OWZzX3Zmc19sb29rdXAoZGlyLCBkZW50cnksIDApOwogCQlpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpCmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuYwppbmRleCAxMTZiMjllOTVmMjFlLi42NGUwYWJhMDhkYTE2IDEwMDY0NAotLS0gYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMKQEAgLTIzOCw2ICYjNDM7MjM4LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7CiAJc3RydWN0IHBvc2l4X2FjbCAqcGFjbCA9IE5VTEwsICpkYWNsID0gTlVMTDsKIAomIzQzOwlpZiAoT19JU19NS0RJUihmbGFncykpCiYjNDM7CQlmbGFncyAmYW1wOz0gfk9fQ1JFQVQ7CiYjNDM7CiAJaWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHsKIAkJc3RydWN0IGRlbnRyeSAqcmVzID0gdjlmc192ZnNfbG9va3VwKGRpciwgZGVudHJ5LCAwKTsKIAkJaWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9maWxlLmMgYi9mcy9jZXBoL2ZpbGUuYwppbmRleCBhNGEyYTRiNmEwMjdkLi42MjE2M2I3ZWNhNWY5IDEwMDY0NAotLS0gYS9mcy9jZXBoL2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jZXBoL2ZpbGUuYwpAQCAtODEyLDYgJiM0Mzs4MTIsOSBAQCBpbnQgY2VwaF9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCSAgICAgIGRpciwgY2VwaF92aW5vcChkaXIpLCBkZW50cnksIGRlbnRyeSwKIAkgICAgICBkX3VuaGFzaGVkKGRlbnRyeSkgPyAmIzM0O3VuaGFzaGVkJiMzNDsgOiAmIzM0O2hhc2hlZCYjMzQ7LCBmbGFncywgbW9kZSk7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIoZmxhZ3MpKQomIzQzOwkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChkZW50cnktJmd0O2RfbmFtZS5sZW4gJmd0OyBOQU1FX01BWCkKIAkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jCmluZGV4IGQ0ZTAwMjk4MTBjMGYuLjU1ZDU4NDRlMjY1NTkgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZnVzZS9kaXIuYwpAQCAtOTM1LDYgJiM0Mzs5MzUsOSBAQCBzdGF0aWMgaW50IGZ1c2VfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmVudHJ5LAogCXN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIoZmxhZ3MpKQomIzQzOwkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChmdXNlX2lzX2JhZChkaXIpKQogCQlyZXR1cm4gLUVJTzsKIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jCmluZGV4IGYzNjE4NzZjNTU4MzMuLjNlZTEzNjBmMWJjMjcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9nZnMyL2lub2RlLmMKQEAgLTEzODYsNiAmIzQzOzEzODYsOSBAQCBzdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIHsKIAlib29sIGV4Y2wgPSAhIShmbGFncyAmYW1wOyBPX0VYQ0wpOwogCiYjNDM7CWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCWZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpkID0gX19nZnMyX2xvb2t1cChkaXIsIGRlbnRyeSwgZmlsZSk7CiAJCWlmIChmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfT1BFTkVEKSB7CmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCAyMGE2NTM0ZWEzZWZmLi5lMWE4ZjE4Mzg1YTUyIDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25hbWVpLmMKQEAgLTEzODIsMTMgJiM0MzsxMzgyLDEzIEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaykKIAogLyoqCiAgKiBtYXlfY3JlYXRlX2luX3N0aWNreSAtIENoZWNrIHdoZXRoZXIgYW4gT19DUkVBVCBvcGVuIGluIGEgc3RpY2t5IGRpcmVjdG9yeQotICoJCQkgIHNob3VsZCBiZSBhbGxvd2VkLCBvciBub3QsIG9uIGZpbGVzIHRoYXQgYWxyZWFkeQotICoJCQkgIGV4aXN0LgomIzQzOyAqCQkJICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcy9kaXJlY3RvcmllcyB0aGF0CiYjNDM7ICoJCQkgIGFscmVhZHkgZXhpc3QuCiAgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb20KICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGEKICAqIEBpbm9kZTogdGhlIGlub2RlIG9mIHRoZSBmaWxlIHRvIG9wZW4KICAqCi0gKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZSkgd2hlbjoKJiM0MzsgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZS9kaXJlY3RvcnkpIHdoZW46CiAgKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkCiAgKiAgIC0gdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMKICAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5CkBAIC0xNDE2LDYgJiM0MzsxNDE2LDE0IEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLAogCWlmIChsaWtlbHkoIShkaXJfbW9kZSAmYW1wOyBTX0lTVlRYKSkpCiAJCXJldHVybiAwOwogCiYjNDM7CS8qCiYjNDM7CSAqIFRoZXJlIGlzIG5vIHNlcGFyYXRlIHN5c2N0bCBmb3IgZGlyZWN0b3J5IGNyZWF0aW9uIGluIHN0aWNreQomIzQzOwkgKiBmb2xkZXJzLiBUaGVyZWZvcmUsIGZvciB0aGUgU19JU0RJUiBjYXNlLCBkaXNhYmxpbmcKJiM0MzsJICogc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyIGlzIG5vdCBlbm91Z2ggdG8gYWxsb3cgY3JlYXRpbmcgYQomIzQzOwkgKiBkaXJlY3RvcnkgaW4gYSBzdGlja3kgZm9sZGVyLCBiZWNhdXNlIHRoYXQgbWF5IHN1cnByaXNlIHVzZXJzCiYjNDM7CSAqIG5vdCBleHBlY3RpbmcgdGhhdCBPX0NSRUFUfE9fRElSRUNUT1JZIGlzIHBvc3NpYmxlIG9uIG5ld2VyCiYjNDM7CSAqIGtlcm5lbHMuCiYjNDM7CSAqLwogCWlmIChTX0lTUkVHKGlub2RlLSZndDtpX21vZGUpICZhbXA7JmFtcDsgIXN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikKIAkJcmV0dXJuIDA7CiAKQEAgLTE0NDcsNiAmIzQzOzE0NTUsMTIgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsCiAJCQkJCSAgICAgICYjMzQ7c3RpY2t5X2NyZWF0ZV9yZWd1bGFyJiMzNDspOwogCQkJcmV0dXJuIC1FQUNDRVM7CiAJCX0KJiM0MzsKJiM0MzsJCWlmIChTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CQkJYXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsCiYjNDM7CQkJCQkgICAgICAmIzM0O3N0aWNreV9jcmVhdGVfZGlyJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUFDQ0VTOwomIzQzOwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtMjc4MSw5ICYjNDM7Mjc5NSwxNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncykKIAlyZXR1cm4gczsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKGNvbnN0IHN0cnVjdCBxc3RyICpsYXN0KQomIzQzO3sKJiM0MzsJLyogbGFzdC0mZ3Q7bGVuIGlzIHNldCBieSBoYXNoX25hbWUoKSB0byB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50CiYjNDM7CSAqIGNvbXBvbmVudCAtJmd0O25hbWUsIHRlcm1pbmF0aW5nIHdpdGggJiMzOTsvJiMzOTsgb3IgYSBOVUwgY2hhcmFjdGVyLiAqLwomIzQzOwlyZXR1cm4gKGJvb2wpbGFzdC0mZ3Q7bmFtZVtsYXN0LSZndDtsZW5dOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbG9va3VwX2xhc3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0JaWYgKG5kLSZndDtsYXN0X3R5cGUgPT0gTEFTVF9OT1JNICZhbXA7JmFtcDsgbmQtJmd0O2xhc3QubmFtZVtuZC0mZ3Q7bGFzdC5sZW5dKQomIzQzOwlpZiAobmQtJmd0O2xhc3RfdHlwZSA9PSBMQVNUX05PUk0gJmFtcDsmYW1wOyB0cmFpbGluZ19zbGFzaGVzKCZhbXA7bmQtJmd0O2xhc3QpKQogCQluZC0mZ3Q7ZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7CiAKIAlyZXR1cm4gd2Fsa19jb21wb25lbnQobmQsIFdBTEtfVFJBSUxJTkcpOwpAQCAtNDE1OSw2ICYjNDM7NDE4MCwyNCBAQCBzdGF0aWMgaW5saW5lIHVtb2RlX3QgdmZzX3ByZXBhcmVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlyZXR1cm4gbW9kZTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUKJiM0MztpbnQgdmZzX2NyZWF0ZV9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiYjNDM7CQkgICAgICAgdW1vZGVfdCBtb2RlLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqZGlyID0gZF9pbm9kZShkZW50cnktJmd0O2RfcGFyZW50KTsKJiM0MzsJaW50IGVycm9yOwomIzQzOwomIzQzOwllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwllcnJvciA9IGRpci0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CWlmICghZXJyb3IpCiYjNDM7CQlmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyb3I7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB2ZnNfY3JlYXRlIC0gY3JlYXRlIG5ldyBmaWxlCiAgKiBAaWRtYXA6CWlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb20KQEAgLTQxOTEsMTMgJiM0Mzs0MjMwLDggQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLAogCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKLQllcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQllcnJvciA9IGRpci0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7Ci0JaWYgKCFlcnJvcikKLQkJZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTsKLQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CXJldHVybiB2ZnNfY3JlYXRlX25vX3Blcm0oaWRtYXAsIGRlbnRyeSwgbW9kZSwgZGkpOwogfQogRVhQT1JUX1NZTUJPTCh2ZnNfY3JlYXRlKTsKIApAQCAtNDMxNCwyMSAmIzQzOzQzNDgsNDEgQEAgc3RhdGljIGlubGluZSBpbnQgb3Blbl90b19uYW1laV9mbGFncyhpbnQgZmxhZykKIAogc3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQljb25zdCBzdHJ1Y3QgcGF0aCAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQl1bW9kZV90IG1vZGUpCiYjNDM7CQkJaW50IG9wZW5fZmxhZywgdW1vZGVfdCBtb2RlKQogewotCWludCBlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApOwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci0mZ3Q7ZGVudHJ5LSZndDtkX2lub2RlOwomIzQzOwlib29sIGNyZWF0ZV9kaXIgPSBPX0lTX01LRElSKG9wZW5fZmxhZyk7CiYjNDM7CWludCBlcnJvcjsKJiM0MzsKJiM0MzsJaWYgKGNyZWF0ZV9kaXIpCiYjNDM7CQllcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwllbHNlCiYjNDM7CQllcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCiAJaWYgKCFmc3VpZGdpZF9oYXNfbWFwcGluZyhkaXItJmd0O2RlbnRyeS0mZ3Q7ZF9zYiwgaWRtYXApKQogCQlyZXR1cm4gLUVPVkVSRkxPVzsKIAotCWVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyLSZndDtkZW50cnktJmd0O2RfaW5vZGUsCi0JCQkJIE1BWV9XUklURSB8IE1BWV9FWEVDKTsKJiM0MzsJZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBkaXJfaW5vZGUsIE1BWV9XUklURSB8IE1BWV9FWEVDKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCXJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLSZndDtkZW50cnktJmd0O2RfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CWlmIChjcmVhdGVfZGlyKQomIzQzOwkJZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CWVsc2UKJiM0MzsJCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpcl9pbm9kZSwgZGVudHJ5LCBtb2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHVtb2RlX3Qgb19jcmVhdGVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKJiM0MzsJCWNvbnN0IHN0cnVjdCBpbm9kZSAqZGlyLCBpbnQgb3Blbl9mbGFnLCB1bW9kZV90IG1vZGUpCiYjNDM7ewomIzQzOwlpZiAoT19JU19NS0RJUihvcGVuX2ZsYWcpKQomIzQzOwkJcmV0dXJuIHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JUldYVUdPIHwgU19JU1ZUWCwgU19JRkRJUik7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7CiB9CiAKIC8qKgpAQCAtNDM2NCw4ICYjNDM7NDQxOCw5IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5CiAKIAlmaWxlLSZndDtfX2ZfcGF0aC5kZW50cnkgPSBERU5UUllfTk9UX1NFVDsKIAlmaWxlLSZndDtfX2ZfcGF0aC5tbnQgPSBwYXRoLSZndDttbnQ7CiYjNDM7CiAJZXJyb3IgPSBkaXJfaW5vZGUtJmd0O2lfb3AtJmd0O2F0b21pY19vcGVuKGRpcl9pbm9kZSwgZGVudHJ5LCBmaWxlLAotCQkJCSAgICAgICBvcGVuX3RvX25hbWVpX2ZsYWdzKG9wZW5fZmxhZyksIG1vZGUpOwomIzQzOwkJCQkJICAgICBvcGVuX3RvX25hbWVpX2ZsYWdzKG9wZW5fZmxhZyksIG1vZGUpOwogCWRfbG9va3VwX2RvbmUoZGVudHJ5KTsKIAogCWlmICghZXJyb3IpIHsKQEAgLTQ0MTAsMTAgJiM0Mzs0NDY1LDIxIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5CiAJCX0KIAkJZHB1dChkZW50cnkpOwogCQlkZW50cnkgPSBFUlJfUFRSKGVycm9yKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfQ1JFQVRFRCkKJiM0MzsJCQlmc25vdGlmeV9jcmVhdGUoZGlyX2lub2RlLCBkZW50cnkpOwomIzQzOwkJaWYgKGZpbGUtJmd0O2ZfbW9kZSAmYW1wOyBGTU9ERV9PUEVORUQpCiYjNDM7CQkJZnNub3RpZnlfb3BlbihmaWxlKTsKIAl9CiYjNDM7CiYjNDM7CiAJcmV0dXJuIGRlbnRyeTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUKJiM0MztzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLAomIzQzOwkJCQkgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LAomIzQzOwkJCQkgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqKTsKIC8qCiAgKiBMb29rIHVwIGFuZCBtYXliZSBjcmVhdGUgYW5kIG9wZW4gdGhlIGxhc3QgY29tcG9uZW50LgogICoKQEAgLTQ0MzUsNiAmIzQzOzQ1MDEsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLAogCXN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwOwogCXN0cnVjdCBkZW50cnkgKmRpciA9IG5kLSZndDtwYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci0mZ3Q7ZF9pbm9kZTsKJiM0MzsJYm9vbCBjcmVhdGVfZGlyID0gT19JU19NS0RJUihvcC0mZ3Q7bW9kZSk7CiAJaW50IG9wZW5fZmxhZzsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJaW50IGVycm9yLCBjcmVhdGVfZXJyb3I7CkBAIC00NDU1LDcgJiM0Mzs0NTIyLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICovCiAJfQogCWlmIChvcGVuX2ZsYWcgJmFtcDsgT19DUkVBVCkKLQkJaW5vZGVfbG9jayhkaXJfaW5vZGUpOwomIzQzOwkJaW5vZGVfbG9ja19uZXN0ZWQoZGlyX2lub2RlLCBJX01VVEVYX1BBUkVOVCk7CiAJZWxzZQogCQlpbm9kZV9sb2NrX3NoYXJlZChkaXJfaW5vZGUpOwogCkBAIC00NTA3LDEyICYjNDM7NDU3NCwxNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLAogCWlmIChvcGVuX2ZsYWcgJmFtcDsgT19DUkVBVCkgewogCQlpZiAob3Blbl9mbGFnICZhbXA7IE9fRVhDTCkKIAkJCW9wZW5fZmxhZyAmYW1wOz0gfk9fVFJVTkM7Ci0JCW1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIG1vZGUsIG1vZGUpOwomIzQzOwkJbW9kZSA9IG9fY3JlYXRlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgb3Blbl9mbGFnLCBtb2RlKTsKIAkJaWYgKGxpa2VseShnb3Rfd3JpdGUpKQogCQkJY3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCAmYW1wO25kLSZndDtwYXRoLAotCQkJCQkJICAgIGRlbnRyeSwgbW9kZSk7CiYjNDM7CQkJCQkJICAgIGRlbnRyeSwgb3Blbl9mbGFnLCBtb2RlKTsKIAkJZWxzZQogCQkJY3JlYXRlX2Vycm9yID0gLUVST0ZTOwomIzQzOwkJLyogUmVmdXNlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0aHJvdWdoIGEgZGFuZ2xpbmcgKHRyYWlsaW5nKQomIzQzOwkJICogc3ltbGluay4gRm9yIHJlZ3VsYXIgZmlsZXMgdGhpcyBoYXMgYmVlbiBhbGxvd2VkIGhpc3RvcmljYWxseQomIzQzOwkJICogb24gT19DUkVBVCB3aXRob3V0IE9fRVhDTC4gKi8KJiM0MzsJCWlmICh1bmxpa2VseShuZC0mZ3Q7ZGVwdGgpICZhbXA7JmFtcDsgY3JlYXRlX2RpciAmYW1wOyZhbXA7ICFjcmVhdGVfZXJyb3IpCiYjNDM7CQkJY3JlYXRlX2Vycm9yID0gLUVFWElTVDsKIAl9CiAJaWYgKGNyZWF0ZV9lcnJvcikKIAkJb3Blbl9mbGFnICZhbXA7PSB+T19DUkVBVDsKQEAgLTQ1MzcsNiAmIzQzOzQ2MDksNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJZGVudHJ5ID0gcmVzOwogCQl9CiAJfQomIzQzOwogCWlmIChkZW50cnktJmd0O2RfaW5vZGUgfHwgIShvcC0mZ3Q7b3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpKSB7CiAJCS8qCiAJCSAqIE5vIG5lZWQgdG8gY3JlYXRlIGEgZmlsZS4gIElmIGxvb2t1cCByZXR1cm5lZCBhIHBvc2l0aXZlCkBAIC00NTU0LDI2ICYjNDM7NDYyNywyNiBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLAogCQlnb3RvIG91dF9kcHV0OwogCX0KIAotCWVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpcl9pbm9kZSwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgJmFtcDtkZWxlZ2F0ZWRfaW5vZGUpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXRfZHB1dDsKLQotCWZpbGUtJmd0O2ZfbW9kZSB8PSBGTU9ERV9DUkVBVEVEOwotCWlmICghZGlyX2lub2RlLSZndDtpX29wLSZndDtjcmVhdGUpIHsKJiM0MzsJaWYgKChjcmVhdGVfZGlyICZhbXA7JmFtcDsgIWRpcl9pbm9kZS0mZ3Q7aV9vcC0mZ3Q7bWtkaXIpCiYjNDM7CQl8fCAoIWNyZWF0ZV9kaXIgJmFtcDsmYW1wOyAhZGlyX2lub2RlLSZndDtpX29wLSZndDtjcmVhdGUpKSB7CiAJCWVycm9yID0gLUVBQ0NFUzsKIAkJZ290byBvdXRfZHB1dDsKIAl9CiAKLQllcnJvciA9IGRpcl9pbm9kZS0mZ3Q7aV9vcC0mZ3Q7Y3JlYXRlKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CWlmIChjcmVhdGVfZGlyKSB7CiYjNDM7CQlzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksCiYjNDM7CQkJCQkJICAgICAgIG1vZGUsICZhbXA7ZGVsZWdhdGVkX2lub2RlKTsKJiM0MzsJCQllcnJvciA9IFBUUl9FUlJfT1JfWkVSTyhyZXMpOwomIzQzOwkJCWlmICghZXJyb3IpCiYjNDM7CQkJCWRlbnRyeSA9IHJlczsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWVycm9yID0gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsICZhbXA7ZGVsZWdhdGVkX2lub2RlKTsKJiM0MzsJfQogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZHB1dDsKJiM0MzsKJiM0MzsJZmlsZS0mZ3Q7Zl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7CiBvdXQ6Ci0JaWYgKCFJU19FUlIoZGVudHJ5KSkgewotCQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX0NSRUFURUQpCi0JCQlmc25vdGlmeV9jcmVhdGUoZGlyX2lub2RlLCBkZW50cnkpOwotCQlpZiAoZmlsZS0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX09QRU5FRCkKLQkJCWZzbm90aWZ5X29wZW4oZmlsZSk7Ci0JfQogCWlmICgob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpIHx8IGNyZWF0ZV9lcnJvcikKIAkJaW5vZGVfdW5sb2NrKGRpcl9pbm9kZSk7CiAJZWxzZQpAQCAtNDY5NSwxNyAmIzQzOzQ3NjgsMTIgQEAgc3RydWN0IGZpbGUgKnZmc19sb29rdXBfb3BlbihzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqbGFzdCwKIH0KIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModmZzX2xvb2t1cF9vcGVuLCAmIzM0O25mc2QmIzM0Oyk7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKHN0cnVjdCBuYW1laWRhdGEgKm5kKQotewotCXJldHVybiAoYm9vbCluZC0mZ3Q7bGFzdC5uYW1lW25kLSZndDtsYXN0Lmxlbl07Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZykKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAKIAlpZiAob3Blbl9mbGFnICZhbXA7IE9fQ1JFQVQpIHsKLQkJaWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKQomIzQzOwkJaWYgKHRyYWlsaW5nX3NsYXNoZXMoJmFtcDtuZC0mZ3Q7bGFzdCkgJmFtcDsmYW1wOyAhKG9wZW5fZmxhZyAmYW1wOyBPX0RJUkVDVE9SWSkpCiAJCQlyZXR1cm4gRVJSX1BUUigtRUlTRElSKTsKIAogCQkvKiBEb24mIzM5O3QgYm90aGVyIG9uIGFuIE9fRVhDTCBjcmVhdGUgKi8KQEAgLTQ3MTMsNyAmIzQzOzQ3ODEsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpCiAJCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAodHJhaWxpbmdfc2xhc2hlcyhuZCkpCiYjNDM7CWlmICh0cmFpbGluZ19zbGFzaGVzKCZhbXA7bmQtJmd0O2xhc3QpKQogCQluZC0mZ3Q7ZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7CiAKIAlkZW50cnkgPSBsb29rdXBfZmFzdChuZCk7CkBAIC00ODA2LDggJiM0Mzs0ODc0LDkgQEAgc3RhdGljIGludCBkb19vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLAogCWlmIChvcGVuX2ZsYWcgJmFtcDsgT19DUkVBVCkgewogCQlpZiAoKG9wZW5fZmxhZyAmYW1wOyBPX0VYQ0wpICZhbXA7JmFtcDsgIShmaWxlLSZndDtmX21vZGUgJmFtcDsgRk1PREVfQ1JFQVRFRCkpCiAJCQlyZXR1cm4gLUVFWElTVDsKLQkJaWYgKGRfaXNfZGlyKG5kLSZndDtwYXRoLmRlbnRyeSkpCiYjNDM7CQlpZiAoIShvcGVuX2ZsYWcgJmFtcDsgT19ESVJFQ1RPUlkpICZhbXA7JmFtcDsgZF9pc19kaXIobmQtJmd0O3BhdGguZGVudHJ5KSkKIAkJCXJldHVybiAtRUlTRElSOwomIzQzOwogCQllcnJvciA9IG1heV9jcmVhdGVfaW5fc3RpY2t5KGlkbWFwLCBuZCwKIAkJCQkJICAgICBkX2JhY2tpbmdfaW5vZGUobmQtJmd0O3BhdGguZGVudHJ5KSk7CiAJCWlmICh1bmxpa2VseShlcnJvcikpCkBAIC01MDg3LDcgJiM0Mzs1MTU2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZShpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsCiAJICogRG8gdGhlIGZpbmFsIGxvb2t1cC4gIFN1cHByZXNzICYjMzk7Y3JlYXRlJiMzOTsgaWYgdGhlcmUgaXMgYSB0cmFpbGluZwogCSAqICYjMzk7LyYjMzk7LCBhbmQgYSBkaXJlY3Rvcnkgd2FzbiYjMzk7dCByZXF1ZXN0ZWQuCiAJICovCi0JaWYgKGxhc3QubmFtZVtsYXN0Lmxlbl0gJmFtcDsmYW1wOyAhd2FudF9kaXIpCiYjNDM7CWlmICh0cmFpbGluZ19zbGFzaGVzKCZhbXA7bGFzdCkgJmFtcDsmYW1wOyAhd2FudF9kaXIpCiAJCWNyZWF0ZV9mbGFncyAmYW1wOz0gfkxPT0tVUF9DUkVBVEU7CiAJZGVudHJ5ID0gc3RhcnRfZGlyb3AocGF0aC0mZ3Q7ZGVudHJ5LCAmYW1wO2xhc3QsIHJldmFsX2ZsYWcgfCBjcmVhdGVfZmxhZ3MpOwogCWlmIChJU19FUlIoZGVudHJ5KSkKQEAgLTUxODIsNyAmIzQzOzUyNTEsNyBAQCBzdHJ1Y3QgZmlsZSAqZGVudHJ5X2NyZWF0ZShzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IGZsYWdzLCB1bW9kZV90IG1vZGUsCiAJCXBhdGgtJmd0O2RlbnRyeSA9IGRpcjsKIAkJbW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTsKIAotCQljcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIHBhdGgsIGRlbnRyeSwgbW9kZSk7CiYjNDM7CQljcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIHBhdGgsIGRlbnRyeSwgZmxhZ3MsIG1vZGUpOwogCQlpZiAoY3JlYXRlX2Vycm9yKQogCQkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwogCkBAIC01MzU2LDYgJiM0Mzs1NDI1LDM0IEBAIFNZU0NBTExfREVGSU5FMyhta25vZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVtb2RlX3QsIG1vZGUsIHVuc2lnbmVkLCBkCiAJcmV0dXJuIGZpbGVuYW1lX21rbm9kYXQoQVRfRkRDV0QsIG5hbWUsIG1vZGUsIGRldik7CiB9CiAKJiM0MzsvKiBSZXR1cm5zIHRoZSBkZW50cnkgdG8gdXNlIChub3QgTlVMTCkgb3IgLUUgb24gZXJyb3IgKi8KJiM0MztzdGF0aWMgaW5saW5lCiYjNDM7c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLAomIzQzOwkJCQkgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsCiYjNDM7CQkJCSBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSkKJiM0Mzt7CiYjNDM7CWludCBlcnJvcjsKJiM0MzsJc3RydWN0IGRlbnRyeSAqZGU7CiYjNDM7CXVuc2lnbmVkIG1heF9saW5rcyA9IGRpci0mZ3Q7aV9zYi0mZ3Q7c19tYXhfbGlua3M7CiYjNDM7CiYjNDM7CWlmIChtYXhfbGlua3MgJmFtcDsmYW1wOyBkaXItJmd0O2lfbmxpbmsgJmd0Oz0gbWF4X2xpbmtzKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVNTElOSyk7CiYjNDM7CiYjNDM7CWVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiYjNDM7CiYjNDM7CWRlID0gZGlyLSZndDtpX29wLSZndDtta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpOwomIzQzOwlpZiAoSVNfRVJSKGRlKSkKJiM0MzsJCXJldHVybiBkZTsKJiM0MzsJaWYgKGRlKSB7CiYjNDM7CQlkcHV0KGRlbnRyeSk7CiYjNDM7CQlkZW50cnkgPSBkZTsKJiM0MzsJfQomIzQzOwlmc25vdGlmeV9ta2RpcihkaXIsIGRlbnRyeSk7CiYjNDM7CXJldHVybiBkZW50cnk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB2ZnNfbWtkaXIgLSBjcmVhdGUgZGlyZWN0b3J5IHJldHVybmluZyBjb3JyZWN0IGRlbnRyeSBpZiBwb3NzaWJsZQogICogQGlkbWFwOgkJaWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbQpAQCAtNTM4Myw3ICYjNDM7NTQ4MCw2IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsCiAJCQkgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGVsZWdhdGVkX2lub2RlKQogewogCWludCBlcnJvcjsKLQl1bnNpZ25lZCBtYXhfbGlua3MgPSBkaXItJmd0O2lfc2ItJmd0O3NfbWF4X2xpbmtzOwogCXN0cnVjdCBkZW50cnkgKmRlOwogCiAJZXJyb3IgPSBtYXlfY3JlYXRlX2RlbnRyeShpZG1hcCwgZGlyLCBkZW50cnkpOwpAQCAtNTM5OSwyNCAmIzQzOzU0OTUsMTIgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyOwogCi0JZXJyb3IgPSAtRU1MSU5LOwotCWlmIChtYXhfbGlua3MgJmFtcDsmYW1wOyBkaXItJmd0O2lfbmxpbmsgJmd0Oz0gbWF4X2xpbmtzKQotCQlnb3RvIGVycjsKLQotCWVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGVsZWdhdGVkX2lub2RlKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZXJyOwotCi0JZGUgPSBkaXItJmd0O2lfb3AtJmd0O21rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7Ci0JZXJyb3IgPSBQVFJfRVJSKGRlKTsKLQlpZiAoSVNfRVJSKGRlKSkKJiM0MzsJZGUgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7CiYjNDM7CWlmIChJU19FUlIoZGUpKSB7CiYjNDM7CQllcnJvciA9IFBUUl9FUlIoZGUpOwogCQlnb3RvIGVycjsKLQlpZiAoZGUpIHsKLQkJZHB1dChkZW50cnkpOwotCQlkZW50cnkgPSBkZTsKIAl9Ci0JZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpOwotCXJldHVybiBkZW50cnk7CiYjNDM7CXJldHVybiBkZTsKIAogZXJyOgogCWVuZF9jcmVhdGluZyhkZW50cnkpOwpAQCAtNTcwMyw3ICYjNDM7NTc4Nyw3IEBAIGludCBmaWxlbmFtZV91bmxpbmthdChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpCiAJCWdvdG8gZXhpdF9kcm9wX3dyaXRlOwogCiAJLyogV2h5IG5vdCBiZWZvcmU/IEJlY2F1c2Ugd2Ugd2FudCBjb3JyZWN0IGVycm9yIHZhbHVlICovCi0JaWYgKHVubGlrZWx5KGxhc3QubmFtZVtsYXN0Lmxlbl0pKSB7CiYjNDM7CWlmICh1bmxpa2VseSh0cmFpbGluZ19zbGFzaGVzKCZhbXA7bGFzdCkpKSB7CiAJCWlmIChkX2lzX2RpcihkZW50cnkpKQogCQkJZXJyb3IgPSAtRUlTRElSOwogCQllbHNlCkBAIC02MzA1LDE2ICYjNDM7NjM4OSwxNiBAQCBpbnQgZmlsZW5hbWVfcmVuYW1lYXQyKGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZnJvbSwKIAlpZiAoZmxhZ3MgJmFtcDsgUkVOQU1FX0VYQ0hBTkdFKSB7CiAJCWlmICghZF9pc19kaXIocmQubmV3X2RlbnRyeSkpIHsKIAkJCWVycm9yID0gLUVOT1RESVI7Ci0JCQlpZiAobmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKQomIzQzOwkJCWlmICh0cmFpbGluZ19zbGFzaGVzKCZhbXA7bmV3X2xhc3QpKQogCQkJCWdvdG8gZXhpdF91bmxvY2s7CiAJCX0KIAl9CiAJLyogdW5sZXNzIHRoZSBzb3VyY2UgaXMgYSBkaXJlY3RvcnkgdHJhaWxpbmcgc2xhc2hlcyBnaXZlIC1FTk9URElSICovCiAJaWYgKCFkX2lzX2RpcihyZC5vbGRfZGVudHJ5KSkgewogCQllcnJvciA9IC1FTk9URElSOwotCQlpZiAob2xkX2xhc3QubmFtZVtvbGRfbGFzdC5sZW5dKQomIzQzOwkJaWYgKHRyYWlsaW5nX3NsYXNoZXMoJmFtcDtvbGRfbGFzdCkpCiAJCQlnb3RvIGV4aXRfdW5sb2NrOwotCQlpZiAoIShmbGFncyAmYW1wOyBSRU5BTUVfRVhDSEFOR0UpICZhbXA7JmFtcDsgbmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKQomIzQzOwkJaWYgKCEoZmxhZ3MgJmFtcDsgUkVOQU1FX0VYQ0hBTkdFKSAmYW1wOyZhbXA7IHRyYWlsaW5nX3NsYXNoZXMoJmFtcDtuZXdfbGFzdCkpCiAJCQlnb3RvIGV4aXRfdW5sb2NrOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IDM2ZjJlODU4ODkyMjAuLmI0ZGI3MDNjOWU4YzcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uZnMvZGlyLmMKQEAgLTIxMjEsNiAmIzQzOzIxMjEsOSBAQCBpbnQgbmZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJZGZwcmludGsoVkZTLCAmIzM0O05GUzogYXRvbWljX29wZW4oJXMvJWxsdSksICVwZFxuJiMzNDssCiAJCQlkaXItJmd0O2lfc2ItJmd0O3NfaWQsIGRpci0mZ3Q7aV9pbm8sIGRlbnRyeSk7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIob3Blbl9mbGFncykpCiYjNDM7CQlvcGVuX2ZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAllcnIgPSBuZnNfY2hlY2tfZmxhZ3Mob3Blbl9mbGFncyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTIzMTMsNiAmIzQzOzIzMTYsOSBAQCBpbnQgbmZzX2F0b21pY19vcGVuX3YyMyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCSAqLwogCWludCBlcnJvciA9IDA7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIob3Blbl9mbGFncykpCiYjNDM7CQlvcGVuX2ZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAlpZiAoZGVudHJ5LSZndDtkX25hbWUubGVuICZndDsgTkZTX1NFUlZFUihkaXIpLSZndDtuYW1lbGVuKQogCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKIApkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IDZiMWMxNGU2ODRhOTMuLjZjYjVlMmFkNzgxZjMgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vcGVuLmMKQEAgLTEyMzksMjkgJiM0MzsxMjM5LDMwIEBAIGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKQogCWlmIChXSUxMX0NSRUFURShmbGFncykpIHsKIAkJaWYgKGhvdy0mZ3Q7bW9kZSAmYW1wOyB+U19JQUxMVUdPKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW9wLSZndDttb2RlID0gaG93LSZndDttb2RlIHwgU19JRlJFRzsKJiM0MzsJCWlmIChPX0lTX01LRElSKGZsYWdzKSkKJiM0MzsJCQlvcC0mZ3Q7bW9kZSA9IGhvdy0mZ3Q7bW9kZSB8IFNfSUZESVI7CiYjNDM7CQllbHNlCiYjNDM7CQkJb3AtJmd0O21vZGUgPSBob3ctJmd0O21vZGUgfCBTX0lGUkVHOwogCX0gZWxzZSB7CiAJCWlmIChob3ctJmd0O21vZGUgIT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlvcC0mZ3Q7bW9kZSA9IDA7CiAJfQogCi0JLyoKLQkgKiBCbG9jayBidWdzIHdoZXJlIE9fRElSRUNUT1JZIHwgT19DUkVBVCBjcmVhdGVkIHJlZ3VsYXIgZmlsZXMuCi0JICogTm90ZSwgdGhhdCBibG9ja2luZyBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQgaGVyZSBhbHNvIHByb3RlY3RzCi0JICogT19UTVBGSUxFIGJlbG93IHdoaWNoIHJlcXVpcmVzIE9fRElSRUNUT1JZIGJlaW5nIHJhaXNlZC4KLQkgKi8KLQlpZiAoKGZsYWdzICZhbXA7IChPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpKSA9PSAoT19ESVJFQ1RPUlkgfCBPX0NSRUFUKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkvKiBOb3cgaGFuZGxlIHRoZSBjcmVhdGl2ZSBpbXBsZW1lbnRhdGlvbiBvZiBPX1RNUEZJTEUuICovCiAJaWYgKGZsYWdzICZhbXA7IF9fT19UTVBGSUxFKSB7CiAJCS8qCiAJCSAqIEluIG9yZGVyIHRvIGVuc3VyZSBwcm9ncmFtcyBnZXQgZXhwbGljaXQgZXJyb3JzIHdoZW4gdHJ5aW5nCiAJCSAqIHRvIHVzZSBPX1RNUEZJTEUgb24gb2xkIGtlcm5lbHMgd2UgZW5mb3JjZSB0aGF0IE9fRElSRUNUT1JZCi0JCSAqIGlzIHJhaXNlZCBhbG9uZ3NpZGUgX19PX1RNUEZJTEUuCiYjNDM7CQkgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLCBidXQgd2l0aG91dCBPX0NSRUFULiBUaGUKJiM0MzsJCSAqIHJlYXNvbiBmb3IgZGlzYWxsb3dpbmcgT19DUkVBVHxPX1RNUEZJTEUgaXMgdGhhdAomIzQzOwkJICogT19ESVJFQ1RPUll8T19DUkVBVCB1c2VkIHRvIHdvcmsgYW5kIGNyZWF0ZWQgYSByZWd1bGFyIGZpbGUKJiM0MzsJCSAqIGlmIG5vdGhpbmcgZXhpc3RlZCBhdCB0aGUgb3BlbiBwYXRoLiBIZW5jZSwgYWxsb3dpbmcgdGhlCiYjNDM7CQkgKiBjb21iaW5hdGlvbiB3b3VsZCBoYXZlIGNhdXNlZCBPX0NSRUFUfE9fVE1QRklMRSB0byBjcmVhdGUgYQomIzQzOwkJICogcmVndWxhciAobm9uLXRlbXBvcmFyeSkgZmlsZSBvbiBvbGQga2VybmVscywgd2hpbGUgdGhlIGNhbGxlcgomIzQzOwkJICogd291bGQgYmVsaWV2ZSB0aGV5IGNyZWF0ZWQgYW4gYWN0dWFsIE9fVE1QRklMRS4KIAkJICovCi0JCWlmICghKGZsYWdzICZhbXA7IE9fRElSRUNUT1JZKSkKJiM0MzsJCWlmICghKGZsYWdzICZhbXA7IE9fRElSRUNUT1JZKSB8fCAoZmxhZ3MgJmFtcDsgT19DUkVBVCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKCEoYWNjX21vZGUgJmFtcDsgTUFZX1dSSVRFKSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTMxOCw2ICYjNDM7MTMxOSwxNSBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcCkKIAogCW9wLSZndDtpbnRlbnQgPSBmbGFncyAmYW1wOyBPX1BBVEggPyAwIDogTE9PS1VQX09QRU47CiAKJiM0MzsJLyoKJiM0MzsJICogUmVxdWVzdGluZyB3cml0ZSBhY2Nlc3Mgb24gYSBkaXJlY3RvcnkgY2FuIG5ldmVyIHN1Y2NlZWQuIFJhdGhlcgomIzQzOwkgKiB0aGFuIHBlcmZvcm1pbmcgYSBwYXRoLXdhbGsgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHRhcmdldCBpcwomIzQzOwkgKiBhY3R1YWxseSBhIGRpcmVjdG9yeSAoLUVJU0RJUikgb3Igbm90ICgtRU5PVERJUiksIHdlIHNob3J0LWNpcmN1aXQKJiM0MzsJICogdG8gLUVOT1RESVIuCiYjNDM7CSAqLwomIzQzOwlpZiAoKGZsYWdzICZhbXA7IE9fRElSRUNUT1JZKSAmYW1wOyZhbXA7ICEoZmxhZ3MgJmFtcDsgX19PX1RNUEZJTEUpICZhbXA7JmFtcDsgKGFjY19tb2RlICZhbXA7IE1BWV9XUklURSkpCiYjNDM7CQlyZXR1cm4gLUVOT1RESVI7CiYjNDM7CiAJaWYgKGZsYWdzICZhbXA7IE9fQ1JFQVQpIHsKIAkJb3AtJmd0O2ludGVudCB8PSBMT09LVVBfQ1JFQVRFOwogCQlpZiAoZmxhZ3MgJmFtcDsgT19FWENMKSB7CmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2Rpci5jIGIvZnMvc21iL2NsaWVudC9kaXIuYwppbmRleCA3ODAzYmQ1YmQwMWY4Li5kMWFmOTBjOTgxY2Q0IDEwMDY0NAotLS0gYS9mcy9zbWIvY2xpZW50L2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NtYi9jbGllbnQvZGlyLmMKQEAgLTUzOCw2ICYjNDM7NTM4LDkgQEAgaW50IGNpZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRpcmVudHJ5LAogCWlmICh1bmxpa2VseShjaWZzX2ZvcmNlZF9zaHV0ZG93bihjaWZzX3NiKSkpCiAJCXJldHVybiBzbWJfRUlPKHNtYl9laW9fdHJhY2VfZm9yY2VkX3NodXRkb3duKTsKIAomIzQzOwlpZiAoT19JU19NS0RJUihvZmxhZ3MpKQomIzQzOwkJb2ZsYWdzICZhbXA7PSB+T19DUkVBVDsKJiM0MzsKIAkvKgogCSAqIFBvc2l4IG9wZW4gaXMgb25seSBjYWxsZWQgKGF0IGxvb2t1cCB0aW1lKSBmb3IgZmlsZSBjcmVhdGUgbm93LiBGb3IKIAkgKiBvcGVucyAocmF0aGVyIHRoYW4gY3JlYXRlcyksIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cgaWYgaXQgaXMgYSBmaWxlCmRpZmYgLS1naXQgYS9mcy92Ym94c2YvZGlyLmMgYi9mcy92Ym94c2YvZGlyLmMKaW5kZXggMGI5ZWFiMTU3NDMyZC4uNmUzMDZkZGQ3MjJiZiAxMDA2NDQKLS0tIGEvZnMvdmJveHNmL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zib3hzZi9kaXIuYwpAQCAtMzE4LDYgJiM0MzszMTgsOSBAQCBzdGF0aWMgaW50IHZib3hzZl9kaXJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAl1NjQgaGFuZGxlOwogCWludCBlcnI7CiAKJiM0MzsJaWYgKE9fSVNfTUtESVIoZmxhZ3MpKQomIzQzOwkJZmxhZ3MgJmFtcDs9IH5PX0NSRUFUOwomIzQzOwogCWlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7CiAJCXN0cnVjdCBkZW50cnkgKnJlcyA9IHZib3hzZl9kaXJfbG9va3VwKHBhcmVudCwgZGVudHJ5LCAwKTsKIAkJaWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mY250bC5oIGIvaW5jbHVkZS9saW51eC9mY250bC5oCmluZGV4IDZhZDZiOWU3YTIyNmEuLjIwNGUxNmJiZTI2MzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmNudGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmgKQEAgLTMwLDYgJiM0MzszMCwxMiBAQAogICovCiAjZGVmaW5lIF9fT19SRUdVTEFSCQkoMSAmbHQ7Jmx0OyAzMCkKIAomIzQzOyNkZWZpbmUgT19NS0RJUl9NQVNLCShPX0NSRUFUIHwgT19ESVJFQ1RPUlkpCiYjNDM7c3RhdGljIGlubGluZSBib29sIE9fSVNfTUtESVIodW5zaWduZWQgaW50IGZsYWdzKQomIzQzO3sKJiM0MzsJcmV0dXJuIChmbGFncyAmYW1wOyBPX01LRElSX01BU0spID09IE9fTUtESVJfTUFTSzsKJiM0Mzt9CiYjNDM7CiAvKiBMaXN0IG9mIGFsbCB2YWxpZCBmbGFncyBmb3IgdGhlIGhvdy0mZ3Q7cmVzb2x2ZSBhcmd1bWVudDogKi8KICNkZWZpbmUgVkFMSURfUkVTT0xWRV9GTEFHUyBcCiAJKFJFU09MVkVfTk9fWERFViB8IFJFU09MVkVfTk9fTUFHSUNMSU5LUyB8IFJFU09MVkVfTk9fU1lNTElOS1MgfCBcCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZQppbmRleCA5ZWIxODVmYjJmOWRkLi4wMWM1ODhkNGM4NGY2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmUKQEAgLTEsNCAmIzQzOzEsNSBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7b3Blbl9vX2NyZWF0X29fZGlyCiBkbm90aWZ5X3Rlc3QKIGRldnB0c19wdHMKIGZjbG9nCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlCmluZGV4IDAzYmUzMzdjMWYzNTEuLjA5NTliZDI2ODc1YWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlCkBAIC0xLDcgJiM0MzsxLDcgQEAKICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIAogQ0ZMQUdTICYjNDM7PSAkKEtIRFJfSU5DTFVERVMpCi1URVNUX0dFTl9QUk9HUyA6PSBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nIHVzdGF0X3Rlc3QKJiM0MztURVNUX0dFTl9QUk9HUyA6PSBvcGVuX29fY3JlYXRfb19kaXIgZGV2cHRzX3B0cyBmaWxlX3N0cmVzc29yIGFub25faW5vZGVfdGVzdCBrZXJuZnNfdGVzdCBmY2xvZyB1c3RhdF90ZXN0CiBURVNUX0dFTl9QUk9HUyAmIzQzOz0gaWRtYXBwZWRfdG1wZmlsZQogVEVTVF9HRU5fUFJPR1NfRVhURU5ERUQgOj0gZG5vdGlmeV90ZXN0CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uYmUwYWIzNDI2N2UxZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jCkBAIC0wLDAgJiM0MzsxLDIwMSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9zdGF0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0X2hhcm5lc3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt3cmFwcGVycy5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIG9wZW5hdF9vX21rZGlyX2NoZWNrZWRfZmxhZ3MoZGZkLCBwYXRobmFtZSwgZmxhZ3MpICh7CVwKJiM0MzsJc3RydWN0IHN0YXQgX19zdDsJCQkJCQlcCiYjNDM7CWludCBfX2ZkID0gb3BlbmF0X29fbWtkaXIoZGZkLCBwYXRobmFtZSwgZmxhZ3MsIFNfSVJXWFUpOwlcCiYjNDM7CUFTU0VSVF9HRShfX2ZkLCAwKTsJCQkJCQlcCiYjNDM7CUFTU0VSVF9FUShmc3RhdChfX2ZkLCAmYW1wO19fc3QpLCAwKTsJCQkJXAomIzQzOwlFWFBFQ1RfVFJVRShTX0lTRElSKF9fc3Quc3RfbW9kZSkpOwkJCQlcCiYjNDM7CV9fZmQ7CQkJCQkJCQlcCiYjNDM7fSkKJiM0MzsKJiM0MzsjZGVmaW5lIG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoZGZkLCBwYXRobmFtZSkgXAomIzQzOwlvcGVuYXRfb19ta2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIE9fUkRPTkxZKQomIzQzOwomIzQzO0ZJWFRVUkUob3Blbl9vX2NyZWF0X29fZGlyKSB7CiYjNDM7CWNoYXIgZGlycGF0aFtQQVRIX01BWF07CiYjNDM7CWludCBkZmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztGSVhUVVJFX1NFVFVQKG9wZW5fb19jcmVhdF9vX2RpcikKJiM0Mzt7CiYjNDM7CXN0cmNweShzZWxmLSZndDtkaXJwYXRoLCAmIzM0Oy90bXAvb3Blbl9vX2NyZWF0X29fZGlyX3Rlc3QuWFhYWFhYJiMzNDspOwomIzQzOwlBU1NFUlRfTkUobWtkdGVtcChzZWxmLSZndDtkaXJwYXRoKSwgTlVMTCk7CiYjNDM7CXNlbGYtJmd0O2RmZCA9IG9wZW4oc2VsZi0mZ3Q7ZGlycGF0aCwgT19ESVJFQ1RPUlkpOwomIzQzOwlBU1NFUlRfR0Uoc2VsZi0mZ3Q7ZGZkLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7RklYVFVSRV9URUFSRE9XTihvcGVuX29fY3JlYXRfb19kaXIpCiYjNDM7ewomIzQzOwljbG9zZShzZWxmLSZndDtkZmQpOwomIzQzOwlybWRpcihzZWxmLSZndDtkaXJwYXRoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogRG9lcyBvcGVuX29fY3JlYXRfb19kaXIgcmV0dXJuIGEgZmQgYXQgYWxsPyAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJldHVybnNfZmQpCiYjNDM7ewomIzQzOwlpbnQgZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHNlbGYtJmd0O2RmZCwgJiMzNDtuZXdkaXImIzM0Oyk7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShmZCksIDApOwomIzQzOwlFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O25ld2RpciYjMzQ7LCBBVF9SRU1PVkVESVIpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogVGhlIGZkIG11c3QgcmVmZXIgdG8gdGhlIGRpcmVjdG9yeSB0aGF0IHdhcyBqdXN0IGNyZWF0ZWQuICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfaXNfY3JlYXRlZF9kaXIpCiYjNDM7ewomIzQzOwlpbnQgZmQ7CiYjNDM7CXN0cnVjdCBzdGF0IHN0X3ZpYV9mZCwgc3RfdmlhX3BhdGg7CiYjNDM7CWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CiYjNDM7CWZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChzZWxmLSZndDtkZmQsICYjMzQ7Y2hlY2tkaXImIzM0Oyk7CiYjNDM7CiYjNDM7CUFTU0VSVF9FUShmc3RhdChmZCwgJmFtcDtzdF92aWFfZmQpLCAwKTsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL2NoZWNrZGlyJiMzNDssIHNlbGYtJmd0O2RpcnBhdGgpOwomIzQzOwlBU1NFUlRfRVEoc3RhdChwYXRoLCAmYW1wO3N0X3ZpYV9wYXRoKSwgMCk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShzdF92aWFfZmQuc3RfaW5vLCBzdF92aWFfcGF0aC5zdF9pbm8pOwomIzQzOwlFWFBFQ1RfRVEoc3RfdmlhX2ZkLnN0X2Rldiwgc3RfdmlhX3BhdGguc3RfZGV2KTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7CiYjNDM7CUVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIE1pc3NpbmcgcGFyZW50IGNvbXBvbmVudCBtdXN0IGZhaWwgd2l0aCBFTk9FTlQuICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vZW50X21pc3NpbmdfcGFyZW50KQomIzQzO3sKJiM0MzsJRVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKHNlbGYtJmd0O2RmZCwgJiMzNDtub25leGlzdGVudC9jaGlsZCYjMzQ7LCBPX1JET05MWSwgU19JUldYVSksIC0xKTsKJiM0MzsJRVhQRUNUX0VRKGVycm5vLCBFTk9FTlQpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBbiBpbnZhbGlkIGRmZCBtdXN0IGZhaWwgd2l0aCBFQkFERi4gKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlYmFkZikKJiM0Mzt7CiYjNDM7CUVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihGRF9JTlZBTElELCAmIzM0O2JhZGZkaXImIzM0OywgT19SRE9OTFksIFNfSVJXWFUpLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRUJBREYpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBBIGRmZCB0aGF0IHBvaW50cyB0byBhIGZpbGUgKG5vdCBhIGRpcmVjdG9yeSkgbXVzdCBmYWlsIHdpdGggRU5PVERJUi4gKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlbm90ZGlyX2RmZCkKJiM0Mzt7CiYjNDM7CWludCBmaWxlX2ZkOwomIzQzOwomIzQzOwlmaWxlX2ZkID0gb3BlbmF0KHNlbGYtJmd0O2RmZCwgJiMzNDtmaWxlJiMzNDssCiYjNDM7CQkJIE9fQ1JFQVQgfCBPX1JET05MWSwgU19JUldYVSk7CiYjNDM7CUFTU0VSVF9HRShmaWxlX2ZkLCAwKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKGZpbGVfZmQsICYjMzQ7c3ViZGlyJiMzNDssIE9fUkRPTkxZLCBTX0lSV1hVKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpOwomIzQzOwomIzQzOwlFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApOwomIzQzOwlFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O2ZpbGUmIzM0OywgMCksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIE9fRVhDTCB0b2dldGhlciB3aXRoIE9fQ1JFQVR8T19ESVJFQ1RPUlkgc2hvdWxkIHN1Y2NlZWQgaWYgdGhlIHRhcmdldAomIzQzOyAqIGRpcmVjdG9yeSBkb2VzIG5vdCB5ZXQgZXhpc3QuIEFmdGVyIGRpcmVjdG9yeSBjcmVhdGlvbiwgcmVwZWF0aW5nIHRoaXMKJiM0MzsgKiBjYWxsIG11c3QgZmFpbCB3aXRoIEVFWElTVC4KJiM0MzsgKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBvX2V4Y2xfZWV4aXN0KQomIzQzO3sKJiM0MzsJaW50IGV4Y2xkaXJfZmQ7CiYjNDM7CiYjNDM7CWV4Y2xkaXJfZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkX2ZsYWdzKHNlbGYtJmd0O2RmZCwgJiMzNDtleGNsZGlyJiMzNDssIE9fRVhDTCk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihleGNsZGlyX2ZkLCAmIzM0Oy4mIzM0OywgT19FWENMLCBTX0lSV1hVKSwgLTEpOwomIzQzOwlFWFBFQ1RfRVEoZXJybm8sIEVFWElTVCk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShleGNsZGlyX2ZkKSwgMCk7CiYjNDM7CUVYUEVDVF9FUSh1bmxpbmthdChzZWxmLSZndDtkZmQsICYjMzQ7ZXhjbGRpciYjMzQ7LCBBVF9SRU1PVkVESVIpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBPX0NSRUFUfE9fRElSRUNUT1JZIG9uIGEgcGF0aCB0aGF0IGFscmVhZHkgZXhpc3RzIGFzIGEgcmVndWxhciBmaWxlCiYjNDM7ICogbXVzdCBmYWlsIHdpdGggRU5PVERJUi4KJiM0MzsgKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBleGlzdGluZ19maWxlX2Vub3RkaXIpCiYjNDM7ewomIzQzOwlpbnQgZmlsZV9mZDsKJiM0MzsKJiM0MzsJZmlsZV9mZCA9IG9wZW5hdChzZWxmLSZndDtkZmQsICYjMzQ7cmVnZmlsZSYjMzQ7LAomIzQzOwkJCSBPX0NSRUFUIHwgT19SRE9OTFksIFNfSVJXWFUpOwomIzQzOwlBU1NFUlRfR0UoZmlsZV9mZCwgMCk7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7CiYjNDM7CiYjNDM7CUVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihzZWxmLSZndDtkZmQsICYjMzQ7cmVnZmlsZSYjMzQ7LCBPX1JET05MWSwgU19JUldYVSksIC0xKTsKJiM0MzsJRVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKHVubGlua2F0KHNlbGYtJmd0O2RmZCwgJiMzNDtyZWdmaWxlJiMzNDssIDApLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBPX0NSRUFUfE9fRElSRUNUT1JZIGNvbWJpbmVkIHdpdGggYSB3cml0YWJsZSBhY2Nlc3MgbW9kZSBtdXN0IGJlCiYjNDM7ICogcmVqZWN0ZWQ6IGEgZGlyZWN0b3J5IGNhbm5vdCBiZSBvcGVuZWQgZm9yIHdyaXRpbmcuCiYjNDM7ICovCiYjNDM7VEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgcmVqZWN0c193cml0YWJsZV9hY2NfbW9kZSkKJiM0Mzt7CiYjNDM7CUVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihzZWxmLSZndDtkZmQsICYjMzQ7cmR3cmRpciYjMzQ7LCBPX1JEV1IsIFNfSVJXWFUpLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRU5PVERJUik7CiYjNDM7CS8qIENsZWFuIHVwIGlmIHRoZSBrZXJuZWwgY3JlYXRlZCB0aGUgZGlyZWN0b3J5IGFueXdheS4gKi8KJiM0MzsJdW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3Jkd3JkaXImIzM0OywgQVRfUkVNT1ZFRElSKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBvcGVuYXQoT19DUkVBVHxPX0RJUkVDVE9SWSkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIHNob3VsZCB3b3JrLgomIzQzOyAqLwomIzQzO1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHRyYWlsaW5nX3NsYXNoKQomIzQzO3sKJiM0MzsJaW50IGZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChzZWxmLSZndDtkZmQsICYjMzQ7bmV3ZGlyLyYjMzQ7KTsKJiM0MzsJRVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7CiYjNDM7CUVYUEVDVF9FUSh1bmxpbmthdChzZWxmLSZndDtkZmQsICYjMzQ7bmV3ZGlyJiMzNDssIEFUX1JFTU9WRURJUiksIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIG9wZW5hdChPX0NSRUFUKSB3aXRoIGEgdHJhaWxpbmcgc2xhc2ggYnV0IHdpdGhvdXQgT19ESVJFQ1RPUlkKJiM0MzsgKiBtdXN0IGZhaWwgd2l0aCBFSVNESVIgYW5kIG11c3Qgbm90IGNyZWF0ZSBhbnl0aGluZyBhdCB0aGUgcGF0aC4KJiM0MzsgKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCB0cmFpbGluZ19zbGFzaF9ub19vX2RpcikKJiM0Mzt7CiYjNDM7CWludCBmZDsKJiM0MzsJc3RydWN0IHN0YXQgc3Q7CiYjNDM7CiYjNDM7CWZkID0gb3BlbmF0KHNlbGYtJmd0O2RmZCwgJiMzNDt0cmFpbGluZy8mIzM0OywgT19DUkVBVCB8IE9fUkRPTkxZLCBTX0lSV1hVKTsKJiM0MzsJRVhQRUNUX0VRKGZkLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRUlTRElSKTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKGZzdGF0YXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3RyYWlsaW5nJiMzNDssICZhbXA7c3QsIDApLCAtMSk7CiYjNDM7CUVYUEVDVF9FUShlcnJubywgRU5PRU5UKTsKJiM0MzsKJiM0MzsJLyogQmVzdC1lZmZvcnQgY2xlYW51cCBpbiBjYXNlIHRoZSBrZXJuZWwgbGVmdCBhIGZpbGUgYmVoaW5kLiAqLwomIzQzOwlpZiAoZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGZkKTsKJiM0MzsJdW5saW5rYXQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3RyYWlsaW5nJiMzNDssIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFRoZSByZXR1cm5lZCBmZCBtdXN0IGJlIHVzYWJsZSBhcyBhIGRmZCBmb3IgZnVydGhlciAqYXQoKSBjYWxscy4KJiM0MzsgKi8KJiM0MztURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBmZF91c2FibGVfYXNfZGZkKQomIzQzO3sKJiM0MzsJaW50IHBhcmVudF9mZCwgY2hpbGRfZmQ7CiYjNDM7CWNoYXIgcGF0aFtQQVRIX01BWF07CiYjNDM7CiYjNDM7CXBhcmVudF9mZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoc2VsZi0mZ3Q7ZGZkLCAmIzM0O3BhcmVudCYjMzQ7KTsKJiM0MzsJY2hpbGRfZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHBhcmVudF9mZCwgJiMzNDtjaGlsZCYjMzQ7KTsKJiM0MzsKJiM0MzsJRVhQRUNUX0VRKGNsb3NlKGNoaWxkX2ZkKSwgMCk7CiYjNDM7CUVYUEVDVF9FUShjbG9zZShwYXJlbnRfZmQpLCAwKTsKJiM0MzsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL3BhcmVudC9jaGlsZCYjMzQ7LCBzZWxmLSZndDtkaXJwYXRoKTsKJiM0MzsJRVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTsKJiM0MzsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAmIzM0OyVzL3BhcmVudCYjMzQ7LCBzZWxmLSZndDtkaXJwYXRoKTsKJiM0MzsJRVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7VEVTVF9IQVJORVNTX01BSU4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3dyYXBwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy93cmFwcGVycy5oCmluZGV4IDQyMGFlNGY5MDhjZjIuLmFiZTViODVjZWJkY2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3dyYXBwZXJzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvd3JhcHBlcnMuaApAQCAtMTMsNiAmIzQzOzEzLDEwIEBACiAjZGVmaW5lIFNUQVRYX01OVF9JRF9VTklRVUUgMHgwMDAwNDAwMFUgLyogV2FudC9nb3QgZXh0ZW5kZWQgc3R4X21vdW50X2lkICovCiAjZW5kaWYKIAomIzQzOyNpZm5kZWYgRkRfSU5WQUxJRAomIzQzOyNkZWZpbmUgRkRfSU5WQUxJRCAtMTAwMDkKJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyBpbmxpbmUgaW50IHN5c19mc29wZW4oY29uc3QgY2hhciAqZnNuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJcmV0dXJuIHN5c2NhbGwoX19OUl9mc29wZW4sIGZzbmFtZSwgZmxhZ3MpOwpAQCAtMTA1LDQgJiM0MzsxMDksMTEgQEAgc3RhdGljIGlubGluZSBpbnQgc3lzX29wZW5fdHJlZShpbnQgZGZkLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgaW50IGZsYWcKIAlyZXR1cm4gc3lzY2FsbChfX05SX29wZW5fdHJlZSwgZGZkLCBmaWxlbmFtZSwgZmxhZ3MpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgb3BlbmF0X29fbWtkaXIoaW50IGRmZCwgY29uc3QgY2hhciAqcGF0aG5hbWUsCiYjNDM7CQkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN5c2NhbGwoX19OUl9vcGVuYXQsIGRmZCwgcGF0aG5hbWUsCiYjNDM7CQkgICAgICAgZmxhZ3MgfCBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQsIG1vZGUpOwomIzQzO30KJiM0MzsKICNlbmRpZgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTY6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBFdmFsdWF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJdCYjMzk7cyBmb2N1c2VkIG9uIGVuYWJsaW5nIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgIHZpYSBgb3BlbmF0YCwgd2hpY2ggaXMgYSBuZWF0IGZlYXR1cmUuIFRoZSBjaGFuZ2VzIHRvdWNoIGEgbG90IG9mIGNvZGU6IHRoZSBWRlMsIHBsdXMgYSBidW5jaCBvZiBmaWxlc3lzdGVtcyDigJMgOXAsIENlcGgsIEZVU0UsIEdGUzIsIE5GUywgU01CLCB2Ym94c2YuIFdlJiMzOTtyZSBsb29raW5nIGF0IGNoYW5nZXMgaW4gYHZmc19pbm9kZS5jYCwgdmFyaW91cyBkaXJlY3RvcnkgaGFuZGxpbmcgaW4gdGhlIGZpbGUgc3lzdGVtcywgYG5hbWVpLmNgLCBgb3Blbi5jYCwgYW5kIGEgbmV3IHNlbGZ0ZXN0LgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgY2hhbmdpbmcuIE1vc3RseSwgdGhlcmUgYXJlIHRoZXNlIGBPX0lTX01LRElSKGZsYWdzKWAgY2hlY2tzIGFuZCBmbGFnIG1hbmlwdWxhdGlvbnMgaW4gdGhvc2UgYCpfYXRvbWljX29wZW5gIGZ1bmN0aW9ucyB0byB0cmVhdCB0aGUgcmVxdWVzdCB0byBjcmVhdGUgYSBkaXJlY3RvcnkgYXMgYE9fQ1JFQVRgICp3aXRob3V0KiBgT19ESVJFQ1RPUllgIGFzIHRoZSBjb21tb24gYmVoYXZpb3Igb2YgdGhlIHBhdGNoLgoKSW4gYG5hbWVpLmNgLCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIHN0aWNreSBiaXQgaGFuZGxpbmcsIGhvdyBkaXJlY3RvcnkgY3JlYXRpb24gaXMgaGFuZGxlZCBpbiBwZXJtaXNzaW9uIGNoZWNrcyBhbmQgdGhlIG1vZGUgaXMgc2V0LCBhcyB3ZWxsIGFzIGhhbmRsaW5nIGBmc25vdGlmeWAgZXZlbnRzIGFuZCB0aGUga2V5IGBsb29rdXBfb3BlbmAgY2FsbHMuIEl0IGludHJvZHVjZXMgYHZmc19ta2Rpcl9ub19wZXJtYCBhbmQgYHZmc19ta2RpcmAuIEFsc28sIGl0IGNhbGxzIGB2ZnNfbWtkaXJfbm9fcGVybWAgd2hlcmUgaXQgdXNlZCB0byBjYWxsIGB2ZnNfY3JlYXRlX25vX3Blcm1gLgoKYG9wZW4uY2AgaXMgdXBkYXRlZCB0byBzZXQgdGhlIG1vZGUgYW5kIGhhbmRsZSB0aGUgdG1wZmlsZSBmbGFnIGFuZCByZXR1cm4gYC1FTk9URElSYCBjb3JyZWN0bHksIGJhc2VkIG9uIHRoZXNlIG5ldyBmbGFncy4KCldlJiMzOTt2ZSBnb3QgdGhlIG5ldyBgT19JU19NS0RJUmAgbWFjcm8gZGVmaW5lZCBpbiBgZmNudGwuaGAgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0LgoKU28sIGFtIEkgc2VlaW5nIG5ldyBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcz8gTm90IGZyb20gdGhlIGluaXRpYWwgcmV2aWV3LiBUaGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVzZXItc3BhY2UgZXhwb3NlZCBkYXRhIHN0cnVjdHVyZXMsIG9yIGFsbG9jYXRpb25zIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMsIG9yIGludHJvZHVjZSBhbnkgbmV3IGJ1ZmZlcnMgb3IgYW55IGNvcHkgY2FsbHMuIEl0JiMzOTtzIHByaW1hcmlseSBjb250cm9sIGZsb3cgYW5kIGZsYWcgaGFuZGxpbmcsIG1ha2luZyBpdCBhIGxvZ2ljIGNoYW5nZS4gSWYgdGhlcmUgYXJlIGJ1Z3MsIHRoZXkmIzM5O3JlIG1vc3QgbGlrZWx5IGxvZ2ljIGVycm9ycywgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gS0FTQU4sIExPQ0tERVAsIGFuZCB0aGUgdXN1YWwgYnVnIGRldGVjdG9ycyAqc2hvdWxkKiBjYXRjaCB0aG9zZS4KCk9rYXksIGxldCYjMzk7cyBqdXN0IG1ha2UgKnN1cmUqIHdlJiMzOTtyZSBub3QgYWNjaWRlbnRhbGx5IHVzaW5nIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYW55d2hlcmUuIGB2ZnNfbWtkaXJfbm9fcGVybWAgdGFrZXMgYWxsIHRoZSBleHBlY3RlZCBhcmd1bWVudHM6IGFuIGlub2RlLCBkZW50cnksIG1vZGUsIGV0Yy4gYW5kIGNhbGxzIHRoZSBpbm9kZSYjMzk7cyBta2RpciBtZXRob2QuIEFsbCBnb29kLgoKTm93IGluIGBsb29rdXBfb3BlbmA6IElmIHRoZSBjcmVhdGVfZGlyIGZsYWcgaXMgc2V0LCBpdCBjYWxscyBgdmZzX21rZGlyX25vX3Blcm1gLiBJdCB1c2VzIHRoZSBgZGVsZWdhdGVkX2lub2RlYCBzdHJ1Y3QsIGRlZmluZWQgYXMgYHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlO2AuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCB2YXJpYWJsZSBpbiBgZnMvbmFtZWkuY2Agc291cmNlIGNvZGUuIEl0IHNlZW1zIGxpa2UgdGhlIHZhcmlhYmxlIGlzIGRlY2xhcmVkIGFuZCB1c2VkIGluIGEgd2F5IHRoYXQgKnNob3VsZCogYmUgc2FmZS4KCkJhc2VkIG9uIHRoZSBldmlkZW5jZSBJIHNlZSwgdGhpcyBkb2VzICpub3QqIGxvb2sgbGlrZSBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmFtZWkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uYW1laS5jPTQ0OTc9c3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5mcy9uYW1laS5jLTQ0OTkte1xuZnMvbmFtZWkuYzo0NTAwOlx0c3RydWN0IGRlbGVnYXRlZF9pbm9kZSBkZWxlZ2F0ZWRfaW5vZGUgPSB7IH07XG5mcy9uYW1laS5jLTQ1MDEtXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcDtcbi0tXG5mcy9uYW1laS5jPTU1MTE9aW50IGZpbGVuYW1lX21rZGlyYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lLCB1bW9kZV90IG1vZGUpXG4tLVxuZnMvbmFtZWkuYy01NTE2LVx0dW5zaWduZWQgaW50IGxvb2t1cF9mbGFncyA9IExPT0tVUF9ESVJFQ1RPUlk7XG5mcy9uYW1laS5jOjU1MTc6XHRzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlIGRlbGVnYXRlZF9pbm9kZSA9IHsgfTtcbmZzL25hbWVpLmMtNTUxOC1cbi0tXG5mcy9uYW1laS5jPTU2MTc9aW50IGZpbGVuYW1lX3JtZGlyKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSlcbi0tXG5mcy9uYW1laS5jLTU2MjQtXHR1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzID0gMDtcbmZzL25hbWVpLmM6NTYyNTpcdHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlID0geyB9O1xuZnMvbmFtZWkuYy01NjI2LXJldHJ5OlxuLS1cbmZzL25hbWVpLmM9NTc2MT1pbnQgZmlsZW5hbWVfdW5saW5rYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKVxuLS1cbmZzL25hbWVpLmMtNTc2OC1cdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG5mcy9uYW1laS5jOjU3Njk6XHRzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlIGRlbGVnYXRlZF9pbm9kZSA9IHsgfTtcbmZzL25hbWVpLmMtNTc3MC1cdHVuc2lnbmVkIGludCBsb29rdXBfZmxhZ3MgPSAwO1xuLS1cbmZzL25hbWVpLmM9NTg4NT1pbnQgZmlsZW5hbWVfc3ltbGlua2F0KHN0cnVjdCBmaWxlbmFtZSAqZnJvbSwgaW50IG5ld2RmZCwgc3RydWN0IGZpbGVuYW1lICp0bylcbi0tXG5mcy9uYW1laS5jLTU4OTAtXHR1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzID0gMDtcbmZzL25hbWVpLmM6NTg5MTpcdHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlID0geyB9O1xuZnMvbmFtZWkuYy01ODkyLVxuLS1cbmZzL25hbWVpLmM9NjAzMz1pbnQgZmlsZW5hbWVfbGlua2F0KGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqb2xkLFxuLS1cbmZzL25hbWVpLmMtNjAzOC1cdHN0cnVjdCBwYXRoIG9sZF9wYXRoLCBuZXdfcGF0aDtcbmZzL25hbWVpLmM6NjAzOTpcdHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlID0geyB9O1xuZnMvbmFtZWkuYy02MDQwLVx0aW50IGhvdyA9IDA7XG4tLVxuZnMvbmFtZWkuYz02MzMxPWludCBmaWxlbmFtZV9yZW5hbWVhdDIoaW50IG9sZGRmZCwgc3RydWN0IGZpbGVuYW1lICpmcm9tLFxuLS1cbmZzL25hbWVpLmMtNjMzNy1cdGVudW0gbGFzdF90eXBlIG9sZF90eXBlLCBuZXdfdHlwZTtcbmZzL25hbWVpLmM6NjMzODpcdHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlID0geyB9O1xuZnMvbmFtZWkuYy02MzM5LVx0dW5zaWduZWQgaW50IGxvb2t1cF9mbGFncyA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE2OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjIyCgkJCQkJCQlvdXRwdXQ6IDI2NAoJCQkJCQkJdGhvdWdodHM6IDQwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBPcGVuYXQgT19DUkVBVCB8IE9fRElSRUNUT1JZIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyBsb29rcyBjbGVhbiBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gVGhleSYjMzk7cmUgYWRkaW5nIGEgZmVhdHVyZSwgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAsIHRvIGBvcGVuYXRgLCB3aGljaCBpcyBzZW5zaWJsZSBmb3IgbWFuYWdpbmcgZGlyZWN0b3J5IGNyZWF0aW9uLiBUaGUgYGRlbGVnYXRlZF9pbm9kZWAgaXMgaW5pdGlhbGl6ZWQgYXMgYHsgfWAsIHNvIHdlJiMzOTtyZSBzdGFydGluZyB3aXRoIGEgY2xlYW4gc2xhdGUgdGhlcmUuCgpUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBmbGFnIGhhbmRsaW5nIGFuZCBjb250cm9sIGZsb3cgd2l0aGluIHRoZSBWRlMgYW5kIGZpbGVzeXN0ZW1zLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhYm91dCByb3V0aW5nIGRpcmVjdG9yeSBjcmVhdGlvbiByZXF1ZXN0cyB2aWEgYG9wZW5hdGAgbW9yZSBjb25zaXN0ZW50bHkuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoaW5ncyBsaWtlIHRoZSBgT19JU19NS0RJUmAgbWFjcm8sIG1vZGlmaWNhdGlvbnMgdG8gYGJ1aWxkX29wZW5fZmxhZ3MoKWAsIGFuZCB1cGRhdGVzIHRvIGZ1bmN0aW9ucyBsaWtlIGBsb29rdXBfb3BlbigpYCwgYHZmc19ta2RpcigpYCwgYW5kIGBhdG9taWNfb3BlbigpYC4gSW1wb3J0YW50bHksIGl0IHNlZW1zIGxpa2UgdGhleSYjMzk7cmUgZW5zdXJpbmcgZGlyZWN0b3J5IGNyZWF0aW9uIGdvZXMgZG93biB0aGUgcHJvcGVyLCBta2Rpci1zcGVjaWZpYyBwYXRocywgbGV2ZXJhZ2luZyBleGlzdGluZyBtZWNoYW5pc21zIGxpa2UgYHZmc19ta2Rpcl9ub19wZXJtKClgIGFuZCBgc2VjdXJpdHlfcGF0aF9ta2RpcigpYC4KClRoaW5raW5nIGFib3V0IHBvdGVudGlhbCByaXNrcywgYmVjYXVzZSBpdCBpcyBwdXJlbHkgbG9naWNhbCBjaGFuZ2VzLCBhbmQgaXQmIzM5O3Mgbm90IGludHJvZHVjaW5nIGNvbXBsZXggbmV3IGRhdGEgc3RydWN0dXJlcyBvciBkaXJlY3RseSBleHBvc2luZyBpbnRlcm5hbCBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZSB0cmFkaXRpb25hbCBtZW1vcnkgZXJyb3IgZGV0ZWN0b3JzLCBwYXJ0aWN1bGFybHkgS0FTQU4sIGFyZSBsaWtlbHkgc3VmZmljaWVudCB0byBkZXRlY3QgYW55IGlzc3Vlcy4gQW55IGJ1Z3MgYXJlIG11Y2ggbW9yZSBsaWtlbHkgdG8gbWFuaWZlc3QgYXMgbG9naWMgZXJyb3JzLCBkZXJlZmVyZW5jZXMsIG9yIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLiBUaGVzZSBhcmUgYWxsIHRoaW5ncyB0aGF0IEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGZsYWcgZWZmZWN0aXZlbHkuIFRoZSBkZXNpZ24gc2VlbXMgc291bmQgYW5kIGF2b2lkcyB0aGUgcGl0ZmFsbHMgdGhhdCB3b3VsZCB3YXJyYW50IEtNU0FOLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxNjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIFZGUyBhbmQgdmFyaW91cyBmaWxlc3lzdGVtcyB0byBzdXBwb3J0IGNyZWF0aW5nIGRpcmVjdG9yaWVzIHZpYSBgb3BlbmF0KClgIHdpdGggdGhlIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgIGZsYWdzLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBhZGRpbmcgdGhlIGBPX0lTX01LRElSYCBtYWNybywgbW9kaWZ5aW5nIGBidWlsZF9vcGVuX2ZsYWdzKClgIHRvIGhhbmRsZSB0aGUgbmV3IGZsYWcgY29tYmluYXRpb24sIGFuZCB1cGRhdGluZyBgbG9va3VwX29wZW4oKWAgYW5kIGB2ZnNfbWtkaXIoKWAgcGF0aHMgaW4gYGZzL25hbWVpLmNgIHRvIHJvdXRlIGRpcmVjdG9yeSBjcmVhdGlvbiByZXF1ZXN0cyB0byBgdmZzX21rZGlyX25vX3Blcm0oKWAgaW5zdGVhZCBvZiByZWd1bGFyIGZpbGUgY3JlYXRpb24gZnVuY3Rpb25zLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgbG9naWNhbCwgYWx0ZXJpbmcgY29udHJvbCBmbG93IGFuZCBmbGFnIGhhbmRsaW5nIHdpdGhpbiB0aGUgVkZTIGxheWVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbGwgdmFyaWFibGVzIHVzZWQgKHN1Y2ggYXMgYGRlbGVnYXRlZF9pbm9kZWApIGFyZSBwcm9wZXJseSB6ZXJvLWluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgVkZTIGFuZCB2YXJpb3VzIGZpbGVzeXN0ZW1zIHRvIHN1cHBvcnQgY3JlYXRpbmcgZGlyZWN0b3JpZXMgdmlhIGBvcGVuYXQoKWAgd2l0aCB0aGUgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAgZmxhZ3MuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIGFkZGluZyB0aGUgYE9fSVNfTUtESVJgIG1hY3JvLCBtb2RpZnlpbmcgYGJ1aWxkX29wZW5fZmxhZ3MoKWAgdG8gaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbiwgYW5kIHVwZGF0aW5nIGBsb29rdXBfb3BlbigpYCBhbmQgYHZmc19ta2RpcigpYCBwYXRocyBpbiBgZnMvbmFtZWkuY2AgdG8gcm91dGUgZGlyZWN0b3J5IGNyZWF0aW9uIHJlcXVlc3RzIHRvIGB2ZnNfbWtkaXJfbm9fcGVybSgpYCBpbnN0ZWFkIG9mIHJlZ3VsYXIgZmlsZSBjcmVhdGlvbiBmdW5jdGlvbnMuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBsb2dpY2FsLCBhbHRlcmluZyBjb250cm9sIGZsb3cgYW5kIGZsYWcgaGFuZGxpbmcgd2l0aGluIHRoZSBWRlMgbGF5ZXIuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuIEFsbCB2YXJpYWJsZXMgdXNlZCAoc3VjaCBhcyBgZGVsZWdhdGVkX2lub2RlYCkgYXJlIHByb3Blcmx5IHplcm8taW5pdGlhbGl6ZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIGxvZ2ljIGVycm9ycywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNDoxMC4yMjk4NzM1MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzY4NzgwMDQzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQ0VQSF9GU1wiLFxuICAgIFwiRlVTRV9GU1wiLFxuICAgIFwiR0ZTMl9GU1wiLFxuICAgIFwiTkZTX0ZTXCIsXG4gICAgXCJDSUZTXCIsXG4gICAgXCJWQk9YU0ZfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZnNfbWtkaXJcIixcbiAgICBcInZmc19jcmVhdGVcIixcbiAgICBcInZmc19sb29rdXBfb3BlblwiLFxuICAgIFwiZGVudHJ5X2NyZWF0ZVwiLFxuICAgIFwiZmlsZW5hbWVfbWtkaXJhdFwiLFxuICAgIFwiZmlsZW5hbWVfdW5saW5rYXRcIixcbiAgICBcImZpbGVuYW1lX3JlbmFtZWF0MlwiLFxuICAgIFwidjlmc192ZnNfYXRvbWljX29wZW5cIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuX2RvdGxcIixcbiAgICBcImNlcGhfYXRvbWljX29wZW5cIixcbiAgICBcImZ1c2VfYXRvbWljX29wZW5cIixcbiAgICBcImdmczJfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3BlblwiLFxuICAgIFwibmZzX2F0b21pY19vcGVuX3YyM1wiLFxuICAgIFwiY2lmc19hdG9taWNfb3BlblwiLFxuICAgIFwidmJveHNmX2Rpcl9hdG9taWNfb3BlblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBWRlMgYW5kIHZhcmlvdXMgZmlsZXN5c3RlbXMgdG8gc3VwcG9ydCBjcmVhdGluZyBkaXJlY3RvcmllcyB2aWEgYG9wZW5hdCgpYCB3aXRoIHRoZSBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCBmbGFncy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgYWRkaW5nIHRoZSBgT19JU19NS0RJUmAgbWFjcm8sIG1vZGlmeWluZyBgYnVpbGRfb3Blbl9mbGFncygpYCB0byBoYW5kbGUgdGhlIG5ldyBmbGFnIGNvbWJpbmF0aW9uLCBhbmQgdXBkYXRpbmcgYGxvb2t1cF9vcGVuKClgIGFuZCBgdmZzX21rZGlyKClgIHBhdGhzIGluIGBmcy9uYW1laS5jYCB0byByb3V0ZSBkaXJlY3RvcnkgY3JlYXRpb24gcmVxdWVzdHMgdG8gYHZmc19ta2Rpcl9ub19wZXJtKClgIGluc3RlYWQgb2YgcmVndWxhciBmaWxlIGNyZWF0aW9uIGZ1bmN0aW9ucy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgbG9naWNhbCwgYWx0ZXJpbmcgY29udHJvbCBmbG93IGFuZCBmbGFnIGhhbmRsaW5nIHdpdGhpbiB0aGUgVkZTIGxheWVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbGwgdmFyaWFibGVzIHVzZWQgKHN1Y2ggYXMgYGRlbGVnYXRlZF9pbm9kZWApIGFyZSBwcm9wZXJseSB6ZXJvLWluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAgZm9yIGBvcGVuYXQoKWAgdG8gYXRvbWljYWxseSBjcmVhdGUgYSBkaXJlY3RvcnkgYW5kIHJldHVybiBhIGZpbGUgZGVzY3JpcHRvci4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aCByZXNvbHV0aW9uIGFuZCBjcmVhdGlvbiBsb2dpYyBpbiBgZnMvbmFtZWkuY2AgYW5kIGBmcy9vcGVuLmNgLCBhbmQgdXBkYXRlcyBzZXZlcmFsIGZpbGVzeXN0ZW1zJyBgYXRvbWljX29wZW5gIGltcGxlbWVudGF0aW9ucyB0byBoYW5kbGUgdGhlIG5ldyBmbGFnIGNvbWJpbmF0aW9uLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNDoxMC4yMjk4Nzg2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMjg5NzQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQ2OTc0ZjJkYWUwM2EzMTRlZWRjZDIyNTE0OWUxMjZiNjYwOTRiNGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMjMgMTY6MTQ6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuY1xcbmluZGV4IDM4Mjk1NTRjYTM2OTIuLmIxZTA4MjNjODdiNTcgMTAwNjQ0XFxuLS0tIGEvZnMvOXAvdmZzX2lub2RlLmNcXG4rKysgYi9mcy85cC92ZnNfaW5vZGUuY1xcbkBAIC03NzYsNiArNzc2LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4gXFx0aW50IHA5X29tb2RlO1xcbiBcXG4rXFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxcbitcXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XFxuIFxcdFxcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7XFxuIFxcdFxcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcXG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuYyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcXG5pbmRleCAxMTZiMjllOTVmMjFlLi42NGUwYWJhMDhkYTE2IDEwMDY0NFxcbi0tLSBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcXG4rKysgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jXFxuQEAgLTIzOCw2ICsyMzgsOSBAQCB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXM7XFxuIFxcdHN0cnVjdCBwb3NpeF9hY2wgKnBhY2wgPSBOVUxMLCAqZGFjbCA9IE5VTEw7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcXG4gXFx0XFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdjlmc192ZnNfbG9va3VwKGRpciwgZGVudHJ5LCAwKTtcXG4gXFx0XFx0aWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKVxcbmRpZmYgLS1naXQgYS9mcy9jZXBoL2ZpbGUuYyBiL2ZzL2NlcGgvZmlsZS5jXFxuaW5kZXggYTRhMmE0YjZhMDI3ZC4uNjIxNjNiN2VjYTVmOSAxMDA2NDRcXG4tLS0gYS9mcy9jZXBoL2ZpbGUuY1xcbisrKyBiL2ZzL2NlcGgvZmlsZS5jXFxuQEAgLTgxMiw2ICs4MTIsOSBAQCBpbnQgY2VwaF9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHQgICAgICBkaXIsIGNlcGhfdmlub3AoZGlyKSwgZGVudHJ5LCBkZW50cnksXFxuIFxcdCAgICAgIGRfdW5oYXNoZWQoZGVudHJ5KSA/IFxcXCJ1bmhhc2hlZFxcXCIgOiBcXFwiaGFzaGVkXFxcIiwgZmxhZ3MsIG1vZGUpO1xcbiBcXG4rXFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxcbitcXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGlmIChkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4gXFx1MDAzZSBOQU1FX01BWClcXG4gXFx0XFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuY1xcbmluZGV4IGQ0ZTAwMjk4MTBjMGYuLjU1ZDU4NDRlMjY1NTkgMTAwNjQ0XFxuLS0tIGEvZnMvZnVzZS9kaXIuY1xcbisrKyBiL2ZzL2Z1c2UvZGlyLmNcXG5AQCAtOTM1LDYgKzkzNSw5IEBAIHN0YXRpYyBpbnQgZnVzZV9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZW50cnksXFxuIFxcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XFxuIFxcdHN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihkaXIpO1xcbiBcXG4rXFx0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxcbitcXHRcXHRmbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdGlmIChmdXNlX2lzX2JhZChkaXIpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuY1xcbmluZGV4IGYzNjE4NzZjNTU4MzMuLjNlZTEzNjBmMWJjMjcgMTAwNjQ0XFxuLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jXFxuKysrIGIvZnMvZ2ZzMi9pbm9kZS5jXFxuQEAgLTEzODYsNiArMTM4Niw5IEBAIHN0YXRpYyBpbnQgZ2ZzMl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiB7XFxuIFxcdGJvb2wgZXhjbCA9ICEhKGZsYWdzIFxcdTAwMjYgT19FWENMKTtcXG4gXFxuK1xcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcXG4rXFx0XFx0ZmxhZ3MgXFx1MDAyNj0gfk9fQ1JFQVQ7XFxuK1xcbiBcXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xcbiBcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkID0gX19nZnMyX2xvb2t1cChkaXIsIGRlbnRyeSwgZmlsZSk7XFxuIFxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9PUEVORUQpIHtcXG5kaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmNcXG5pbmRleCAyMGE2NTM0ZWEzZWZmLi5lMWE4ZjE4Mzg1YTUyIDEwMDY0NFxcbi0tLSBhL2ZzL25hbWVpLmNcXG4rKysgYi9mcy9uYW1laS5jXFxuQEAgLTEzODIsMTMgKzEzODIsMTMgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxcbiBcXG4gLyoqXFxuICAqIG1heV9jcmVhdGVfaW5fc3RpY2t5IC0gQ2hlY2sgd2hldGhlciBhbiBPX0NSRUFUIG9wZW4gaW4gYSBzdGlja3kgZGlyZWN0b3J5XFxuLSAqXFx0XFx0XFx0ICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcyB0aGF0IGFscmVhZHlcXG4tICpcXHRcXHRcXHQgIGV4aXN0LlxcbisgKlxcdFxcdFxcdCAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdCwgb24gZmlsZXMvZGlyZWN0b3JpZXMgdGhhdFxcbisgKlxcdFxcdFxcdCAgYWxyZWFkeSBleGlzdC5cXG4gICogQGlkbWFwOiBpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXFxuICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGFcXG4gICogQGlub2RlOiB0aGUgaW5vZGUgb2YgdGhlIGZpbGUgdG8gb3BlblxcbiAgKlxcbi0gKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZSkgd2hlbjpcXG4rICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUvZGlyZWN0b3J5KSB3aGVuOlxcbiAgKiAgIC0gc3lzY3RsX3Byb3RlY3RlZF9maWZvcyAob3Igc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyKSBpcyBlbmFibGVkXFxuICAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0c1xcbiAgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxcbkBAIC0xNDE2LDYgKzE0MTYsMTQgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuIFxcdGlmIChsaWtlbHkoIShkaXJfbW9kZSBcXHUwMDI2IFNfSVNWVFgpKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUaGVyZSBpcyBubyBzZXBhcmF0ZSBzeXNjdGwgZm9yIGRpcmVjdG9yeSBjcmVhdGlvbiBpbiBzdGlja3lcXG4rXFx0ICogZm9sZGVycy4gVGhlcmVmb3JlLCBmb3IgdGhlIFNfSVNESVIgY2FzZSwgZGlzYWJsaW5nXFxuK1xcdCAqIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhciBpcyBub3QgZW5vdWdoIHRvIGFsbG93IGNyZWF0aW5nIGFcXG4rXFx0ICogZGlyZWN0b3J5IGluIGEgc3RpY2t5IGZvbGRlciwgYmVjYXVzZSB0aGF0IG1heSBzdXJwcmlzZSB1c2Vyc1xcbitcXHQgKiBub3QgZXhwZWN0aW5nIHRoYXQgT19DUkVBVHxPX0RJUkVDVE9SWSBpcyBwb3NzaWJsZSBvbiBuZXdlclxcbitcXHQgKiBrZXJuZWxzLlxcbitcXHQgKi9cXG4gXFx0aWYgKFNfSVNSRUcoaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcilcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0xNDQ3LDYgKzE0NTUsMTIgQEAgc3RhdGljIGludCBtYXlfY3JlYXRlX2luX3N0aWNreShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJzdGlja3lfY3JlYXRlX3JlZ3VsYXJcXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuIFxcdFxcdH1cXG4rXFxuK1xcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuK1xcdFxcdFxcdGF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBcXFwic3RpY2t5X2NyZWF0ZV9kaXJcXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FQUNDRVM7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTI3ODEsOSArMjc5NSwxNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncylcXG4gXFx0cmV0dXJuIHM7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKGNvbnN0IHN0cnVjdCBxc3RyICpsYXN0KVxcbit7XFxuK1xcdC8qIGxhc3QtXFx1MDAzZWxlbiBpcyBzZXQgYnkgaGFzaF9uYW1lKCkgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudFxcbitcXHQgKiBjb21wb25lbnQgLVxcdTAwM2VuYW1lLCB0ZXJtaW5hdGluZyB3aXRoICcvJyBvciBhIE5VTCBjaGFyYWN0ZXIuICovXFxuK1xcdHJldHVybiAoYm9vbClsYXN0LVxcdTAwM2VuYW1lW2xhc3QtXFx1MDAzZWxlbl07XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbG9va3VwX2xhc3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQpXFxuIHtcXG4tXFx0aWYgKG5kLVxcdTAwM2VsYXN0X3R5cGUgPT0gTEFTVF9OT1JNIFxcdTAwMjZcXHUwMDI2IG5kLVxcdTAwM2VsYXN0Lm5hbWVbbmQtXFx1MDAzZWxhc3QubGVuXSlcXG4rXFx0aWYgKG5kLVxcdTAwM2VsYXN0X3R5cGUgPT0gTEFTVF9OT1JNIFxcdTAwMjZcXHUwMDI2IHRyYWlsaW5nX3NsYXNoZXMoXFx1MDAyNm5kLVxcdTAwM2VsYXN0KSlcXG4gXFx0XFx0bmQtXFx1MDAzZWZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZO1xcbiBcXG4gXFx0cmV0dXJuIHdhbGtfY29tcG9uZW50KG5kLCBXQUxLX1RSQUlMSU5HKTtcXG5AQCAtNDE1OSw2ICs0MTgwLDI0IEBAIHN0YXRpYyBpbmxpbmUgdW1vZGVfdCB2ZnNfcHJlcGFyZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRyZXR1cm4gbW9kZTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZVxcbitpbnQgdmZzX2NyZWF0ZV9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdCAgICAgICB1bW9kZV90IG1vZGUsIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRpKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZSAqZGlyID0gZF9pbm9kZShkZW50cnktXFx1MDAzZWRfcGFyZW50KTtcXG4rXFx0aW50IGVycm9yO1xcbitcXG4rXFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0ZXJyb3IgPSBkaXItXFx1MDAzZWlfb3AtXFx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xcbitcXHRpZiAoIWVycm9yKVxcbitcXHRcXHRmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpO1xcbitcXG4rXFx0cmV0dXJuIGVycm9yO1xcbit9XFxuK1xcbiAvKipcXG4gICogdmZzX2NyZWF0ZSAtIGNyZWF0ZSBuZXcgZmlsZVxcbiAgKiBAaWRtYXA6XFx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxcbkBAIC00MTkxLDEzICs0MjMwLDggQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbiBcXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbi1cXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcXG4tXFx0aWYgKGVycm9yKVxcbi1cXHRcXHRyZXR1cm4gZXJyb3I7XFxuLVxcdGVycm9yID0gZGlyLVxcdTAwM2VpX29wLVxcdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcXG4tXFx0aWYgKCFlcnJvcilcXG4tXFx0XFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcXG4tXFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0cmV0dXJuIHZmc19jcmVhdGVfbm9fcGVybShpZG1hcCwgZGVudHJ5LCBtb2RlLCBkaSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh2ZnNfY3JlYXRlKTtcXG4gXFxuQEAgLTQzMTQsMjEgKzQzNDgsNDEgQEAgc3RhdGljIGlubGluZSBpbnQgb3Blbl90b19uYW1laV9mbGFncyhpbnQgZmxhZylcXG4gXFxuIHN0YXRpYyBpbnQgbWF5X29fY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgcGF0aCAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLVxcdFxcdFxcdHVtb2RlX3QgbW9kZSlcXG4rXFx0XFx0XFx0aW50IG9wZW5fZmxhZywgdW1vZGVfdCBtb2RlKVxcbiB7XFxuLVxcdGludCBlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX2lub2RlO1xcbitcXHRib29sIGNyZWF0ZV9kaXIgPSBPX0lTX01LRElSKG9wZW5fZmxhZyk7XFxuK1xcdGludCBlcnJvcjtcXG4rXFxuK1xcdGlmIChjcmVhdGVfZGlyKVxcbitcXHRcXHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXG4gXFx0aWYgKCFmc3VpZGdpZF9oYXNfbWFwcGluZyhkaXItXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9zYiwgaWRtYXApKVxcbiBcXHRcXHRyZXR1cm4gLUVPVkVSRkxPVztcXG4gXFxuLVxcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfaW5vZGUsXFxuLVxcdFxcdFxcdFxcdCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XFxuK1xcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXG4tXFx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXItXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcXG4rXFx0aWYgKGNyZWF0ZV9kaXIpXFxuK1xcdFxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpcl9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcXG4rXFxuK1xcdHJldHVybiBlcnJvcjtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1bW9kZV90IG9fY3JlYXRlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBpbm9kZSAqZGlyLCBpbnQgb3Blbl9mbGFnLCB1bW9kZV90IG1vZGUpXFxuK3tcXG4rXFx0aWYgKE9fSVNfTUtESVIob3Blbl9mbGFnKSlcXG4rXFx0XFx0cmV0dXJuIHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JUldYVUdPIHwgU19JU1ZUWCwgU19JRkRJUik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0dXJuIHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTQzNjQsOCArNDQxOCw5IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5XFxuIFxcbiBcXHRmaWxlLVxcdTAwM2VfX2ZfcGF0aC5kZW50cnkgPSBERU5UUllfTk9UX1NFVDtcXG4gXFx0ZmlsZS1cXHUwMDNlX19mX3BhdGgubW50ID0gcGF0aC1cXHUwMDNlbW50O1xcbitcXG4gXFx0ZXJyb3IgPSBkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWF0b21pY19vcGVuKGRpcl9pbm9kZSwgZGVudHJ5LCBmaWxlLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpLCBtb2RlKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBvcGVuX3RvX25hbWVpX2ZsYWdzKG9wZW5fZmxhZyksIG1vZGUpO1xcbiBcXHRkX2xvb2t1cF9kb25lKGRlbnRyeSk7XFxuIFxcbiBcXHRpZiAoIWVycm9yKSB7XFxuQEAgLTQ0MTAsMTAgKzQ0NjUsMjEgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0b21pY19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnlcXG4gXFx0XFx0fVxcbiBcXHRcXHRkcHV0KGRlbnRyeSk7XFxuIFxcdFxcdGRlbnRyeSA9IEVSUl9QVFIoZXJyb3IpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfQ1JFQVRFRClcXG4rXFx0XFx0XFx0ZnNub3RpZnlfY3JlYXRlKGRpcl9pbm9kZSwgZGVudHJ5KTtcXG4rXFx0XFx0aWYgKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX09QRU5FRClcXG4rXFx0XFx0XFx0ZnNub3RpZnlfb3BlbihmaWxlKTtcXG4gXFx0fVxcbitcXG4rXFxuIFxcdHJldHVybiBkZW50cnk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmVcXG4rc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKixcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKik7XFxuIC8qXFxuICAqIExvb2sgdXAgYW5kIG1heWJlIGNyZWF0ZSBhbmQgb3BlbiB0aGUgbGFzdCBjb21wb25lbnQuXFxuICAqXFxuQEAgLTQ0MzUsNiArNDUwMSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuIFxcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwO1xcbiBcXHRzdHJ1Y3QgZGVudHJ5ICpkaXIgPSBuZC1cXHUwMDNlcGF0aC5kZW50cnk7XFxuIFxcdHN0cnVjdCBpbm9kZSAqZGlyX2lub2RlID0gZGlyLVxcdTAwM2VkX2lub2RlO1xcbitcXHRib29sIGNyZWF0ZV9kaXIgPSBPX0lTX01LRElSKG9wLVxcdTAwM2Vtb2RlKTtcXG4gXFx0aW50IG9wZW5fZmxhZztcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xcbiBcXHRpbnQgZXJyb3IsIGNyZWF0ZV9lcnJvcjtcXG5AQCAtNDQ1NSw3ICs0NTIyLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0ICovXFxuIFxcdH1cXG4gXFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpXFxuLVxcdFxcdGlub2RlX2xvY2soZGlyX2lub2RlKTtcXG4rXFx0XFx0aW5vZGVfbG9ja19uZXN0ZWQoZGlyX2lub2RlLCBJX01VVEVYX1BBUkVOVCk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0aW5vZGVfbG9ja19zaGFyZWQoZGlyX2lub2RlKTtcXG4gXFxuQEAgLTQ1MDcsMTIgKzQ1NzQsMTcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG4gXFx0XFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fRVhDTClcXG4gXFx0XFx0XFx0b3Blbl9mbGFnIFxcdTAwMjY9IH5PX1RSVU5DO1xcbi1cXHRcXHRtb2RlID0gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBtb2RlLCBtb2RlLCBtb2RlKTtcXG4rXFx0XFx0bW9kZSA9IG9fY3JlYXRlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgb3Blbl9mbGFnLCBtb2RlKTtcXG4gXFx0XFx0aWYgKGxpa2VseShnb3Rfd3JpdGUpKVxcbiBcXHRcXHRcXHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIFxcdTAwMjZuZC1cXHUwMDNlcGF0aCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGRlbnRyeSwgbW9kZSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBkZW50cnksIG9wZW5fZmxhZywgbW9kZSk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0Y3JlYXRlX2Vycm9yID0gLUVST0ZTO1xcbitcXHRcXHQvKiBSZWZ1c2UgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRocm91Z2ggYSBkYW5nbGluZyAodHJhaWxpbmcpXFxuK1xcdFxcdCAqIHN5bWxpbmsuIEZvciByZWd1bGFyIGZpbGVzIHRoaXMgaGFzIGJlZW4gYWxsb3dlZCBoaXN0b3JpY2FsbHlcXG4rXFx0XFx0ICogb24gT19DUkVBVCB3aXRob3V0IE9fRVhDTC4gKi9cXG4rXFx0XFx0aWYgKHVubGlrZWx5KG5kLVxcdTAwM2VkZXB0aCkgXFx1MDAyNlxcdTAwMjYgY3JlYXRlX2RpciBcXHUwMDI2XFx1MDAyNiAhY3JlYXRlX2Vycm9yKVxcbitcXHRcXHRcXHRjcmVhdGVfZXJyb3IgPSAtRUVYSVNUO1xcbiBcXHR9XFxuIFxcdGlmIChjcmVhdGVfZXJyb3IpXFxuIFxcdFxcdG9wZW5fZmxhZyBcXHUwMDI2PSB+T19DUkVBVDtcXG5AQCAtNDUzNyw2ICs0NjA5LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4gXFx0XFx0XFx0ZGVudHJ5ID0gcmVzO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFxuIFxcdGlmIChkZW50cnktXFx1MDAzZWRfaW5vZGUgfHwgIShvcC1cXHUwMDNlb3Blbl9mbGFnIFxcdTAwMjYgT19DUkVBVCkpIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogTm8gbmVlZCB0byBjcmVhdGUgYSBmaWxlLiAgSWYgbG9va3VwIHJldHVybmVkIGEgcG9zaXRpdmVcXG5AQCAtNDU1NCwyNiArNDYyNywyNiBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbiBcXHRcXHRnb3RvIG91dF9kcHV0O1xcbiBcXHR9XFxuIFxcbi1cXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXJfaW5vZGUsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIFxcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xcbi1cXHRpZiAoZXJyb3IpXFxuLVxcdFxcdGdvdG8gb3V0X2RwdXQ7XFxuLVxcbi1cXHRmaWxlLVxcdTAwM2VmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDtcXG4tXFx0aWYgKCFkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWNyZWF0ZSkge1xcbitcXHRpZiAoKGNyZWF0ZV9kaXIgXFx1MDAyNlxcdTAwMjYgIWRpcl9pbm9kZS1cXHUwMDNlaV9vcC1cXHUwMDNlbWtkaXIpXFxuK1xcdFxcdHx8ICghY3JlYXRlX2RpciBcXHUwMDI2XFx1MDAyNiAhZGlyX2lub2RlLVxcdTAwM2VpX29wLVxcdTAwM2VjcmVhdGUpKSB7XFxuIFxcdFxcdGVycm9yID0gLUVBQ0NFUztcXG4gXFx0XFx0Z290byBvdXRfZHB1dDtcXG4gXFx0fVxcbiBcXG4tXFx0ZXJyb3IgPSBkaXJfaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xcbitcXHRpZiAoY3JlYXRlX2Rpcikge1xcbitcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBtb2RlLCBcXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcXG4rXFx0XFx0XFx0ZXJyb3IgPSBQVFJfRVJSX09SX1pFUk8ocmVzKTtcXG4rXFx0XFx0XFx0aWYgKCFlcnJvcilcXG4rXFx0XFx0XFx0XFx0ZGVudHJ5ID0gcmVzO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRlcnJvciA9IHZmc19jcmVhdGVfbm9fcGVybShpZG1hcCwgZGVudHJ5LCBtb2RlLCBcXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcXG4rXFx0fVxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdGdvdG8gb3V0X2RwdXQ7XFxuK1xcbitcXHRmaWxlLVxcdTAwM2VmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDtcXG4gb3V0Olxcbi1cXHRpZiAoIUlTX0VSUihkZW50cnkpKSB7XFxuLVxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX21vZGUgXFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxcbi1cXHRcXHRcXHRmc25vdGlmeV9jcmVhdGUoZGlyX2lub2RlLCBkZW50cnkpO1xcbi1cXHRcXHRpZiAoZmlsZS1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfT1BFTkVEKVxcbi1cXHRcXHRcXHRmc25vdGlmeV9vcGVuKGZpbGUpO1xcbi1cXHR9XFxuIFxcdGlmICgob3Blbl9mbGFnIFxcdTAwMjYgT19DUkVBVCkgfHwgY3JlYXRlX2Vycm9yKVxcbiBcXHRcXHRpbm9kZV91bmxvY2soZGlyX2lub2RlKTtcXG4gXFx0ZWxzZVxcbkBAIC00Njk1LDE3ICs0NzY4LDEyIEBAIHN0cnVjdCBmaWxlICp2ZnNfbG9va3VwX29wZW4oc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IHFzdHIgKmxhc3QsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyh2ZnNfbG9va3VwX29wZW4sIFxcXCJuZnNkXFxcIik7XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhzdHJ1Y3QgbmFtZWlkYXRhICpuZClcXG4te1xcbi1cXHRyZXR1cm4gKGJvb2wpbmQtXFx1MDAzZWxhc3QubmFtZVtuZC1cXHUwMDNlbGFzdC5sZW5dO1xcbi19XFxuLVxcbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpXFxuIHtcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xcbiBcXG4gXFx0aWYgKG9wZW5fZmxhZyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG4tXFx0XFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKVxcbitcXHRcXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhcXHUwMDI2bmQtXFx1MDAzZWxhc3QpIFxcdTAwMjZcXHUwMDI2ICEob3Blbl9mbGFnIFxcdTAwMjYgT19ESVJFQ1RPUlkpKVxcbiBcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlTRElSKTtcXG4gXFxuIFxcdFxcdC8qIERvbid0IGJvdGhlciBvbiBhbiBPX0VYQ0wgY3JlYXRlICovXFxuQEAgLTQ3MTMsNyArNDc4MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZylcXG4gXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcXG4rXFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMoXFx1MDAyNm5kLVxcdTAwM2VsYXN0KSlcXG4gXFx0XFx0bmQtXFx1MDAzZWZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZO1xcbiBcXG4gXFx0ZGVudHJ5ID0gbG9va3VwX2Zhc3QobmQpO1xcbkBAIC00ODA2LDggKzQ4NzQsOSBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuIFxcdGlmIChvcGVuX2ZsYWcgXFx1MDAyNiBPX0NSRUFUKSB7XFxuIFxcdFxcdGlmICgob3Blbl9mbGFnIFxcdTAwMjYgT19FWENMKSBcXHUwMDI2XFx1MDAyNiAhKGZpbGUtXFx1MDAzZWZfbW9kZSBcXHUwMDI2IEZNT0RFX0NSRUFURUQpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4tXFx0XFx0aWYgKGRfaXNfZGlyKG5kLVxcdTAwM2VwYXRoLmRlbnRyeSkpXFxuK1xcdFxcdGlmICghKG9wZW5fZmxhZyBcXHUwMDI2IE9fRElSRUNUT1JZKSBcXHUwMDI2XFx1MDAyNiBkX2lzX2RpcihuZC1cXHUwMDNlcGF0aC5kZW50cnkpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJU0RJUjtcXG4rXFxuIFxcdFxcdGVycm9yID0gbWF5X2NyZWF0ZV9pbl9zdGlja3koaWRtYXAsIG5kLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGRfYmFja2luZ19pbm9kZShuZC1cXHUwMDNlcGF0aC5kZW50cnkpKTtcXG4gXFx0XFx0aWYgKHVubGlrZWx5KGVycm9yKSlcXG5AQCAtNTA4Nyw3ICs1MTU2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZShpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXFxuIFxcdCAqIERvIHRoZSBmaW5hbCBsb29rdXAuICBTdXBwcmVzcyAnY3JlYXRlJyBpZiB0aGVyZSBpcyBhIHRyYWlsaW5nXFxuIFxcdCAqICcvJywgYW5kIGEgZGlyZWN0b3J5IHdhc24ndCByZXF1ZXN0ZWQuXFxuIFxcdCAqL1xcbi1cXHRpZiAobGFzdC5uYW1lW2xhc3QubGVuXSBcXHUwMDI2XFx1MDAyNiAhd2FudF9kaXIpXFxuK1xcdGlmICh0cmFpbGluZ19zbGFzaGVzKFxcdTAwMjZsYXN0KSBcXHUwMDI2XFx1MDAyNiAhd2FudF9kaXIpXFxuIFxcdFxcdGNyZWF0ZV9mbGFncyBcXHUwMDI2PSB+TE9PS1VQX0NSRUFURTtcXG4gXFx0ZGVudHJ5ID0gc3RhcnRfZGlyb3AocGF0aC1cXHUwMDNlZGVudHJ5LCBcXHUwMDI2bGFzdCwgcmV2YWxfZmxhZyB8IGNyZWF0ZV9mbGFncyk7XFxuIFxcdGlmIChJU19FUlIoZGVudHJ5KSlcXG5AQCAtNTE4Miw3ICs1MjUxLDcgQEAgc3RydWN0IGZpbGUgKmRlbnRyeV9jcmVhdGUoc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncywgdW1vZGVfdCBtb2RlLFxcbiBcXHRcXHRwYXRoLVxcdTAwM2VkZW50cnkgPSBkaXI7XFxuIFxcdFxcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7XFxuIFxcbi1cXHRcXHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIHBhdGgsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdFxcdGNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgcGF0aCwgZGVudHJ5LCBmbGFncywgbW9kZSk7XFxuIFxcdFxcdGlmIChjcmVhdGVfZXJyb3IpXFxuIFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbiBcXG5AQCAtNTM1Niw2ICs1NDI1LDM0IEBAIFNZU0NBTExfREVGSU5FMyhta25vZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVtb2RlX3QsIG1vZGUsIHVuc2lnbmVkLCBkXFxuIFxcdHJldHVybiBmaWxlbmFtZV9ta25vZGF0KEFUX0ZEQ1dELCBuYW1lLCBtb2RlLCBkZXYpO1xcbiB9XFxuIFxcbisvKiBSZXR1cm5zIHRoZSBkZW50cnkgdG8gdXNlIChub3QgTlVMTCkgb3IgLUUgb24gZXJyb3IgKi9cXG4rc3RhdGljIGlubGluZVxcbitzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRpKVxcbit7XFxuK1xcdGludCBlcnJvcjtcXG4rXFx0c3RydWN0IGRlbnRyeSAqZGU7XFxuK1xcdHVuc2lnbmVkIG1heF9saW5rcyA9IGRpci1cXHUwMDNlaV9zYi1cXHUwMDNlc19tYXhfbGlua3M7XFxuK1xcbitcXHRpZiAobWF4X2xpbmtzIFxcdTAwMjZcXHUwMDI2IGRpci1cXHUwMDNlaV9ubGluayBcXHUwMDNlPSBtYXhfbGlua3MpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTUxJTkspO1xcbitcXG4rXFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyb3IpO1xcbitcXG4rXFx0ZGUgPSBkaXItXFx1MDAzZWlfb3AtXFx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuK1xcdGlmIChJU19FUlIoZGUpKVxcbitcXHRcXHRyZXR1cm4gZGU7XFxuK1xcdGlmIChkZSkge1xcbitcXHRcXHRkcHV0KGRlbnRyeSk7XFxuK1xcdFxcdGRlbnRyeSA9IGRlO1xcbitcXHR9XFxuK1xcdGZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTtcXG4rXFx0cmV0dXJuIGRlbnRyeTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHZmc19ta2RpciAtIGNyZWF0ZSBkaXJlY3RvcnkgcmV0dXJuaW5nIGNvcnJlY3QgZGVudHJ5IGlmIHBvc3NpYmxlXFxuICAqIEBpZG1hcDpcXHRcXHRpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXFxuQEAgLTUzODMsNyArNTQ4MCw2IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkZWxlZ2F0ZWRfaW5vZGUpXFxuIHtcXG4gXFx0aW50IGVycm9yO1xcbi1cXHR1bnNpZ25lZCBtYXhfbGlua3MgPSBkaXItXFx1MDAzZWlfc2ItXFx1MDAzZXNfbWF4X2xpbmtzO1xcbiBcXHRzdHJ1Y3QgZGVudHJ5ICpkZTtcXG4gXFxuIFxcdGVycm9yID0gbWF5X2NyZWF0ZV9kZW50cnkoaWRtYXAsIGRpciwgZGVudHJ5KTtcXG5AQCAtNTM5OSwyNCArNTQ5NSwxMiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4tXFx0ZXJyb3IgPSAtRU1MSU5LO1xcbi1cXHRpZiAobWF4X2xpbmtzIFxcdTAwMjZcXHUwMDI2IGRpci1cXHUwMDNlaV9ubGluayBcXHUwMDNlPSBtYXhfbGlua3MpXFxuLVxcdFxcdGdvdG8gZXJyO1xcbi1cXG4tXFx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkZWxlZ2F0ZWRfaW5vZGUpO1xcbi1cXHRpZiAoZXJyb3IpXFxuLVxcdFxcdGdvdG8gZXJyO1xcbi1cXG4tXFx0ZGUgPSBkaXItXFx1MDAzZWlfb3AtXFx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XFxuLVxcdGVycm9yID0gUFRSX0VSUihkZSk7XFxuLVxcdGlmIChJU19FUlIoZGUpKVxcbitcXHRkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcXG4rXFx0aWYgKElTX0VSUihkZSkpIHtcXG4rXFx0XFx0ZXJyb3IgPSBQVFJfRVJSKGRlKTtcXG4gXFx0XFx0Z290byBlcnI7XFxuLVxcdGlmIChkZSkge1xcbi1cXHRcXHRkcHV0KGRlbnRyeSk7XFxuLVxcdFxcdGRlbnRyeSA9IGRlO1xcbiBcXHR9XFxuLVxcdGZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTtcXG4tXFx0cmV0dXJuIGRlbnRyeTtcXG4rXFx0cmV0dXJuIGRlO1xcbiBcXG4gZXJyOlxcbiBcXHRlbmRfY3JlYXRpbmcoZGVudHJ5KTtcXG5AQCAtNTcwMyw3ICs1Nzg3LDcgQEAgaW50IGZpbGVuYW1lX3VubGlua2F0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSlcXG4gXFx0XFx0Z290byBleGl0X2Ryb3Bfd3JpdGU7XFxuIFxcbiBcXHQvKiBXaHkgbm90IGJlZm9yZT8gQmVjYXVzZSB3ZSB3YW50IGNvcnJlY3QgZXJyb3IgdmFsdWUgKi9cXG4tXFx0aWYgKHVubGlrZWx5KGxhc3QubmFtZVtsYXN0Lmxlbl0pKSB7XFxuK1xcdGlmICh1bmxpa2VseSh0cmFpbGluZ19zbGFzaGVzKFxcdTAwMjZsYXN0KSkpIHtcXG4gXFx0XFx0aWYgKGRfaXNfZGlyKGRlbnRyeSkpXFxuIFxcdFxcdFxcdGVycm9yID0gLUVJU0RJUjtcXG4gXFx0XFx0ZWxzZVxcbkBAIC02MzA1LDE2ICs2Mzg5LDE2IEBAIGludCBmaWxlbmFtZV9yZW5hbWVhdDIoaW50IG9sZGRmZCwgc3RydWN0IGZpbGVuYW1lICpmcm9tLFxcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIHtcXG4gXFx0XFx0aWYgKCFkX2lzX2RpcihyZC5uZXdfZGVudHJ5KSkge1xcbiBcXHRcXHRcXHRlcnJvciA9IC1FTk9URElSO1xcbi1cXHRcXHRcXHRpZiAobmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKVxcbitcXHRcXHRcXHRpZiAodHJhaWxpbmdfc2xhc2hlcyhcXHUwMDI2bmV3X2xhc3QpKVxcbiBcXHRcXHRcXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0LyogdW5sZXNzIHRoZSBzb3VyY2UgaXMgYSBkaXJlY3RvcnkgdHJhaWxpbmcgc2xhc2hlcyBnaXZlIC1FTk9URElSICovXFxuIFxcdGlmICghZF9pc19kaXIocmQub2xkX2RlbnRyeSkpIHtcXG4gXFx0XFx0ZXJyb3IgPSAtRU5PVERJUjtcXG4tXFx0XFx0aWYgKG9sZF9sYXN0Lm5hbWVbb2xkX2xhc3QubGVuXSlcXG4rXFx0XFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMoXFx1MDAyNm9sZF9sYXN0KSlcXG4gXFx0XFx0XFx0Z290byBleGl0X3VubG9jaztcXG4tXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIFxcdTAwMjZcXHUwMDI2IG5ld19sYXN0Lm5hbWVbbmV3X2xhc3QubGVuXSlcXG4rXFx0XFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIFxcdTAwMjZcXHUwMDI2IHRyYWlsaW5nX3NsYXNoZXMoXFx1MDAyNm5ld19sYXN0KSlcXG4gXFx0XFx0XFx0Z290byBleGl0X3VubG9jaztcXG4gXFx0fVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jXFxuaW5kZXggMzZmMmU4NTg4OTIyMC4uYjRkYjcwM2M5ZThjNyAxMDA2NDRcXG4tLS0gYS9mcy9uZnMvZGlyLmNcXG4rKysgYi9mcy9uZnMvZGlyLmNcXG5AQCAtMjEyMSw2ICsyMTIxLDkgQEAgaW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHRkZnByaW50ayhWRlMsIFxcXCJORlM6IGF0b21pY19vcGVuKCVzLyVsbHUpLCAlcGRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdGRpci1cXHUwMDNlaV9zYi1cXHUwMDNlc19pZCwgZGlyLVxcdTAwM2VpX2lubywgZGVudHJ5KTtcXG4gXFxuK1xcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxcbitcXHRcXHRvcGVuX2ZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0ZXJyID0gbmZzX2NoZWNrX2ZsYWdzKG9wZW5fZmxhZ3MpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbkBAIC0yMzEzLDYgKzIzMTYsOSBAQCBpbnQgbmZzX2F0b21pY19vcGVuX3YyMyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbiBcXHQgKi9cXG4gXFx0aW50IGVycm9yID0gMDtcXG4gXFxuK1xcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxcbitcXHRcXHRvcGVuX2ZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbiBcXHUwMDNlIE5GU19TRVJWRVIoZGlyKS1cXHUwMDNlbmFtZWxlbilcXG4gXFx0XFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9vcGVuLmNcXG5pbmRleCA2YjFjMTRlNjg0YTkzLi42Y2I1ZTJhZDc4MWYzIDEwMDY0NFxcbi0tLSBhL2ZzL29wZW4uY1xcbisrKyBiL2ZzL29wZW4uY1xcbkBAIC0xMjM5LDI5ICsxMjM5LDMwIEBAIGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxcbiBcXHRpZiAoV0lMTF9DUkVBVEUoZmxhZ3MpKSB7XFxuIFxcdFxcdGlmIChob3ctXFx1MDAzZW1vZGUgXFx1MDAyNiB+U19JQUxMVUdPKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0b3AtXFx1MDAzZW1vZGUgPSBob3ctXFx1MDAzZW1vZGUgfCBTX0lGUkVHO1xcbitcXHRcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdFxcdG9wLVxcdTAwM2Vtb2RlID0gaG93LVxcdTAwM2Vtb2RlIHwgU19JRkRJUjtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRvcC1cXHUwMDNlbW9kZSA9IGhvdy1cXHUwMDNlbW9kZSB8IFNfSUZSRUc7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGlmIChob3ctXFx1MDAzZW1vZGUgIT0gMClcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdG9wLVxcdTAwM2Vtb2RlID0gMDtcXG4gXFx0fVxcbiBcXG4tXFx0LypcXG4tXFx0ICogQmxvY2sgYnVncyB3aGVyZSBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQgY3JlYXRlZCByZWd1bGFyIGZpbGVzLlxcbi1cXHQgKiBOb3RlLCB0aGF0IGJsb2NraW5nIE9fRElSRUNUT1JZIHwgT19DUkVBVCBoZXJlIGFsc28gcHJvdGVjdHNcXG4tXFx0ICogT19UTVBGSUxFIGJlbG93IHdoaWNoIHJlcXVpcmVzIE9fRElSRUNUT1JZIGJlaW5nIHJhaXNlZC5cXG4tXFx0ICovXFxuLVxcdGlmICgoZmxhZ3MgXFx1MDAyNiAoT19ESVJFQ1RPUlkgfCBPX0NSRUFUKSkgPT0gKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4gXFx0LyogTm93IGhhbmRsZSB0aGUgY3JlYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgT19UTVBGSUxFLiAqL1xcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBfX09fVE1QRklMRSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBJbiBvcmRlciB0byBlbnN1cmUgcHJvZ3JhbXMgZ2V0IGV4cGxpY2l0IGVycm9ycyB3aGVuIHRyeWluZ1xcbiBcXHRcXHQgKiB0byB1c2UgT19UTVBGSUxFIG9uIG9sZCBrZXJuZWxzIHdlIGVuZm9yY2UgdGhhdCBPX0RJUkVDVE9SWVxcbi1cXHRcXHQgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLlxcbitcXHRcXHQgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLCBidXQgd2l0aG91dCBPX0NSRUFULiBUaGVcXG4rXFx0XFx0ICogcmVhc29uIGZvciBkaXNhbGxvd2luZyBPX0NSRUFUfE9fVE1QRklMRSBpcyB0aGF0XFxuK1xcdFxcdCAqIE9fRElSRUNUT1JZfE9fQ1JFQVQgdXNlZCB0byB3b3JrIGFuZCBjcmVhdGVkIGEgcmVndWxhciBmaWxlXFxuK1xcdFxcdCAqIGlmIG5vdGhpbmcgZXhpc3RlZCBhdCB0aGUgb3BlbiBwYXRoLiBIZW5jZSwgYWxsb3dpbmcgdGhlXFxuK1xcdFxcdCAqIGNvbWJpbmF0aW9uIHdvdWxkIGhhdmUgY2F1c2VkIE9fQ1JFQVR8T19UTVBGSUxFIHRvIGNyZWF0ZSBhXFxuK1xcdFxcdCAqIHJlZ3VsYXIgKG5vbi10ZW1wb3JhcnkpIGZpbGUgb24gb2xkIGtlcm5lbHMsIHdoaWxlIHRoZSBjYWxsZXJcXG4rXFx0XFx0ICogd291bGQgYmVsaWV2ZSB0aGV5IGNyZWF0ZWQgYW4gYWN0dWFsIE9fVE1QRklMRS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmICghKGZsYWdzIFxcdTAwMjYgT19ESVJFQ1RPUlkpKVxcbitcXHRcXHRpZiAoIShmbGFncyBcXHUwMDI2IE9fRElSRUNUT1JZKSB8fCAoZmxhZ3MgXFx1MDAyNiBPX0NSRUFUKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdGlmICghKGFjY19tb2RlIFxcdTAwMjYgTUFZX1dSSVRFKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTEzMTgsNiArMTMxOSwxNSBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcXG4gXFxuIFxcdG9wLVxcdTAwM2VpbnRlbnQgPSBmbGFncyBcXHUwMDI2IE9fUEFUSCA/IDAgOiBMT09LVVBfT1BFTjtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFJlcXVlc3Rpbmcgd3JpdGUgYWNjZXNzIG9uIGEgZGlyZWN0b3J5IGNhbiBuZXZlciBzdWNjZWVkLiBSYXRoZXJcXG4rXFx0ICogdGhhbiBwZXJmb3JtaW5nIGEgcGF0aC13YWxrIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB0YXJnZXQgaXNcXG4rXFx0ICogYWN0dWFsbHkgYSBkaXJlY3RvcnkgKC1FSVNESVIpIG9yIG5vdCAoLUVOT1RESVIpLCB3ZSBzaG9ydC1jaXJjdWl0XFxuK1xcdCAqIHRvIC1FTk9URElSLlxcbitcXHQgKi9cXG4rXFx0aWYgKChmbGFncyBcXHUwMDI2IE9fRElSRUNUT1JZKSBcXHUwMDI2XFx1MDAyNiAhKGZsYWdzIFxcdTAwMjYgX19PX1RNUEZJTEUpIFxcdTAwMjZcXHUwMDI2IChhY2NfbW9kZSBcXHUwMDI2IE1BWV9XUklURSkpXFxuK1xcdFxcdHJldHVybiAtRU5PVERJUjtcXG4rXFxuIFxcdGlmIChmbGFncyBcXHUwMDI2IE9fQ1JFQVQpIHtcXG4gXFx0XFx0b3AtXFx1MDAzZWludGVudCB8PSBMT09LVVBfQ1JFQVRFO1xcbiBcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBPX0VYQ0wpIHtcXG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9kaXIuYyBiL2ZzL3NtYi9jbGllbnQvZGlyLmNcXG5pbmRleCA3ODAzYmQ1YmQwMWY4Li5kMWFmOTBjOTgxY2Q0IDEwMDY0NFxcbi0tLSBhL2ZzL3NtYi9jbGllbnQvZGlyLmNcXG4rKysgYi9mcy9zbWIvY2xpZW50L2Rpci5jXFxuQEAgLTUzOCw2ICs1MzgsOSBAQCBpbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXFxuIFxcdGlmICh1bmxpa2VseShjaWZzX2ZvcmNlZF9zaHV0ZG93bihjaWZzX3NiKSkpXFxuIFxcdFxcdHJldHVybiBzbWJfRUlPKHNtYl9laW9fdHJhY2VfZm9yY2VkX3NodXRkb3duKTtcXG4gXFxuK1xcdGlmIChPX0lTX01LRElSKG9mbGFncykpXFxuK1xcdFxcdG9mbGFncyBcXHUwMDI2PSB+T19DUkVBVDtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFBvc2l4IG9wZW4gaXMgb25seSBjYWxsZWQgKGF0IGxvb2t1cCB0aW1lKSBmb3IgZmlsZSBjcmVhdGUgbm93LiBGb3JcXG4gXFx0ICogb3BlbnMgKHJhdGhlciB0aGFuIGNyZWF0ZXMpLCBiZWNhdXNlIHdlIGRvIG5vdCBrbm93IGlmIGl0IGlzIGEgZmlsZVxcbmRpZmYgLS1naXQgYS9mcy92Ym94c2YvZGlyLmMgYi9mcy92Ym94c2YvZGlyLmNcXG5pbmRleCAwYjllYWIxNTc0MzJkLi42ZTMwNmRkZDcyMmJmIDEwMDY0NFxcbi0tLSBhL2ZzL3Zib3hzZi9kaXIuY1xcbisrKyBiL2ZzL3Zib3hzZi9kaXIuY1xcbkBAIC0zMTgsNiArMzE4LDkgQEAgc3RhdGljIGludCB2Ym94c2ZfZGlyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdHU2NCBoYW5kbGU7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHRpZiAoT19JU19NS0RJUihmbGFncykpXFxuK1xcdFxcdGZsYWdzIFxcdTAwMjY9IH5PX0NSRUFUO1xcbitcXG4gXFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcXG4gXFx0XFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmJveHNmX2Rpcl9sb29rdXAocGFyZW50LCBkZW50cnksIDApO1xcbiBcXHRcXHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmNudGwuaCBiL2luY2x1ZGUvbGludXgvZmNudGwuaFxcbmluZGV4IDZhZDZiOWU3YTIyNmEuLjIwNGUxNmJiZTI2MzQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mY250bC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mY250bC5oXFxuQEAgLTMwLDYgKzMwLDEyIEBAXFxuICAqL1xcbiAjZGVmaW5lIF9fT19SRUdVTEFSXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMzApXFxuIFxcbisjZGVmaW5lIE9fTUtESVJfTUFTS1xcdChPX0NSRUFUIHwgT19ESVJFQ1RPUlkpXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBPX0lTX01LRElSKHVuc2lnbmVkIGludCBmbGFncylcXG4re1xcbitcXHRyZXR1cm4gKGZsYWdzIFxcdTAwMjYgT19NS0RJUl9NQVNLKSA9PSBPX01LRElSX01BU0s7XFxuK31cXG4rXFxuIC8qIExpc3Qgb2YgYWxsIHZhbGlkIGZsYWdzIGZvciB0aGUgaG93LVxcdTAwM2VyZXNvbHZlIGFyZ3VtZW50OiAqL1xcbiAjZGVmaW5lIFZBTElEX1JFU09MVkVfRkxBR1MgXFxcXFxcbiBcXHQoUkVTT0xWRV9OT19YREVWIHwgUkVTT0xWRV9OT19NQUdJQ0xJTktTIHwgUkVTT0xWRV9OT19TWU1MSU5LUyB8IFxcXFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcXG5pbmRleCA5ZWIxODVmYjJmOWRkLi4wMWM1ODhkNGM4NGY2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlXFxuQEAgLTEsNCArMSw1IEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbitvcGVuX29fY3JlYXRfb19kaXJcXG4gZG5vdGlmeV90ZXN0XFxuIGRldnB0c19wdHNcXG4gZmNsb2dcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxcbmluZGV4IDAzYmUzMzdjMWYzNTEuLjA5NTliZDI2ODc1YWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxcbkBAIC0xLDcgKzEsNyBAQFxcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIFxcbiBDRkxBR1MgKz0gJChLSERSX0lOQ0xVREVTKVxcbi1URVNUX0dFTl9QUk9HUyA6PSBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nIHVzdGF0X3Rlc3RcXG4rVEVTVF9HRU5fUFJPR1MgOj0gb3Blbl9vX2NyZWF0X29fZGlyIGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2cgdXN0YXRfdGVzdFxcbiBURVNUX0dFTl9QUk9HUyArPSBpZG1hcHBlZF90bXBmaWxlXFxuIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEIDo9IGRub3RpZnlfdGVzdFxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYmUwYWIzNDI2N2UxZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuY1xcbkBAIC0wLDAgKzEsMjAxIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2NzeXMvc3RhdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbWl0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJrc2VsZnRlc3RfaGFybmVzcy5oXFxcIlxcbisjaW5jbHVkZSBcXFwid3JhcHBlcnMuaFxcXCJcXG4rXFxuKyNkZWZpbmUgb3BlbmF0X29fbWtkaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCBmbGFncykgKHtcXHRcXFxcXFxuK1xcdHN0cnVjdCBzdGF0IF9fc3Q7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRpbnQgX19mZCA9IG9wZW5hdF9vX21rZGlyKGRmZCwgcGF0aG5hbWUsIGZsYWdzLCBTX0lSV1hVKTtcXHRcXFxcXFxuK1xcdEFTU0VSVF9HRShfX2ZkLCAwKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdEFTU0VSVF9FUShmc3RhdChfX2ZkLCBcXHUwMDI2X19zdCksIDApO1xcdFxcdFxcdFxcdFxcXFxcXG4rXFx0RVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTtcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdF9fZmQ7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9KVxcbitcXG4rI2RlZmluZSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKGRmZCwgcGF0aG5hbWUpIFxcXFxcXG4rXFx0b3BlbmF0X29fbWtkaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCBPX1JET05MWSlcXG4rXFxuK0ZJWFRVUkUob3Blbl9vX2NyZWF0X29fZGlyKSB7XFxuK1xcdGNoYXIgZGlycGF0aFtQQVRIX01BWF07XFxuK1xcdGludCBkZmQ7XFxuK307XFxuK1xcbitGSVhUVVJFX1NFVFVQKG9wZW5fb19jcmVhdF9vX2RpcilcXG4re1xcbitcXHRzdHJjcHkoc2VsZi1cXHUwMDNlZGlycGF0aCwgXFxcIi90bXAvb3Blbl9vX2NyZWF0X29fZGlyX3Rlc3QuWFhYWFhYXFxcIik7XFxuK1xcdEFTU0VSVF9ORShta2R0ZW1wKHNlbGYtXFx1MDAzZWRpcnBhdGgpLCBOVUxMKTtcXG4rXFx0c2VsZi1cXHUwMDNlZGZkID0gb3BlbihzZWxmLVxcdTAwM2VkaXJwYXRoLCBPX0RJUkVDVE9SWSk7XFxuK1xcdEFTU0VSVF9HRShzZWxmLVxcdTAwM2VkZmQsIDApO1xcbit9XFxuK1xcbitGSVhUVVJFX1RFQVJET1dOKG9wZW5fb19jcmVhdF9vX2RpcilcXG4re1xcbitcXHRjbG9zZShzZWxmLVxcdTAwM2VkZmQpO1xcbitcXHRybWRpcihzZWxmLVxcdTAwM2VkaXJwYXRoKTtcXG4rfVxcbitcXG4rLyogRG9lcyBvcGVuX29fY3JlYXRfb19kaXIgcmV0dXJuIGEgZmQgYXQgYWxsPyAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZXR1cm5zX2ZkKVxcbit7XFxuK1xcdGludCBmZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoc2VsZi1cXHUwMDNlZGZkLCBcXFwibmV3ZGlyXFxcIik7XFxuK1xcdEVYUEVDVF9FUShjbG9zZShmZCksIDApO1xcbitcXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwibmV3ZGlyXFxcIiwgQVRfUkVNT1ZFRElSKSwgMCk7XFxuK31cXG4rXFxuKy8qIFRoZSBmZCBtdXN0IHJlZmVyIHRvIHRoZSBkaXJlY3RvcnkgdGhhdCB3YXMganVzdCBjcmVhdGVkLiAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBmZF9pc19jcmVhdGVkX2RpcilcXG4re1xcbitcXHRpbnQgZmQ7XFxuK1xcdHN0cnVjdCBzdGF0IHN0X3ZpYV9mZCwgc3RfdmlhX3BhdGg7XFxuK1xcdGNoYXIgcGF0aFtQQVRIX01BWF07XFxuK1xcbitcXHRmZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoc2VsZi1cXHUwMDNlZGZkLCBcXFwiY2hlY2tkaXJcXFwiKTtcXG4rXFxuK1xcdEFTU0VSVF9FUShmc3RhdChmZCwgXFx1MDAyNnN0X3ZpYV9mZCksIDApO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiJXMvY2hlY2tkaXJcXFwiLCBzZWxmLVxcdTAwM2VkaXJwYXRoKTtcXG4rXFx0QVNTRVJUX0VRKHN0YXQocGF0aCwgXFx1MDAyNnN0X3ZpYV9wYXRoKSwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEoc3RfdmlhX2ZkLnN0X2lubywgc3RfdmlhX3BhdGguc3RfaW5vKTtcXG4rXFx0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9kZXYsIHN0X3ZpYV9wYXRoLnN0X2Rldik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTtcXG4rfVxcbitcXG4rLyogTWlzc2luZyBwYXJlbnQgY29tcG9uZW50IG11c3QgZmFpbCB3aXRoIEVOT0VOVC4gKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vZW50X21pc3NpbmdfcGFyZW50KVxcbit7XFxuK1xcdEVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihzZWxmLVxcdTAwM2VkZmQsIFxcXCJub25leGlzdGVudC9jaGlsZFxcXCIsIE9fUkRPTkxZLCBTX0lSV1hVKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVOT0VOVCk7XFxuK31cXG4rXFxuKy8qIEFuIGludmFsaWQgZGZkIG11c3QgZmFpbCB3aXRoIEVCQURGLiAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlYmFkZilcXG4re1xcbitcXHRFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoRkRfSU5WQUxJRCwgXFxcImJhZGZkaXJcXFwiLCBPX1JET05MWSwgU19JUldYVSksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFQkFERik7XFxuK31cXG4rXFxuKy8qIEEgZGZkIHRoYXQgcG9pbnRzIHRvIGEgZmlsZSAobm90IGEgZGlyZWN0b3J5KSBtdXN0IGZhaWwgd2l0aCBFTk9URElSLiAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlbm90ZGlyX2RmZClcXG4re1xcbitcXHRpbnQgZmlsZV9mZDtcXG4rXFxuK1xcdGZpbGVfZmQgPSBvcGVuYXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwiZmlsZVxcXCIsXFxuK1xcdFxcdFxcdCBPX0NSRUFUIHwgT19SRE9OTFksIFNfSVJXWFUpO1xcbitcXHRBU1NFUlRfR0UoZmlsZV9mZCwgMCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoZmlsZV9mZCwgXFxcInN1YmRpclxcXCIsIE9fUkRPTkxZLCBTX0lSV1hVKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpO1xcbitcXG4rXFx0RVhQRUNUX0VRKGNsb3NlKGZpbGVfZmQpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXFx1MDAzZWRmZCwgXFxcImZpbGVcXFwiLCAwKSwgMCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIE9fRVhDTCB0b2dldGhlciB3aXRoIE9fQ1JFQVR8T19ESVJFQ1RPUlkgc2hvdWxkIHN1Y2NlZWQgaWYgdGhlIHRhcmdldFxcbisgKiBkaXJlY3RvcnkgZG9lcyBub3QgeWV0IGV4aXN0LiBBZnRlciBkaXJlY3RvcnkgY3JlYXRpb24sIHJlcGVhdGluZyB0aGlzXFxuKyAqIGNhbGwgbXVzdCBmYWlsIHdpdGggRUVYSVNULlxcbisgKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2Rpciwgb19leGNsX2VleGlzdClcXG4re1xcbitcXHRpbnQgZXhjbGRpcl9mZDtcXG4rXFxuK1xcdGV4Y2xkaXJfZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkX2ZsYWdzKHNlbGYtXFx1MDAzZWRmZCwgXFxcImV4Y2xkaXJcXFwiLCBPX0VYQ0wpO1xcbitcXG4rXFx0RVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKGV4Y2xkaXJfZmQsIFxcXCIuXFxcIiwgT19FWENMLCBTX0lSV1hVKSwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVFWElTVCk7XFxuK1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoZXhjbGRpcl9mZCksIDApO1xcbitcXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cXHUwMDNlZGZkLCBcXFwiZXhjbGRpclxcXCIsIEFUX1JFTU9WRURJUiksIDApO1xcbit9XFxuK1xcbisvKlxcbisgKiBPX0NSRUFUfE9fRElSRUNUT1JZIG9uIGEgcGF0aCB0aGF0IGFscmVhZHkgZXhpc3RzIGFzIGEgcmVndWxhciBmaWxlXFxuKyAqIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuXFxuKyAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBleGlzdGluZ19maWxlX2Vub3RkaXIpXFxuK3tcXG4rXFx0aW50IGZpbGVfZmQ7XFxuK1xcbitcXHRmaWxlX2ZkID0gb3BlbmF0KHNlbGYtXFx1MDAzZWRmZCwgXFxcInJlZ2ZpbGVcXFwiLFxcbitcXHRcXHRcXHQgT19DUkVBVCB8IE9fUkRPTkxZLCBTX0lSV1hVKTtcXG4rXFx0QVNTRVJUX0dFKGZpbGVfZmQsIDApO1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApO1xcbitcXG4rXFx0RVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKHNlbGYtXFx1MDAzZWRmZCwgXFxcInJlZ2ZpbGVcXFwiLCBPX1JET05MWSwgU19JUldYVSksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTtcXG4rXFxuK1xcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJyZWdmaWxlXFxcIiwgMCksIDApO1xcbit9XFxuK1xcbisvKlxcbisgKiBPX0NSRUFUfE9fRElSRUNUT1JZIGNvbWJpbmVkIHdpdGggYSB3cml0YWJsZSBhY2Nlc3MgbW9kZSBtdXN0IGJlXFxuKyAqIHJlamVjdGVkOiBhIGRpcmVjdG9yeSBjYW5ub3QgYmUgb3BlbmVkIGZvciB3cml0aW5nLlxcbisgKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgcmVqZWN0c193cml0YWJsZV9hY2NfbW9kZSlcXG4re1xcbitcXHRFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoc2VsZi1cXHUwMDNlZGZkLCBcXFwicmR3cmRpclxcXCIsIE9fUkRXUiwgU19JUldYVSksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTtcXG4rXFx0LyogQ2xlYW4gdXAgaWYgdGhlIGtlcm5lbCBjcmVhdGVkIHRoZSBkaXJlY3RvcnkgYW55d2F5LiAqL1xcbitcXHR1bmxpbmthdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJyZHdyZGlyXFxcIiwgQVRfUkVNT1ZFRElSKTtcXG4rfVxcbitcXG4rLypcXG4rICogb3BlbmF0KE9fQ1JFQVR8T19ESVJFQ1RPUlkpIHdpdGggYSB0cmFpbGluZyBzbGFzaCBzaG91bGQgd29yay5cXG4rICovXFxuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHRyYWlsaW5nX3NsYXNoKVxcbit7XFxuK1xcdGludCBmZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoc2VsZi1cXHUwMDNlZGZkLCBcXFwibmV3ZGlyL1xcXCIpO1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXFx1MDAzZWRmZCwgXFxcIm5ld2RpclxcXCIsIEFUX1JFTU9WRURJUiksIDApO1xcbit9XFxuK1xcbisvKlxcbisgKiBvcGVuYXQoT19DUkVBVCkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIGJ1dCB3aXRob3V0IE9fRElSRUNUT1JZXFxuKyAqIG11c3QgZmFpbCB3aXRoIEVJU0RJUiBhbmQgbXVzdCBub3QgY3JlYXRlIGFueXRoaW5nIGF0IHRoZSBwYXRoLlxcbisgKi9cXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgdHJhaWxpbmdfc2xhc2hfbm9fb19kaXIpXFxuK3tcXG4rXFx0aW50IGZkO1xcbitcXHRzdHJ1Y3Qgc3RhdCBzdDtcXG4rXFxuK1xcdGZkID0gb3BlbmF0KHNlbGYtXFx1MDAzZWRmZCwgXFxcInRyYWlsaW5nL1xcXCIsIE9fQ1JFQVQgfCBPX1JET05MWSwgU19JUldYVSk7XFxuK1xcdEVYUEVDVF9FUShmZCwgLTEpO1xcbitcXHRFWFBFQ1RfRVEoZXJybm8sIEVJU0RJUik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoZnN0YXRhdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJ0cmFpbGluZ1xcXCIsIFxcdTAwMjZzdCwgMCksIC0xKTtcXG4rXFx0RVhQRUNUX0VRKGVycm5vLCBFTk9FTlQpO1xcbitcXG4rXFx0LyogQmVzdC1lZmZvcnQgY2xlYW51cCBpbiBjYXNlIHRoZSBrZXJuZWwgbGVmdCBhIGZpbGUgYmVoaW5kLiAqL1xcbitcXHRpZiAoZmQgXFx1MDAzZT0gMClcXG4rXFx0XFx0Y2xvc2UoZmQpO1xcbitcXHR1bmxpbmthdChzZWxmLVxcdTAwM2VkZmQsIFxcXCJ0cmFpbGluZ1xcXCIsIDApO1xcbit9XFxuK1xcbisvKlxcbisgKiBUaGUgcmV0dXJuZWQgZmQgbXVzdCBiZSB1c2FibGUgYXMgYSBkZmQgZm9yIGZ1cnRoZXIgKmF0KCkgY2FsbHMuXFxuKyAqL1xcbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBmZF91c2FibGVfYXNfZGZkKVxcbit7XFxuK1xcdGludCBwYXJlbnRfZmQsIGNoaWxkX2ZkO1xcbitcXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xcbitcXG4rXFx0cGFyZW50X2ZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChzZWxmLVxcdTAwM2VkZmQsIFxcXCJwYXJlbnRcXFwiKTtcXG4rXFx0Y2hpbGRfZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHBhcmVudF9mZCwgXFxcImNoaWxkXFxcIik7XFxuK1xcbitcXHRFWFBFQ1RfRVEoY2xvc2UoY2hpbGRfZmQpLCAwKTtcXG4rXFx0RVhQRUNUX0VRKGNsb3NlKHBhcmVudF9mZCksIDApO1xcbitcXG4rXFx0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcXFwiJXMvcGFyZW50L2NoaWxkXFxcIiwgc2VsZi1cXHUwMDNlZGlycGF0aCk7XFxuK1xcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XFxuK1xcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXFxcIiVzL3BhcmVudFxcXCIsIHNlbGYtXFx1MDAzZWRpcnBhdGgpO1xcbitcXHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xcbit9XFxuK1xcbitURVNUX0hBUk5FU1NfTUFJTlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy93cmFwcGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvd3JhcHBlcnMuaFxcbmluZGV4IDQyMGFlNGY5MDhjZjIuLmFiZTViODVjZWJkY2QgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvd3JhcHBlcnMuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3dyYXBwZXJzLmhcXG5AQCAtMTMsNiArMTMsMTAgQEBcXG4gI2RlZmluZSBTVEFUWF9NTlRfSURfVU5JUVVFIDB4MDAwMDQwMDBVIC8qIFdhbnQvZ290IGV4dGVuZGVkIHN0eF9tb3VudF9pZCAqL1xcbiAjZW5kaWZcXG4gXFxuKyNpZm5kZWYgRkRfSU5WQUxJRFxcbisjZGVmaW5lIEZEX0lOVkFMSUQgLTEwMDA5XFxuKyNlbmRpZlxcbitcXG4gc3RhdGljIGlubGluZSBpbnQgc3lzX2Zzb3Blbihjb25zdCBjaGFyICpmc25hbWUsIHVuc2lnbmVkIGludCBmbGFncylcXG4ge1xcbiBcXHRyZXR1cm4gc3lzY2FsbChfX05SX2Zzb3BlbiwgZnNuYW1lLCBmbGFncyk7XFxuQEAgLTEwNSw0ICsxMDksMTEgQEAgc3RhdGljIGlubGluZSBpbnQgc3lzX29wZW5fdHJlZShpbnQgZGZkLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgdW5zaWduZWQgaW50IGZsYWdcXG4gXFx0cmV0dXJuIHN5c2NhbGwoX19OUl9vcGVuX3RyZWUsIGRmZCwgZmlsZW5hbWUsIGZsYWdzKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBpbnQgb3BlbmF0X29fbWtkaXIoaW50IGRmZCwgY29uc3QgY2hhciAqcGF0aG5hbWUsXFxuK1xcdFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlKVxcbit7XFxuK1xcdHJldHVybiBzeXNjYWxsKF9fTlJfb3BlbmF0LCBkZmQsIHBhdGhuYW1lLFxcbitcXHRcXHQgICAgICAgZmxhZ3MgfCBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQsIG1vZGUpO1xcbit9XFxuK1xcbiAjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTQ6MTEuNzMzMzc3NzYxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI3MzIxMjM5NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIjlQX0ZTXCIsXG4gICAgXCJDRVBIX0ZTXCIsXG4gICAgXCJGVVNFX0ZTXCIsXG4gICAgXCJHRlMyX0ZTXCIsXG4gICAgXCJORlNfRlNcIixcbiAgICBcIkNJRlNcIixcbiAgICBcIlZCT1hTRl9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19ta2RpclwiLFxuICAgIFwidmZzX2NyZWF0ZVwiLFxuICAgIFwidmZzX2xvb2t1cF9vcGVuXCIsXG4gICAgXCJkZW50cnlfY3JlYXRlXCIsXG4gICAgXCJmaWxlbmFtZV9ta2RpcmF0XCIsXG4gICAgXCJmaWxlbmFtZV91bmxpbmthdFwiLFxuICAgIFwiZmlsZW5hbWVfcmVuYW1lYXQyXCIsXG4gICAgXCJ2OWZzX3Zmc19hdG9taWNfb3BlblwiLFxuICAgIFwidjlmc192ZnNfYXRvbWljX29wZW5fZG90bFwiLFxuICAgIFwiY2VwaF9hdG9taWNfb3BlblwiLFxuICAgIFwiZnVzZV9hdG9taWNfb3BlblwiLFxuICAgIFwiZ2ZzMl9hdG9taWNfb3BlblwiLFxuICAgIFwibmZzX2F0b21pY19vcGVuXCIsXG4gICAgXCJuZnNfYXRvbWljX29wZW5fdjIzXCIsXG4gICAgXCJjaWZzX2F0b21pY19vcGVuXCIsXG4gICAgXCJ2Ym94c2ZfZGlyX2F0b21pY19vcGVuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgIGZvciBgb3BlbmF0KClgIHRvIGF0b21pY2FsbHkgY3JlYXRlIGEgZGlyZWN0b3J5IGFuZCByZXR1cm4gYSBmaWxlIGRlc2NyaXB0b3IuIEl0IG1vZGlmaWVzIGNvcmUgVkZTIHBhdGggcmVzb2x1dGlvbiBhbmQgY3JlYXRpb24gbG9naWMgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYCwgYW5kIHVwZGF0ZXMgc2V2ZXJhbCBmaWxlc3lzdGVtcycgYGF0b21pY19vcGVuYCBpbXBsZW1lbnRhdGlvbnMgdG8gaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbi4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDY5NzRmMmRhZTAzYTMxNGVlZGNkMjI1MTQ5ZTEyNmI2NjA5NGI0ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDE2OjE0OjA4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2lub2RlLmMgYi9mcy85cC92ZnNfaW5vZGUuY1xuaW5kZXggMzgyOTU1NGNhMzY5Mi4uYjFlMDgyM2M4N2I1NyAxMDA2NDRcbi0tLSBhL2ZzLzlwL3Zmc19pbm9kZS5jXG4rKysgYi9mcy85cC92ZnNfaW5vZGUuY1xuQEAgLTc3Niw2ICs3NzYsOSBAQCB2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdGludCBwOV9vbW9kZTtcbiBcbitcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7XG4gXHRcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGVfZG90bC5jIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuaW5kZXggMTE2YjI5ZTk1ZjIxZS4uNjRlMGFiYTA4ZGExNiAxMDA2NDRcbi0tLSBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcbisrKyBiL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmNcbkBAIC0yMzgsNiArMjM4LDkgQEAgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0c3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcztcbiBcdHN0cnVjdCBwb3NpeF9hY2wgKnBhY2wgPSBOVUxMLCAqZGFjbCA9IE5VTEw7XG4gXG4rXHRpZiAoT19JU19NS0RJUihmbGFncykpXG4rXHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRpZiAoZF9pbl9sb29rdXAoZGVudHJ5KSkge1xuIFx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXMgPSB2OWZzX3Zmc19sb29rdXAoZGlyLCBkZW50cnksIDApO1xuIFx0XHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXG5kaWZmIC0tZ2l0IGEvZnMvY2VwaC9maWxlLmMgYi9mcy9jZXBoL2ZpbGUuY1xuaW5kZXggYTRhMmE0YjZhMDI3ZC4uNjIxNjNiN2VjYTVmOSAxMDA2NDRcbi0tLSBhL2ZzL2NlcGgvZmlsZS5jXG4rKysgYi9mcy9jZXBoL2ZpbGUuY1xuQEAgLTgxMiw2ICs4MTIsOSBAQCBpbnQgY2VwaF9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0ICAgICAgZGlyLCBjZXBoX3Zpbm9wKGRpciksIGRlbnRyeSwgZGVudHJ5LFxuIFx0ICAgICAgZF91bmhhc2hlZChkZW50cnkpID8gXCJ1bmhhc2hlZFwiIDogXCJoYXNoZWRcIiwgZmxhZ3MsIG1vZGUpO1xuIFxuK1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX25hbWUubGVuIFx1MDAzZSBOQU1FX01BWClcbiBcdFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZnVzZS9kaXIuYyBiL2ZzL2Z1c2UvZGlyLmNcbmluZGV4IGQ0ZTAwMjk4MTBjMGYuLjU1ZDU4NDRlMjY1NTkgMTAwNjQ0XG4tLS0gYS9mcy9mdXNlL2Rpci5jXG4rKysgYi9mcy9mdXNlL2Rpci5jXG5AQCAtOTM1LDYgKzkzNSw5IEBAIHN0YXRpYyBpbnQgZnVzZV9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZW50cnksXG4gXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCA9IGZpbGVfbW50X2lkbWFwKGZpbGUpO1xuIFx0c3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7XG4gXG4rXHRpZiAoT19JU19NS0RJUihmbGFncykpXG4rXHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRpZiAoZnVzZV9pc19iYWQoZGlyKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jXG5pbmRleCBmMzYxODc2YzU1ODMzLi4zZWUxMzYwZjFiYzI3IDEwMDY0NFxuLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jXG4rKysgYi9mcy9nZnMyL2lub2RlLmNcbkBAIC0xMzg2LDYgKzEzODYsOSBAQCBzdGF0aWMgaW50IGdmczJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiB7XG4gXHRib29sIGV4Y2wgPSAhIShmbGFncyBcdTAwMjYgT19FWENMKTtcbiBcbitcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKmQgPSBfX2dmczJfbG9va3VwKGRpciwgZGVudHJ5LCBmaWxlKTtcbiBcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9PUEVORUQpIHtcbmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuY1xuaW5kZXggMjBhNjUzNGVhM2VmZi4uZTFhOGYxODM4NWE1MiAxMDA2NDRcbi0tLSBhL2ZzL25hbWVpLmNcbisrKyBiL2ZzL25hbWVpLmNcbkBAIC0xMzgyLDEzICsxMzgyLDEzIEBAIGludCBtYXlfbGlua2F0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqbGluaylcbiBcbiAvKipcbiAgKiBtYXlfY3JlYXRlX2luX3N0aWNreSAtIENoZWNrIHdoZXRoZXIgYW4gT19DUkVBVCBvcGVuIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxuLSAqXHRcdFx0ICBzaG91bGQgYmUgYWxsb3dlZCwgb3Igbm90LCBvbiBmaWxlcyB0aGF0IGFscmVhZHlcbi0gKlx0XHRcdCAgZXhpc3QuXG4rICpcdFx0XHQgIHNob3VsZCBiZSBhbGxvd2VkLCBvciBub3QsIG9uIGZpbGVzL2RpcmVjdG9yaWVzIHRoYXRcbisgKlx0XHRcdCAgYWxyZWFkeSBleGlzdC5cbiAgKiBAaWRtYXA6IGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cbiAgKiBAbmQ6IG5hbWVpZGF0YSBwYXRod2FsayBkYXRhXG4gICogQGlub2RlOiB0aGUgaW5vZGUgb2YgdGhlIGZpbGUgdG8gb3BlblxuICAqXG4tICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUpIHdoZW46XG4rICogQmxvY2sgYW4gT19DUkVBVCBvcGVuIG9mIGEgRklGTyAob3IgYSByZWd1bGFyIGZpbGUvZGlyZWN0b3J5KSB3aGVuOlxuICAqICAgLSBzeXNjdGxfcHJvdGVjdGVkX2ZpZm9zIChvciBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpIGlzIGVuYWJsZWRcbiAgKiAgIC0gdGhlIGZpbGUgYWxyZWFkeSBleGlzdHNcbiAgKiAgIC0gd2UgYXJlIGluIGEgc3RpY2t5IGRpcmVjdG9yeVxuQEAgLTE0MTYsNiArMTQxNiwxNCBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdGlmIChsaWtlbHkoIShkaXJfbW9kZSBcdTAwMjYgU19JU1ZUWCkpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdC8qXG4rXHQgKiBUaGVyZSBpcyBubyBzZXBhcmF0ZSBzeXNjdGwgZm9yIGRpcmVjdG9yeSBjcmVhdGlvbiBpbiBzdGlja3lcbitcdCAqIGZvbGRlcnMuIFRoZXJlZm9yZSwgZm9yIHRoZSBTX0lTRElSIGNhc2UsIGRpc2FibGluZ1xuK1x0ICogc3lzY3RsX3Byb3RlY3RlZF9yZWd1bGFyIGlzIG5vdCBlbm91Z2ggdG8gYWxsb3cgY3JlYXRpbmcgYVxuK1x0ICogZGlyZWN0b3J5IGluIGEgc3RpY2t5IGZvbGRlciwgYmVjYXVzZSB0aGF0IG1heSBzdXJwcmlzZSB1c2Vyc1xuK1x0ICogbm90IGV4cGVjdGluZyB0aGF0IE9fQ1JFQVR8T19ESVJFQ1RPUlkgaXMgcG9zc2libGUgb24gbmV3ZXJcbitcdCAqIGtlcm5lbHMuXG4rXHQgKi9cbiBcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2ICFzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTE0NDcsNiArMTQ1NSwxMiBAQCBzdGF0aWMgaW50IG1heV9jcmVhdGVfaW5fc3RpY2t5KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdFx0XHRcdFx0ICAgICAgXCJzdGlja3lfY3JlYXRlX3JlZ3VsYXJcIik7XG4gXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4gXHRcdH1cbitcbitcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuK1x0XHRcdGF1ZGl0X2xvZ19wYXRoX2RlbmllZChBVURJVF9BTk9NX0NSRUFULFxuK1x0XHRcdFx0XHQgICAgICBcInN0aWNreV9jcmVhdGVfZGlyXCIpO1xuK1x0XHRcdHJldHVybiAtRUFDQ0VTO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0yNzgxLDkgKzI3OTUsMTYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKnBhdGhfaW5pdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgdW5zaWduZWQgZmxhZ3MpXG4gXHRyZXR1cm4gcztcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHRyYWlsaW5nX3NsYXNoZXMoY29uc3Qgc3RydWN0IHFzdHIgKmxhc3QpXG4re1xuK1x0LyogbGFzdC1cdTAwM2VsZW4gaXMgc2V0IGJ5IGhhc2hfbmFtZSgpIHRvIHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnRcbitcdCAqIGNvbXBvbmVudCAtXHUwMDNlbmFtZSwgdGVybWluYXRpbmcgd2l0aCAnLycgb3IgYSBOVUwgY2hhcmFjdGVyLiAqL1xuK1x0cmV0dXJuIChib29sKWxhc3QtXHUwMDNlbmFtZVtsYXN0LVx1MDAzZWxlbl07XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbG9va3VwX2xhc3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQpXG4ge1xuLVx0aWYgKG5kLVx1MDAzZWxhc3RfdHlwZSA9PSBMQVNUX05PUk0gXHUwMDI2XHUwMDI2IG5kLVx1MDAzZWxhc3QubmFtZVtuZC1cdTAwM2VsYXN0Lmxlbl0pXG4rXHRpZiAobmQtXHUwMDNlbGFzdF90eXBlID09IExBU1RfTk9STSBcdTAwMjZcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhcdTAwMjZuZC1cdTAwM2VsYXN0KSlcbiBcdFx0bmQtXHUwMDNlZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7XG4gXG4gXHRyZXR1cm4gd2Fsa19jb21wb25lbnQobmQsIFdBTEtfVFJBSUxJTkcpO1xuQEAgLTQxNTksNiArNDE4MCwyNCBAQCBzdGF0aWMgaW5saW5lIHVtb2RlX3QgdmZzX3ByZXBhcmVfbW9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdHJldHVybiBtb2RlO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lXG4raW50IHZmc19jcmVhdGVfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHQgICAgICAgdW1vZGVfdCBtb2RlLCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSlcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmRpciA9IGRfaW5vZGUoZGVudHJ5LVx1MDAzZWRfcGFyZW50KTtcbitcdGludCBlcnJvcjtcbitcbitcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRlcnJvciA9IGRpci1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0aWYgKCFlcnJvcilcbitcdFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcbitcbitcdHJldHVybiBlcnJvcjtcbit9XG4rXG4gLyoqXG4gICogdmZzX2NyZWF0ZSAtIGNyZWF0ZSBuZXcgZmlsZVxuICAqIEBpZG1hcDpcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cbkBAIC00MTkxLDEzICs0MjMwLDggQEAgaW50IHZmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxuIFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLCBkZW50cnksIG1vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4tXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRpKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0cmV0dXJuIGVycm9yO1xuLVx0ZXJyb3IgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbi1cdGlmICghZXJyb3IpXG4tXHRcdGZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7XG4tXHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRyZXR1cm4gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsIGRpKTtcbiB9XG4gRVhQT1JUX1NZTUJPTCh2ZnNfY3JlYXRlKTtcbiBcbkBAIC00MzE0LDIxICs0MzQ4LDQxIEBAIHN0YXRpYyBpbmxpbmUgaW50IG9wZW5fdG9fbmFtZWlfZmxhZ3MoaW50IGZsYWcpXG4gXG4gc3RhdGljIGludCBtYXlfb19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0Y29uc3Qgc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLVx0XHRcdHVtb2RlX3QgbW9kZSlcbitcdFx0XHRpbnQgb3Blbl9mbGFnLCB1bW9kZV90IG1vZGUpXG4ge1xuLVx0aW50IGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XG4rXHRzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9pbm9kZTtcbitcdGJvb2wgY3JlYXRlX2RpciA9IE9fSVNfTUtESVIob3Blbl9mbGFnKTtcbitcdGludCBlcnJvcjtcbitcbitcdGlmIChjcmVhdGVfZGlyKVxuK1x0XHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpO1xuK1x0ZWxzZVxuK1x0XHRlcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXG4gXHRpZiAoIWZzdWlkZ2lkX2hhc19tYXBwaW5nKGRpci1cdTAwM2VkZW50cnktXHUwMDNlZF9zYiwgaWRtYXApKVxuIFx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbiBcbi1cdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLFxuLVx0XHRcdFx0IE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbitcdGVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpZG1hcCwgZGlyX2lub2RlLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbi1cdHJldHVybiBzZWN1cml0eV9pbm9kZV9jcmVhdGUoZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlLCBkZW50cnksIG1vZGUpO1xuK1x0aWYgKGNyZWF0ZV9kaXIpXG4rXHRcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIoZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xuK1x0ZWxzZVxuK1x0XHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4rXG4rXHRyZXR1cm4gZXJyb3I7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdW1vZGVfdCBvX2NyZWF0ZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuK1x0XHRjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgaW50IG9wZW5fZmxhZywgdW1vZGVfdCBtb2RlKVxuK3tcbitcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZykpXG4rXHRcdHJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSVJXWFVHTyB8IFNfSVNWVFgsIFNfSUZESVIpO1xuK1x0ZWxzZVxuK1x0XHRyZXR1cm4gdmZzX3ByZXBhcmVfbW9kZShpZG1hcCwgZGlyLCBtb2RlLCBTX0lBTExVR08sIFNfSUZSRUcpO1xuIH1cbiBcbiAvKipcbkBAIC00MzY0LDggKzQ0MTgsOSBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeVxuIFxuIFx0ZmlsZS1cdTAwM2VfX2ZfcGF0aC5kZW50cnkgPSBERU5UUllfTk9UX1NFVDtcbiBcdGZpbGUtXHUwMDNlX19mX3BhdGgubW50ID0gcGF0aC1cdTAwM2VtbnQ7XG4rXG4gXHRlcnJvciA9IGRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWF0b21pY19vcGVuKGRpcl9pbm9kZSwgZGVudHJ5LCBmaWxlLFxuLVx0XHRcdFx0ICAgICAgIG9wZW5fdG9fbmFtZWlfZmxhZ3Mob3Blbl9mbGFnKSwgbW9kZSk7XG4rXHRcdFx0XHRcdCAgICAgb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpLCBtb2RlKTtcbiBcdGRfbG9va3VwX2RvbmUoZGVudHJ5KTtcbiBcbiBcdGlmICghZXJyb3IpIHtcbkBAIC00NDEwLDEwICs0NDY1LDIxIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5XG4gXHRcdH1cbiBcdFx0ZHB1dChkZW50cnkpO1xuIFx0XHRkZW50cnkgPSBFUlJfUFRSKGVycm9yKTtcbitcdH0gZWxzZSB7XG4rXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQ1JFQVRFRClcbitcdFx0XHRmc25vdGlmeV9jcmVhdGUoZGlyX2lub2RlLCBkZW50cnkpO1xuK1x0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRClcbitcdFx0XHRmc25vdGlmeV9vcGVuKGZpbGUpO1xuIFx0fVxuK1xuK1xuIFx0cmV0dXJuIGRlbnRyeTtcbiB9XG4gXG4rc3RhdGljIGlubGluZVxuK3N0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosXG4rXHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LFxuK1x0XHRcdFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKik7XG4gLypcbiAgKiBMb29rIHVwIGFuZCBtYXliZSBjcmVhdGUgYW5kIG9wZW4gdGhlIGxhc3QgY29tcG9uZW50LlxuICAqXG5AQCAtNDQzNSw2ICs0NTAxLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwO1xuIFx0c3RydWN0IGRlbnRyeSAqZGlyID0gbmQtXHUwMDNlcGF0aC5kZW50cnk7XG4gXHRzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci1cdTAwM2VkX2lub2RlO1xuK1x0Ym9vbCBjcmVhdGVfZGlyID0gT19JU19NS0RJUihvcC1cdTAwM2Vtb2RlKTtcbiBcdGludCBvcGVuX2ZsYWc7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4gXHRpbnQgZXJyb3IsIGNyZWF0ZV9lcnJvcjtcbkBAIC00NDU1LDcgKzQ1MjIsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHQgKi9cbiBcdH1cbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpXG4tXHRcdGlub2RlX2xvY2soZGlyX2lub2RlKTtcbitcdFx0aW5vZGVfbG9ja19uZXN0ZWQoZGlyX2lub2RlLCBJX01VVEVYX1BBUkVOVCk7XG4gXHRlbHNlXG4gXHRcdGlub2RlX2xvY2tfc2hhcmVkKGRpcl9pbm9kZSk7XG4gXG5AQCAtNDUwNywxMiArNDU3NCwxNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkge1xuIFx0XHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0wpXG4gXHRcdFx0b3Blbl9mbGFnIFx1MDAyNj0gfk9fVFJVTkM7XG4tXHRcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIG1vZGUsIG1vZGUpO1xuK1x0XHRtb2RlID0gb19jcmVhdGVfbW9kZShpZG1hcCwgZGlyX2lub2RlLCBvcGVuX2ZsYWcsIG1vZGUpO1xuIFx0XHRpZiAobGlrZWx5KGdvdF93cml0ZSkpXG4gXHRcdFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBcdTAwMjZuZC1cdTAwM2VwYXRoLFxuLVx0XHRcdFx0XHRcdCAgICBkZW50cnksIG1vZGUpO1xuK1x0XHRcdFx0XHRcdCAgICBkZW50cnksIG9wZW5fZmxhZywgbW9kZSk7XG4gXHRcdGVsc2VcbiBcdFx0XHRjcmVhdGVfZXJyb3IgPSAtRVJPRlM7XG4rXHRcdC8qIFJlZnVzZSB0byBjcmVhdGUgYSBkaXJlY3RvcnkgdGhyb3VnaCBhIGRhbmdsaW5nICh0cmFpbGluZylcbitcdFx0ICogc3ltbGluay4gRm9yIHJlZ3VsYXIgZmlsZXMgdGhpcyBoYXMgYmVlbiBhbGxvd2VkIGhpc3RvcmljYWxseVxuK1x0XHQgKiBvbiBPX0NSRUFUIHdpdGhvdXQgT19FWENMLiAqL1xuK1x0XHRpZiAodW5saWtlbHkobmQtXHUwMDNlZGVwdGgpIFx1MDAyNlx1MDAyNiBjcmVhdGVfZGlyIFx1MDAyNlx1MDAyNiAhY3JlYXRlX2Vycm9yKVxuK1x0XHRcdGNyZWF0ZV9lcnJvciA9IC1FRVhJU1Q7XG4gXHR9XG4gXHRpZiAoY3JlYXRlX2Vycm9yKVxuIFx0XHRvcGVuX2ZsYWcgXHUwMDI2PSB+T19DUkVBVDtcbkBAIC00NTM3LDYgKzQ2MDksNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRcdGRlbnRyeSA9IHJlcztcbiBcdFx0fVxuIFx0fVxuK1xuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX2lub2RlIHx8ICEob3AtXHUwMDNlb3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSkge1xuIFx0XHQvKlxuIFx0XHQgKiBObyBuZWVkIHRvIGNyZWF0ZSBhIGZpbGUuICBJZiBsb29rdXAgcmV0dXJuZWQgYSBwb3NpdGl2ZVxuQEAgLTQ1NTQsMjYgKzQ2MjcsMjYgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbiBcdFx0Z290byBvdXRfZHB1dDtcbiBcdH1cbiBcbi1cdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpcl9pbm9kZSwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBvdXRfZHB1dDtcbi1cbi1cdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NSRUFURUQ7XG4tXHRpZiAoIWRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZSkge1xuK1x0aWYgKChjcmVhdGVfZGlyIFx1MDAyNlx1MDAyNiAhZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlbWtkaXIpXG4rXHRcdHx8ICghY3JlYXRlX2RpciBcdTAwMjZcdTAwMjYgIWRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZSkpIHtcbiBcdFx0ZXJyb3IgPSAtRUFDQ0VTO1xuIFx0XHRnb3RvIG91dF9kcHV0O1xuIFx0fVxuIFxuLVx0ZXJyb3IgPSBkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2VjcmVhdGUoaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbitcdGlmIChjcmVhdGVfZGlyKSB7XG4rXHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXJfaW5vZGUsIGRlbnRyeSxcbitcdFx0XHRcdFx0XHQgICAgICAgbW9kZSwgXHUwMDI2ZGVsZWdhdGVkX2lub2RlKTtcbitcdFx0XHRlcnJvciA9IFBUUl9FUlJfT1JfWkVSTyhyZXMpO1xuK1x0XHRcdGlmICghZXJyb3IpXG4rXHRcdFx0XHRkZW50cnkgPSByZXM7XG4rXHR9IGVsc2Uge1xuK1x0XHRlcnJvciA9IHZmc19jcmVhdGVfbm9fcGVybShpZG1hcCwgZGVudHJ5LCBtb2RlLCBcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xuK1x0fVxuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIG91dF9kcHV0O1xuK1xuK1x0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDtcbiBvdXQ6XG4tXHRpZiAoIUlTX0VSUihkZW50cnkpKSB7XG4tXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfQ1JFQVRFRClcbi1cdFx0XHRmc25vdGlmeV9jcmVhdGUoZGlyX2lub2RlLCBkZW50cnkpO1xuLVx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRClcbi1cdFx0XHRmc25vdGlmeV9vcGVuKGZpbGUpO1xuLVx0fVxuIFx0aWYgKChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHx8IGNyZWF0ZV9lcnJvcilcbiBcdFx0aW5vZGVfdW5sb2NrKGRpcl9pbm9kZSk7XG4gXHRlbHNlXG5AQCAtNDY5NSwxNyArNDc2OCwxMiBAQCBzdHJ1Y3QgZmlsZSAqdmZzX2xvb2t1cF9vcGVuKHN0cnVjdCBwYXRoICpwYXJlbnQsIHN0cnVjdCBxc3RyICpsYXN0LFxuIH1cbiBFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHZmc19sb29rdXBfb3BlbiwgXCJuZnNkXCIpO1xuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0cmFpbGluZ19zbGFzaGVzKHN0cnVjdCBuYW1laWRhdGEgKm5kKVxuLXtcbi1cdHJldHVybiAoYm9vbCluZC1cdTAwM2VsYXN0Lm5hbWVbbmQtXHUwMDNlbGFzdC5sZW5dO1xuLX1cbi1cbiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX2Zhc3RfZm9yX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIGludCBvcGVuX2ZsYWcpXG4ge1xuIFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuIFxuIFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkge1xuLVx0XHRpZiAodHJhaWxpbmdfc2xhc2hlcyhuZCkpXG4rXHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKFx1MDAyNm5kLVx1MDAzZWxhc3QpIFx1MDAyNlx1MDAyNiAhKG9wZW5fZmxhZyBcdTAwMjYgT19ESVJFQ1RPUlkpKVxuIFx0XHRcdHJldHVybiBFUlJfUFRSKC1FSVNESVIpO1xuIFxuIFx0XHQvKiBEb24ndCBib3RoZXIgb24gYW4gT19FWENMIGNyZWF0ZSAqL1xuQEAgLTQ3MTMsNyArNDc4MSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZylcbiBcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcbitcdGlmICh0cmFpbGluZ19zbGFzaGVzKFx1MDAyNm5kLVx1MDAzZWxhc3QpKVxuIFx0XHRuZC1cdTAwM2VmbGFncyB8PSBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWTtcbiBcbiBcdGRlbnRyeSA9IGxvb2t1cF9mYXN0KG5kKTtcbkBAIC00ODA2LDggKzQ4NzQsOSBAQCBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG4gXHRcdGlmICgob3Blbl9mbGFnIFx1MDAyNiBPX0VYQ0wpIFx1MDAyNlx1MDAyNiAhKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKSlcbiBcdFx0XHRyZXR1cm4gLUVFWElTVDtcbi1cdFx0aWYgKGRfaXNfZGlyKG5kLVx1MDAzZXBhdGguZGVudHJ5KSlcbitcdFx0aWYgKCEob3Blbl9mbGFnIFx1MDAyNiBPX0RJUkVDVE9SWSkgXHUwMDI2XHUwMDI2IGRfaXNfZGlyKG5kLVx1MDAzZXBhdGguZGVudHJ5KSlcbiBcdFx0XHRyZXR1cm4gLUVJU0RJUjtcbitcbiBcdFx0ZXJyb3IgPSBtYXlfY3JlYXRlX2luX3N0aWNreShpZG1hcCwgbmQsXG4gXHRcdFx0XHRcdCAgICAgZF9iYWNraW5nX2lub2RlKG5kLVx1MDAzZXBhdGguZGVudHJ5KSk7XG4gXHRcdGlmICh1bmxpa2VseShlcnJvcikpXG5AQCAtNTA4Nyw3ICs1MTU2LDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmZpbGVuYW1lX2NyZWF0ZShpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsXG4gXHQgKiBEbyB0aGUgZmluYWwgbG9va3VwLiAgU3VwcHJlc3MgJ2NyZWF0ZScgaWYgdGhlcmUgaXMgYSB0cmFpbGluZ1xuIFx0ICogJy8nLCBhbmQgYSBkaXJlY3Rvcnkgd2Fzbid0IHJlcXVlc3RlZC5cbiBcdCAqL1xuLVx0aWYgKGxhc3QubmFtZVtsYXN0Lmxlbl0gXHUwMDI2XHUwMDI2ICF3YW50X2RpcilcbitcdGlmICh0cmFpbGluZ19zbGFzaGVzKFx1MDAyNmxhc3QpIFx1MDAyNlx1MDAyNiAhd2FudF9kaXIpXG4gXHRcdGNyZWF0ZV9mbGFncyBcdTAwMjY9IH5MT09LVVBfQ1JFQVRFO1xuIFx0ZGVudHJ5ID0gc3RhcnRfZGlyb3AocGF0aC1cdTAwM2VkZW50cnksIFx1MDAyNmxhc3QsIHJldmFsX2ZsYWcgfCBjcmVhdGVfZmxhZ3MpO1xuIFx0aWYgKElTX0VSUihkZW50cnkpKVxuQEAgLTUxODIsNyArNTI1MSw3IEBAIHN0cnVjdCBmaWxlICpkZW50cnlfY3JlYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSxcbiBcdFx0cGF0aC1cdTAwM2VkZW50cnkgPSBkaXI7XG4gXHRcdG1vZGUgPSB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7XG4gXG4tXHRcdGNyZWF0ZV9lcnJvciA9IG1heV9vX2NyZWF0ZShpZG1hcCwgcGF0aCwgZGVudHJ5LCBtb2RlKTtcbitcdFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIGZsYWdzLCBtb2RlKTtcbiBcdFx0aWYgKGNyZWF0ZV9lcnJvcilcbiBcdFx0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuIFxuQEAgLTUzNTYsNiArNTQyNSwzNCBAQCBTWVNDQUxMX0RFRklORTMobWtub2QsIGNvbnN0IGNoYXIgX191c2VyICosIGZpbGVuYW1lLCB1bW9kZV90LCBtb2RlLCB1bnNpZ25lZCwgZFxuIFx0cmV0dXJuIGZpbGVuYW1lX21rbm9kYXQoQVRfRkRDV0QsIG5hbWUsIG1vZGUsIGRldik7XG4gfVxuIFxuKy8qIFJldHVybnMgdGhlIGRlbnRyeSB0byB1c2UgKG5vdCBOVUxMKSBvciAtRSBvbiBlcnJvciAqL1xuK3N0YXRpYyBpbmxpbmVcbitzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG4rXHRcdFx0XHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGkpXG4re1xuK1x0aW50IGVycm9yO1xuK1x0c3RydWN0IGRlbnRyeSAqZGU7XG4rXHR1bnNpZ25lZCBtYXhfbGlua3MgPSBkaXItXHUwMDNlaV9zYi1cdTAwM2VzX21heF9saW5rcztcbitcbitcdGlmIChtYXhfbGlua3MgXHUwMDI2XHUwMDI2IGRpci1cdTAwM2VpX25saW5rIFx1MDAzZT0gbWF4X2xpbmtzKVxuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU1MSU5LKTtcbitcbitcdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnJvcik7XG4rXG4rXHRkZSA9IGRpci1cdTAwM2VpX29wLVx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRpZiAoSVNfRVJSKGRlKSlcbitcdFx0cmV0dXJuIGRlO1xuK1x0aWYgKGRlKSB7XG4rXHRcdGRwdXQoZGVudHJ5KTtcbitcdFx0ZGVudHJ5ID0gZGU7XG4rXHR9XG4rXHRmc25vdGlmeV9ta2RpcihkaXIsIGRlbnRyeSk7XG4rXHRyZXR1cm4gZGVudHJ5O1xuK31cbitcbiAvKipcbiAgKiB2ZnNfbWtkaXIgLSBjcmVhdGUgZGlyZWN0b3J5IHJldHVybmluZyBjb3JyZWN0IGRlbnRyeSBpZiBwb3NzaWJsZVxuICAqIEBpZG1hcDpcdFx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuQEAgLTUzODMsNyArNTQ4MCw2IEBAIHN0cnVjdCBkZW50cnkgKnZmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0IHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRlbGVnYXRlZF9pbm9kZSlcbiB7XG4gXHRpbnQgZXJyb3I7XG4tXHR1bnNpZ25lZCBtYXhfbGlua3MgPSBkaXItXHUwMDNlaV9zYi1cdTAwM2VzX21heF9saW5rcztcbiBcdHN0cnVjdCBkZW50cnkgKmRlO1xuIFxuIFx0ZXJyb3IgPSBtYXlfY3JlYXRlX2RlbnRyeShpZG1hcCwgZGlyLCBkZW50cnkpO1xuQEAgLTUzOTksMjQgKzU0OTUsMTIgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBlcnI7XG4gXG4tXHRlcnJvciA9IC1FTUxJTks7XG4tXHRpZiAobWF4X2xpbmtzIFx1MDAyNlx1MDAyNiBkaXItXHUwMDNlaV9ubGluayBcdTAwM2U9IG1heF9saW5rcylcbi1cdFx0Z290byBlcnI7XG4tXG4tXHRlcnJvciA9IHRyeV9icmVha19kZWxlZyhkaXIsIExFQVNFX0JSRUFLX0RJUl9DUkVBVEUsIGRlbGVnYXRlZF9pbm9kZSk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gZXJyO1xuLVxuLVx0ZGUgPSBkaXItXHUwMDNlaV9vcC1cdTAwM2Vta2RpcihpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuLVx0ZXJyb3IgPSBQVFJfRVJSKGRlKTtcbi1cdGlmIChJU19FUlIoZGUpKVxuK1x0ZGUgPSB2ZnNfbWtkaXJfbm9fcGVybShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUsIGRlbGVnYXRlZF9pbm9kZSk7XG4rXHRpZiAoSVNfRVJSKGRlKSkge1xuK1x0XHRlcnJvciA9IFBUUl9FUlIoZGUpO1xuIFx0XHRnb3RvIGVycjtcbi1cdGlmIChkZSkge1xuLVx0XHRkcHV0KGRlbnRyeSk7XG4tXHRcdGRlbnRyeSA9IGRlO1xuIFx0fVxuLVx0ZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpO1xuLVx0cmV0dXJuIGRlbnRyeTtcbitcdHJldHVybiBkZTtcbiBcbiBlcnI6XG4gXHRlbmRfY3JlYXRpbmcoZGVudHJ5KTtcbkBAIC01NzAzLDcgKzU3ODcsNyBAQCBpbnQgZmlsZW5hbWVfdW5saW5rYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKVxuIFx0XHRnb3RvIGV4aXRfZHJvcF93cml0ZTtcbiBcbiBcdC8qIFdoeSBub3QgYmVmb3JlPyBCZWNhdXNlIHdlIHdhbnQgY29ycmVjdCBlcnJvciB2YWx1ZSAqL1xuLVx0aWYgKHVubGlrZWx5KGxhc3QubmFtZVtsYXN0Lmxlbl0pKSB7XG4rXHRpZiAodW5saWtlbHkodHJhaWxpbmdfc2xhc2hlcyhcdTAwMjZsYXN0KSkpIHtcbiBcdFx0aWYgKGRfaXNfZGlyKGRlbnRyeSkpXG4gXHRcdFx0ZXJyb3IgPSAtRUlTRElSO1xuIFx0XHRlbHNlXG5AQCAtNjMwNSwxNiArNjM4OSwxNiBAQCBpbnQgZmlsZW5hbWVfcmVuYW1lYXQyKGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqZnJvbSxcbiBcdGlmIChmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSB7XG4gXHRcdGlmICghZF9pc19kaXIocmQubmV3X2RlbnRyeSkpIHtcbiBcdFx0XHRlcnJvciA9IC1FTk9URElSO1xuLVx0XHRcdGlmIChuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pXG4rXHRcdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMoXHUwMDI2bmV3X2xhc3QpKVxuIFx0XHRcdFx0Z290byBleGl0X3VubG9jaztcbiBcdFx0fVxuIFx0fVxuIFx0LyogdW5sZXNzIHRoZSBzb3VyY2UgaXMgYSBkaXJlY3RvcnkgdHJhaWxpbmcgc2xhc2hlcyBnaXZlIC1FTk9URElSICovXG4gXHRpZiAoIWRfaXNfZGlyKHJkLm9sZF9kZW50cnkpKSB7XG4gXHRcdGVycm9yID0gLUVOT1RESVI7XG4tXHRcdGlmIChvbGRfbGFzdC5uYW1lW29sZF9sYXN0Lmxlbl0pXG4rXHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKFx1MDAyNm9sZF9sYXN0KSlcbiBcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuLVx0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgbmV3X2xhc3QubmFtZVtuZXdfbGFzdC5sZW5dKVxuK1x0XHRpZiAoIShmbGFncyBcdTAwMjYgUkVOQU1FX0VYQ0hBTkdFKSBcdTAwMjZcdTAwMjYgdHJhaWxpbmdfc2xhc2hlcyhcdTAwMjZuZXdfbGFzdCkpXG4gXHRcdFx0Z290byBleGl0X3VubG9jaztcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmNcbmluZGV4IDM2ZjJlODU4ODkyMjAuLmI0ZGI3MDNjOWU4YzcgMTAwNjQ0XG4tLS0gYS9mcy9uZnMvZGlyLmNcbisrKyBiL2ZzL25mcy9kaXIuY1xuQEAgLTIxMjEsNiArMjEyMSw5IEBAIGludCBuZnNfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdGRmcHJpbnRrKFZGUywgXCJORlM6IGF0b21pY19vcGVuKCVzLyVsbHUpLCAlcGRcXG5cIixcbiBcdFx0XHRkaXItXHUwMDNlaV9zYi1cdTAwM2VzX2lkLCBkaXItXHUwMDNlaV9pbm8sIGRlbnRyeSk7XG4gXG4rXHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcbitcdFx0b3Blbl9mbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0ZXJyID0gbmZzX2NoZWNrX2ZsYWdzKG9wZW5fZmxhZ3MpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbkBAIC0yMzEzLDYgKzIzMTYsOSBAQCBpbnQgbmZzX2F0b21pY19vcGVuX3YyMyhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0ICovXG4gXHRpbnQgZXJyb3IgPSAwO1xuIFxuK1x0aWYgKE9fSVNfTUtESVIob3Blbl9mbGFncykpXG4rXHRcdG9wZW5fZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChkZW50cnktXHUwMDNlZF9uYW1lLmxlbiBcdTAwM2UgTkZTX1NFUlZFUihkaXIpLVx1MDAzZW5hbWVsZW4pXG4gXHRcdHJldHVybiAtRU5BTUVUT09MT05HO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uY1xuaW5kZXggNmIxYzE0ZTY4NGE5My4uNmNiNWUyYWQ3ODFmMyAxMDA2NDRcbi0tLSBhL2ZzL29wZW4uY1xuKysrIGIvZnMvb3Blbi5jXG5AQCAtMTIzOSwyOSArMTIzOSwzMCBAQCBpbmxpbmUgaW50IGJ1aWxkX29wZW5fZmxhZ3MoY29uc3Qgc3RydWN0IG9wZW5faG93ICpob3csIHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcbiBcdGlmIChXSUxMX0NSRUFURShmbGFncykpIHtcbiBcdFx0aWYgKGhvdy1cdTAwM2Vtb2RlIFx1MDAyNiB+U19JQUxMVUdPKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGUkVHO1xuK1x0XHRpZiAoT19JU19NS0RJUihmbGFncykpXG4rXHRcdFx0b3AtXHUwMDNlbW9kZSA9IGhvdy1cdTAwM2Vtb2RlIHwgU19JRkRJUjtcbitcdFx0ZWxzZVxuK1x0XHRcdG9wLVx1MDAzZW1vZGUgPSBob3ctXHUwMDNlbW9kZSB8IFNfSUZSRUc7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAoaG93LVx1MDAzZW1vZGUgIT0gMClcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0b3AtXHUwMDNlbW9kZSA9IDA7XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogQmxvY2sgYnVncyB3aGVyZSBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQgY3JlYXRlZCByZWd1bGFyIGZpbGVzLlxuLVx0ICogTm90ZSwgdGhhdCBibG9ja2luZyBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQgaGVyZSBhbHNvIHByb3RlY3RzXG4tXHQgKiBPX1RNUEZJTEUgYmVsb3cgd2hpY2ggcmVxdWlyZXMgT19ESVJFQ1RPUlkgYmVpbmcgcmFpc2VkLlxuLVx0ICovXG4tXHRpZiAoKGZsYWdzIFx1MDAyNiAoT19ESVJFQ1RPUlkgfCBPX0NSRUFUKSkgPT0gKE9fRElSRUNUT1JZIHwgT19DUkVBVCkpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0LyogTm93IGhhbmRsZSB0aGUgY3JlYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgT19UTVBGSUxFLiAqL1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBfX09fVE1QRklMRSkge1xuIFx0XHQvKlxuIFx0XHQgKiBJbiBvcmRlciB0byBlbnN1cmUgcHJvZ3JhbXMgZ2V0IGV4cGxpY2l0IGVycm9ycyB3aGVuIHRyeWluZ1xuIFx0XHQgKiB0byB1c2UgT19UTVBGSUxFIG9uIG9sZCBrZXJuZWxzIHdlIGVuZm9yY2UgdGhhdCBPX0RJUkVDVE9SWVxuLVx0XHQgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLlxuK1x0XHQgKiBpcyByYWlzZWQgYWxvbmdzaWRlIF9fT19UTVBGSUxFLCBidXQgd2l0aG91dCBPX0NSRUFULiBUaGVcbitcdFx0ICogcmVhc29uIGZvciBkaXNhbGxvd2luZyBPX0NSRUFUfE9fVE1QRklMRSBpcyB0aGF0XG4rXHRcdCAqIE9fRElSRUNUT1JZfE9fQ1JFQVQgdXNlZCB0byB3b3JrIGFuZCBjcmVhdGVkIGEgcmVndWxhciBmaWxlXG4rXHRcdCAqIGlmIG5vdGhpbmcgZXhpc3RlZCBhdCB0aGUgb3BlbiBwYXRoLiBIZW5jZSwgYWxsb3dpbmcgdGhlXG4rXHRcdCAqIGNvbWJpbmF0aW9uIHdvdWxkIGhhdmUgY2F1c2VkIE9fQ1JFQVR8T19UTVBGSUxFIHRvIGNyZWF0ZSBhXG4rXHRcdCAqIHJlZ3VsYXIgKG5vbi10ZW1wb3JhcnkpIGZpbGUgb24gb2xkIGtlcm5lbHMsIHdoaWxlIHRoZSBjYWxsZXJcbitcdFx0ICogd291bGQgYmVsaWV2ZSB0aGV5IGNyZWF0ZWQgYW4gYWN0dWFsIE9fVE1QRklMRS5cbiBcdFx0ICovXG4tXHRcdGlmICghKGZsYWdzIFx1MDAyNiBPX0RJUkVDVE9SWSkpXG4rXHRcdGlmICghKGZsYWdzIFx1MDAyNiBPX0RJUkVDVE9SWSkgfHwgKGZsYWdzIFx1MDAyNiBPX0NSRUFUKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0aWYgKCEoYWNjX21vZGUgXHUwMDI2IE1BWV9XUklURSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTMxOCw2ICsxMzE5LDE1IEBAIGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxuIFxuIFx0b3AtXHUwMDNlaW50ZW50ID0gZmxhZ3MgXHUwMDI2IE9fUEFUSCA/IDAgOiBMT09LVVBfT1BFTjtcbiBcbitcdC8qXG4rXHQgKiBSZXF1ZXN0aW5nIHdyaXRlIGFjY2VzcyBvbiBhIGRpcmVjdG9yeSBjYW4gbmV2ZXIgc3VjY2VlZC4gUmF0aGVyXG4rXHQgKiB0aGFuIHBlcmZvcm1pbmcgYSBwYXRoLXdhbGsgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHRhcmdldCBpc1xuK1x0ICogYWN0dWFsbHkgYSBkaXJlY3RvcnkgKC1FSVNESVIpIG9yIG5vdCAoLUVOT1RESVIpLCB3ZSBzaG9ydC1jaXJjdWl0XG4rXHQgKiB0byAtRU5PVERJUi5cbitcdCAqL1xuK1x0aWYgKChmbGFncyBcdTAwMjYgT19ESVJFQ1RPUlkpIFx1MDAyNlx1MDAyNiAhKGZsYWdzIFx1MDAyNiBfX09fVE1QRklMRSkgXHUwMDI2XHUwMDI2IChhY2NfbW9kZSBcdTAwMjYgTUFZX1dSSVRFKSlcbitcdFx0cmV0dXJuIC1FTk9URElSO1xuK1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBPX0NSRUFUKSB7XG4gXHRcdG9wLVx1MDAzZWludGVudCB8PSBMT09LVVBfQ1JFQVRFO1xuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE9fRVhDTCkge1xuZGlmZiAtLWdpdCBhL2ZzL3NtYi9jbGllbnQvZGlyLmMgYi9mcy9zbWIvY2xpZW50L2Rpci5jXG5pbmRleCA3ODAzYmQ1YmQwMWY4Li5kMWFmOTBjOTgxY2Q0IDEwMDY0NFxuLS0tIGEvZnMvc21iL2NsaWVudC9kaXIuY1xuKysrIGIvZnMvc21iL2NsaWVudC9kaXIuY1xuQEAgLTUzOCw2ICs1MzgsOSBAQCBpbnQgY2lmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGlyZW50cnksXG4gXHRpZiAodW5saWtlbHkoY2lmc19mb3JjZWRfc2h1dGRvd24oY2lmc19zYikpKVxuIFx0XHRyZXR1cm4gc21iX0VJTyhzbWJfZWlvX3RyYWNlX2ZvcmNlZF9zaHV0ZG93bik7XG4gXG4rXHRpZiAoT19JU19NS0RJUihvZmxhZ3MpKVxuK1x0XHRvZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdC8qXG4gXHQgKiBQb3NpeCBvcGVuIGlzIG9ubHkgY2FsbGVkIChhdCBsb29rdXAgdGltZSkgZm9yIGZpbGUgY3JlYXRlIG5vdy4gRm9yXG4gXHQgKiBvcGVucyAocmF0aGVyIHRoYW4gY3JlYXRlcyksIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cgaWYgaXQgaXMgYSBmaWxlXG5kaWZmIC0tZ2l0IGEvZnMvdmJveHNmL2Rpci5jIGIvZnMvdmJveHNmL2Rpci5jXG5pbmRleCAwYjllYWIxNTc0MzJkLi42ZTMwNmRkZDcyMmJmIDEwMDY0NFxuLS0tIGEvZnMvdmJveHNmL2Rpci5jXG4rKysgYi9mcy92Ym94c2YvZGlyLmNcbkBAIC0zMTgsNiArMzE4LDkgQEAgc3RhdGljIGludCB2Ym94c2ZfZGlyX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHR1NjQgaGFuZGxlO1xuIFx0aW50IGVycjtcbiBcbitcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHZib3hzZl9kaXJfbG9va3VwKHBhcmVudCwgZGVudHJ5LCAwKTtcbiBcdFx0aWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmNudGwuaCBiL2luY2x1ZGUvbGludXgvZmNudGwuaFxuaW5kZXggNmFkNmI5ZTdhMjI2YS4uMjA0ZTE2YmJlMjYzNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZmNudGwuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mY250bC5oXG5AQCAtMzAsNiArMzAsMTIgQEBcbiAgKi9cbiAjZGVmaW5lIF9fT19SRUdVTEFSXHRcdCgxIFx1MDAzY1x1MDAzYyAzMClcbiBcbisjZGVmaW5lIE9fTUtESVJfTUFTS1x0KE9fQ1JFQVQgfCBPX0RJUkVDVE9SWSlcbitzdGF0aWMgaW5saW5lIGJvb2wgT19JU19NS0RJUih1bnNpZ25lZCBpbnQgZmxhZ3MpXG4re1xuK1x0cmV0dXJuIChmbGFncyBcdTAwMjYgT19NS0RJUl9NQVNLKSA9PSBPX01LRElSX01BU0s7XG4rfVxuK1xuIC8qIExpc3Qgb2YgYWxsIHZhbGlkIGZsYWdzIGZvciB0aGUgaG93LVx1MDAzZXJlc29sdmUgYXJndW1lbnQ6ICovXG4gI2RlZmluZSBWQUxJRF9SRVNPTFZFX0ZMQUdTIFxcXG4gXHQoUkVTT0xWRV9OT19YREVWIHwgUkVTT0xWRV9OT19NQUdJQ0xJTktTIHwgUkVTT0xWRV9OT19TWU1MSU5LUyB8IFxcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbmluZGV4IDllYjE4NWZiMmY5ZGQuLjAxYzU4OGQ0Yzg0ZjYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlXG5AQCAtMSw0ICsxLDUgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbitvcGVuX29fY3JlYXRfb19kaXJcbiBkbm90aWZ5X3Rlc3RcbiBkZXZwdHNfcHRzXG4gZmNsb2dcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlXG5pbmRleCAwM2JlMzM3YzFmMzUxLi4wOTU5YmQyNjg3NWFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlXG5AQCAtMSw3ICsxLDcgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gXG4gQ0ZMQUdTICs9ICQoS0hEUl9JTkNMVURFUylcbi1URVNUX0dFTl9QUk9HUyA6PSBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nIHVzdGF0X3Rlc3RcbitURVNUX0dFTl9QUk9HUyA6PSBvcGVuX29fY3JlYXRfb19kaXIgZGV2cHRzX3B0cyBmaWxlX3N0cmVzc29yIGFub25faW5vZGVfdGVzdCBrZXJuZnNfdGVzdCBmY2xvZyB1c3RhdF90ZXN0XG4gVEVTVF9HRU5fUFJPR1MgKz0gaWRtYXBwZWRfdG1wZmlsZVxuIFRFU1RfR0VOX1BST0dTX0VYVEVOREVEIDo9IGRub3RpZnlfdGVzdFxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5iZTBhYjM0MjY3ZTFkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuY1xuQEAgLTAsMCArMSwyMDEgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKyNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGltaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NmY250bC5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3RfaGFybmVzcy5oXCJcbisjaW5jbHVkZSBcIndyYXBwZXJzLmhcIlxuK1xuKyNkZWZpbmUgb3BlbmF0X29fbWtkaXJfY2hlY2tlZF9mbGFncyhkZmQsIHBhdGhuYW1lLCBmbGFncykgKHtcdFxcXG4rXHRzdHJ1Y3Qgc3RhdCBfX3N0O1x0XHRcdFx0XHRcdFxcXG4rXHRpbnQgX19mZCA9IG9wZW5hdF9vX21rZGlyKGRmZCwgcGF0aG5hbWUsIGZsYWdzLCBTX0lSV1hVKTtcdFxcXG4rXHRBU1NFUlRfR0UoX19mZCwgMCk7XHRcdFx0XHRcdFx0XFxcbitcdEFTU0VSVF9FUShmc3RhdChfX2ZkLCBcdTAwMjZfX3N0KSwgMCk7XHRcdFx0XHRcXFxuK1x0RVhQRUNUX1RSVUUoU19JU0RJUihfX3N0LnN0X21vZGUpKTtcdFx0XHRcdFxcXG4rXHRfX2ZkO1x0XHRcdFx0XHRcdFx0XHRcXFxuK30pXG4rXG4rI2RlZmluZSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKGRmZCwgcGF0aG5hbWUpIFxcXG4rXHRvcGVuYXRfb19ta2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIE9fUkRPTkxZKVxuK1xuK0ZJWFRVUkUob3Blbl9vX2NyZWF0X29fZGlyKSB7XG4rXHRjaGFyIGRpcnBhdGhbUEFUSF9NQVhdO1xuK1x0aW50IGRmZDtcbit9O1xuK1xuK0ZJWFRVUkVfU0VUVVAob3Blbl9vX2NyZWF0X29fZGlyKVxuK3tcbitcdHN0cmNweShzZWxmLVx1MDAzZWRpcnBhdGgsIFwiL3RtcC9vcGVuX29fY3JlYXRfb19kaXJfdGVzdC5YWFhYWFhcIik7XG4rXHRBU1NFUlRfTkUobWtkdGVtcChzZWxmLVx1MDAzZWRpcnBhdGgpLCBOVUxMKTtcbitcdHNlbGYtXHUwMDNlZGZkID0gb3BlbihzZWxmLVx1MDAzZWRpcnBhdGgsIE9fRElSRUNUT1JZKTtcbitcdEFTU0VSVF9HRShzZWxmLVx1MDAzZWRmZCwgMCk7XG4rfVxuK1xuK0ZJWFRVUkVfVEVBUkRPV04ob3Blbl9vX2NyZWF0X29fZGlyKVxuK3tcbitcdGNsb3NlKHNlbGYtXHUwMDNlZGZkKTtcbitcdHJtZGlyKHNlbGYtXHUwMDNlZGlycGF0aCk7XG4rfVxuK1xuKy8qIERvZXMgb3Blbl9vX2NyZWF0X29fZGlyIHJldHVybiBhIGZkIGF0IGFsbD8gKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZXR1cm5zX2ZkKVxuK3tcbitcdGludCBmZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoc2VsZi1cdTAwM2VkZmQsIFwibmV3ZGlyXCIpO1xuK1x0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XG4rXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwibmV3ZGlyXCIsIEFUX1JFTU9WRURJUiksIDApO1xuK31cbitcbisvKiBUaGUgZmQgbXVzdCByZWZlciB0byB0aGUgZGlyZWN0b3J5IHRoYXQgd2FzIGp1c3QgY3JlYXRlZC4gKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBmZF9pc19jcmVhdGVkX2Rpcilcbit7XG4rXHRpbnQgZmQ7XG4rXHRzdHJ1Y3Qgc3RhdCBzdF92aWFfZmQsIHN0X3ZpYV9wYXRoO1xuK1x0Y2hhciBwYXRoW1BBVEhfTUFYXTtcbitcbitcdGZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChzZWxmLVx1MDAzZWRmZCwgXCJjaGVja2RpclwiKTtcbitcbitcdEFTU0VSVF9FUShmc3RhdChmZCwgXHUwMDI2c3RfdmlhX2ZkKSwgMCk7XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiJXMvY2hlY2tkaXJcIiwgc2VsZi1cdTAwM2VkaXJwYXRoKTtcbitcdEFTU0VSVF9FUShzdGF0KHBhdGgsIFx1MDAyNnN0X3ZpYV9wYXRoKSwgMCk7XG4rXG4rXHRFWFBFQ1RfRVEoc3RfdmlhX2ZkLnN0X2lubywgc3RfdmlhX3BhdGguc3RfaW5vKTtcbitcdEVYUEVDVF9FUShzdF92aWFfZmQuc3RfZGV2LCBzdF92aWFfcGF0aC5zdF9kZXYpO1xuK1xuK1x0RVhQRUNUX0VRKGNsb3NlKGZkKSwgMCk7XG4rXHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xuK31cbitcbisvKiBNaXNzaW5nIHBhcmVudCBjb21wb25lbnQgbXVzdCBmYWlsIHdpdGggRU5PRU5ULiAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGVub2VudF9taXNzaW5nX3BhcmVudClcbit7XG4rXHRFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoc2VsZi1cdTAwM2VkZmQsIFwibm9uZXhpc3RlbnQvY2hpbGRcIiwgT19SRE9OTFksIFNfSVJXWFUpLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVOT0VOVCk7XG4rfVxuK1xuKy8qIEFuIGludmFsaWQgZGZkIG11c3QgZmFpbCB3aXRoIEVCQURGLiAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGViYWRmKVxuK3tcbitcdEVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihGRF9JTlZBTElELCBcImJhZGZkaXJcIiwgT19SRE9OTFksIFNfSVJXWFUpLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVCQURGKTtcbit9XG4rXG4rLyogQSBkZmQgdGhhdCBwb2ludHMgdG8gYSBmaWxlIChub3QgYSBkaXJlY3RvcnkpIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuICovXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vdGRpcl9kZmQpXG4re1xuK1x0aW50IGZpbGVfZmQ7XG4rXG4rXHRmaWxlX2ZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcImZpbGVcIixcbitcdFx0XHQgT19DUkVBVCB8IE9fUkRPTkxZLCBTX0lSV1hVKTtcbitcdEFTU0VSVF9HRShmaWxlX2ZkLCAwKTtcbitcbitcdEVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihmaWxlX2ZkLCBcInN1YmRpclwiLCBPX1JET05MWSwgU19JUldYVSksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4rXG4rXHRFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApO1xuK1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcImZpbGVcIiwgMCksIDApO1xuK31cbitcbisvKlxuKyAqIE9fRVhDTCB0b2dldGhlciB3aXRoIE9fQ1JFQVR8T19ESVJFQ1RPUlkgc2hvdWxkIHN1Y2NlZWQgaWYgdGhlIHRhcmdldFxuKyAqIGRpcmVjdG9yeSBkb2VzIG5vdCB5ZXQgZXhpc3QuIEFmdGVyIGRpcmVjdG9yeSBjcmVhdGlvbiwgcmVwZWF0aW5nIHRoaXNcbisgKiBjYWxsIG11c3QgZmFpbCB3aXRoIEVFWElTVC5cbisgKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBvX2V4Y2xfZWV4aXN0KVxuK3tcbitcdGludCBleGNsZGlyX2ZkO1xuK1xuK1x0ZXhjbGRpcl9mZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWRfZmxhZ3Moc2VsZi1cdTAwM2VkZmQsIFwiZXhjbGRpclwiLCBPX0VYQ0wpO1xuK1xuK1x0RVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKGV4Y2xkaXJfZmQsIFwiLlwiLCBPX0VYQ0wsIFNfSVJXWFUpLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVFWElTVCk7XG4rXG4rXHRFWFBFQ1RfRVEoY2xvc2UoZXhjbGRpcl9mZCksIDApO1xuK1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcImV4Y2xkaXJcIiwgQVRfUkVNT1ZFRElSKSwgMCk7XG4rfVxuK1xuKy8qXG4rICogT19DUkVBVHxPX0RJUkVDVE9SWSBvbiBhIHBhdGggdGhhdCBhbHJlYWR5IGV4aXN0cyBhcyBhIHJlZ3VsYXIgZmlsZVxuKyAqIG11c3QgZmFpbCB3aXRoIEVOT1RESVIuXG4rICovXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZXhpc3RpbmdfZmlsZV9lbm90ZGlyKVxuK3tcbitcdGludCBmaWxlX2ZkO1xuK1xuK1x0ZmlsZV9mZCA9IG9wZW5hdChzZWxmLVx1MDAzZWRmZCwgXCJyZWdmaWxlXCIsXG4rXHRcdFx0IE9fQ1JFQVQgfCBPX1JET05MWSwgU19JUldYVSk7XG4rXHRBU1NFUlRfR0UoZmlsZV9mZCwgMCk7XG4rXHRFWFBFQ1RfRVEoY2xvc2UoZmlsZV9mZCksIDApO1xuK1xuK1x0RVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKHNlbGYtXHUwMDNlZGZkLCBcInJlZ2ZpbGVcIiwgT19SRE9OTFksIFNfSVJXWFUpLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVOT1RESVIpO1xuK1xuK1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcInJlZ2ZpbGVcIiwgMCksIDApO1xuK31cbitcbisvKlxuKyAqIE9fQ1JFQVR8T19ESVJFQ1RPUlkgY29tYmluZWQgd2l0aCBhIHdyaXRhYmxlIGFjY2VzcyBtb2RlIG11c3QgYmVcbisgKiByZWplY3RlZDogYSBkaXJlY3RvcnkgY2Fubm90IGJlIG9wZW5lZCBmb3Igd3JpdGluZy5cbisgKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCByZWplY3RzX3dyaXRhYmxlX2FjY19tb2RlKVxuK3tcbitcdEVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihzZWxmLVx1MDAzZWRmZCwgXCJyZHdyZGlyXCIsIE9fUkRXUiwgU19JUldYVSksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4rXHQvKiBDbGVhbiB1cCBpZiB0aGUga2VybmVsIGNyZWF0ZWQgdGhlIGRpcmVjdG9yeSBhbnl3YXkuICovXG4rXHR1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCJyZHdyZGlyXCIsIEFUX1JFTU9WRURJUik7XG4rfVxuK1xuKy8qXG4rICogb3BlbmF0KE9fQ1JFQVR8T19ESVJFQ1RPUlkpIHdpdGggYSB0cmFpbGluZyBzbGFzaCBzaG91bGQgd29yay5cbisgKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCB0cmFpbGluZ19zbGFzaClcbit7XG4rXHRpbnQgZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcIm5ld2Rpci9cIik7XG4rXHRFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTtcbitcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCJuZXdkaXJcIiwgQVRfUkVNT1ZFRElSKSwgMCk7XG4rfVxuK1xuKy8qXG4rICogb3BlbmF0KE9fQ1JFQVQpIHdpdGggYSB0cmFpbGluZyBzbGFzaCBidXQgd2l0aG91dCBPX0RJUkVDVE9SWVxuKyAqIG11c3QgZmFpbCB3aXRoIEVJU0RJUiBhbmQgbXVzdCBub3QgY3JlYXRlIGFueXRoaW5nIGF0IHRoZSBwYXRoLlxuKyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHRyYWlsaW5nX3NsYXNoX25vX29fZGlyKVxuK3tcbitcdGludCBmZDtcbitcdHN0cnVjdCBzdGF0IHN0O1xuK1xuK1x0ZmQgPSBvcGVuYXQoc2VsZi1cdTAwM2VkZmQsIFwidHJhaWxpbmcvXCIsIE9fQ1JFQVQgfCBPX1JET05MWSwgU19JUldYVSk7XG4rXHRFWFBFQ1RfRVEoZmQsIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRUlTRElSKTtcbitcbitcdEVYUEVDVF9FUShmc3RhdGF0KHNlbGYtXHUwMDNlZGZkLCBcInRyYWlsaW5nXCIsIFx1MDAyNnN0LCAwKSwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFTk9FTlQpO1xuK1xuK1x0LyogQmVzdC1lZmZvcnQgY2xlYW51cCBpbiBjYXNlIHRoZSBrZXJuZWwgbGVmdCBhIGZpbGUgYmVoaW5kLiAqL1xuK1x0aWYgKGZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZmQpO1xuK1x0dW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwidHJhaWxpbmdcIiwgMCk7XG4rfVxuK1xuKy8qXG4rICogVGhlIHJldHVybmVkIGZkIG11c3QgYmUgdXNhYmxlIGFzIGEgZGZkIGZvciBmdXJ0aGVyICphdCgpIGNhbGxzLlxuKyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGZkX3VzYWJsZV9hc19kZmQpXG4re1xuK1x0aW50IHBhcmVudF9mZCwgY2hpbGRfZmQ7XG4rXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1xuK1x0cGFyZW50X2ZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChzZWxmLVx1MDAzZWRmZCwgXCJwYXJlbnRcIik7XG4rXHRjaGlsZF9mZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQocGFyZW50X2ZkLCBcImNoaWxkXCIpO1xuK1xuK1x0RVhQRUNUX0VRKGNsb3NlKGNoaWxkX2ZkKSwgMCk7XG4rXHRFWFBFQ1RfRVEoY2xvc2UocGFyZW50X2ZkKSwgMCk7XG4rXG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiJXMvcGFyZW50L2NoaWxkXCIsIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4rXHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xuK1x0c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBcIiVzL3BhcmVudFwiLCBzZWxmLVx1MDAzZWRpcnBhdGgpO1xuK1x0RVhQRUNUX0VRKHJtZGlyKHBhdGgpLCAwKTtcbit9XG4rXG4rVEVTVF9IQVJORVNTX01BSU5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy93cmFwcGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvd3JhcHBlcnMuaFxuaW5kZXggNDIwYWU0ZjkwOGNmMi4uYWJlNWI4NWNlYmRjZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3dyYXBwZXJzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3dyYXBwZXJzLmhcbkBAIC0xMyw2ICsxMywxMCBAQFxuICNkZWZpbmUgU1RBVFhfTU5UX0lEX1VOSVFVRSAweDAwMDA0MDAwVSAvKiBXYW50L2dvdCBleHRlbmRlZCBzdHhfbW91bnRfaWQgKi9cbiAjZW5kaWZcbiBcbisjaWZuZGVmIEZEX0lOVkFMSURcbisjZGVmaW5lIEZEX0lOVkFMSUQgLTEwMDA5XG4rI2VuZGlmXG4rXG4gc3RhdGljIGlubGluZSBpbnQgc3lzX2Zzb3Blbihjb25zdCBjaGFyICpmc25hbWUsIHVuc2lnbmVkIGludCBmbGFncylcbiB7XG4gXHRyZXR1cm4gc3lzY2FsbChfX05SX2Zzb3BlbiwgZnNuYW1lLCBmbGFncyk7XG5AQCAtMTA1LDQgKzEwOSwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBzeXNfb3Blbl90cmVlKGludCBkZmQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ1xuIFx0cmV0dXJuIHN5c2NhbGwoX19OUl9vcGVuX3RyZWUsIGRmZCwgZmlsZW5hbWUsIGZsYWdzKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgb3BlbmF0X29fbWtkaXIoaW50IGRmZCwgY29uc3QgY2hhciAqcGF0aG5hbWUsXG4rXHRcdFx0XHQgdW5zaWduZWQgaW50IGZsYWdzLCBtb2RlX3QgbW9kZSlcbit7XG4rXHRyZXR1cm4gc3lzY2FsbChfX05SX29wZW5hdCwgZGZkLCBwYXRobmFtZSxcbitcdFx0ICAgICAgIGZsYWdzIHwgT19ESVJFQ1RPUlkgfCBPX0NSRUFULCBtb2RlKTtcbit9XG4rXG4gI2VuZGlmXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNDoxMS43MzMzNzkwMTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjQxNTUyNjI5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldyBBdG9taWMgRGlyZWN0b3J5IENyZWF0aW9uIEZlYXR1cmUqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgdGhpcyBuZXcgcGF0Y2ggaW50cm9kdWNpbmcgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAsIGVzc2VudGlhbGx5IGBPX0lTX01LRElSYCwgYWxsb3dpbmcgZm9yIGFuIGF0b21pYyBgb3BlbmF0KClgIHRoYXQgY3JlYXRlcyBhIGRpcmVjdG9yeSBhbmQgcmV0dXJucyBhIGZpbGUgZGVzY3JpcHRvci4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhIGZhaXJseSBzdWJzdGFudGlhbCBjaGFuZ2UsIHBhcnRpY3VsYXJseSB0byB0aGUgVkZTIGxheWVyLCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIGBvcGVuYXQoKWAgYW5kIHBhdGggcmVzb2x1dGlvbi9jcmVhdGlvbiBsb2dpYyB3aXRoaW4gYG5hbWVpLmNgLiAgR2l2ZW4gbXkgZXhwZXJ0aXNlLCB0aGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgXCJmdXp6aW5nIHRhcmdldC5cIlxuXG5UaGUgY29yZSBtb2RpZmljYXRpb24gaW4gYGZzL29wZW4uY2AgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYWRkaW5nIGEgY2hlY2sgZm9yIGBPX0lTX01LRElSYCB3aXRoaW4gdGhlIGBXSUxMX0NSRUFURWAgYmxvY2suIFRoZSBkZWZpbml0aW9uIG9mIGBPX0lTX01LRElSYCBpdHNlbGYgbG9va3MgY2xlYW4uICBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyBob3cgdGhpcyBwcm9wYWdhdGVzIHRocm91Z2ggYG5hbWVpLmNgLiAgYG1heV9vX2NyZWF0ZWAgbm93IGhhcyBhIGBjcmVhdGVfZGlyYCBmbGFnLCBhbmQgYGxvb2t1cF9vcGVuYCdzIGxvZ2ljIGJyYW5jaGVzIHRvIGB2ZnNfbWtkaXJfbm9fcGVybWAgb3IgYHZmc19jcmVhdGVfbm9fcGVybWAgYmFzZWQgb24gdGhhdCBmbGFnLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgcmVzaWRlcy5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgZm9yIGZ1enppbmcuIFdlIGtub3cgYHZmc19ta2Rpcl9ub19wZXJtYCwgYG1heV9vX2NyZWF0ZWAsIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGBkb19vcGVuYCwgYGJ1aWxkX29wZW5fZmxhZ3NgIGFyZSB0b3VjaGVkLiAgVGhlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgYGF0b21pY19vcGVuYCBpbXBsZW1lbnRhdGlvbnMgYXJlIGFsc28gYWZmZWN0ZWQsIGJ1dCB0aGV5IGFyZSBzcGVjaWZpYyB0byBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zIGFuZCBkbyBub3QgaGF2ZSBhbiBpbXBhY3Qgb24gdGhlIGNvcmUgVkZTIGZ1bmN0aW9ucy4gTGV0J3MgZGlnIGRlZXBlcjogYWZ0ZXIgY2hlY2tpbmcsIGl0IHR1cm5zIG91dCB0aGF0IGB2ZnNfbWtkaXJfbm9fcGVybWAsIGBtYXlfb19jcmVhdGVgLCBgbG9va3VwX29wZW5gLCBgYXRvbWljX29wZW5gLCBhbmQgYGRvX29wZW5gIGFyZSBzdGF0aWMgdG8gdGhlIGZpbGVzIHRoZXkgYXJlIGluLiBgYnVpbGRfb3Blbl9mbGFnc2AgaXMgaW5saW5lLCBzbyBpdCB3b24ndCBiZSBleHBvc2VkIGFzIGEgZGlzdGluY3Qgc3ltYm9sLlxuXG5JIG5lZWQgdG8gaWRlbnRpZnkgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIG1vZGlmaWVkLiBgdmZzX2NyZWF0ZWAsIGB2ZnNfbWtkaXJgLCBgZmlsZW5hbWVfY3JlYXRlYCwgYGRlbnRyeV9jcmVhdGVgLCBgZmlsZW5hbWVfdW5saW5rYXRgLCBhbmQgYGZpbGVuYW1lX3JlbmFtZWF0MmAgYXJlIG1vZGlmaWVkLiBMb29raW5nIHNwZWNpZmljYWxseSBhdCBgZnMvbmFtZWkuY2AsIHRoZXNlIGFyZSBub3Qgc3RhdGljLCB3aGljaCBtZWFucyB0aGVzZSBhcmUgdGhlIHN5bWJvbHMgZXhwb3NlZC5cblxuVGhlIGtleSBlbnRyeSBwb2ludHMgYXJlIGBkb19zeXNfb3BlbmF0MmAsIHRoZSBtYWluIGBvcGVuYXQyYCBhbmQgYG9wZW5hdGAgaGFuZGxlciwgYW5kIGBwYXRoX29wZW5hdGAuIEFsc28sIHRoZSBgZG9fZmlscF9vcGVuYCBmdW5jdGlvbiBpcyBhIGNvcmUgZnVuY3Rpb24uXG5cbkdpdmVuIHRoZSBpbnRlbnQgaXMgdG8gZnV6eiBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCwgdGhlIHByaW1hcnkgZ29hbCBpcyB0byB0YXJnZXQgYG9wZW5hdGAgYW5kIGBvcGVuYXQyYCB3aXRoIHRoZXNlIGZsYWdzLiAgU3l6a2FsbGVyIGFscmVhZHkgaGFzIGNvdmVyYWdlIGZvciBgb3BlbmF0YCBnZW5lcmFsbHksIGJ1dCB0aGUgbmV3IGxvZ2ljIGlzIGluIHRoZXNlIHN5bWJvbHM6IGB2ZnNfbWtkaXJgLCBgdmZzX2NyZWF0ZWAsIGFuZCBgbG9va3VwX29wZW5gLiBCZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBhcmVuJ3Qgc3RhdGljLCB0aGV5IGNhbiBiZSB0YXJnZXRlZCBieSBmdXp6aW5nLiBJZiBgbG9va3VwX29wZW5gIGlzIG5vdCBpbmxpbmVkLlxuXG5UaGUgZm9jdXMgc2hvdWxkIGJlIG9uIGNyZWF0aW5nIHRlc3QgY2FzZXMgdGhhdCBzcGVjaWZpY2FsbHkgZXhlcmNpc2UgdGhlIGF0b21pYyBkaXJlY3RvcnkgY3JlYXRpb24gcGF0aCB0byBleHBvc2UgYW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBvciBzdWJ0bGUgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzYyMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNDoyOC4xNDg5MDg2NjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MzQ0MDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgc3RydWN0IGRlbnRyeSBcXFxcKmxvb2t1cF9vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25hbWVpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmFtZWkuYz00NDgwPXN0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKiwgc3RydWN0IGlub2RlICosXFxuLS1cXG5mcy9uYW1laS5jLTQ0OTYtICovXFxuZnMvbmFtZWkuYzo0NDk3OnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuZnMvbmFtZWkuYy00NDk4LVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNDoyOC4yNjYyNTcyMDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTQ0MDE2OTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIGV4cGVydDpcblxuKipVbmRlcnN0YW5kaW5nIFN5emthbGxlcidzIFRyYWNlYWJpbGl0eSoqXG5cbkFscmlnaHQsIHNvIHRoZSBrZXkgaGVyZSBpcyB0aGF0IGBsb29rdXBfb3BlbmAgZnVuY3Rpb24gaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AgYnV0IGl0J3MgKm5vdCogaW5saW5lZC4gVGhhdCdzIGdvb2QgZnJvbSBhIGRlYnVnZ2luZyBwZXJzcGVjdGl2ZSwgZXNwZWNpYWxseSB3aGVuIHdvcmtpbmcgd2l0aCBzb21ldGhpbmcgbGlrZSBTeXprYWxsZXIuIEJlY2F1c2UgaXQncyBzdGF0aWMsIHRoZSBjb21waWxlciB3b24ndCB0cnkgdG8gb3B0aW1pemUgaXQgYXdheSBpbnRvIHRoZSBjYWxsIHNpdGVzLiBJZiBpdCAqd2VyZSogaW5saW5lZCwgU3l6a2FsbGVyJ3MgdHJhY2luZyBjYXBhYmlsaXRpZXMgd291bGQgYmUgY29tcHJvbWlzZWQsIG1ha2luZyBpdCBtdWNoIGhhcmRlciB0byBvYnNlcnZlIGl0cyBiZWhhdmlvciBkaXJlY3RseS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIHdoZW4gZXhhbWluaW5nIHRoZSB0cmFjZSByZXN1bHRzLiBOb3csIHRoZSBjb250ZXh0IGhhcyBsZWQgbWUgdG8gYGF0b21pY19vcGVuYCBpbiBgZnMvbmFtZWkuY2AuIExldCdzIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhpcyBwaWN0dXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTA5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTQ6MzQuODEwMjc3Mzg1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzc1OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgc3RydWN0IGRlbnRyeSBcXFxcKmF0b21pY19vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25hbWVpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmFtZWkuYz00Mzc5PXN0YXRpYyBpbmxpbmUgdW1vZGVfdCBvX2NyZWF0ZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvbmFtZWkuYy00NDEwLSAqL1xcbmZzL25hbWVpLmM6NDQxMTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRvbWljX29wZW4oY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG5mcy9uYW1laS5jLTQ0MTItXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTQ6MzQuODY0MDYxMzU0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYzMzQ4ODQwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipSZWZsZWN0aW5nIG9uIEZpbGUgU3lzdGVtIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgZmlsZSBzeXN0ZW0gY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgZmlsZSBvcGVuaW5nLiBJJ3ZlIG5vdGljZWQgc29tZXRoaW5nIGludGVyZXN0aW5nIGFib3V0IGBhdG9taWNfb3BlbmAuIEl0J3MgZGVmaW5lZCBhcyBgc3RhdGljYCwgd2hpY2ggaXNuJ3QgY29tcGxldGVseSB1bmV4cGVjdGVkLCBidXQgaXQncyAqYWxzbyogbm90IGFuIGBpbmxpbmVgIGZ1bmN0aW9uLiBUaGF0J3MgYSBkZWxpYmVyYXRlIGNob2ljZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBsaWNhdGlvbnMuIFR5cGljYWxseSwgSSdkIGV4cGVjdCBhbiBvcHRpbWl6YXRpb24gaGVyZSB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIGlubGluaW5nLCBidXQgbWF5YmUgdGhlcmUncyBhIGdvb2QgcmVhc29uIGZvciBpdCBiZWluZyBgc3RhdGljYCBhbmQgbm90IGBpbmxpbmVgIC0gcGVyaGFwcyB0byBwcmV2ZW50IGNvZGUgYmxvYXQsIGtlZXAgZnVuY3Rpb24gc2NvcGUgdGlnaHQsIG9yIGJlY2F1c2UgdGhlIGNvbXBpbGVyIGlzIHVuYWJsZSB0byBpbmxpbmUgZm9yIGNlcnRhaW4gdXNlcywgZXRjLlxuXG5Ob3csIEknbSB0dXJuaW5nIG15IGF0dGVudGlvbiB0byBgZG9fb3BlbmAsIGFuZCBJJ20gbG9va2luZyBhdCBpdCdzIGRlZmluaXRpb24gaW4gYGZzL25hbWVpLmNgLiBNeSBtaW5kIGlzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgZGlmZmVyZW50IHNjZW5hcmlvcywgbG9va2luZyB0byBzZWUgaG93IGBhdG9taWNfb3BlbmAgaXMgdXNlZC4gSSdtIHdvbmRlcmluZyBpZiBgYXRvbWljX29wZW5gIGlzIHVzZWQgYXMgYSBsb3cgbGV2ZWwgaGVscGVyIGZ1bmN0aW9uIGFuZCBpcyBuZXZlciBpbmxpbmVkIHRvIHByZXZlbnQgY29tcGxpY2F0aW9ucyBvZiBhIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBpbiBtdWx0aXBsZSBwbGFjZXMuIEl0IGlzIGFsc28gcG9zc2libGUgdGhhdCBgYXRvbWljX29wZW5gIGlzIHZlcnkgbG9uZywgc28gdGhlIGNvbXBpbGVyIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGlubGluZSBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyODMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNDo0MS40OTc1NTI1NThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc1NzYxNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnN0YXRpYyBpbnQgZG9fb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uYW1laS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25hbWVpLmM9NDgwMj1zdGF0aWMgY29uc3QgY2hhciAqb3Blbl9sYXN0X2xvb2t1cHMoc3RydWN0IG5hbWVpZGF0YSAqbmQsXFxuLS1cXG5mcy9uYW1laS5jLTQ4NTYtICovXFxuZnMvbmFtZWkuYzo0ODU3OnN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcXG5mcy9uYW1laS5jLTQ4NTgtXFx0XFx0ICAgc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBvcGVuX2ZsYWdzICpvcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTQ6NDEuNTY1MTQ1NTIyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTk3MDk4MjM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRmlsZXN5c3RlbSBFbnRyeXBvaW50cyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlc2UgZmlsZXN5c3RlbSBlbnRyeSBwb2ludHMuIE15IGluaXRpYWwgb2JzZXJ2YXRpb25zIGFyZSB0aGF0IGBkb19vcGVuYCBpcyBkZWZpbml0ZWx5IHN0YXRpYyBidXQgbm90IGlubGluZWQsIHdoaWNoIGlzIGdvb2QuIGB2ZnNfbWtkaXJgIGFuZCBgdmZzX2NyZWF0ZWAgYXJlIGJvdGggZXhwb3J0ZWQsIHNvIHRoZXkncmUgc29saWQgY2FuZGlkYXRlcy5cblxuTm93LCBsZXQncyBsb29rIGF0IHRoZSBmaWxlc3lzdGVtLXNwZWNpZmljIGF0b21pYyBvcGVuIGZ1bmN0aW9ucyB0byBnZXQgYSBicm9hZGVyIHZpZXcuIEknbSBzZWVpbmc6IGB2OWZzX3Zmc19hdG9taWNfb3BlbmAsIGB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsYCwgYGNlcGhfYXRvbWljX29wZW5gLCBgZnVzZV9hdG9taWNfb3BlbmAsIGBnZnMyX2F0b21pY19vcGVuYCwgYG5mc19hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5fdjIzYCwgYGNpZnNfYXRvbWljX29wZW5gLCBhbmQgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLiBGcm9tIGEgY3Vyc29yeSBnbGFuY2UsIHRoZXNlIGFsbCBsb29rIGxpa2UgdGhleSdyZSBlaXRoZXIgbm90IHN0YXRpYyBvciBhcmUgc3RhdGljIGJ1dCB1c2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIOKAkyB3aGljaCBtZWFucyB0aGV5IHdvbid0IGJlIGlubGluZWQuIEV4Y2VwdC4uLndhaXQsIHRoZXJlJ3MgYGZ1c2VfYXRvbWljX29wZW5gLiBJdCAqaXMqIHN0YXRpYzogYHN0YXRpYyBpbnQgZnVzZV9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZW50cnksYC4gQnV0IEkgcmVtZW1iZXIgaXQncyBhc3NpZ25lZCB0byBgaW5vZGVfb3BlcmF0aW9ucy1cdTAwM2VhdG9taWNfb3BlbmAsIHNvIHRoZSBjb21waWxlciB3b24ndCBiZSBhYmxlIHRvIGlubGluZSBpdCBpbiBhIHVzZWZ1bCB3YXkuXG5cbkxldCBtZSBtYWtlIGEgcXVpY2sgbGlzdCBvZiB3aGF0IEknbSBmb2N1c2VkIG9uLCBqdXN0IHRvIGtlZXAgZXZlcnl0aGluZyBzdHJhaWdodDogYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYGxvb2t1cF9vcGVuYCwgYGF0b21pY19vcGVuYCwgYGRvX29wZW5gLCBgdjlmc192ZnNfYXRvbWljX29wZW5gLCBgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bGAsIGBjZXBoX2F0b21pY19vcGVuYCwgYGZ1c2VfYXRvbWljX29wZW5gLCBgZ2ZzMl9hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuX3YyM2AsIGBjaWZzX2F0b21pY19vcGVuYCwgYW5kIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYC5cblxuUmlnaHQsIHRoZSBwb2ludCBvZiBhbGwgdGhpcyBpcyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnkgcG9pbnRzLiBPa2F5LCBpdCBsb29rcyBsaWtlIGBsb29rdXBfb3BlbmAsIGBhdG9taWNfb3BlbmAsIGFuZCBgZG9fb3BlbmAgYXJlIHN0YXRpYy4gU28gSSBjYW4ndCBiZSBzdXJlIGlmIHRoZXkgYXJlIGlubGluZWQgb3Igbm90LiBHaXZlbiB0aGVpciBzaXplLCB0aGV5IGFyZSBtb3N0IGxpa2VseSBub3QsIGJ1dCBpdCdzIGFsd2F5cyBzYWZlciB0byBjaG9vc2Ugbm9uLXN0YXRpYyBpZiBwb3NzaWJsZS4gYHBhdGhfb3BlbmF0YCBpcyBhbHNvIHN0YXRpYy4gSG93ZXZlciwgYGRvX2ZpbHBfb3BlbmAgaXMgbm9uLXN0YXRpYywgYXMgYXJlIGB2ZnNfbWtkaXJgIGFuZCBgdmZzX2NyZWF0ZWAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayBhYm91dCBgZmlsZW5hbWVfY3JlYXRlYC5cblxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjcyNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNDo1MS41MzYxMzA4MzVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MTk2NjgyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RydWN0IGRlbnRyeSBcXFxcKmZpbGVuYW1lX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uYW1laS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNDo1MS42MDAzMzU2MzdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5NTk0NDU4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiBgZmlsZW5hbWVfY3JlYXRlYCoqXG5cblJpZ2h0LCBgZmlsZW5hbWVfY3JlYXRlYOKApiB0aGF0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIE15IG1pbmQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhhdCBiZWNhdXNlIG9mIHRoZSBpbXBsaWNhdGlvbnMuIEl0IG1lYW5zIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGRlc2lnbmVkIHRvIGJlIHVzZWQgd2l0aG91dCBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIG9yIGEgY29udGV4dCB0aWVkIHRvIGEgc3BlY2lmaWMgb2JqZWN0IHN0YXRlLiBJdCdzIHByb2JhYmx5IGludGVuZGVkIGFzIGEgdXRpbGl0eSBmdW5jdGlvbiwgcGVyaGFwcyBmb3IgZ2VuZXJhdGluZyBmaWxlbmFtZXMgYmFzZWQgb24gc29tZSBzcGVjaWZpYyBjcml0ZXJpYSwgaW5kZXBlbmRlbnQgb2YgYW55IG9iamVjdCdzIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGNvbnNpZGVyIHdoYXQgdGhlIGJlc3QgYXBwcm9hY2ggdG8gd29ya2luZyB3aXRoIHRoaXMgbWlnaHQgYmUsIGNvbnNpZGVyaW5nIGl0J3Mgc3RhdGljLiBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCB0aGF0IGFwcHJvYWNoPyBEb2VzIGl0IGRlcGVuZCBvbiBnbG9iYWwgc3RhdGUsIG9yIHdpbGwgaXQgaW1wYWN0IGFueSB0ZXN0aW5nIG9yIHRocmVhZGluZyBzY2VuYXJpb3M/IEkgbmVlZCB0byB0aGluayBhYm91dCB0aGF0LCB0b28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3ODczLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTQ6NTUuNTk2MjgyNTE5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA1MTM4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWxlbmFtZV9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTUxMDc9c3RydWN0IGZpbGUgKmRvX2ZpbGVfb3Blbl9yb290KGNvbnN0IHN0cnVjdCBwYXRoICpyb290LFxcbi0tXFxuZnMvbmFtZWkuYy01MTMwLVxcbmZzL25hbWVpLmM6NTEzMTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqZmlsZW5hbWVfY3JlYXRlKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSxcXG5mcy9uYW1laS5jLTUxMzItXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBhdGggKnBhdGgsIHVuc2lnbmVkIGludCBsb29rdXBfZmxhZ3MpXFxuLS1cXG5mcy9uYW1laS5jPTUxODA9c3RydWN0IGRlbnRyeSAqc3RhcnRfY3JlYXRpbmdfcGF0aChpbnQgZGZkLCBjb25zdCBjaGFyICpwYXRobmFtZSxcXG4tLVxcbmZzL25hbWVpLmMtNTE4My1cXHRDTEFTUyhmaWxlbmFtZV9rZXJuZWwsIGZpbGVuYW1lKShwYXRobmFtZSk7XFxuZnMvbmFtZWkuYzo1MTg0OlxcdHJldHVybiBmaWxlbmFtZV9jcmVhdGUoZGZkLCBmaWxlbmFtZSwgcGF0aCwgbG9va3VwX2ZsYWdzKTtcXG5mcy9uYW1laS5jLTUxODUtfVxcbi0tXFxuZnMvbmFtZWkuYz01MjA3PWlubGluZSBzdHJ1Y3QgZGVudHJ5ICpzdGFydF9jcmVhdGluZ191c2VyX3BhdGgoXFxuLS1cXG5mcy9uYW1laS5jLTUyMTEtXFx0Q0xBU1MoZmlsZW5hbWUsIGZpbGVuYW1lKShwYXRobmFtZSk7XFxuZnMvbmFtZWkuYzo1MjEyOlxcdHJldHVybiBmaWxlbmFtZV9jcmVhdGUoZGZkLCBmaWxlbmFtZSwgcGF0aCwgbG9va3VwX2ZsYWdzKTtcXG5mcy9uYW1laS5jLTUyMTMtfVxcbi0tXFxuZnMvbmFtZWkuYz01MzYyPWludCBmaWxlbmFtZV9ta25vZGF0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW1vZGVfdCBtb2RlLFxcbi0tXFxuZnMvbmFtZWkuYy01Mzc1LXJldHJ5OlxcbmZzL25hbWVpLmM6NTM3NjpcXHRkZW50cnkgPSBmaWxlbmFtZV9jcmVhdGUoZGZkLCBuYW1lLCBcXHUwMDI2cGF0aCwgbG9va3VwX2ZsYWdzKTtcXG5mcy9uYW1laS5jLTUzNzctXFx0aWYgKElTX0VSUihkZW50cnkpKVxcbi0tXFxuZnMvbmFtZWkuYz01NTExPWludCBmaWxlbmFtZV9ta2RpcmF0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW1vZGVfdCBtb2RlKVxcbi0tXFxuZnMvbmFtZWkuYy01NTE5LXJldHJ5OlxcbmZzL25hbWVpLmM6NTUyMDpcXHRkZW50cnkgPSBmaWxlbmFtZV9jcmVhdGUoZGZkLCBuYW1lLCBcXHUwMDI2cGF0aCwgbG9va3VwX2ZsYWdzKTtcXG5mcy9uYW1laS5jLTU1MjEtXFx0aWYgKElTX0VSUihkZW50cnkpKVxcbi0tXFxuZnMvbmFtZWkuYz01ODg1PWludCBmaWxlbmFtZV9zeW1saW5rYXQoc3RydWN0IGZpbGVuYW1lICpmcm9tLCBpbnQgbmV3ZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKnRvKVxcbi0tXFxuZnMvbmFtZWkuYy01ODk2LXJldHJ5OlxcbmZzL25hbWVpLmM6NTg5NzpcXHRkZW50cnkgPSBmaWxlbmFtZV9jcmVhdGUobmV3ZGZkLCB0bywgXFx1MDAyNnBhdGgsIGxvb2t1cF9mbGFncyk7XFxuZnMvbmFtZWkuYy01ODk4LVxcdGlmIChJU19FUlIoZGVudHJ5KSlcXG4tLVxcbmZzL25hbWVpLmM9NjAzMz1pbnQgZmlsZW5hbWVfbGlua2F0KGludCBvbGRkZmQsIHN0cnVjdCBmaWxlbmFtZSAqb2xkLFxcbi0tXFxuZnMvbmFtZWkuYy02MDYwLVxcbmZzL25hbWVpLmM6NjA2MTpcXHRuZXdfZGVudHJ5ID0gZmlsZW5hbWVfY3JlYXRlKG5ld2RmZCwgbmV3LCBcXHUwMDI2bmV3X3BhdGgsXFxuZnMvbmFtZWkuYy02MDYyLVxcdFxcdFxcdFxcdFxcdChob3cgXFx1MDAyNiBMT09LVVBfUkVWQUwpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTQ6NTUuNjQzMzM2MDI2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjEyNDUzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEZ1bmN0aW9uIFZpc2liaWxpdHkgaW4gdGhlIEZpbGUgU3lzdGVtKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZmlsZSBzeXN0ZW0gZnVuY3Rpb25zIGFuZCB0YWtpbmcgc3RvY2sgb2YgdGhlaXIgZGVjbGFyYXRpb24uIEl0J3MgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGV5J3JlIGV4cG9zZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBMZXQncyBzZWUuLi4gSSd2ZSBub3RlZCB0aGF0IGBmaWxlbmFtZV9jcmVhdGVgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBSaWdodCwgbWVhbmluZyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gaXRzIGNvbXBpbGF0aW9uIHVuaXQuIEZpbmUsIGludGVybmFsIGhlbHBlciBvciBzb21ldGhpbmcsIEknbGwga2VlcCB0aGF0IGluIG1pbmQuXG5cblRoZW4gSSBzZWUgYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYW5kIGBkb19maWxwX29wZW5gLCBhbGwgbm9uLXN0YXRpYy4gVGhvc2UgZnVuY3Rpb25zIGFyZSBleHBvc2VkIGFuZCBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBwcm9iYWJseSBldmVuIGZyb20gdXNlcnNwYWNlIGluZGlyZWN0bHkuIFNlZW1zIHJpZ2h0LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGlzIGBkb19zeXNfb3BlbmF0MmAgZnVuY3Rpb24uIEkgdGhpbmsgSSd2ZSBnb3QgaXQgbWFya2VkIGRvd24gYXMgbm9uLXN0YXRpYyBhcyB3ZWxsLiBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoYXQsIHRob3VnaCwgc2luY2UgaXRzIHZpc2liaWxpdHkgaXMgY3J1Y2lhbCB0byBkZXRlcm1pbmluZyBob3cgYXBwbGljYXRpb25zIGludGVyYWN0IHdpdGggdGhlIHN5c3RlbSBjYWxsLiBOZWVkIHRvIGJlIGNlcnRhaW4gb24gdGhhdCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODMyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTQ6NTkuOTA0NTgzNzQxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODAzNDY3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19zeXNfb3BlbmF0MlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vcGVuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb3Blbi5jPTE0MTY9RVhQT1JUX1NZTUJPTChmaWxlX29wZW5fcm9vdCk7XFxuZnMvb3Blbi5jLTE0MTctXFxuZnMvb3Blbi5jOjE0MTg6c3RhdGljIGludCBkb19zeXNfb3BlbmF0MihpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsXFxuZnMvb3Blbi5jLTE0MTktXFx0XFx0XFx0ICBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdylcXG4tLVxcbmZzL29wZW4uYz0xNDMwPWludCBkb19zeXNfb3BlbihpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIGludCBmbGFncywgdW1vZGVfdCBtb2RlKVxcbi0tXFxuZnMvb3Blbi5jLTE0MzItXFx0c3RydWN0IG9wZW5faG93IGhvdyA9IGJ1aWxkX29wZW5faG93KGZsYWdzLCBtb2RlKTtcXG5mcy9vcGVuLmM6MTQzMzpcXHRyZXR1cm4gZG9fc3lzX29wZW5hdDIoZGZkLCBmaWxlbmFtZSwgXFx1MDAyNmhvdyk7XFxuZnMvb3Blbi5jLTE0MzQtfVxcbi0tXFxuZnMvb3Blbi5jPTE0NTI9U1lTQ0FMTF9ERUZJTkU0KG9wZW5hdDIsIGludCwgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCBmaWxlbmFtZSxcXG4tLVxcbmZzL29wZW4uYy0xNDc1LVxcbmZzL29wZW4uYzoxNDc2OlxcdHJldHVybiBkb19zeXNfb3BlbmF0MihkZmQsIGZpbGVuYW1lLCBcXHUwMDI2dG1wKTtcXG5mcy9vcGVuLmMtMTQ3Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE2OjE0OjU5Ljk1MjYyMzQ2OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTU2ODY4NTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgRnVuY3Rpb24gVmlzaWJpbGl0eSoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoZXNlIGtlcm5lbCBmdW5jdGlvbnMgYW5kIHRoZWlyIHNjb3BlLiBJIHNlZSB0aGF0IGBkb19zeXNfb3BlbmF0MmAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLCB3aGljaCBtZWFucyBpdHMgdmlzaWJpbGl0eSBpcyByZXN0cmljdGVkIHRvIHRoZSBmaWxlIGl0J3MgZGVmaW5lZCBpbi4gVGhhdCdzIGEgY29tbW9uIHBhdHRlcm4sIGtlZXBpbmcgaW50ZXJuYWwgaGVscGVycyBoaWRkZW4uIEluIGNvbnRyYXN0LCBgZG9fc3lzX29wZW5gLCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgdmZzX2xvb2t1cF9vcGVuYCwgYGRlbnRyeV9jcmVhdGVgLCBgZmlsZW5hbWVfdW5saW5rYXRgLCBhbmQgYGZpbGVuYW1lX3JlbmFtZWF0MmAgYXJlIGFsbCBub24tc3RhdGljLiBUaGlzIGluZGljYXRlcyB0aGV5IGFyZSBleHBvc2VkIGZvciB1c2UgYnkgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhlaXIgYnJvYWRlciBzY29wZSBzdWdnZXN0cyB0aGV5J3JlIGxpa2VseSBwYXJ0IG9mIHRoZSBWRlMgQVBJIG9yIGF0IGxlYXN0IGNvcmUgZmlsZXN5c3RlbSBmdW5jdGlvbmFsaXR5IHRoYXQncyBtZWFudCB0byBiZSBjYWxsZWQgZnJvbSBlbHNld2hlcmUuIE5vdywgSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGBkZW50cnlfY3JlYXRlYC4gTGV0J3MgZGlnIGRlZXBlciBpbnRvIHRoYXQgb25lIGFuZCBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgb3ZlcmFsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ3NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNTowNS4xMDk0OTQ4NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzNzk1NDYyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZW50cnlfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25hbWVpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmFtZWkuYz01MjE0PUVYUE9SVF9TWU1CT0woc3RhcnRfY3JlYXRpbmdfdXNlcl9wYXRoKTtcXG4tLVxcbmZzL25hbWVpLmMtNTIxNi0vKipcXG5mcy9uYW1laS5jOjUyMTc6ICogZGVudHJ5X2NyZWF0ZSAtIENyZWF0ZSBhbmQgb3BlbiBhIGZpbGVcXG5mcy9uYW1laS5jLTUyMTgtICogQHBhdGg6IHBhdGggdG8gY3JlYXRlXFxuLS1cXG5mcy9uYW1laS5jLTUyMzItICovXFxuZnMvbmFtZWkuYzo1MjMzOnN0cnVjdCBmaWxlICpkZW50cnlfY3JlYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSxcXG5mcy9uYW1laS5jLTUyMzQtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQpXFxuLS1cXG5mcy9uYW1laS5jLTUyODgtfVxcbmZzL25hbWVpLmM6NTI4OTpFWFBPUlRfU1lNQk9MKGRlbnRyeV9jcmVhdGUpO1xcbmZzL25hbWVpLmMtNTI5MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6MDYuNDQ3NDU0NDAzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzODA0NTQwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGaWxlc3lzdGVtIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIGBkZW50cnlfY3JlYXRlYCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGEgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2ssIGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgbW9kdWxlLiBUaGF0IHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYmV0dGVyLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHdoZXJlIGl0J3MgdXNlZC4gQmFzZWQgb24gdGhhdCBJIGltbWVkaWF0ZWx5IHdhbnQgdG8gc2VlIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGF0IGZ1bmN0aW9uIGFuZCBvdGhlcnMuIEEgZ29vZCBwbGFjZSB0byBsb29rIGZvciB0aGF0IGNvbm5lY3Rpb24gaXMgYHZmc19sb29rdXBfb3BlbmAuIFRoYXQgZnVuY3Rpb24gZGVhbHMgd2l0aCwgd2VsbCwgbG9va2luZyB1cCBhbmQgb3BlbmluZyBmaWxlcywgc28gaXQncyBhIGxpa2VseSBjYW5kaWRhdGUgdG8gaW50ZXJhY3Qgd2l0aCBkZW50cmllcy4gTGV0J3Mgc2VlIGhvdyBgZGVudHJ5X2NyZWF0ZWAgaXMgYWN0dWFsbHkgdXRpbGl6ZWQgd2l0aGluIHRoYXQgY29udGV4dC4gSSBleHBlY3QgYSBnb29kIHZpZXcgb2YgaG93IHRoaXMgYWxsIGFjdHVhbGx5IHdvcmtzIHRvZ2V0aGVyLiBJJ20gZ29pbmcgdG8gbG9vayBhdCBob3cgdGhhdCBmdW5jdGlvbiBtYXkgdXRpbGl6ZSB0aGUgZGVudHJ5IGNhY2hlLCBhbmQgaG93IHRoYXQgY2FjaGUgaXMgY3JlYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMzUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNToxNS44Mjc5MTA4MTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MzUxNjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmc19sb29rdXBfb3BlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uYW1laS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25hbWVpLmM9NDQ5Nz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuZnMvbmFtZWkuYy00Njc1LS8qKlxcbmZzL25hbWVpLmM6NDY3NjogKiB2ZnNfbG9va3VwX29wZW4gLSBvcGVuIGFuZCBwb3NzaWJseSBjcmVhdGUgYSByZWd1bGFyIGZpbGVcXG5mcy9uYW1laS5jLTQ2NzctICogQHBhcmVudDogZGlyZWN0b3J5IHRvIGNvbnRhaW4gZmlsZVxcbi0tXFxuZnMvbmFtZWkuYy00Njk3LSAqL1xcbmZzL25hbWVpLmM6NDY5ODpzdHJ1Y3QgZmlsZSAqdmZzX2xvb2t1cF9vcGVuKHN0cnVjdCBwYXRoICpwYXJlbnQsIHN0cnVjdCBxc3RyICpsYXN0LFxcbmZzL25hbWVpLmMtNDY5OS1cXHRcXHRcXHQgICAgIGludCBvcGVuX2ZsYWcsIHVtb2RlX3QgbW9kZSlcXG4tLVxcbmZzL25hbWVpLmMtNDc2OC19XFxuZnMvbmFtZWkuYzo0NzY5OkVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModmZzX2xvb2t1cF9vcGVuLCBcXFwibmZzZFxcXCIpO1xcbmZzL25hbWVpLmMtNDc3MC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6MTUuOTAzMjY5MTczWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NjEzOTc2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWaXJ0dWFsIEZpbGVzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBgdmZzX2xvb2t1cF9vcGVuYCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBJdCdzIGV4cG9ydGVkLCBzbyBpdCdzIGEga2V5IGZ1bmN0aW9uIGluIHRoZSBWRlMuIE5vdywgSSdtIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgZnVuY3Rpb25zIGFuZCBob3cgdGhpbmdzIGludGVyYWN0LCBhbmQgbXkgbWluZCBuYXR1cmFsbHkganVtcHMgdG8gYHZmc19ta2RpcmAuIFNpbmNlIEknbSB3b3JraW5nIHdpdGggdGhlIFZGUyBhbmQgaXRzIHZhcmlvdXMgb3BlcmF0aW9ucywgYG1rZGlyYCBpcyBhIGZ1bmRhbWVudGFsIG9uZS4gTGV0J3Mgc2VlIGhvdyBgdmZzX21rZGlyYCBpbnRlcmFjdHMgd2l0aCBgdmZzX2xvb2t1cF9vcGVuYCBhbmQgaG93IHRoZSBkaXJlY3RvcnkgY3JlYXRpb24gcHJvY2VzcyBpcyBpbXBsZW1lbnRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiBsb29raW5nIHVwIGEgZmlsZS9kaXJlY3RvcnkgKG9wZW4pIGFuZCBjcmVhdGluZyBhIGRpcmVjdG9yeSAobWtkaXIpLCBhbmQgaG93IHRoZXkgYXJlIGludGVncmF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTM0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6MTkuNzY0NjY5Mjc4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDcyOTU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZnNfbWtkaXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTQ0Nzk9c3RhdGljIGlubGluZVxcbmZzL25hbWVpLmM6NDQ4MDpzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICosIHN0cnVjdCBpbm9kZSAqLFxcbmZzL25hbWVpLmMtNDQ4MS1cXHRcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqLCB1bW9kZV90LFxcbi0tXFxuZnMvbmFtZWkuYz00NDk3PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9uYW1laS5jLTQ2MzYtXFx0aWYgKGNyZWF0ZV9kaXIpIHtcXG5mcy9uYW1laS5jOjQ2Mzc6XFx0XFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LFxcbmZzL25hbWVpLmMtNDYzOC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgbW9kZSwgXFx1MDAyNmRlbGVnYXRlZF9pbm9kZSk7XFxuLS1cXG5mcy9uYW1laS5jPTUxODY9RVhQT1JUX1NZTUJPTChzdGFydF9jcmVhdGluZ19wYXRoKTtcXG4tLVxcbmZzL25hbWVpLmMtNTE5NS0gKiBpZiBzdGFydF9jcmVhdGluZ19wYXRoKCkgcmV0dXJuZWQgYSBub24tZXJyb3IuXFxuZnMvbmFtZWkuYzo1MTk2OiAqIElmIHZmc19ta2RpcigpIHdhcyBjYWxsZWQgYW5kIGl0IHJldHVybmVkIGFuIGVycm9yLCB0aGF0IGVycm9yICpzaG91bGQqXFxuZnMvbmFtZWkuYy01MTk3LSAqIGJlIHBhc3NlZCB0byBlbmRfY3JlYXRpbmdfcGF0aCgpIHRvZ2V0aGVyIHdpdGggdGhlIHBhdGguXFxuLS1cXG5mcy9uYW1laS5jPTU0Mjk9c3RhdGljIGlubGluZVxcbmZzL25hbWVpLmM6NTQzMDpzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXJfbm9fcGVybShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvbmFtZWkuYy01NDMxLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmZzL25hbWVpLmMtNTQ1Ni0vKipcXG5mcy9uYW1laS5jOjU0NTc6ICogdmZzX21rZGlyIC0gY3JlYXRlIGRpcmVjdG9yeSByZXR1cm5pbmcgY29ycmVjdCBkZW50cnkgaWYgcG9zc2libGVcXG5mcy9uYW1laS5jLTU0NTgtICogQGlkbWFwOlxcdFxcdGlkbWFwIG9mIHRoZSBtb3VudCB0aGUgaW5vZGUgd2FzIGZvdW5kIGZyb21cXG4tLVxcbmZzL25hbWVpLmMtNTQ3Ny0gKi9cXG5mcy9uYW1laS5jOjU0Nzg6c3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9uYW1laS5jLTU0NzktXFx0XFx0XFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlLFxcbi0tXFxuZnMvbmFtZWkuYy01NDk3LVxcbmZzL25hbWVpLmM6NTQ5ODpcXHRkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcXG5mcy9uYW1laS5jLTU0OTktXFx0aWYgKElTX0VSUihkZSkpIHtcXG4tLVxcbmZzL25hbWVpLmMtNTUwOC19XFxuZnMvbmFtZWkuYzo1NTA5OkVYUE9SVF9TWU1CT0wodmZzX21rZGlyKTtcXG5mcy9uYW1laS5jLTU1MTAtXFxuZnMvbmFtZWkuYz01NTExPWludCBmaWxlbmFtZV9ta2RpcmF0KGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSwgdW1vZGVfdCBtb2RlKVxcbi0tXFxuZnMvbmFtZWkuYy01NTI2LVxcdGlmICghZXJyb3IpIHtcXG5mcy9uYW1laS5jOjU1Mjc6XFx0XFx0ZGVudHJ5ID0gdmZzX21rZGlyKG1udF9pZG1hcChwYXRoLm1udCksIHBhdGguZGVudHJ5LVxcdTAwM2VkX2lub2RlLFxcbmZzL25hbWVpLmMtNTUyOC1cXHRcXHRcXHRcXHQgICBkZW50cnksIG1vZGUsIFxcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNToxOS44MDk0MDIyMDNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ4NjQ4NzQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUYXJnZXRpbmcgYE9fSVNfTUtESVJgIEltcGxlbWVudGF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBgT19JU19NS0RJUmAgZmxhZ3MgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBWRlMuIGB2ZnNfbWtkaXJgIGlzIGV4cG9ydGVkLCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhbmFseXNpcywgYW5kIEkgYWxzbyBzZWUgYHZmc19jcmVhdGVgIGFzIGEgdXNlZnVsIGZvY3VzLiBJIGFsc28ga25vdyB0aGVzZSBzeW1ib2xzIGFyZSBpbXBvcnRhbnQ6IGB2ZnNfbG9va3VwX29wZW5gLCBgZGVudHJ5X2NyZWF0ZWAsIGBkb19zeXNfb3BlbmAsIGBmaWxlbmFtZV9ta2RpcmF0YCwgYGZpbGVuYW1lX3VubGlua2F0YCwgYGZpbGVuYW1lX3JlbmFtZWF0MmAsIGB2OWZzX3Zmc19hdG9taWNfb3BlbmAsIGB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsYCwgYGNlcGhfYXRvbWljX29wZW5gLCBgZ2ZzMl9hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuX3YyM2AsIGBjaWZzX2F0b21pY19vcGVuYCwgYHZib3hzZl9kaXJfYXRvbWljX29wZW5gLlxuXG5XYWl0LCBob2xkIG9uLiBgZG9fc3lzX29wZW5gIGlzIGEgKnZlcnkqIGhvdCBwYXRoLiBGdXp6aW5nIHRoYXQgaGVhdmlseSBtaWdodCBjb21wbGV0ZWx5IHRocm93IG9mZiBhbnkgZGlzdHJpYnV0aW9uIG1ldHJpY3MgSSdtIHRyeWluZyB0byBnYXRoZXIuIFRoZSBwcm9tcHQgaXMgc3BlY2lmaWNhbGx5IHRlbGxpbmcgbWUgdG8gYXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gYXZvaWQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucywgc28gSSBuZWVkIHRvIGJlIG1vcmUgc2VsZWN0aXZlLiBgdmZzX21rZGlyYCBhbmQgYHZmc19jcmVhdGVgIGFyZSBhbHNvIHNvbWV3aGF0IGhvdCwgYnV0IHRoZXkgYXJlIG1vcmUgc3BlY2lmaWMgdGhhbiBgZG9fc3lzX29wZW5gLiBgdmZzX2xvb2t1cF9vcGVuYCBpcyBzcGVjaWZpYyB0byBuZnNkLCBhbmQgYGRlbnRyeV9jcmVhdGVgIGlzIHNwZWNpZmljIHRvIGNlcnRhaW4gY29kZSBwYXRocy4gVGhlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgYGF0b21pY19vcGVuYCBmdW5jdGlvbnMgYXJlIGlkZWFsIGJlY2F1c2UgdGhleSBhcmUgbW9kaWZpZWQgdG8gaGFuZGxlIGBPX0lTX01LRElSKGZsYWdzKWAuXG5cblNvLCBsZXQncyBmb2N1cyBvbiB0aG9zZSBmaWxlc3lzdGVtLXNwZWNpZmljIGBhdG9taWNfb3BlbmAgZnVuY3Rpb25zOlxuKiAgIGB2OWZzX3Zmc19hdG9taWNfb3BlbmBcbiogICBgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bGBcbiogICBgY2VwaF9hdG9taWNfb3BlbmBcbiogICBgZ2ZzMl9hdG9taWNfb3BlbmBcbiogICBgbmZzX2F0b21pY19vcGVuYFxuKiAgIGBuZnNfYXRvbWljX29wZW5fdjIzYFxuKiAgIGBjaWZzX2F0b21pY19vcGVuYFxuKiAgIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYFxuXG5Ob3csIGJlZm9yZSBJIGNvbW1pdCB0byB0aGVzZSwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgYmUgcmVxdWlyZWQuIFRoZSBjb3JlIHBhcnQgb2YgdGhlIGZlYXR1cmUgaXMgVkZTLCBzbyBubyBzcGVjaWFsIGNvbmZpZyBpcyBuZWVkZWQgdGhlcmUuIEJ1dCBmb3IgdGhlIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb25zLCBJIHNlZTogYE5FVF85UGAsIGBDRVBIX0ZTYCwgYEZVU0VfRlNgLCBgR0ZTMl9GU2AsIGBORlNfRlNgLCBgQ0lGU2AsIGFuZCBgVkJPWFNGX0ZTYC4gSSdsbCBuZWVkIHRvIHZlcmlmeSB0aG9zZSBjb25maWcgb3B0aW9ucyBhcmUgZW5hYmxlZCBmb3IgZWFjaCBvZiB0aGVzZSBmaWxlc3lzdGVtcyB0byBlbnN1cmUgdGhleSBhcmUgYXZhaWxhYmxlIGZvciB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU1OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNToyOS4yOTU4OTE3MjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzU2MzExMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVkJPWFNGX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Zib3hzZi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Zib3hzZi9LY29uZmlnOjE6Y29uZmlnIFZCT1hTRl9GU1xcbmZzL3Zib3hzZi9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWxCb3ggZ3Vlc3Qgc2hhcmVkIGZvbGRlciAodmJveHNmKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNToyOS40MTM0NjE1MjZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5Mjk2NjU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk15IEltbWVkaWF0ZSBBc3Nlc3NtZW50KipcblxuQWgsIHJpZ2h0LiBUaGUgcHJvbXB0IGlzIGluY3JlZGlibHkgc3VjY2luY3QuIFdoZW4gSSBzZWUganVzdCBcImBWQk9YU0ZfRlNgLFwiIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gdGhlIGltcGxpY2F0aW9uLiBHaXZlbiB0aGUgY29udGV4dCAob3IgbGFjayB0aGVyZW9mLCB3aGljaCBpcyBhbHNvIHRlbGxpbmchKSwgaXQgc2VlbXMgc29tZW9uZSBpcyBsaWtlbHkgcmVmZXJyaW5nIHRvIHRoZSBWaXJ0dWFsQm94IFNoYXJlZCBGb2xkZXJzIEZpbGVzeXN0ZW0uIFRoZXJlJ3Mgbm8gcm9vbSBmb3IgYW1iaWd1aXR5IGhlcmUuIFRoZSBicmV2aXR5IGl0c2VsZiBpcyB0aGUga2V5IC0gaXQncyBhIGNvbmZpcm1hdGlvbiwgYW4gYWdyZWVtZW50LCBvciBwZXJoYXBzIGEgZGVjbGFyYXRpb24uIEl04oCZcyB0aGUgZmlsZXN5c3RlbSB1c2VkIHRvIHNoYXJlIGZvbGRlcnMgYmV0d2VlbiBhIFZpcnR1YWxCb3ggaG9zdCBhbmQgZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbXMuIEl0J3MgY29uY2lzZSBiZWNhdXNlIHRoZXJlJ3MgbGl0dGxlIGVsc2UgdG8gc2F5LiBJdCdzIGEgc3RhbmRhcmQgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIHRoZSBub2QgaXMgZW5vdWdoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc1OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6MzQuMDA2NDMxMzk5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTYyNTEwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgOVBfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvOXAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy85cC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvOXAvS2NvbmZpZzoyOmNvbmZpZyA5UF9GU1xcbmZzLzlwL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiUGxhbiA5IFJlc291cmNlIFNoYXJpbmcgU3VwcG9ydCAoOVAyMDAwKVxcXCJcXG4tLVxcbmZzLzlwL0tjb25maWc9MTQ9aWYgOVBfRlNcXG5mcy85cC9LY29uZmlnOjE1OmNvbmZpZyA5UF9GU0NBQ0hFXFxuZnMvOXAvS2NvbmZpZy0xNi1cXHRib29sIFxcXCJFbmFibGUgOVAgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmZzLzlwL0tjb25maWctMjItXFxuZnMvOXAvS2NvbmZpZzoyMzpjb25maWcgOVBfRlNfUE9TSVhfQUNMXFxuZnMvOXAvS2NvbmZpZy0yNC1cXHRib29sIFxcXCI5UCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzLzlwL0tjb25maWc9MzI9ZW5kaWZcXG4tLVxcbmZzLzlwL0tjb25maWctMzQtXFxuZnMvOXAvS2NvbmZpZzozNTpjb25maWcgOVBfRlNfU0VDVVJJVFlcXG5mcy85cC9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIjlQIFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6MzQuMDUyMDU5Nzg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Mzk1MzU5OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlcyoqXG5cbkFscmlnaHQsIHNvIHRoZSBrZXkgaGVyZSBpcyB0aGF0IGA5UF9GU2AgaXMgdGhlIGNvbmZpZyB3ZSdyZSBkZWFsaW5nIHdpdGguIEtub3dpbmcgdGhhdCBpcyB0aGUgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnQuIEV2ZXJ5dGhpbmcgZmxvd3MgZnJvbSB0aGVyZSwgYW5kIHVuZGVyc3RhbmRpbmcgdGhhdCBjb25maWd1cmF0aW9uIGlzIHRoZSBmb3VuZGF0aW9uYWwgZWxlbWVudCB0aGF0IHdpbGwgaW5mbHVlbmNlIHRoZSBuZXh0IHN0ZXBzLiBJIG5lZWQgdG8ga2VlcCB0aGlzIHNwZWNpZmljIGNvbmZpZyBpbiBtaW5kIGFzIEkgcHJvY2VlZCB3aXRoIGFueSBzdWJzZXF1ZW50IGFuYWx5c2lzIG9yIGFjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyNDMsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNTozNy45OTE1OTg1MzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjIxMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRVBIX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NlcGgvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jZXBoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9jZXBoL0tjb25maWc6Mjpjb25maWcgQ0VQSF9GU1xcbmZzL2NlcGgvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDZXBoIGRpc3RyaWJ1dGVkIGZpbGUgc3lzdGVtXFxcIlxcbi0tXFxuZnMvY2VwaC9LY29uZmlnPTE5PWlmIENFUEhfRlNcXG5mcy9jZXBoL0tjb25maWc6MjA6Y29uZmlnIENFUEhfRlNDQUNIRVxcbmZzL2NlcGgvS2NvbmZpZy0yMS1cXHRib29sIFxcXCJFbmFibGUgQ2VwaCBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvY2VwaC9LY29uZmlnPTI3PWVuZGlmXFxuZnMvY2VwaC9LY29uZmlnLTI4LVxcbmZzL2NlcGgvS2NvbmZpZzoyOTpjb25maWcgQ0VQSF9GU19QT1NJWF9BQ0xcXG5mcy9jZXBoL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiQ2VwaCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2NlcGgvS2NvbmZpZy0zOC1cXG5mcy9jZXBoL0tjb25maWc6Mzk6Y29uZmlnIENFUEhfRlNfU0VDVVJJVFlfTEFCRUxcXG5mcy9jZXBoL0tjb25maWctNDAtXFx0Ym9vbCBcXFwiQ2VwaEZTIFNlY3VyaXR5IExhYmVsc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6MzguMDQ4MjIzMTM3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNDI0NTQyNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgYXMgYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHN1bW1hcnk6XG5cbioqVGhpbmtpbmcgQWJvdXQgQ2VwaEZTIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBDZXBoRlMsIGFuZCB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpdGVtIHRoYXQncyBjb21pbmcgdG8gbWluZCBpcyB0aGUgYENFUEhfRlNgIHNldHRpbmcuIFRoYXQncyB0aGUga2V5LiBJIGltbWVkaWF0ZWx5IGtub3cgd2UncmUgbm90IGp1c3QgZGlzY3Vzc2luZyBDZXBoIGdlbmVyYWxseSwgYnV0IGRyaWxsaW5nIGRvd24gdG8gaXRzIGZpbGVzeXN0ZW0gaW1wbGVtZW50YXRpb24uIFRoaXMgbWVhbnMgd2UncmUgbGlrZWx5IGluIHRoZSB3ZWVkcyBvZiBtb3VudGluZywgdHVuaW5nLCBvciB0cm91Ymxlc2hvb3RpbmcgYSBDZXBoRlMgaW5zdGFuY2UuIFdlJ3JlIGVpdGhlciBleGFtaW5pbmcgaG93IGl0J3MgZGVmaW5lZCwgaG93IGl0J3MgYmVoYXZpbmcsIG9yIGhvdyBpdCBpcyBpbXBsZW1lbnRlZC4gSSBwcm9iYWJseSBuZWVkIHNvbWUgY29udGV4dCBhcm91bmQgdGhhdCBzZXR0aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGlzc3VlLCBhcyB3ZWxsIGFzIHRoZSBzdXJyb3VuZGluZyBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2MjUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNTo0My4zOTA2Nzk4NjJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NDgwNDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGVVNFX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2Z1c2UvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9mdXNlL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9mdXNlL0tjb25maWc6Mjpjb25maWcgRlVTRV9GU1xcbmZzL2Z1c2UvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJGVVNFIChGaWxlc3lzdGVtIGluIFVzZXJzcGFjZSkgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6NDMuNDYwMTY3OTQ2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMTAwMDM2MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDb25maWd1cmluZyB0aGUgRmlsZXN5c3RlbSBJbnRlcmZhY2UqKlxuXG5SaWdodCwgYEZVU0VfRlNgLiBUaGF0J3MgdGhlIGtleS4gVGhhdCdzIHRoZSBjb25maWd1cmF0aW9uIHBvaW50IGZvciB0aGUgRmlsZSBTeXN0ZW0gaW4gVXNlciBTcGFjZSwgb3IgRlVTRSBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLCBJJ20gd29ya2luZyB3aXRoLiBJdCBpbW1lZGlhdGVseSBmb2N1c2VzIG1lIG9uIGhvdyB0aGUgd2hvbGUgdGhpbmcgaXMgc2V0IHVwLCB3aGF0IHBhcmFtZXRlcnMgYXJlIGF2YWlsYWJsZSwgYW5kIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMuIEFtIEkgZGVhbGluZyB3aXRoIGEgc2ltcGxlIHBhc3N0aHJvdWdoIGZpbGVzeXN0ZW0sIHNvbWV0aGluZyB3aXRoIGNhY2hpbmcsIG9yIGEgbW9yZSBjb21wbGV4IGRpc3RyaWJ1dGVkIGRlc2lnbj8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgdXNlci1zcGFjZS9rZXJuZWwtc3BhY2UgYm91bmRhcnkgd2l0aCB0aGlzIHNldHRpbmc/IFVuZGVyc3RhbmRpbmcgdGhpcyBjb25maWcsIHRoZSBgRlVTRV9GU2Agc2V0dGluZywgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciByZWFsbHkgZGlnZ2luZyBpbnRvIHRoZSBkZXRhaWxzLCBhbmQgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcywgb2YgdGhpcyB0aGluZy4gSXQncyB0aGUgbHluY2hwaW4sIHRoZSBwbGFjZSB3aGVyZSBhbGwgdGhlIHBpZWNlcyBjb21lIHRvZ2V0aGVyIHRvIGRlZmluZSB0aGUgYmVoYXZpb3IuIEl0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg5NiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE2OjE1OjQ3LjQ3MDE3Mzc0MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzNDMwOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEdGUzJfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZ2ZzMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2dmczIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2dmczIvS2NvbmZpZzoyOmNvbmZpZyBHRlMyX0ZTXFxuZnMvZ2ZzMi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkdGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL2dmczIvS2NvbmZpZy0yNi1cXG5mcy9nZnMyL0tjb25maWc6Mjc6Y29uZmlnIEdGUzJfRlNfTE9DS0lOR19ETE1cXG5mcy9nZnMyL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiR0ZTMiBETE0gbG9ja2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6NDcuNTE1NTE4ODg4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzM4NzcxNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipHRlMyIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIHRoZSBjb25maWd1cmF0aW9uIGZvciBHRlMyLiBUaGlua2luZyBhYm91dCB0aGlzLCBgR0ZTMl9GU2AgaXMgdGhlIGtleS4gVGhhdCBpbXBsaWVzIHdlJ3JlIGdvaW5nIHRvIGRpdmUgaW50byB0aGUgc3BlY2lmaWMgZmlsZXN5c3RlbSBwYXJhbWV0ZXJzLCBwcmVzdW1hYmx5IHRocm91Z2ggYSBjb25maWd1cmF0aW9uIGZpbGUsIGNvbW1hbmQtbGluZSBmbGFncywgb3IgcG9zc2libHkgZXZlbiBhIGRlZGljYXRlZCBtYW5hZ2VtZW50IHRvb2wuIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgZmFtaWxpYXIgYXNwZWN0czogYmxvY2sgc2l6ZSwgam91cm5hbCBvcHRpb25zLCBxdW90YSBzZXR0aW5ncyAoaWYgYXBwbGljYWJsZSksIG1vdW50IG9wdGlvbnMsIGFuZCBhbnkgc3BlY2lmaWMgR0ZTMiB0dW5hYmxlIHBhcmFtZXRlcnMgdGhhdCBtaWdodCBiZSByZWxldmFudCBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9yIHNwZWNpZmljIHVzZSBjYXNlcy4gSSdtIHdvbmRlcmluZyBpZiB0aGlzIGlzIGEgbmV3IGRlcGxveW1lbnQsIGFuIGV4aXN0aW5nIHN5c3RlbSBiZWluZyB0dW5lZCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIENvbnRleHQgaXMgYWx3YXlzIGtleS4gTGV0J3Mgc2VlIHdoYXQgZnVydGhlciBkZXRhaWwgd2UgYXJlIHdvcmtpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQyODEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNTo1My4zNDkzOTg1OTZaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTQ2ODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORlNfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9uZnMvS2NvbmZpZzoyOmNvbmZpZyBORlNfRlNcXG5mcy9uZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJORlMgY2xpZW50IHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9uZnMvS2NvbmZpZz0xNjI9Y29uZmlnIFJPT1RfTkZTXFxuLS1cXG5mcy9uZnMvS2NvbmZpZy0xNzItXFxuZnMvbmZzL0tjb25maWc6MTczOmNvbmZpZyBORlNfRlNDQUNIRVxcbmZzL25mcy9LY29uZmlnLTE3NC1cXHRib29sIFxcXCJQcm92aWRlIE5GUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNTo1My40MTA1NTA1ODdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE3NzM2OTAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50LCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipSZWZsZWN0aW5nIG9uIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzLi4uIFwiTkZTX0ZTXCIuIEl0J3MgYSBjb25maWd1cmF0aW9uIGl0ZW0sIGEga2V5IG9uZSwgbm8gZG91YnQuIFRoZSBzcGVjaWZpYyBuYW1pbmcgY29udmVudGlvbiBpbW1lZGlhdGVseSB0ZWxscyBtZSBpdOKAmXMgcmVsYXRlZCB0byBOZXR3b3JrIEZpbGUgU3lzdGVtLCB0aGUgdW5kZXJseWluZyBmaWxlIHN5c3RlbSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQgYXMgSSBwcm9jZXNzIHRoZSBvdGhlciBjb21wb25lbnRzLiBJdCBzaWduYWxzIGEgZm91bmRhdGlvbmFsIGFzcGVjdCBvZiBzdG9yYWdlIGFuZCBhY2Nlc3MuIE9rYXksIEknbSBub3RpbmcgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uOyBJIHdpbGwgbmVlZCB0byBkZWx2ZSBkZWVwZXIgaW50byBpdHMgc2V0dGluZ3MgYW5kIGludGVyYWN0aW9ucy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lLCBpdCBtaWdodCBiZSBhYm91dCBtb3VudGluZyBwb2ludHMsIGV4cG9ydCBjb25maWd1cmF0aW9ucywgdmVyc2lvbiBuZWdvdGlhdGlvbiwgc2VjdXJpdHkgb3B0aW9ucywgdGhlIHdvcmtzLiBUaGlzIHNpbmdsZSBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgXCJORlNfRlMsXCIgd2lsbCBuZWVkIHRvIGJlIGNyb3NzLXJlZmVyZW5jZWQgd2l0aCBhbGwgdGhlIHJlc3Qgb2YgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjQ5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6NTguNTg3OTIyNTFaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4Nzc2MjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDSUZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9zbWIvY2xpZW50L0tjb25maWc6Mjpjb25maWcgQ0lGU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUIzIGFuZCBDSUZTIHN1cHBvcnQgKGFkdmFuY2VkIG5ldHdvcmsgZmlsZXN5c3RlbSlcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctNTMtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjU0OmNvbmZpZyBDSUZTX1NUQVRTMlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01NS1cXHRib29sIFxcXCJFeHRlbmRlZCBzdGF0aXN0aWNzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTY3LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo2ODpjb25maWcgQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjktXFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2UgbGVzcyBzZWN1cmUgZGlhbGVjdHNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctODItXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjgzOmNvbmZpZyBDSUZTX1VQQ0FMTFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy04NC1cXHRib29sIFxcXCJLZXJiZXJvcy9TUE5FR08gYWR2YW5jZWQgc2Vzc2lvbiBzZXR1cFxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05MS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6OTI6Y29uZmlnIENJRlNfWEFUVFJcXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTMtXFx0Ym9vbCBcXFwiQ0lGUyBleHRlbmRlZCBhdHRyaWJ1dGVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwNi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTA3OmNvbmZpZyBDSUZTX1BPU0lYXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJDSUZTIFBPU0lYIEV4dGVuc2lvbnNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTE4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMTk6Y29uZmlnIENJRlNfREVCVUdcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTIwLVxcdGJvb2wgXFxcIkVuYWJsZSBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjctXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjEyODpjb25maWcgQ0lGU19ERUJVRzJcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTI5LVxcdGJvb2wgXFxcIkVuYWJsZSBhZGRpdGlvbmFsIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEzOC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTM5OmNvbmZpZyBDSUZTX0RFQlVHX0RVTVBfS0VZU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDAtXFx0Ym9vbCBcXFwiRHVtcCBlbmNyeXB0aW9uIGtleXMgZm9yIG9mZmxpbmUgZGVjcnlwdGlvbiAoVW5zYWZlKVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDgtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE0OTpjb25maWcgQ0lGU19ERlNfVVBDQUxMXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE1MC1cXHRib29sIFxcXCJERlMgZmVhdHVyZSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE2MS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTYyOmNvbmZpZyBDSUZTX1NXTl9VUENBTExcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYzLVxcdGJvb2wgXFxcIlNXTiBmZWF0dXJlIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTcyLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNzM6Y29uZmlnIENJRlNfTkZTRF9FWFBPUlRcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkFsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW1cXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc9MTc5PWlmIENJRlNcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTgwLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxODE6Y29uZmlnIENJRlNfU01CX0RJUkVDVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODItXFx0Ym9vbCBcXFwiU01CIERpcmVjdCBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5MC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTkxOmNvbmZpZyBDSUZTX0ZTQ0FDSEVcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkyLVxcdGJvb2wgXFxcIlByb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5OC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTk5OmNvbmZpZyBDSUZTX1JPT1RcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjAwLVxcdGJvb2wgXFxcIlNNQiByb290IGZpbGUgc3lzdGVtIChFeHBlcmltZW50YWwpXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwNi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MjA3OmNvbmZpZyBDSUZTX0NPTVBSRVNTSU9OXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTTUIgbWVzc2FnZSBjb21wcmVzc2lvbiAoRXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTU6NTguNjM2NzA1ODg3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDQ3MjIyMDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQXRvbWljIERpcmVjdG9yeSBDcmVhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgaW50cm9kdWNpbmcgYSBuZXcgYXRvbWljIGRpcmVjdG9yeSBjcmVhdGlvbiBmZWF0dXJlIHZpYSBgb3BlbmF0KClgLCB1c2luZyBgT19DUkVBVCB8IE9fRElSRUNUT1JZYC4gVGhpcyBpcyBhIHByZXR0eSBpbnRlcmVzdGluZyBhZGRpdGlvbiwgYXMgYXRvbWljYWxseSBjcmVhdGluZyBkaXJlY3RvcmllcyBoYXMgb2Z0ZW4gYmVlbiBhIGJpdCBvZiBhIHRyaWNreSBhcmVhLlxuXG5UaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFyZSBgOVBfRlNgLCBgQ0VQSF9GU2AsIGBGVVNFX0ZTYCwgYEdGUzJfRlNgLCBgTkZTX0ZTYCwgYENJRlNgLCBhbmQgYFZCT1hTRl9GU2Ag4oCTIHRob3NlIGFyZSB0aGUgZmlsZXN5c3RlbXMgdGhhdCBhcmUgYmVpbmcgdXBkYXRlZCB0byBzdXBwb3J0IHRoaXMgbmV3IGF0b21pYyBvcGVuIG9wZXJhdGlvbi4gSSdtIG5vdGluZyB0aGF0IGJlY2F1c2UgaXQgZ2l2ZXMgbWUgYSBjbGVhciBpZGVhIG9mIHdoaWNoIHN1YnN5c3RlbXMgYXJlIGFmZmVjdGVkLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBrZXkgY2hhbmdlIGlzIGluIGhvdyB0aGUgVkZTIGludGVyYWN0cyB3aXRoIGBPX0NSRUFUYCBhbmQgYE9fSVNfTUtESVIoZmxhZ3MpYC4gU3BlY2lmaWNhbGx5LCBpZiBgT19JU19NS0RJUihmbGFncylgIGlzIHRydWUgKG1lYW5pbmcgd2UncmUgdHJ5aW5nIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSksIHRoZW4gYE9fQ1JFQVRgIGlzIGNsZWFyZWQuIFRoZSByYXRpb25hbGUgaXMgdGhhdCBgYXRvbWljX29wZW5gIGltcGxlbWVudGF0aW9ucyBvZnRlbiBkb24ndCBzdXBwb3J0IGRpcmVjdG9yeSBjcmVhdGlvbiBkaXJlY3RseS4gVGhpcyBtZWFucyB0aGV5IGNhbiBmYWxsIGJhY2sgdG8gdGhlIHN0YW5kYXJkIGxvb2t1cCBwcm9jZXNzLCBhbmQgYG1rZGlyYCB3aWxsIGJlIGNhbGxlZCBpbnN0ZWFkIG9mIGBjcmVhdGVgLiBUaGlzIG1ha2VzIGEgbG90IG9mIHNlbnNlLCBrZWVwaW5nIHRoZSBiZWhhdmlvciBpbiBsaW5lIHdpdGggd2hhdCBhIGRldmVsb3BlciB3b3VsZCBleHBlY3QuXG5cbk5vdywgdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYC4gVGhvc2UgYXJlIHRoZSBmaWxlcyBJJ2xsIHdhbnQgdG8gZm9jdXMgb24gd2hlbiBJJ20gYXNzZXNzaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcy4gVGhlIGtleSBmdW5jdGlvbnMgdG8gbG9vayBhdCBhcmUgdGhlIGNvcmUgVkZTIGZ1bmN0aW9uczogYHZmc19ta2RpcmAsIGB2ZnNfY3JlYXRlYCwgYHZmc19sb29rdXBfb3BlbmAsIGBkZW50cnlfY3JlYXRlYCwgYGZpbGVuYW1lX21rZGlyYXRgLCBgZmlsZW5hbWVfdW5saW5rYXRgLCBhbmQgYGZpbGVuYW1lX3JlbmFtZWF0MmAuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIGhvdyB0aGVzZSBmdW5jdGlvbnMgaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbi5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCBgZmlsZW5hbWVfbWtkaXJhdGAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGFuZCBgZmlsZW5hbWVfcmVuYW1lYXQyYCBhcmUgKm5vdCogc3RhdGljLCBzbyB0aGV5J3JlIGFjY2Vzc2libGUgb3V0c2lkZSB0aGVpciByZXNwZWN0aXZlIGZpbGVzLiBHb29kLiBJIGFsc28gY2hlY2tlZCB0aGF0IGBPX01LRElSX01BU0tgIGlzbid0IHVzZWQgYW55d2hlcmUgZWxzZSwgd2hpY2ggZnVydGhlciBpc29sYXRlcyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZS5cblxuRnJvbSBhIHRlc3RpbmcgcGVyc3BlY3RpdmUsIHRoZSBpbXBsaWNhdGlvbnMgYXJlIHByZXR0eSBjbGVhcjogdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGtlcm5lbCBsb2dpYywgYW5kIGl0IG5lZWRzIGhlYXZ5IGZ1enppbmcuIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0aG9zZSBjb3JlIFZGUyBmdW5jdGlvbnMsIGFsb25nIHdpdGggdGhlaXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdXBkYXRlZCBmaWxlc3lzdGVtcycgYGF0b21pY19vcGVuYCBpbXBsZW1lbnRhdGlvbnMsIHN1Y2ggYXMgYHY5ZnNfdmZzX2F0b21pY19vcGVuYCwgYGNlcGhfYXRvbWljX29wZW5gLCBldGMuIEknbSBnb2luZyB0byBhZGQgdGhlc2UgdG8gbXkgbGlzdCBvZiBzeW1ib2xzIHRvIGludmVzdGlnYXRlIG1vcmUgdGhvcm91Z2hseS5cblxuU28sIGluIHN1bW1hcnksIHRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcsIGFsYmVpdCBzdWJ0bGUsIGF0b21pYyBkaXJlY3RvcnkgY3JlYXRpb24gZmVhdHVyZSB1c2luZyBhbiBleGlzdGluZyBmbGFnLiBUaGUgVkZTIGFuZCBhIHNlcmllcyBvZiBmaWxlc3lzdGVtIGRyaXZlcnMgd2lsbCBuZWVkIHRvIGJlIGxvb2tlZCBhdCBjbG9zZWx5IHRvIGFuYWx5emUgYmVoYXZpb3IgYW5kIHRlc3QgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5MjMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTY6MDguNjgzOTMwNjY0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgxOTc1NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInY5ZnNfdmZzX2F0b21pY19vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzLzlwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy85cC92ZnNfaW5vZGUuYz01Nzk9djlmc19jcmVhdGUoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcywgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy85cC92ZnNfaW5vZGUuYy02NDgtICpcXG5mcy85cC92ZnNfaW5vZGUuYzo2NDk6ICogb3BlbiguLiwgT19DUkVBVCkgaXMgaGFuZGxlZCBpbiB2OWZzX3Zmc19hdG9taWNfb3BlbigpLiAgVGhpcyBpcyBvbmx5IGNhbGxlZFxcbmZzLzlwL3Zmc19pbm9kZS5jLTY1MC0gKiBmb3IgbWtub2QoMikuXFxuLS1cXG5mcy85cC92ZnNfaW5vZGUuYz03Njc9c3RhdGljIGludFxcbmZzLzlwL3Zmc19pbm9kZS5jOjc2ODp2OWZzX3Zmc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzLzlwL3Zmc19pbm9kZS5jLTc2OS1cXHRcXHQgICAgIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVtb2RlX3QgbW9kZSlcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZS5jPTEzNjg9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHY5ZnNfZGlyX2lub2RlX29wZXJhdGlvbnNfZG90dSA9IHtcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZS5jLTEzNzAtXFx0Lmxvb2t1cCA9IHY5ZnNfdmZzX2xvb2t1cCxcXG5mcy85cC92ZnNfaW5vZGUuYzoxMzcxOlxcdC5hdG9taWNfb3BlbiA9IHY5ZnNfdmZzX2F0b21pY19vcGVuLFxcbmZzLzlwL3Zmc19pbm9kZS5jLTEzNzItXFx0LnN5bWxpbmsgPSB2OWZzX3Zmc19zeW1saW5rLFxcbi0tXFxuZnMvOXAvdmZzX2lub2RlLmM9MTM4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZS5jLTEzODUtXFx0Lmxvb2t1cCA9IHY5ZnNfdmZzX2xvb2t1cCxcXG5mcy85cC92ZnNfaW5vZGUuYzoxMzg2OlxcdC5hdG9taWNfb3BlbiA9IHY5ZnNfdmZzX2F0b21pY19vcGVuLFxcbmZzLzlwL3Zmc19pbm9kZS5jLTEzODctXFx0LnVubGluayA9IHY5ZnNfdmZzX3VubGluayxcXG4tLVxcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmM9MjI1PXN0YXRpYyBpbnRcXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jOjIyNjp2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYy0yMjctXFx0XFx0XFx0ICBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGZsYWdzLCB1bW9kZV90IG9tb2RlKVxcbi0tXFxuZnMvOXAvdmZzX2lub2RlX2RvdGwuYz05NjQ9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9uc19kb3RsID0ge1xcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmMtOTY1LVxcdC5jcmVhdGUgPSB2OWZzX3Zmc19jcmVhdGVfZG90bCxcXG5mcy85cC92ZnNfaW5vZGVfZG90bC5jOjk2NjpcXHQuYXRvbWljX29wZW4gPSB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsLFxcbmZzLzlwL3Zmc19pbm9kZV9kb3RsLmMtOTY3LVxcdC5sb29rdXAgPSB2OWZzX3Zmc19sb29rdXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE2OjE2OjA5Ljg2NTkxMDk5MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTA4NzYyMzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldyBWRlMgRmVhdHVyZSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBuZXcgcGF0Y2guIFRoZXNlIGF0b21pYyBvcGVuIGZ1bmN0aW9ucywgdGhleSdyZSBzdGF0aWMgYnV0IGxpbmtlZCB0byBgaW5vZGVfb3BlcmF0aW9ucy1cdTAwM2VhdG9taWNfb3BlbmAuIFRoYXQgbWVhbnMgdGhleSdyZSBub3QgaW5saW5lZCwgd2hpY2ggaXMgZ29vZCDigJMgdGhleSBoYXZlIHRoZWlyIG93biBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBQZXJmZWN0LiBJJ2xsIGRlZmluaXRlbHkgYWRkIHRoZXNlIHRvIHRoZSBGb2N1c1N5bWJvbHMgbGlzdDsgYGNlcGhfYXRvbWljX29wZW5gLCBgZ2ZzMl9hdG9taWNfb3BlbmAsIGFuZCB0aGUgb3RoZXJzIGFyZSBjcnVjaWFsIGZvciBmdXp6aW5nIHRoaXMuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgcmV2aWV3IHRob3NlIEZvY3VzU3ltYm9scyB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJJ3ZlIGdvdCBgdmZzX21rZGlyYCwgYHZmc19jcmVhdGVgLCBgdmZzX2xvb2t1cF9vcGVuYCwgYGRlbnRyeV9jcmVhdGVgLCBgZmlsZW5hbWVfbWtkaXJhdGAsIGBmaWxlbmFtZV91bmxpbmthdGAsIGFuZCBgZmlsZW5hbWVfcmVuYW1lYXQyYC4gVGhlbiB0aGVyZSBhcmUgdGhlIHNwZWNpZmljIGZpbGVzeXN0ZW0gZnVuY3Rpb25zOiBgdjlmc192ZnNfYXRvbWljX29wZW5gLCBgdjlmc192ZnNfYXRvbWljX29wZW5fZG90bGAsIGBjZXBoX2F0b21pY19vcGVuYCwgYGZ1c2VfYXRvbWljX29wZW5gLCBgZ2ZzMl9hdG9taWNfb3BlbmAsIGBuZnNfYXRvbWljX29wZW5gLCBgbmZzX2F0b21pY19vcGVuX3YyM2AsIGBjaWZzX2F0b21pY19vcGVuYCwgYW5kIGB2Ym94c2ZfZGlyX2F0b21pY19vcGVuYC4gWWVwLCB0aGF0IGxvb2tzIGNvbXByZWhlbnNpdmUuXG5cbk5vdywganVzdCBjaGVja2luZyB0aGUgY29uZmlncy4uLiBgOVBfRlNgLCBgQ0VQSF9GU2AsIGBGVVNFX0ZTYCwgYEdGUzJfRlNgLCBgTkZTX0ZTYCwgYENJRlNgLCBhbmQgYFZCT1hTRl9GU2AuIEFsbCB0aGUgcmVsZXZhbnQgZmlsZXN5c3RlbXMgYXJlIGNvdmVyZWQuXG5cblllYWgsIEkgdGhpbmsgdGhpcyBpcyBzb2xpZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSB0aGF0IG1vZGlmaWVzIHRoZSBjb3JlIFZGUyBsb2dpYyAqYW5kKiBzZXZlcmFsIGZpbGVzeXN0ZW1zLiBDb25zaWRlcmluZyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgdGhpcyBpcyBhYnNvbHV0ZWx5IHByaW1lIGZ1enppbmcgbWF0ZXJpYWwuIEl0J3MgYSBoaWdoLWltcGFjdCBhcmVhIHdpdGggYSBsb3Qgb2YgcG90ZW50aWFsIGZvciBpbnRlcmVzdGluZyB2dWxuZXJhYmlsaXRpZXMuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd2UgbmVlZCB0byBwcmlvcml0aXplLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODA2NCwiT3V0cHV0VG9rZW5zIjozMjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTY6MTguOTc0Njc1NTNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTkzOTYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiOVBfRlNcIixcbiAgICBcIkNFUEhfRlNcIixcbiAgICBcIkZVU0VfRlNcIixcbiAgICBcIkdGUzJfRlNcIixcbiAgICBcIk5GU19GU1wiLFxuICAgIFwiQ0lGU1wiLFxuICAgIFwiVkJPWFNGX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX21rZGlyXCIsXG4gICAgXCJ2ZnNfY3JlYXRlXCIsXG4gICAgXCJ2ZnNfbG9va3VwX29wZW5cIixcbiAgICBcImRlbnRyeV9jcmVhdGVcIixcbiAgICBcImZpbGVuYW1lX21rZGlyYXRcIixcbiAgICBcImZpbGVuYW1lX3VubGlua2F0XCIsXG4gICAgXCJmaWxlbmFtZV9yZW5hbWVhdDJcIixcbiAgICBcInY5ZnNfdmZzX2F0b21pY19vcGVuXCIsXG4gICAgXCJ2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsXCIsXG4gICAgXCJjZXBoX2F0b21pY19vcGVuXCIsXG4gICAgXCJmdXNlX2F0b21pY19vcGVuXCIsXG4gICAgXCJnZnMyX2F0b21pY19vcGVuXCIsXG4gICAgXCJuZnNfYXRvbWljX29wZW5cIixcbiAgICBcIm5mc19hdG9taWNfb3Blbl92MjNcIixcbiAgICBcImNpZnNfYXRvbWljX29wZW5cIixcbiAgICBcInZib3hzZl9kaXJfYXRvbWljX29wZW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAgZm9yIGBvcGVuYXQoKWAgdG8gYXRvbWljYWxseSBjcmVhdGUgYSBkaXJlY3RvcnkgYW5kIHJldHVybiBhIGZpbGUgZGVzY3JpcHRvci4gSXQgbW9kaWZpZXMgY29yZSBWRlMgcGF0aCByZXNvbHV0aW9uIGFuZCBjcmVhdGlvbiBsb2dpYyBpbiBgZnMvbmFtZWkuY2AgYW5kIGBmcy9vcGVuLmNgLCBhbmQgdXBkYXRlcyBzZXZlcmFsIGZpbGVzeXN0ZW1zJyBgYXRvbWljX29wZW5gIGltcGxlbWVudGF0aW9ucyB0byBoYW5kbGUgdGhlIG5ldyBmbGFnIGNvbWJpbmF0aW9uLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIjlQX0ZTXCIsXG4gICAgXCJDRVBIX0ZTXCIsXG4gICAgXCJGVVNFX0ZTXCIsXG4gICAgXCJHRlMyX0ZTXCIsXG4gICAgXCJORlNfRlNcIixcbiAgICBcIkNJRlNcIixcbiAgICBcIlZCT1hTRl9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19ta2RpclwiLFxuICAgIFwidmZzX2NyZWF0ZVwiLFxuICAgIFwidmZzX2xvb2t1cF9vcGVuXCIsXG4gICAgXCJkZW50cnlfY3JlYXRlXCIsXG4gICAgXCJmaWxlbmFtZV9ta2RpcmF0XCIsXG4gICAgXCJmaWxlbmFtZV91bmxpbmthdFwiLFxuICAgIFwiZmlsZW5hbWVfcmVuYW1lYXQyXCIsXG4gICAgXCJ2OWZzX3Zmc19hdG9taWNfb3BlblwiLFxuICAgIFwidjlmc192ZnNfYXRvbWljX29wZW5fZG90bFwiLFxuICAgIFwiY2VwaF9hdG9taWNfb3BlblwiLFxuICAgIFwiZnVzZV9hdG9taWNfb3BlblwiLFxuICAgIFwiZ2ZzMl9hdG9taWNfb3BlblwiLFxuICAgIFwibmZzX2F0b21pY19vcGVuXCIsXG4gICAgXCJuZnNfYXRvbWljX29wZW5fdjIzXCIsXG4gICAgXCJjaWZzX2F0b21pY19vcGVuXCIsXG4gICAgXCJ2Ym94c2ZfZGlyX2F0b21pY19vcGVuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGBPX0NSRUFUIHwgT19ESVJFQ1RPUllgIGZvciBgb3BlbmF0KClgIHRvIGF0b21pY2FsbHkgY3JlYXRlIGEgZGlyZWN0b3J5IGFuZCByZXR1cm4gYSBmaWxlIGRlc2NyaXB0b3IuIEl0IG1vZGlmaWVzIGNvcmUgVkZTIHBhdGggcmVzb2x1dGlvbiBhbmQgY3JlYXRpb24gbG9naWMgaW4gYGZzL25hbWVpLmNgIGFuZCBgZnMvb3Blbi5jYCwgYW5kIHVwZGF0ZXMgc2V2ZXJhbCBmaWxlc3lzdGVtcycgYGF0b21pY19vcGVuYCBpbXBsZW1lbnRhdGlvbnMgdG8gaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbi4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTY6MTkuMDU0NjIxMTA4WiIsIlNlcSI6MzksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg2MzA0MzczNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE2OjE2OjE5LjA1NTA2MzY4OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNDg2MjU5NzY0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBWRlMgYW5kIHZhcmlvdXMgZmlsZXN5c3RlbXMgdG8gc3VwcG9ydCBjcmVhdGluZyBkaXJlY3RvcmllcyB2aWEgYG9wZW5hdCgpYCB3aXRoIHRoZSBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCBmbGFncy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgYWRkaW5nIHRoZSBgT19JU19NS0RJUmAgbWFjcm8sIG1vZGlmeWluZyBgYnVpbGRfb3Blbl9mbGFncygpYCB0byBoYW5kbGUgdGhlIG5ldyBmbGFnIGNvbWJpbmF0aW9uLCBhbmQgdXBkYXRpbmcgYGxvb2t1cF9vcGVuKClgIGFuZCBgdmZzX21rZGlyKClgIHBhdGhzIGluIGBmcy9uYW1laS5jYCB0byByb3V0ZSBkaXJlY3RvcnkgY3JlYXRpb24gcmVxdWVzdHMgdG8gYHZmc19ta2Rpcl9ub19wZXJtKClgIGluc3RlYWQgb2YgcmVndWxhciBmaWxlIGNyZWF0aW9uIGZ1bmN0aW9ucy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgbG9naWNhbCwgYWx0ZXJpbmcgY29udHJvbCBmbG93IGFuZCBmbGFnIGhhbmRsaW5nIHdpdGhpbiB0aGUgVkZTIGxheWVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbGwgdmFyaWFibGVzIHVzZWQgKHN1Y2ggYXMgYGRlbGVnYXRlZF9pbm9kZWApIGFyZSBwcm9wZXJseSB6ZXJvLWluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkNjk3NGYyZGFlMDNhMzE0ZWVkY2QyMjUxNDllMTI2YjY2MDk0YjRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMTY6MTQ6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy85cC92ZnNfaW5vZGUuYyBiL2ZzLzlwL3Zmc19pbm9kZS5jXG5pbmRleCAzODI5NTU0Y2EzNjkyLi5iMWUwODIzYzg3YjU3IDEwMDY0NFxuLS0tIGEvZnMvOXAvdmZzX2lub2RlLmNcbisrKyBiL2ZzLzlwL3Zmc19pbm9kZS5jXG5AQCAtNzc2LDYgKzc3Niw5IEBAIHY5ZnNfdmZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0aW50IHA5X29tb2RlO1xuIFxuK1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdjlmc192ZnNfbG9va3VwKGRpciwgZGVudHJ5LCAwKTtcbiBcdFx0aWYgKHJlcyB8fCBkX3JlYWxseV9pc19wb3NpdGl2ZShkZW50cnkpKVxuZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZV9kb3RsLmMgYi9mcy85cC92ZnNfaW5vZGVfZG90bC5jXG5pbmRleCAxMTZiMjllOTVmMjFlLi42NGUwYWJhMDhkYTE2IDEwMDY0NFxuLS0tIGEvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuKysrIGIvZnMvOXAvdmZzX2lub2RlX2RvdGwuY1xuQEAgLTIzOCw2ICsyMzgsOSBAQCB2OWZzX3Zmc19hdG9taWNfb3Blbl9kb3RsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRzdHJ1Y3Qgdjlmc19zZXNzaW9uX2luZm8gKnY5c2VzO1xuIFx0c3RydWN0IHBvc2l4X2FjbCAqcGFjbCA9IE5VTEwsICpkYWNsID0gTlVMTDtcbiBcbitcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChkX2luX2xvb2t1cChkZW50cnkpKSB7XG4gXHRcdHN0cnVjdCBkZW50cnkgKnJlcyA9IHY5ZnNfdmZzX2xvb2t1cChkaXIsIGRlbnRyeSwgMCk7XG4gXHRcdGlmIChyZXMgfHwgZF9yZWFsbHlfaXNfcG9zaXRpdmUoZGVudHJ5KSlcbmRpZmYgLS1naXQgYS9mcy9jZXBoL2ZpbGUuYyBiL2ZzL2NlcGgvZmlsZS5jXG5pbmRleCBhNGEyYTRiNmEwMjdkLi42MjE2M2I3ZWNhNWY5IDEwMDY0NFxuLS0tIGEvZnMvY2VwaC9maWxlLmNcbisrKyBiL2ZzL2NlcGgvZmlsZS5jXG5AQCAtODEyLDYgKzgxMiw5IEBAIGludCBjZXBoX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgICAgICBkaXIsIGNlcGhfdmlub3AoZGlyKSwgZGVudHJ5LCBkZW50cnksXG4gXHQgICAgICBkX3VuaGFzaGVkKGRlbnRyeSkgPyBcInVuaGFzaGVkXCIgOiBcImhhc2hlZFwiLCBmbGFncywgbW9kZSk7XG4gXG4rXHRpZiAoT19JU19NS0RJUihmbGFncykpXG4rXHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4gXHUwMDNlIE5BTUVfTUFYKVxuIFx0XHRyZXR1cm4gLUVOQU1FVE9PTE9ORztcbiBcbmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuY1xuaW5kZXggZDRlMDAyOTgxMGMwZi4uNTVkNTg0NGUyNjU1OSAxMDA2NDRcbi0tLSBhL2ZzL2Z1c2UvZGlyLmNcbisrKyBiL2ZzL2Z1c2UvZGlyLmNcbkBAIC05MzUsNiArOTM1LDkgQEAgc3RhdGljIGludCBmdXNlX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICplbnRyeSxcbiBcdHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwID0gZmlsZV9tbnRfaWRtYXAoZmlsZSk7XG4gXHRzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oZGlyKTtcbiBcbitcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0ZmxhZ3MgXHUwMDI2PSB+T19DUkVBVDtcbitcbiBcdGlmIChmdXNlX2lzX2JhZChkaXIpKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbmRpZmYgLS1naXQgYS9mcy9nZnMyL2lub2RlLmMgYi9mcy9nZnMyL2lub2RlLmNcbmluZGV4IGYzNjE4NzZjNTU4MzMuLjNlZTEzNjBmMWJjMjcgMTAwNjQ0XG4tLS0gYS9mcy9nZnMyL2lub2RlLmNcbisrKyBiL2ZzL2dmczIvaW5vZGUuY1xuQEAgLTEzODYsNiArMTM4Niw5IEBAIHN0YXRpYyBpbnQgZ2ZzMl9hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIHtcbiBcdGJvb2wgZXhjbCA9ICEhKGZsYWdzIFx1MDAyNiBPX0VYQ0wpO1xuIFxuK1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqZCA9IF9fZ2ZzMl9sb29rdXAoZGlyLCBkZW50cnksIGZpbGUpO1xuIFx0XHRpZiAoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX09QRU5FRCkge1xuZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jXG5pbmRleCAyMGE2NTM0ZWEzZWZmLi5lMWE4ZjE4Mzg1YTUyIDEwMDY0NFxuLS0tIGEvZnMvbmFtZWkuY1xuKysrIGIvZnMvbmFtZWkuY1xuQEAgLTEzODIsMTMgKzEzODIsMTMgQEAgaW50IG1heV9saW5rYXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpsaW5rKVxuIFxuIC8qKlxuICAqIG1heV9jcmVhdGVfaW5fc3RpY2t5IC0gQ2hlY2sgd2hldGhlciBhbiBPX0NSRUFUIG9wZW4gaW4gYSBzdGlja3kgZGlyZWN0b3J5XG4tICpcdFx0XHQgIHNob3VsZCBiZSBhbGxvd2VkLCBvciBub3QsIG9uIGZpbGVzIHRoYXQgYWxyZWFkeVxuLSAqXHRcdFx0ICBleGlzdC5cbisgKlx0XHRcdCAgc2hvdWxkIGJlIGFsbG93ZWQsIG9yIG5vdCwgb24gZmlsZXMvZGlyZWN0b3JpZXMgdGhhdFxuKyAqXHRcdFx0ICBhbHJlYWR5IGV4aXN0LlxuICAqIEBpZG1hcDogaWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuICAqIEBuZDogbmFtZWlkYXRhIHBhdGh3YWxrIGRhdGFcbiAgKiBAaW5vZGU6IHRoZSBpbm9kZSBvZiB0aGUgZmlsZSB0byBvcGVuXG4gICpcbi0gKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZSkgd2hlbjpcbisgKiBCbG9jayBhbiBPX0NSRUFUIG9wZW4gb2YgYSBGSUZPIChvciBhIHJlZ3VsYXIgZmlsZS9kaXJlY3RvcnkpIHdoZW46XG4gICogICAtIHN5c2N0bF9wcm90ZWN0ZWRfZmlmb3MgKG9yIHN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcikgaXMgZW5hYmxlZFxuICAqICAgLSB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0c1xuICAqICAgLSB3ZSBhcmUgaW4gYSBzdGlja3kgZGlyZWN0b3J5XG5AQCAtMTQxNiw2ICsxNDE2LDE0IEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0aWYgKGxpa2VseSghKGRpcl9tb2RlIFx1MDAyNiBTX0lTVlRYKSkpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0LypcbitcdCAqIFRoZXJlIGlzIG5vIHNlcGFyYXRlIHN5c2N0bCBmb3IgZGlyZWN0b3J5IGNyZWF0aW9uIGluIHN0aWNreVxuK1x0ICogZm9sZGVycy4gVGhlcmVmb3JlLCBmb3IgdGhlIFNfSVNESVIgY2FzZSwgZGlzYWJsaW5nXG4rXHQgKiBzeXNjdGxfcHJvdGVjdGVkX3JlZ3VsYXIgaXMgbm90IGVub3VnaCB0byBhbGxvdyBjcmVhdGluZyBhXG4rXHQgKiBkaXJlY3RvcnkgaW4gYSBzdGlja3kgZm9sZGVyLCBiZWNhdXNlIHRoYXQgbWF5IHN1cnByaXNlIHVzZXJzXG4rXHQgKiBub3QgZXhwZWN0aW5nIHRoYXQgT19DUkVBVHxPX0RJUkVDVE9SWSBpcyBwb3NzaWJsZSBvbiBuZXdlclxuK1x0ICoga2VybmVscy5cbitcdCAqL1xuIFx0aWYgKFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgIXN5c2N0bF9wcm90ZWN0ZWRfcmVndWxhcilcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTQ0Nyw2ICsxNDU1LDEyIEBAIHN0YXRpYyBpbnQgbWF5X2NyZWF0ZV9pbl9zdGlja3koc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBuYW1laWRhdGEgKm5kLFxuIFx0XHRcdFx0XHQgICAgICBcInN0aWNreV9jcmVhdGVfcmVndWxhclwiKTtcbiBcdFx0XHRyZXR1cm4gLUVBQ0NFUztcbiBcdFx0fVxuK1xuK1x0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4rXHRcdFx0YXVkaXRfbG9nX3BhdGhfZGVuaWVkKEFVRElUX0FOT01fQ1JFQVQsXG4rXHRcdFx0XHRcdCAgICAgIFwic3RpY2t5X2NyZWF0ZV9kaXJcIik7XG4rXHRcdFx0cmV0dXJuIC1FQUNDRVM7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiAwO1xuQEAgLTI3ODEsOSArMjc5NSwxNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqcGF0aF9pbml0KHN0cnVjdCBuYW1laWRhdGEgKm5kLCB1bnNpZ25lZCBmbGFncylcbiBcdHJldHVybiBzO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgdHJhaWxpbmdfc2xhc2hlcyhjb25zdCBzdHJ1Y3QgcXN0ciAqbGFzdClcbit7XG4rXHQvKiBsYXN0LVx1MDAzZWxlbiBpcyBzZXQgYnkgaGFzaF9uYW1lKCkgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudFxuK1x0ICogY29tcG9uZW50IC1cdTAwM2VuYW1lLCB0ZXJtaW5hdGluZyB3aXRoICcvJyBvciBhIE5VTCBjaGFyYWN0ZXIuICovXG4rXHRyZXR1cm4gKGJvb2wpbGFzdC1cdTAwM2VuYW1lW2xhc3QtXHUwMDNlbGVuXTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpsb29rdXBfbGFzdChzdHJ1Y3QgbmFtZWlkYXRhICpuZClcbiB7XG4tXHRpZiAobmQtXHUwMDNlbGFzdF90eXBlID09IExBU1RfTk9STSBcdTAwMjZcdTAwMjYgbmQtXHUwMDNlbGFzdC5uYW1lW25kLVx1MDAzZWxhc3QubGVuXSlcbitcdGlmIChuZC1cdTAwM2VsYXN0X3R5cGUgPT0gTEFTVF9OT1JNIFx1MDAyNlx1MDAyNiB0cmFpbGluZ19zbGFzaGVzKFx1MDAyNm5kLVx1MDAzZWxhc3QpKVxuIFx0XHRuZC1cdTAwM2VmbGFncyB8PSBMT09LVVBfRk9MTE9XIHwgTE9PS1VQX0RJUkVDVE9SWTtcbiBcbiBcdHJldHVybiB3YWxrX2NvbXBvbmVudChuZCwgV0FMS19UUkFJTElORyk7XG5AQCAtNDE1OSw2ICs0MTgwLDI0IEBAIHN0YXRpYyBpbmxpbmUgdW1vZGVfdCB2ZnNfcHJlcGFyZV9tb2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0cmV0dXJuIG1vZGU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmVcbitpbnQgdmZzX2NyZWF0ZV9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4rXHRcdCAgICAgICB1bW9kZV90IG1vZGUsIHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgKmRpKVxuK3tcbitcdHN0cnVjdCBpbm9kZSAqZGlyID0gZF9pbm9kZShkZW50cnktXHUwMDNlZF9wYXJlbnQpO1xuK1x0aW50IGVycm9yO1xuK1xuK1x0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdHJldHVybiBlcnJvcjtcbitcbitcdGVycm9yID0gZGlyLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRpZiAoIWVycm9yKVxuK1x0XHRmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpO1xuK1xuK1x0cmV0dXJuIGVycm9yO1xuK31cbitcbiAvKipcbiAgKiB2ZnNfY3JlYXRlIC0gY3JlYXRlIG5ldyBmaWxlXG4gICogQGlkbWFwOlx0aWRtYXAgb2YgdGhlIG1vdW50IHRoZSBpbm9kZSB3YXMgZm91bmQgZnJvbVxuQEAgLTQxOTEsMTMgKzQyMzAsOCBAQCBpbnQgdmZzX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsXG4gXHRlcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbi1cdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGkpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRyZXR1cm4gZXJyb3I7XG4tXHRlcnJvciA9IGRpci1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUpO1xuLVx0aWYgKCFlcnJvcilcbi1cdFx0ZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTtcbi1cdHJldHVybiBlcnJvcjtcbitcbitcdHJldHVybiB2ZnNfY3JlYXRlX25vX3Blcm0oaWRtYXAsIGRlbnRyeSwgbW9kZSwgZGkpO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHZmc19jcmVhdGUpO1xuIFxuQEAgLTQzMTQsMjEgKzQzNDgsNDEgQEAgc3RhdGljIGlubGluZSBpbnQgb3Blbl90b19uYW1laV9mbGFncyhpbnQgZmxhZylcbiBcbiBzdGF0aWMgaW50IG1heV9vX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHRjb25zdCBzdHJ1Y3QgcGF0aCAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tXHRcdFx0dW1vZGVfdCBtb2RlKVxuK1x0XHRcdGludCBvcGVuX2ZsYWcsIHVtb2RlX3QgbW9kZSlcbiB7XG4tXHRpbnQgZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlLCAwKTtcbitcdHN0cnVjdCBpbm9kZSAqZGlyX2lub2RlID0gZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX2lub2RlO1xuK1x0Ym9vbCBjcmVhdGVfZGlyID0gT19JU19NS0RJUihvcGVuX2ZsYWcpO1xuK1x0aW50IGVycm9yO1xuK1xuK1x0aWYgKGNyZWF0ZV9kaXIpXG4rXHRcdGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7XG4rXHRlbHNlXG4rXHRcdGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcbiBcdGlmICghZnN1aWRnaWRfaGFzX21hcHBpbmcoZGlyLVx1MDAzZWRlbnRyeS1cdTAwM2VkX3NiLCBpZG1hcCkpXG4gXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuIFxuLVx0ZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGUsXG4tXHRcdFx0XHQgTUFZX1dSSVRFIHwgTUFZX0VYRUMpO1xuK1x0ZXJyb3IgPSBpbm9kZV9wZXJtaXNzaW9uKGlkbWFwLCBkaXJfaW5vZGUsIE1BWV9XUklURSB8IE1BWV9FWEVDKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFxuLVx0cmV0dXJuIHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXItXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4rXHRpZiAoY3JlYXRlX2RpcilcbitcdFx0ZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9ta2RpcihkaXJfaW5vZGUsIGRlbnRyeSwgbW9kZSk7XG4rXHRlbHNlXG4rXHRcdGVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpcl9pbm9kZSwgZGVudHJ5LCBtb2RlKTtcbitcbitcdHJldHVybiBlcnJvcjtcbit9XG4rXG4rc3RhdGljIGlubGluZSB1bW9kZV90IG9fY3JlYXRlX21vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4rXHRcdGNvbnN0IHN0cnVjdCBpbm9kZSAqZGlyLCBpbnQgb3Blbl9mbGFnLCB1bW9kZV90IG1vZGUpXG4re1xuK1x0aWYgKE9fSVNfTUtESVIob3Blbl9mbGFnKSlcbitcdFx0cmV0dXJuIHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpciwgbW9kZSwgU19JUldYVUdPIHwgU19JU1ZUWCwgU19JRkRJUik7XG4rXHRlbHNlXG4rXHRcdHJldHVybiB2ZnNfcHJlcGFyZV9tb2RlKGlkbWFwLCBkaXIsIG1vZGUsIFNfSUFMTFVHTywgU19JRlJFRyk7XG4gfVxuIFxuIC8qKlxuQEAgLTQzNjQsOCArNDQxOCw5IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICphdG9taWNfb3Blbihjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5XG4gXG4gXHRmaWxlLVx1MDAzZV9fZl9wYXRoLmRlbnRyeSA9IERFTlRSWV9OT1RfU0VUO1xuIFx0ZmlsZS1cdTAwM2VfX2ZfcGF0aC5tbnQgPSBwYXRoLVx1MDAzZW1udDtcbitcbiBcdGVycm9yID0gZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlYXRvbWljX29wZW4oZGlyX2lub2RlLCBkZW50cnksIGZpbGUsXG4tXHRcdFx0XHQgICAgICAgb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpLCBtb2RlKTtcbitcdFx0XHRcdFx0ICAgICBvcGVuX3RvX25hbWVpX2ZsYWdzKG9wZW5fZmxhZyksIG1vZGUpO1xuIFx0ZF9sb29rdXBfZG9uZShkZW50cnkpO1xuIFxuIFx0aWYgKCFlcnJvcikge1xuQEAgLTQ0MTAsMTAgKzQ0NjUsMjEgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmF0b21pY19vcGVuKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnlcbiBcdFx0fVxuIFx0XHRkcHV0KGRlbnRyeSk7XG4gXHRcdGRlbnRyeSA9IEVSUl9QVFIoZXJyb3IpO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxuK1x0XHRcdGZzbm90aWZ5X2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSk7XG4rXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKVxuK1x0XHRcdGZzbm90aWZ5X29wZW4oZmlsZSk7XG4gXHR9XG4rXG4rXG4gXHRyZXR1cm4gZGVudHJ5O1xuIH1cbiBcbitzdGF0aWMgaW5saW5lXG4rc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyX25vX3Blcm0oc3RydWN0IG1udF9pZG1hcCAqLCBzdHJ1Y3QgaW5vZGUgKixcbitcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QsXG4rXHRcdFx0XHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqKTtcbiAvKlxuICAqIExvb2sgdXAgYW5kIG1heWJlIGNyZWF0ZSBhbmQgb3BlbiB0aGUgbGFzdCBjb21wb25lbnQuXG4gICpcbkBAIC00NDM1LDYgKzQ1MDEsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXA7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkaXIgPSBuZC1cdTAwM2VwYXRoLmRlbnRyeTtcbiBcdHN0cnVjdCBpbm9kZSAqZGlyX2lub2RlID0gZGlyLVx1MDAzZWRfaW5vZGU7XG4rXHRib29sIGNyZWF0ZV9kaXIgPSBPX0lTX01LRElSKG9wLVx1MDAzZW1vZGUpO1xuIFx0aW50IG9wZW5fZmxhZztcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbiBcdGludCBlcnJvciwgY3JlYXRlX2Vycm9yO1xuQEAgLTQ0NTUsNyArNDUyMiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdCAqL1xuIFx0fVxuIFx0aWYgKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVClcbi1cdFx0aW5vZGVfbG9jayhkaXJfaW5vZGUpO1xuK1x0XHRpbm9kZV9sb2NrX25lc3RlZChkaXJfaW5vZGUsIElfTVVURVhfUEFSRU5UKTtcbiBcdGVsc2VcbiBcdFx0aW5vZGVfbG9ja19zaGFyZWQoZGlyX2lub2RlKTtcbiBcbkBAIC00NTA3LDEyICs0NTc0LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG4gXHRcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTClcbiBcdFx0XHRvcGVuX2ZsYWcgXHUwMDI2PSB+T19UUlVOQztcbi1cdFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgbW9kZSwgbW9kZSk7XG4rXHRcdG1vZGUgPSBvX2NyZWF0ZV9tb2RlKGlkbWFwLCBkaXJfaW5vZGUsIG9wZW5fZmxhZywgbW9kZSk7XG4gXHRcdGlmIChsaWtlbHkoZ290X3dyaXRlKSlcbiBcdFx0XHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIFx1MDAyNm5kLVx1MDAzZXBhdGgsXG4tXHRcdFx0XHRcdFx0ICAgIGRlbnRyeSwgbW9kZSk7XG4rXHRcdFx0XHRcdFx0ICAgIGRlbnRyeSwgb3Blbl9mbGFnLCBtb2RlKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGNyZWF0ZV9lcnJvciA9IC1FUk9GUztcbitcdFx0LyogUmVmdXNlIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSB0aHJvdWdoIGEgZGFuZ2xpbmcgKHRyYWlsaW5nKVxuK1x0XHQgKiBzeW1saW5rLiBGb3IgcmVndWxhciBmaWxlcyB0aGlzIGhhcyBiZWVuIGFsbG93ZWQgaGlzdG9yaWNhbGx5XG4rXHRcdCAqIG9uIE9fQ1JFQVQgd2l0aG91dCBPX0VYQ0wuICovXG4rXHRcdGlmICh1bmxpa2VseShuZC1cdTAwM2VkZXB0aCkgXHUwMDI2XHUwMDI2IGNyZWF0ZV9kaXIgXHUwMDI2XHUwMDI2ICFjcmVhdGVfZXJyb3IpXG4rXHRcdFx0Y3JlYXRlX2Vycm9yID0gLUVFWElTVDtcbiBcdH1cbiBcdGlmIChjcmVhdGVfZXJyb3IpXG4gXHRcdG9wZW5fZmxhZyBcdTAwMjY9IH5PX0NSRUFUO1xuQEAgLTQ1MzcsNiArNDYwOSw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IGZpbGUgKmZpbGUsXG4gXHRcdFx0ZGVudHJ5ID0gcmVzO1xuIFx0XHR9XG4gXHR9XG4rXG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfaW5vZGUgfHwgIShvcC1cdTAwM2VvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIE5vIG5lZWQgdG8gY3JlYXRlIGEgZmlsZS4gIElmIGxvb2t1cCByZXR1cm5lZCBhIHBvc2l0aXZlXG5AQCAtNDU1NCwyNiArNDYyNywyNiBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9va3VwX29wZW4oc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBmaWxlICpmaWxlLFxuIFx0XHRnb3RvIG91dF9kcHV0O1xuIFx0fVxuIFxuLVx0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyX2lub2RlLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRnb3RvIG91dF9kcHV0O1xuLVxuLVx0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfQ1JFQVRFRDtcbi1cdGlmICghZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKSB7XG4rXHRpZiAoKGNyZWF0ZV9kaXIgXHUwMDI2XHUwMDI2ICFkaXJfaW5vZGUtXHUwMDNlaV9vcC1cdTAwM2Vta2RpcilcbitcdFx0fHwgKCFjcmVhdGVfZGlyIFx1MDAyNlx1MDAyNiAhZGlyX2lub2RlLVx1MDAzZWlfb3AtXHUwMDNlY3JlYXRlKSkge1xuIFx0XHRlcnJvciA9IC1FQUNDRVM7XG4gXHRcdGdvdG8gb3V0X2RwdXQ7XG4gXHR9XG4gXG4tXHRlcnJvciA9IGRpcl9pbm9kZS1cdTAwM2VpX29wLVx1MDAzZWNyZWF0ZShpZG1hcCwgZGlyX2lub2RlLCBkZW50cnksIG1vZGUpO1xuK1x0aWYgKGNyZWF0ZV9kaXIpIHtcbitcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmZzX21rZGlyX25vX3Blcm0oaWRtYXAsIGRpcl9pbm9kZSwgZGVudHJ5LFxuK1x0XHRcdFx0XHRcdCAgICAgICBtb2RlLCBcdTAwMjZkZWxlZ2F0ZWRfaW5vZGUpO1xuK1x0XHRcdGVycm9yID0gUFRSX0VSUl9PUl9aRVJPKHJlcyk7XG4rXHRcdFx0aWYgKCFlcnJvcilcbitcdFx0XHRcdGRlbnRyeSA9IHJlcztcbitcdH0gZWxzZSB7XG4rXHRcdGVycm9yID0gdmZzX2NyZWF0ZV9ub19wZXJtKGlkbWFwLCBkZW50cnksIG1vZGUsIFx1MDAyNmRlbGVnYXRlZF9pbm9kZSk7XG4rXHR9XG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gb3V0X2RwdXQ7XG4rXG4rXHRmaWxlLVx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DUkVBVEVEO1xuIG91dDpcbi1cdGlmICghSVNfRVJSKGRlbnRyeSkpIHtcbi1cdFx0aWYgKGZpbGUtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9DUkVBVEVEKVxuLVx0XHRcdGZzbm90aWZ5X2NyZWF0ZShkaXJfaW5vZGUsIGRlbnRyeSk7XG4tXHRcdGlmIChmaWxlLVx1MDAzZWZfbW9kZSBcdTAwMjYgRk1PREVfT1BFTkVEKVxuLVx0XHRcdGZzbm90aWZ5X29wZW4oZmlsZSk7XG4tXHR9XG4gXHRpZiAoKG9wZW5fZmxhZyBcdTAwMjYgT19DUkVBVCkgfHwgY3JlYXRlX2Vycm9yKVxuIFx0XHRpbm9kZV91bmxvY2soZGlyX2lub2RlKTtcbiBcdGVsc2VcbkBAIC00Njk1LDE3ICs0NzY4LDEyIEBAIHN0cnVjdCBmaWxlICp2ZnNfbG9va3VwX29wZW4oc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IHFzdHIgKmxhc3QsXG4gfVxuIEVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVModmZzX2xvb2t1cF9vcGVuLCBcIm5mc2RcIik7XG4gXG4tc3RhdGljIGlubGluZSBib29sIHRyYWlsaW5nX3NsYXNoZXMoc3RydWN0IG5hbWVpZGF0YSAqbmQpXG4te1xuLVx0cmV0dXJuIChib29sKW5kLVx1MDAzZWxhc3QubmFtZVtuZC1cdTAwM2VsYXN0Lmxlbl07XG4tfVxuLVxuIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb29rdXBfZmFzdF9mb3Jfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgaW50IG9wZW5fZmxhZylcbiB7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4gXG4gXHRpZiAob3Blbl9mbGFnIFx1MDAyNiBPX0NSRUFUKSB7XG4tXHRcdGlmICh0cmFpbGluZ19zbGFzaGVzKG5kKSlcbitcdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMoXHUwMDI2bmQtXHUwMDNlbGFzdCkgXHUwMDI2XHUwMDI2ICEob3Blbl9mbGFnIFx1MDAyNiBPX0RJUkVDVE9SWSkpXG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVJU0RJUik7XG4gXG4gXHRcdC8qIERvbid0IGJvdGhlciBvbiBhbiBPX0VYQ0wgY3JlYXRlICovXG5AQCAtNDcxMyw3ICs0NzgxLDcgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9mYXN0X2Zvcl9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgb3Blbl9mbGFnKVxuIFx0XHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0aWYgKHRyYWlsaW5nX3NsYXNoZXMobmQpKVxuK1x0aWYgKHRyYWlsaW5nX3NsYXNoZXMoXHUwMDI2bmQtXHUwMDNlbGFzdCkpXG4gXHRcdG5kLVx1MDAzZWZsYWdzIHw9IExPT0tVUF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZO1xuIFxuIFx0ZGVudHJ5ID0gbG9va3VwX2Zhc3QobmQpO1xuQEAgLTQ4MDYsOCArNDg3NCw5IEBAIHN0YXRpYyBpbnQgZG9fb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCxcbiBcdGlmIChvcGVuX2ZsYWcgXHUwMDI2IE9fQ1JFQVQpIHtcbiBcdFx0aWYgKChvcGVuX2ZsYWcgXHUwMDI2IE9fRVhDTCkgXHUwMDI2XHUwMDI2ICEoZmlsZS1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX0NSRUFURUQpKVxuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuLVx0XHRpZiAoZF9pc19kaXIobmQtXHUwMDNlcGF0aC5kZW50cnkpKVxuK1x0XHRpZiAoIShvcGVuX2ZsYWcgXHUwMDI2IE9fRElSRUNUT1JZKSBcdTAwMjZcdTAwMjYgZF9pc19kaXIobmQtXHUwMDNlcGF0aC5kZW50cnkpKVxuIFx0XHRcdHJldHVybiAtRUlTRElSO1xuK1xuIFx0XHRlcnJvciA9IG1heV9jcmVhdGVfaW5fc3RpY2t5KGlkbWFwLCBuZCxcbiBcdFx0XHRcdFx0ICAgICBkX2JhY2tpbmdfaW5vZGUobmQtXHUwMDNlcGF0aC5kZW50cnkpKTtcbiBcdFx0aWYgKHVubGlrZWx5KGVycm9yKSlcbkBAIC01MDg3LDcgKzUxNTYsNyBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqZmlsZW5hbWVfY3JlYXRlKGludCBkZmQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSxcbiBcdCAqIERvIHRoZSBmaW5hbCBsb29rdXAuICBTdXBwcmVzcyAnY3JlYXRlJyBpZiB0aGVyZSBpcyBhIHRyYWlsaW5nXG4gXHQgKiAnLycsIGFuZCBhIGRpcmVjdG9yeSB3YXNuJ3QgcmVxdWVzdGVkLlxuIFx0ICovXG4tXHRpZiAobGFzdC5uYW1lW2xhc3QubGVuXSBcdTAwMjZcdTAwMjYgIXdhbnRfZGlyKVxuK1x0aWYgKHRyYWlsaW5nX3NsYXNoZXMoXHUwMDI2bGFzdCkgXHUwMDI2XHUwMDI2ICF3YW50X2RpcilcbiBcdFx0Y3JlYXRlX2ZsYWdzIFx1MDAyNj0gfkxPT0tVUF9DUkVBVEU7XG4gXHRkZW50cnkgPSBzdGFydF9kaXJvcChwYXRoLVx1MDAzZWRlbnRyeSwgXHUwMDI2bGFzdCwgcmV2YWxfZmxhZyB8IGNyZWF0ZV9mbGFncyk7XG4gXHRpZiAoSVNfRVJSKGRlbnRyeSkpXG5AQCAtNTE4Miw3ICs1MjUxLDcgQEAgc3RydWN0IGZpbGUgKmRlbnRyeV9jcmVhdGUoc3RydWN0IHBhdGggKnBhdGgsIGludCBmbGFncywgdW1vZGVfdCBtb2RlLFxuIFx0XHRwYXRoLVx1MDAzZWRlbnRyeSA9IGRpcjtcbiBcdFx0bW9kZSA9IHZmc19wcmVwYXJlX21vZGUoaWRtYXAsIGRpcl9pbm9kZSwgbW9kZSwgU19JQUxMVUdPLCBTX0lGUkVHKTtcbiBcbi1cdFx0Y3JlYXRlX2Vycm9yID0gbWF5X29fY3JlYXRlKGlkbWFwLCBwYXRoLCBkZW50cnksIG1vZGUpO1xuK1x0XHRjcmVhdGVfZXJyb3IgPSBtYXlfb19jcmVhdGUoaWRtYXAsIHBhdGgsIGRlbnRyeSwgZmxhZ3MsIG1vZGUpO1xuIFx0XHRpZiAoY3JlYXRlX2Vycm9yKVxuIFx0XHRcdGZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4gXG5AQCAtNTM1Niw2ICs1NDI1LDM0IEBAIFNZU0NBTExfREVGSU5FMyhta25vZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgZmlsZW5hbWUsIHVtb2RlX3QsIG1vZGUsIHVuc2lnbmVkLCBkXG4gXHRyZXR1cm4gZmlsZW5hbWVfbWtub2RhdChBVF9GRENXRCwgbmFtZSwgbW9kZSwgZGV2KTtcbiB9XG4gXG4rLyogUmV0dXJucyB0aGUgZGVudHJ5IHRvIHVzZSAobm90IE5VTEwpIG9yIC1FIG9uIGVycm9yICovXG4rc3RhdGljIGlubGluZVxuK3N0cnVjdCBkZW50cnkgKnZmc19ta2Rpcl9ub19wZXJtKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSxcbitcdFx0XHRcdCBzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlICpkaSlcbit7XG4rXHRpbnQgZXJyb3I7XG4rXHRzdHJ1Y3QgZGVudHJ5ICpkZTtcbitcdHVuc2lnbmVkIG1heF9saW5rcyA9IGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfbWF4X2xpbmtzO1xuK1xuK1x0aWYgKG1heF9saW5rcyBcdTAwMjZcdTAwMjYgZGlyLVx1MDAzZWlfbmxpbmsgXHUwMDNlPSBtYXhfbGlua3MpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTUxJTkspO1xuK1xuK1x0ZXJyb3IgPSB0cnlfYnJlYWtfZGVsZWcoZGlyLCBMRUFTRV9CUkVBS19ESVJfQ1JFQVRFLCBkaSk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdHJldHVybiBFUlJfUFRSKGVycm9yKTtcbitcbitcdGRlID0gZGlyLVx1MDAzZWlfb3AtXHUwMDNlbWtkaXIoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlKTtcbitcdGlmIChJU19FUlIoZGUpKVxuK1x0XHRyZXR1cm4gZGU7XG4rXHRpZiAoZGUpIHtcbitcdFx0ZHB1dChkZW50cnkpO1xuK1x0XHRkZW50cnkgPSBkZTtcbitcdH1cbitcdGZzbm90aWZ5X21rZGlyKGRpciwgZGVudHJ5KTtcbitcdHJldHVybiBkZW50cnk7XG4rfVxuK1xuIC8qKlxuICAqIHZmc19ta2RpciAtIGNyZWF0ZSBkaXJlY3RvcnkgcmV0dXJuaW5nIGNvcnJlY3QgZGVudHJ5IGlmIHBvc3NpYmxlXG4gICogQGlkbWFwOlx0XHRpZG1hcCBvZiB0aGUgbW91bnQgdGhlIGlub2RlIHdhcyBmb3VuZCBmcm9tXG5AQCAtNTM4Myw3ICs1NDgwLDYgQEAgc3RydWN0IGRlbnRyeSAqdmZzX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHQgc3RydWN0IGRlbGVnYXRlZF9pbm9kZSAqZGVsZWdhdGVkX2lub2RlKVxuIHtcbiBcdGludCBlcnJvcjtcbi1cdHVuc2lnbmVkIG1heF9saW5rcyA9IGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfbWF4X2xpbmtzO1xuIFx0c3RydWN0IGRlbnRyeSAqZGU7XG4gXG4gXHRlcnJvciA9IG1heV9jcmVhdGVfZGVudHJ5KGlkbWFwLCBkaXIsIGRlbnRyeSk7XG5AQCAtNTM5OSwyNCArNTQ5NSwxMiBAQCBzdHJ1Y3QgZGVudHJ5ICp2ZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0aWYgKGVycm9yKVxuIFx0XHRnb3RvIGVycjtcbiBcbi1cdGVycm9yID0gLUVNTElOSztcbi1cdGlmIChtYXhfbGlua3MgXHUwMDI2XHUwMDI2IGRpci1cdTAwM2VpX25saW5rIFx1MDAzZT0gbWF4X2xpbmtzKVxuLVx0XHRnb3RvIGVycjtcbi1cbi1cdGVycm9yID0gdHJ5X2JyZWFrX2RlbGVnKGRpciwgTEVBU0VfQlJFQUtfRElSX0NSRUFURSwgZGVsZWdhdGVkX2lub2RlKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBlcnI7XG4tXG4tXHRkZSA9IGRpci1cdTAwM2VpX29wLVx1MDAzZW1rZGlyKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSk7XG4tXHRlcnJvciA9IFBUUl9FUlIoZGUpO1xuLVx0aWYgKElTX0VSUihkZSkpXG4rXHRkZSA9IHZmc19ta2Rpcl9ub19wZXJtKGlkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSwgZGVsZWdhdGVkX2lub2RlKTtcbitcdGlmIChJU19FUlIoZGUpKSB7XG4rXHRcdGVycm9yID0gUFRSX0VSUihkZSk7XG4gXHRcdGdvdG8gZXJyO1xuLVx0aWYgKGRlKSB7XG4tXHRcdGRwdXQoZGVudHJ5KTtcbi1cdFx0ZGVudHJ5ID0gZGU7XG4gXHR9XG4tXHRmc25vdGlmeV9ta2RpcihkaXIsIGRlbnRyeSk7XG4tXHRyZXR1cm4gZGVudHJ5O1xuK1x0cmV0dXJuIGRlO1xuIFxuIGVycjpcbiBcdGVuZF9jcmVhdGluZyhkZW50cnkpO1xuQEAgLTU3MDMsNyArNTc4Nyw3IEBAIGludCBmaWxlbmFtZV91bmxpbmthdChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpXG4gXHRcdGdvdG8gZXhpdF9kcm9wX3dyaXRlO1xuIFxuIFx0LyogV2h5IG5vdCBiZWZvcmU/IEJlY2F1c2Ugd2Ugd2FudCBjb3JyZWN0IGVycm9yIHZhbHVlICovXG4tXHRpZiAodW5saWtlbHkobGFzdC5uYW1lW2xhc3QubGVuXSkpIHtcbitcdGlmICh1bmxpa2VseSh0cmFpbGluZ19zbGFzaGVzKFx1MDAyNmxhc3QpKSkge1xuIFx0XHRpZiAoZF9pc19kaXIoZGVudHJ5KSlcbiBcdFx0XHRlcnJvciA9IC1FSVNESVI7XG4gXHRcdGVsc2VcbkBAIC02MzA1LDE2ICs2Mzg5LDE2IEBAIGludCBmaWxlbmFtZV9yZW5hbWVhdDIoaW50IG9sZGRmZCwgc3RydWN0IGZpbGVuYW1lICpmcm9tLFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIHtcbiBcdFx0aWYgKCFkX2lzX2RpcihyZC5uZXdfZGVudHJ5KSkge1xuIFx0XHRcdGVycm9yID0gLUVOT1RESVI7XG4tXHRcdFx0aWYgKG5ld19sYXN0Lm5hbWVbbmV3X2xhc3QubGVuXSlcbitcdFx0XHRpZiAodHJhaWxpbmdfc2xhc2hlcyhcdTAwMjZuZXdfbGFzdCkpXG4gXHRcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIFx0XHR9XG4gXHR9XG4gXHQvKiB1bmxlc3MgdGhlIHNvdXJjZSBpcyBhIGRpcmVjdG9yeSB0cmFpbGluZyBzbGFzaGVzIGdpdmUgLUVOT1RESVIgKi9cbiBcdGlmICghZF9pc19kaXIocmQub2xkX2RlbnRyeSkpIHtcbiBcdFx0ZXJyb3IgPSAtRU5PVERJUjtcbi1cdFx0aWYgKG9sZF9sYXN0Lm5hbWVbb2xkX2xhc3QubGVuXSlcbitcdFx0aWYgKHRyYWlsaW5nX3NsYXNoZXMoXHUwMDI2b2xkX2xhc3QpKVxuIFx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4tXHRcdGlmICghKGZsYWdzIFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIFx1MDAyNlx1MDAyNiBuZXdfbGFzdC5uYW1lW25ld19sYXN0Lmxlbl0pXG4rXHRcdGlmICghKGZsYWdzIFx1MDAyNiBSRU5BTUVfRVhDSEFOR0UpIFx1MDAyNlx1MDAyNiB0cmFpbGluZ19zbGFzaGVzKFx1MDAyNm5ld19sYXN0KSlcbiBcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuY1xuaW5kZXggMzZmMmU4NTg4OTIyMC4uYjRkYjcwM2M5ZThjNyAxMDA2NDRcbi0tLSBhL2ZzL25mcy9kaXIuY1xuKysrIGIvZnMvbmZzL2Rpci5jXG5AQCAtMjEyMSw2ICsyMTIxLDkgQEAgaW50IG5mc19hdG9taWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0ZGZwcmludGsoVkZTLCBcIk5GUzogYXRvbWljX29wZW4oJXMvJWxsdSksICVwZFxcblwiLFxuIFx0XHRcdGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfaWQsIGRpci1cdTAwM2VpX2lubywgZGVudHJ5KTtcbiBcbitcdGlmIChPX0lTX01LRElSKG9wZW5fZmxhZ3MpKVxuK1x0XHRvcGVuX2ZsYWdzIFx1MDAyNj0gfk9fQ1JFQVQ7XG4rXG4gXHRlcnIgPSBuZnNfY2hlY2tfZmxhZ3Mob3Blbl9mbGFncyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTIzMTMsNiArMjMxNiw5IEBAIGludCBuZnNfYXRvbWljX29wZW5fdjIzKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHQgKi9cbiBcdGludCBlcnJvciA9IDA7XG4gXG4rXHRpZiAoT19JU19NS0RJUihvcGVuX2ZsYWdzKSlcbitcdFx0b3Blbl9mbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX25hbWUubGVuIFx1MDAzZSBORlNfU0VSVkVSKGRpciktXHUwMDNlbmFtZWxlbilcbiBcdFx0cmV0dXJuIC1FTkFNRVRPT0xPTkc7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jXG5pbmRleCA2YjFjMTRlNjg0YTkzLi42Y2I1ZTJhZDc4MWYzIDEwMDY0NFxuLS0tIGEvZnMvb3Blbi5jXG4rKysgYi9mcy9vcGVuLmNcbkBAIC0xMjM5LDI5ICsxMjM5LDMwIEBAIGlubGluZSBpbnQgYnVpbGRfb3Blbl9mbGFncyhjb25zdCBzdHJ1Y3Qgb3Blbl9ob3cgKmhvdywgc3RydWN0IG9wZW5fZmxhZ3MgKm9wKVxuIFx0aWYgKFdJTExfQ1JFQVRFKGZsYWdzKSkge1xuIFx0XHRpZiAoaG93LVx1MDAzZW1vZGUgXHUwMDI2IH5TX0lBTExVR08pXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdG9wLVx1MDAzZW1vZGUgPSBob3ctXHUwMDNlbW9kZSB8IFNfSUZSRUc7XG4rXHRcdGlmIChPX0lTX01LRElSKGZsYWdzKSlcbitcdFx0XHRvcC1cdTAwM2Vtb2RlID0gaG93LVx1MDAzZW1vZGUgfCBTX0lGRElSO1xuK1x0XHRlbHNlXG4rXHRcdFx0b3AtXHUwMDNlbW9kZSA9IGhvdy1cdTAwM2Vtb2RlIHwgU19JRlJFRztcbiBcdH0gZWxzZSB7XG4gXHRcdGlmIChob3ctXHUwMDNlbW9kZSAhPSAwKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRvcC1cdTAwM2Vtb2RlID0gMDtcbiBcdH1cbiBcbi1cdC8qXG4tXHQgKiBCbG9jayBidWdzIHdoZXJlIE9fRElSRUNUT1JZIHwgT19DUkVBVCBjcmVhdGVkIHJlZ3VsYXIgZmlsZXMuXG4tXHQgKiBOb3RlLCB0aGF0IGJsb2NraW5nIE9fRElSRUNUT1JZIHwgT19DUkVBVCBoZXJlIGFsc28gcHJvdGVjdHNcbi1cdCAqIE9fVE1QRklMRSBiZWxvdyB3aGljaCByZXF1aXJlcyBPX0RJUkVDVE9SWSBiZWluZyByYWlzZWQuXG4tXHQgKi9cbi1cdGlmICgoZmxhZ3MgXHUwMDI2IChPX0RJUkVDVE9SWSB8IE9fQ1JFQVQpKSA9PSAoT19ESVJFQ1RPUlkgfCBPX0NSRUFUKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4gXHQvKiBOb3cgaGFuZGxlIHRoZSBjcmVhdGl2ZSBpbXBsZW1lbnRhdGlvbiBvZiBPX1RNUEZJTEUuICovXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IF9fT19UTVBGSUxFKSB7XG4gXHRcdC8qXG4gXHRcdCAqIEluIG9yZGVyIHRvIGVuc3VyZSBwcm9ncmFtcyBnZXQgZXhwbGljaXQgZXJyb3JzIHdoZW4gdHJ5aW5nXG4gXHRcdCAqIHRvIHVzZSBPX1RNUEZJTEUgb24gb2xkIGtlcm5lbHMgd2UgZW5mb3JjZSB0aGF0IE9fRElSRUNUT1JZXG4tXHRcdCAqIGlzIHJhaXNlZCBhbG9uZ3NpZGUgX19PX1RNUEZJTEUuXG4rXHRcdCAqIGlzIHJhaXNlZCBhbG9uZ3NpZGUgX19PX1RNUEZJTEUsIGJ1dCB3aXRob3V0IE9fQ1JFQVQuIFRoZVxuK1x0XHQgKiByZWFzb24gZm9yIGRpc2FsbG93aW5nIE9fQ1JFQVR8T19UTVBGSUxFIGlzIHRoYXRcbitcdFx0ICogT19ESVJFQ1RPUll8T19DUkVBVCB1c2VkIHRvIHdvcmsgYW5kIGNyZWF0ZWQgYSByZWd1bGFyIGZpbGVcbitcdFx0ICogaWYgbm90aGluZyBleGlzdGVkIGF0IHRoZSBvcGVuIHBhdGguIEhlbmNlLCBhbGxvd2luZyB0aGVcbitcdFx0ICogY29tYmluYXRpb24gd291bGQgaGF2ZSBjYXVzZWQgT19DUkVBVHxPX1RNUEZJTEUgdG8gY3JlYXRlIGFcbitcdFx0ICogcmVndWxhciAobm9uLXRlbXBvcmFyeSkgZmlsZSBvbiBvbGQga2VybmVscywgd2hpbGUgdGhlIGNhbGxlclxuK1x0XHQgKiB3b3VsZCBiZWxpZXZlIHRoZXkgY3JlYXRlZCBhbiBhY3R1YWwgT19UTVBGSUxFLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE9fRElSRUNUT1JZKSlcbitcdFx0aWYgKCEoZmxhZ3MgXHUwMDI2IE9fRElSRUNUT1JZKSB8fCAoZmxhZ3MgXHUwMDI2IE9fQ1JFQVQpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRpZiAoIShhY2NfbW9kZSBcdTAwMjYgTUFZX1dSSVRFKSlcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0xMzE4LDYgKzEzMTksMTUgQEAgaW5saW5lIGludCBidWlsZF9vcGVuX2ZsYWdzKGNvbnN0IHN0cnVjdCBvcGVuX2hvdyAqaG93LCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3ApXG4gXG4gXHRvcC1cdTAwM2VpbnRlbnQgPSBmbGFncyBcdTAwMjYgT19QQVRIID8gMCA6IExPT0tVUF9PUEVOO1xuIFxuK1x0LypcbitcdCAqIFJlcXVlc3Rpbmcgd3JpdGUgYWNjZXNzIG9uIGEgZGlyZWN0b3J5IGNhbiBuZXZlciBzdWNjZWVkLiBSYXRoZXJcbitcdCAqIHRoYW4gcGVyZm9ybWluZyBhIHBhdGgtd2FsayB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgdGFyZ2V0IGlzXG4rXHQgKiBhY3R1YWxseSBhIGRpcmVjdG9yeSAoLUVJU0RJUikgb3Igbm90ICgtRU5PVERJUiksIHdlIHNob3J0LWNpcmN1aXRcbitcdCAqIHRvIC1FTk9URElSLlxuK1x0ICovXG4rXHRpZiAoKGZsYWdzIFx1MDAyNiBPX0RJUkVDVE9SWSkgXHUwMDI2XHUwMDI2ICEoZmxhZ3MgXHUwMDI2IF9fT19UTVBGSUxFKSBcdTAwMjZcdTAwMjYgKGFjY19tb2RlIFx1MDAyNiBNQVlfV1JJVEUpKVxuK1x0XHRyZXR1cm4gLUVOT1RESVI7XG4rXG4gXHRpZiAoZmxhZ3MgXHUwMDI2IE9fQ1JFQVQpIHtcbiBcdFx0b3AtXHUwMDNlaW50ZW50IHw9IExPT0tVUF9DUkVBVEU7XG4gXHRcdGlmIChmbGFncyBcdTAwMjYgT19FWENMKSB7XG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9kaXIuYyBiL2ZzL3NtYi9jbGllbnQvZGlyLmNcbmluZGV4IDc4MDNiZDViZDAxZjguLmQxYWY5MGM5ODFjZDQgMTAwNjQ0XG4tLS0gYS9mcy9zbWIvY2xpZW50L2Rpci5jXG4rKysgYi9mcy9zbWIvY2xpZW50L2Rpci5jXG5AQCAtNTM4LDYgKzUzOCw5IEBAIGludCBjaWZzX2F0b21pY19vcGVuKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSxcbiBcdGlmICh1bmxpa2VseShjaWZzX2ZvcmNlZF9zaHV0ZG93bihjaWZzX3NiKSkpXG4gXHRcdHJldHVybiBzbWJfRUlPKHNtYl9laW9fdHJhY2VfZm9yY2VkX3NodXRkb3duKTtcbiBcbitcdGlmIChPX0lTX01LRElSKG9mbGFncykpXG4rXHRcdG9mbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0LypcbiBcdCAqIFBvc2l4IG9wZW4gaXMgb25seSBjYWxsZWQgKGF0IGxvb2t1cCB0aW1lKSBmb3IgZmlsZSBjcmVhdGUgbm93LiBGb3JcbiBcdCAqIG9wZW5zIChyYXRoZXIgdGhhbiBjcmVhdGVzKSwgYmVjYXVzZSB3ZSBkbyBub3Qga25vdyBpZiBpdCBpcyBhIGZpbGVcbmRpZmYgLS1naXQgYS9mcy92Ym94c2YvZGlyLmMgYi9mcy92Ym94c2YvZGlyLmNcbmluZGV4IDBiOWVhYjE1NzQzMmQuLjZlMzA2ZGRkNzIyYmYgMTAwNjQ0XG4tLS0gYS9mcy92Ym94c2YvZGlyLmNcbisrKyBiL2ZzL3Zib3hzZi9kaXIuY1xuQEAgLTMxOCw2ICszMTgsOSBAQCBzdGF0aWMgaW50IHZib3hzZl9kaXJfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdHU2NCBoYW5kbGU7XG4gXHRpbnQgZXJyO1xuIFxuK1x0aWYgKE9fSVNfTUtESVIoZmxhZ3MpKVxuK1x0XHRmbGFncyBcdTAwMjY9IH5PX0NSRUFUO1xuK1xuIFx0aWYgKGRfaW5fbG9va3VwKGRlbnRyeSkpIHtcbiBcdFx0c3RydWN0IGRlbnRyeSAqcmVzID0gdmJveHNmX2Rpcl9sb29rdXAocGFyZW50LCBkZW50cnksIDApO1xuIFx0XHRpZiAocmVzIHx8IGRfcmVhbGx5X2lzX3Bvc2l0aXZlKGRlbnRyeSkpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mY250bC5oIGIvaW5jbHVkZS9saW51eC9mY250bC5oXG5pbmRleCA2YWQ2YjllN2EyMjZhLi4yMDRlMTZiYmUyNjM0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mY250bC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZjbnRsLmhcbkBAIC0zMCw2ICszMCwxMiBAQFxuICAqL1xuICNkZWZpbmUgX19PX1JFR1VMQVJcdFx0KDEgXHUwMDNjXHUwMDNjIDMwKVxuIFxuKyNkZWZpbmUgT19NS0RJUl9NQVNLXHQoT19DUkVBVCB8IE9fRElSRUNUT1JZKVxuK3N0YXRpYyBpbmxpbmUgYm9vbCBPX0lTX01LRElSKHVuc2lnbmVkIGludCBmbGFncylcbit7XG4rXHRyZXR1cm4gKGZsYWdzIFx1MDAyNiBPX01LRElSX01BU0spID09IE9fTUtESVJfTUFTSztcbit9XG4rXG4gLyogTGlzdCBvZiBhbGwgdmFsaWQgZmxhZ3MgZm9yIHRoZSBob3ctXHUwMDNlcmVzb2x2ZSBhcmd1bWVudDogKi9cbiAjZGVmaW5lIFZBTElEX1JFU09MVkVfRkxBR1MgXFxcbiBcdChSRVNPTFZFX05PX1hERVYgfCBSRVNPTFZFX05PX01BR0lDTElOS1MgfCBSRVNPTFZFX05PX1NZTUxJTktTIHwgXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvLmdpdGlnbm9yZVxuaW5kZXggOWViMTg1ZmIyZjlkZC4uMDFjNTg4ZDRjODRmNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zLy5naXRpZ25vcmVcbkBAIC0xLDQgKzEsNSBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuK29wZW5fb19jcmVhdF9vX2RpclxuIGRub3RpZnlfdGVzdFxuIGRldnB0c19wdHNcbiBmY2xvZ1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcbmluZGV4IDAzYmUzMzdjMWYzNTEuLjA5NTliZDI2ODc1YWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9NYWtlZmlsZVxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvTWFrZWZpbGVcbkBAIC0xLDcgKzEsNyBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiBcbiBDRkxBR1MgKz0gJChLSERSX0lOQ0xVREVTKVxuLVRFU1RfR0VOX1BST0dTIDo9IGRldnB0c19wdHMgZmlsZV9zdHJlc3NvciBhbm9uX2lub2RlX3Rlc3Qga2VybmZzX3Rlc3QgZmNsb2cgdXN0YXRfdGVzdFxuK1RFU1RfR0VOX1BST0dTIDo9IG9wZW5fb19jcmVhdF9vX2RpciBkZXZwdHNfcHRzIGZpbGVfc3RyZXNzb3IgYW5vbl9pbm9kZV90ZXN0IGtlcm5mc190ZXN0IGZjbG9nIHVzdGF0X3Rlc3RcbiBURVNUX0dFTl9QUk9HUyArPSBpZG1hcHBlZF90bXBmaWxlXG4gVEVTVF9HRU5fUFJPR1NfRVhURU5ERUQgOj0gZG5vdGlmeV90ZXN0XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvb3Blbl9vX2NyZWF0X29fZGlyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy9vcGVuX29fY3JlYXRfb19kaXIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmJlMGFiMzQyNjdlMWRcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL29wZW5fb19jcmVhdF9vX2Rpci5jXG5AQCAtMCwwICsxLDIwMSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjc3lzL3N0YXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW1pdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImtzZWxmdGVzdF9oYXJuZXNzLmhcIlxuKyNpbmNsdWRlIFwid3JhcHBlcnMuaFwiXG4rXG4rI2RlZmluZSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkX2ZsYWdzKGRmZCwgcGF0aG5hbWUsIGZsYWdzKSAoe1x0XFxcbitcdHN0cnVjdCBzdGF0IF9fc3Q7XHRcdFx0XHRcdFx0XFxcbitcdGludCBfX2ZkID0gb3BlbmF0X29fbWtkaXIoZGZkLCBwYXRobmFtZSwgZmxhZ3MsIFNfSVJXWFUpO1x0XFxcbitcdEFTU0VSVF9HRShfX2ZkLCAwKTtcdFx0XHRcdFx0XHRcXFxuK1x0QVNTRVJUX0VRKGZzdGF0KF9fZmQsIFx1MDAyNl9fc3QpLCAwKTtcdFx0XHRcdFxcXG4rXHRFWFBFQ1RfVFJVRShTX0lTRElSKF9fc3Quc3RfbW9kZSkpO1x0XHRcdFx0XFxcbitcdF9fZmQ7XHRcdFx0XHRcdFx0XHRcdFxcXG4rfSlcbitcbisjZGVmaW5lIG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoZGZkLCBwYXRobmFtZSkgXFxcbitcdG9wZW5hdF9vX21rZGlyX2NoZWNrZWRfZmxhZ3MoZGZkLCBwYXRobmFtZSwgT19SRE9OTFkpXG4rXG4rRklYVFVSRShvcGVuX29fY3JlYXRfb19kaXIpIHtcbitcdGNoYXIgZGlycGF0aFtQQVRIX01BWF07XG4rXHRpbnQgZGZkO1xuK307XG4rXG4rRklYVFVSRV9TRVRVUChvcGVuX29fY3JlYXRfb19kaXIpXG4re1xuK1x0c3RyY3B5KHNlbGYtXHUwMDNlZGlycGF0aCwgXCIvdG1wL29wZW5fb19jcmVhdF9vX2Rpcl90ZXN0LlhYWFhYWFwiKTtcbitcdEFTU0VSVF9ORShta2R0ZW1wKHNlbGYtXHUwMDNlZGlycGF0aCksIE5VTEwpO1xuK1x0c2VsZi1cdTAwM2VkZmQgPSBvcGVuKHNlbGYtXHUwMDNlZGlycGF0aCwgT19ESVJFQ1RPUlkpO1xuK1x0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZGZkLCAwKTtcbit9XG4rXG4rRklYVFVSRV9URUFSRE9XTihvcGVuX29fY3JlYXRfb19kaXIpXG4re1xuK1x0Y2xvc2Uoc2VsZi1cdTAwM2VkZmQpO1xuK1x0cm1kaXIoc2VsZi1cdTAwM2VkaXJwYXRoKTtcbit9XG4rXG4rLyogRG9lcyBvcGVuX29fY3JlYXRfb19kaXIgcmV0dXJuIGEgZmQgYXQgYWxsPyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJldHVybnNfZmQpXG4re1xuK1x0aW50IGZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChzZWxmLVx1MDAzZWRmZCwgXCJuZXdkaXJcIik7XG4rXHRFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTtcbitcdEVYUEVDVF9FUSh1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCJuZXdkaXJcIiwgQVRfUkVNT1ZFRElSKSwgMCk7XG4rfVxuK1xuKy8qIFRoZSBmZCBtdXN0IHJlZmVyIHRvIHRoZSBkaXJlY3RvcnkgdGhhdCB3YXMganVzdCBjcmVhdGVkLiAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIGZkX2lzX2NyZWF0ZWRfZGlyKVxuK3tcbitcdGludCBmZDtcbitcdHN0cnVjdCBzdGF0IHN0X3ZpYV9mZCwgc3RfdmlhX3BhdGg7XG4rXHRjaGFyIHBhdGhbUEFUSF9NQVhdO1xuK1xuK1x0ZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcImNoZWNrZGlyXCIpO1xuK1xuK1x0QVNTRVJUX0VRKGZzdGF0KGZkLCBcdTAwMjZzdF92aWFfZmQpLCAwKTtcbitcbitcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIlcy9jaGVja2RpclwiLCBzZWxmLVx1MDAzZWRpcnBhdGgpO1xuK1x0QVNTRVJUX0VRKHN0YXQocGF0aCwgXHUwMDI2c3RfdmlhX3BhdGgpLCAwKTtcbitcbitcdEVYUEVDVF9FUShzdF92aWFfZmQuc3RfaW5vLCBzdF92aWFfcGF0aC5zdF9pbm8pO1xuK1x0RVhQRUNUX0VRKHN0X3ZpYV9mZC5zdF9kZXYsIHN0X3ZpYV9wYXRoLnN0X2Rldik7XG4rXG4rXHRFWFBFQ1RfRVEoY2xvc2UoZmQpLCAwKTtcbitcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XG4rfVxuK1xuKy8qIE1pc3NpbmcgcGFyZW50IGNvbXBvbmVudCBtdXN0IGZhaWwgd2l0aCBFTk9FTlQuICovXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZW5vZW50X21pc3NpbmdfcGFyZW50KVxuK3tcbitcdEVYUEVDVF9FUShvcGVuYXRfb19ta2RpcihzZWxmLVx1MDAzZWRmZCwgXCJub25leGlzdGVudC9jaGlsZFwiLCBPX1JET05MWSwgU19JUldYVSksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRU5PRU5UKTtcbit9XG4rXG4rLyogQW4gaW52YWxpZCBkZmQgbXVzdCBmYWlsIHdpdGggRUJBREYuICovXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZWJhZGYpXG4re1xuK1x0RVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKEZEX0lOVkFMSUQsIFwiYmFkZmRpclwiLCBPX1JET05MWSwgU19JUldYVSksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRUJBREYpO1xuK31cbitcbisvKiBBIGRmZCB0aGF0IHBvaW50cyB0byBhIGZpbGUgKG5vdCBhIGRpcmVjdG9yeSkgbXVzdCBmYWlsIHdpdGggRU5PVERJUi4gKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBlbm90ZGlyX2RmZClcbit7XG4rXHRpbnQgZmlsZV9mZDtcbitcbitcdGZpbGVfZmQgPSBvcGVuYXQoc2VsZi1cdTAwM2VkZmQsIFwiZmlsZVwiLFxuK1x0XHRcdCBPX0NSRUFUIHwgT19SRE9OTFksIFNfSVJXWFUpO1xuK1x0QVNTRVJUX0dFKGZpbGVfZmQsIDApO1xuK1xuK1x0RVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKGZpbGVfZmQsIFwic3ViZGlyXCIsIE9fUkRPTkxZLCBTX0lSV1hVKSwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTtcbitcbitcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XG4rXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwiZmlsZVwiLCAwKSwgMCk7XG4rfVxuK1xuKy8qXG4rICogT19FWENMIHRvZ2V0aGVyIHdpdGggT19DUkVBVHxPX0RJUkVDVE9SWSBzaG91bGQgc3VjY2VlZCBpZiB0aGUgdGFyZ2V0XG4rICogZGlyZWN0b3J5IGRvZXMgbm90IHlldCBleGlzdC4gQWZ0ZXIgZGlyZWN0b3J5IGNyZWF0aW9uLCByZXBlYXRpbmcgdGhpc1xuKyAqIGNhbGwgbXVzdCBmYWlsIHdpdGggRUVYSVNULlxuKyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIG9fZXhjbF9lZXhpc3QpXG4re1xuK1x0aW50IGV4Y2xkaXJfZmQ7XG4rXG4rXHRleGNsZGlyX2ZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZF9mbGFncyhzZWxmLVx1MDAzZWRmZCwgXCJleGNsZGlyXCIsIE9fRVhDTCk7XG4rXG4rXHRFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoZXhjbGRpcl9mZCwgXCIuXCIsIE9fRVhDTCwgU19JUldYVSksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRUVYSVNUKTtcbitcbitcdEVYUEVDVF9FUShjbG9zZShleGNsZGlyX2ZkKSwgMCk7XG4rXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwiZXhjbGRpclwiLCBBVF9SRU1PVkVESVIpLCAwKTtcbit9XG4rXG4rLypcbisgKiBPX0NSRUFUfE9fRElSRUNUT1JZIG9uIGEgcGF0aCB0aGF0IGFscmVhZHkgZXhpc3RzIGFzIGEgcmVndWxhciBmaWxlXG4rICogbXVzdCBmYWlsIHdpdGggRU5PVERJUi5cbisgKi9cbitURVNUX0Yob3Blbl9vX2NyZWF0X29fZGlyLCBleGlzdGluZ19maWxlX2Vub3RkaXIpXG4re1xuK1x0aW50IGZpbGVfZmQ7XG4rXG4rXHRmaWxlX2ZkID0gb3BlbmF0KHNlbGYtXHUwMDNlZGZkLCBcInJlZ2ZpbGVcIixcbitcdFx0XHQgT19DUkVBVCB8IE9fUkRPTkxZLCBTX0lSV1hVKTtcbitcdEFTU0VSVF9HRShmaWxlX2ZkLCAwKTtcbitcdEVYUEVDVF9FUShjbG9zZShmaWxlX2ZkKSwgMCk7XG4rXG4rXHRFWFBFQ1RfRVEob3BlbmF0X29fbWtkaXIoc2VsZi1cdTAwM2VkZmQsIFwicmVnZmlsZVwiLCBPX1JET05MWSwgU19JUldYVSksIC0xKTtcbitcdEVYUEVDVF9FUShlcnJubywgRU5PVERJUik7XG4rXG4rXHRFWFBFQ1RfRVEodW5saW5rYXQoc2VsZi1cdTAwM2VkZmQsIFwicmVnZmlsZVwiLCAwKSwgMCk7XG4rfVxuK1xuKy8qXG4rICogT19DUkVBVHxPX0RJUkVDVE9SWSBjb21iaW5lZCB3aXRoIGEgd3JpdGFibGUgYWNjZXNzIG1vZGUgbXVzdCBiZVxuKyAqIHJlamVjdGVkOiBhIGRpcmVjdG9yeSBjYW5ub3QgYmUgb3BlbmVkIGZvciB3cml0aW5nLlxuKyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHJlamVjdHNfd3JpdGFibGVfYWNjX21vZGUpXG4re1xuK1x0RVhQRUNUX0VRKG9wZW5hdF9vX21rZGlyKHNlbGYtXHUwMDNlZGZkLCBcInJkd3JkaXJcIiwgT19SRFdSLCBTX0lSV1hVKSwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFTk9URElSKTtcbitcdC8qIENsZWFuIHVwIGlmIHRoZSBrZXJuZWwgY3JlYXRlZCB0aGUgZGlyZWN0b3J5IGFueXdheS4gKi9cbitcdHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcInJkd3JkaXJcIiwgQVRfUkVNT1ZFRElSKTtcbit9XG4rXG4rLypcbisgKiBvcGVuYXQoT19DUkVBVHxPX0RJUkVDVE9SWSkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIHNob3VsZCB3b3JrLlxuKyAqL1xuK1RFU1RfRihvcGVuX29fY3JlYXRfb19kaXIsIHRyYWlsaW5nX3NsYXNoKVxuK3tcbitcdGludCBmZCA9IG9wZW5hdF9vX21rZGlyX2NoZWNrZWQoc2VsZi1cdTAwM2VkZmQsIFwibmV3ZGlyL1wiKTtcbitcdEVYUEVDVF9FUShjbG9zZShmZCksIDApO1xuK1x0RVhQRUNUX0VRKHVubGlua2F0KHNlbGYtXHUwMDNlZGZkLCBcIm5ld2RpclwiLCBBVF9SRU1PVkVESVIpLCAwKTtcbit9XG4rXG4rLypcbisgKiBvcGVuYXQoT19DUkVBVCkgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIGJ1dCB3aXRob3V0IE9fRElSRUNUT1JZXG4rICogbXVzdCBmYWlsIHdpdGggRUlTRElSIGFuZCBtdXN0IG5vdCBjcmVhdGUgYW55dGhpbmcgYXQgdGhlIHBhdGguXG4rICovXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgdHJhaWxpbmdfc2xhc2hfbm9fb19kaXIpXG4re1xuK1x0aW50IGZkO1xuK1x0c3RydWN0IHN0YXQgc3Q7XG4rXG4rXHRmZCA9IG9wZW5hdChzZWxmLVx1MDAzZWRmZCwgXCJ0cmFpbGluZy9cIiwgT19DUkVBVCB8IE9fUkRPTkxZLCBTX0lSV1hVKTtcbitcdEVYUEVDVF9FUShmZCwgLTEpO1xuK1x0RVhQRUNUX0VRKGVycm5vLCBFSVNESVIpO1xuK1xuK1x0RVhQRUNUX0VRKGZzdGF0YXQoc2VsZi1cdTAwM2VkZmQsIFwidHJhaWxpbmdcIiwgXHUwMDI2c3QsIDApLCAtMSk7XG4rXHRFWFBFQ1RfRVEoZXJybm8sIEVOT0VOVCk7XG4rXG4rXHQvKiBCZXN0LWVmZm9ydCBjbGVhbnVwIGluIGNhc2UgdGhlIGtlcm5lbCBsZWZ0IGEgZmlsZSBiZWhpbmQuICovXG4rXHRpZiAoZmQgXHUwMDNlPSAwKVxuK1x0XHRjbG9zZShmZCk7XG4rXHR1bmxpbmthdChzZWxmLVx1MDAzZWRmZCwgXCJ0cmFpbGluZ1wiLCAwKTtcbit9XG4rXG4rLypcbisgKiBUaGUgcmV0dXJuZWQgZmQgbXVzdCBiZSB1c2FibGUgYXMgYSBkZmQgZm9yIGZ1cnRoZXIgKmF0KCkgY2FsbHMuXG4rICovXG4rVEVTVF9GKG9wZW5fb19jcmVhdF9vX2RpciwgZmRfdXNhYmxlX2FzX2RmZClcbit7XG4rXHRpbnQgcGFyZW50X2ZkLCBjaGlsZF9mZDtcbitcdGNoYXIgcGF0aFtQQVRIX01BWF07XG4rXG4rXHRwYXJlbnRfZmQgPSBvcGVuYXRfb19ta2Rpcl9jaGVja2VkKHNlbGYtXHUwMDNlZGZkLCBcInBhcmVudFwiKTtcbitcdGNoaWxkX2ZkID0gb3BlbmF0X29fbWtkaXJfY2hlY2tlZChwYXJlbnRfZmQsIFwiY2hpbGRcIik7XG4rXG4rXHRFWFBFQ1RfRVEoY2xvc2UoY2hpbGRfZmQpLCAwKTtcbitcdEVYUEVDVF9FUShjbG9zZShwYXJlbnRfZmQpLCAwKTtcbitcbitcdHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgXCIlcy9wYXJlbnQvY2hpbGRcIiwgc2VsZi1cdTAwM2VkaXJwYXRoKTtcbitcdEVYUEVDVF9FUShybWRpcihwYXRoKSwgMCk7XG4rXHRzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFwiJXMvcGFyZW50XCIsIHNlbGYtXHUwMDNlZGlycGF0aCk7XG4rXHRFWFBFQ1RfRVEocm1kaXIocGF0aCksIDApO1xuK31cbitcbitURVNUX0hBUk5FU1NfTUFJTlxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2ZpbGVzeXN0ZW1zL3dyYXBwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9maWxlc3lzdGVtcy93cmFwcGVycy5oXG5pbmRleCA0MjBhZTRmOTA4Y2YyLi5hYmU1Yjg1Y2ViZGNkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvd3JhcHBlcnMuaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZmlsZXN5c3RlbXMvd3JhcHBlcnMuaFxuQEAgLTEzLDYgKzEzLDEwIEBAXG4gI2RlZmluZSBTVEFUWF9NTlRfSURfVU5JUVVFIDB4MDAwMDQwMDBVIC8qIFdhbnQvZ290IGV4dGVuZGVkIHN0eF9tb3VudF9pZCAqL1xuICNlbmRpZlxuIFxuKyNpZm5kZWYgRkRfSU5WQUxJRFxuKyNkZWZpbmUgRkRfSU5WQUxJRCAtMTAwMDlcbisjZW5kaWZcbitcbiBzdGF0aWMgaW5saW5lIGludCBzeXNfZnNvcGVuKGNvbnN0IGNoYXIgKmZzbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKVxuIHtcbiBcdHJldHVybiBzeXNjYWxsKF9fTlJfZnNvcGVuLCBmc25hbWUsIGZsYWdzKTtcbkBAIC0xMDUsNCArMTA5LDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IHN5c19vcGVuX3RyZWUoaW50IGRmZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIGludCBmbGFnXG4gXHRyZXR1cm4gc3lzY2FsbChfX05SX29wZW5fdHJlZSwgZGZkLCBmaWxlbmFtZSwgZmxhZ3MpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGludCBvcGVuYXRfb19ta2RpcihpbnQgZGZkLCBjb25zdCBjaGFyICpwYXRobmFtZSxcbitcdFx0XHRcdCB1bnNpZ25lZCBpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlKVxuK3tcbitcdHJldHVybiBzeXNjYWxsKF9fTlJfb3BlbmF0LCBkZmQsIHBhdGhuYW1lLFxuK1x0XHQgICAgICAgZmxhZ3MgfCBPX0RJUkVDVE9SWSB8IE9fQ1JFQVQsIG1vZGUpO1xuK31cbitcbiAjZW5kaWZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE2OjE2OjE5LjA1NTA2NDY2OFoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDY1MTYxODAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gRXZhbHVhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJdCdzIGZvY3VzZWQgb24gZW5hYmxpbmcgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAgdmlhIGBvcGVuYXRgLCB3aGljaCBpcyBhIG5lYXQgZmVhdHVyZS4gVGhlIGNoYW5nZXMgdG91Y2ggYSBsb3Qgb2YgY29kZTogdGhlIFZGUywgcGx1cyBhIGJ1bmNoIG9mIGZpbGVzeXN0ZW1zIOKAkyA5cCwgQ2VwaCwgRlVTRSwgR0ZTMiwgTkZTLCBTTUIsIHZib3hzZi4gV2UncmUgbG9va2luZyBhdCBjaGFuZ2VzIGluIGB2ZnNfaW5vZGUuY2AsIHZhcmlvdXMgZGlyZWN0b3J5IGhhbmRsaW5nIGluIHRoZSBmaWxlIHN5c3RlbXMsIGBuYW1laS5jYCwgYG9wZW4uY2AsIGFuZCBhIG5ldyBzZWxmdGVzdC5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBhY3R1YWxseSBjaGFuZ2luZy4gTW9zdGx5LCB0aGVyZSBhcmUgdGhlc2UgYE9fSVNfTUtESVIoZmxhZ3MpYCBjaGVja3MgYW5kIGZsYWcgbWFuaXB1bGF0aW9ucyBpbiB0aG9zZSBgKl9hdG9taWNfb3BlbmAgZnVuY3Rpb25zIHRvIHRyZWF0IHRoZSByZXF1ZXN0IHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSBhcyBgT19DUkVBVGAgKndpdGhvdXQqIGBPX0RJUkVDVE9SWWAgYXMgdGhlIGNvbW1vbiBiZWhhdmlvciBvZiB0aGUgcGF0Y2guXG5cbkluIGBuYW1laS5jYCwgaXQncyBtb2RpZnlpbmcgdGhlIHN0aWNreSBiaXQgaGFuZGxpbmcsIGhvdyBkaXJlY3RvcnkgY3JlYXRpb24gaXMgaGFuZGxlZCBpbiBwZXJtaXNzaW9uIGNoZWNrcyBhbmQgdGhlIG1vZGUgaXMgc2V0LCBhcyB3ZWxsIGFzIGhhbmRsaW5nIGBmc25vdGlmeWAgZXZlbnRzIGFuZCB0aGUga2V5IGBsb29rdXBfb3BlbmAgY2FsbHMuIEl0IGludHJvZHVjZXMgYHZmc19ta2Rpcl9ub19wZXJtYCBhbmQgYHZmc19ta2RpcmAuIEFsc28sIGl0IGNhbGxzIGB2ZnNfbWtkaXJfbm9fcGVybWAgd2hlcmUgaXQgdXNlZCB0byBjYWxsIGB2ZnNfY3JlYXRlX25vX3Blcm1gLlxuXG5gb3Blbi5jYCBpcyB1cGRhdGVkIHRvIHNldCB0aGUgbW9kZSBhbmQgaGFuZGxlIHRoZSB0bXBmaWxlIGZsYWcgYW5kIHJldHVybiBgLUVOT1RESVJgIGNvcnJlY3RseSwgYmFzZWQgb24gdGhlc2UgbmV3IGZsYWdzLlxuXG5XZSd2ZSBnb3QgdGhlIG5ldyBgT19JU19NS0RJUmAgbWFjcm8gZGVmaW5lZCBpbiBgZmNudGwuaGAgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHNlbGZ0ZXN0LlxuXG5TbywgYW0gSSBzZWVpbmcgbmV3IFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzPyBOb3QgZnJvbSB0aGUgaW5pdGlhbCByZXZpZXcuIFRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1c2VyLXNwYWNlIGV4cG9zZWQgZGF0YSBzdHJ1Y3R1cmVzLCBvciBhbGxvY2F0aW9ucyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBvciBpbnRyb2R1Y2UgYW55IG5ldyBidWZmZXJzIG9yIGFueSBjb3B5IGNhbGxzLiBJdCdzIHByaW1hcmlseSBjb250cm9sIGZsb3cgYW5kIGZsYWcgaGFuZGxpbmcsIG1ha2luZyBpdCBhIGxvZ2ljIGNoYW5nZS4gSWYgdGhlcmUgYXJlIGJ1Z3MsIHRoZXkncmUgbW9zdCBsaWtlbHkgbG9naWMgZXJyb3JzLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLiBLQVNBTiwgTE9DS0RFUCwgYW5kIHRoZSB1c3VhbCBidWcgZGV0ZWN0b3JzICpzaG91bGQqIGNhdGNoIHRob3NlLlxuXG5Pa2F5LCBsZXQncyBqdXN0IG1ha2UgKnN1cmUqIHdlJ3JlIG5vdCBhY2NpZGVudGFsbHkgdXNpbmcgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhbnl3aGVyZS4gYHZmc19ta2Rpcl9ub19wZXJtYCB0YWtlcyBhbGwgdGhlIGV4cGVjdGVkIGFyZ3VtZW50czogYW4gaW5vZGUsIGRlbnRyeSwgbW9kZSwgZXRjLiBhbmQgY2FsbHMgdGhlIGlub2RlJ3MgbWtkaXIgbWV0aG9kLiBBbGwgZ29vZC5cblxuTm93IGluIGBsb29rdXBfb3BlbmA6IElmIHRoZSBjcmVhdGVfZGlyIGZsYWcgaXMgc2V0LCBpdCBjYWxscyBgdmZzX21rZGlyX25vX3Blcm1gLiBJdCB1c2VzIHRoZSBgZGVsZWdhdGVkX2lub2RlYCBzdHJ1Y3QsIGRlZmluZWQgYXMgYHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlO2AuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCB2YXJpYWJsZSBpbiBgZnMvbmFtZWkuY2Agc291cmNlIGNvZGUuIEl0IHNlZW1zIGxpa2UgdGhlIHZhcmlhYmxlIGlzIGRlY2xhcmVkIGFuZCB1c2VkIGluIGEgd2F5IHRoYXQgKnNob3VsZCogYmUgc2FmZS5cblxuQmFzZWQgb24gdGhlIGV2aWRlbmNlIEkgc2VlLCB0aGlzIGRvZXMgKm5vdCogbG9vayBsaWtlIGl0IHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MjAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTY6MTY6MzMuNzA2Njg1MDE1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE0NzI1NDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGRlbGVnYXRlZF9pbm9kZSBkZWxlZ2F0ZWRfaW5vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmFtZWkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uYW1laS5jPTQ0OTc9c3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL25hbWVpLmMtNDQ5OS17XFxuZnMvbmFtZWkuYzo0NTAwOlxcdHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlID0geyB9O1xcbmZzL25hbWVpLmMtNDUwMS1cXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcDtcXG4tLVxcbmZzL25hbWVpLmM9NTUxMT1pbnQgZmlsZW5hbWVfbWtkaXJhdChpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUsIHVtb2RlX3QgbW9kZSlcXG4tLVxcbmZzL25hbWVpLmMtNTUxNi1cXHR1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzID0gTE9PS1VQX0RJUkVDVE9SWTtcXG5mcy9uYW1laS5jOjU1MTc6XFx0c3RydWN0IGRlbGVnYXRlZF9pbm9kZSBkZWxlZ2F0ZWRfaW5vZGUgPSB7IH07XFxuZnMvbmFtZWkuYy01NTE4LVxcbi0tXFxuZnMvbmFtZWkuYz01NjE3PWludCBmaWxlbmFtZV9ybWRpcihpbnQgZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpXFxuLS1cXG5mcy9uYW1laS5jLTU2MjQtXFx0dW5zaWduZWQgaW50IGxvb2t1cF9mbGFncyA9IDA7XFxuZnMvbmFtZWkuYzo1NjI1OlxcdHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlID0geyB9O1xcbmZzL25hbWVpLmMtNTYyNi1yZXRyeTpcXG4tLVxcbmZzL25hbWVpLmM9NTc2MT1pbnQgZmlsZW5hbWVfdW5saW5rYXQoaW50IGRmZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKVxcbi0tXFxuZnMvbmFtZWkuYy01NzY4LVxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuZnMvbmFtZWkuYzo1NzY5OlxcdHN0cnVjdCBkZWxlZ2F0ZWRfaW5vZGUgZGVsZWdhdGVkX2lub2RlID0geyB9O1xcbmZzL25hbWVpLmMtNTc3MC1cXHR1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzID0gMDtcXG4tLVxcbmZzL25hbWVpLmM9NTg4NT1pbnQgZmlsZW5hbWVfc3ltbGlua2F0KHN0cnVjdCBmaWxlbmFtZSAqZnJvbSwgaW50IG5ld2RmZCwgc3RydWN0IGZpbGVuYW1lICp0bylcXG4tLVxcbmZzL25hbWVpLmMtNTg5MC1cXHR1bnNpZ25lZCBpbnQgbG9va3VwX2ZsYWdzID0gMDtcXG5mcy9uYW1laS5jOjU4OTE6XFx0c3RydWN0IGRlbGVnYXRlZF9pbm9kZSBkZWxlZ2F0ZWRfaW5vZGUgPSB7IH07XFxuZnMvbmFtZWkuYy01ODkyLVxcbi0tXFxuZnMvbmFtZWkuYz02MDMzPWludCBmaWxlbmFtZV9saW5rYXQoaW50IG9sZGRmZCwgc3RydWN0IGZpbGVuYW1lICpvbGQsXFxuLS1cXG5mcy9uYW1laS5jLTYwMzgtXFx0c3RydWN0IHBhdGggb2xkX3BhdGgsIG5ld19wYXRoO1xcbmZzL25hbWVpLmM6NjAzOTpcXHRzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlIGRlbGVnYXRlZF9pbm9kZSA9IHsgfTtcXG5mcy9uYW1laS5jLTYwNDAtXFx0aW50IGhvdyA9IDA7XFxuLS1cXG5mcy9uYW1laS5jPTYzMzE9aW50IGZpbGVuYW1lX3JlbmFtZWF0MihpbnQgb2xkZGZkLCBzdHJ1Y3QgZmlsZW5hbWUgKmZyb20sXFxuLS1cXG5mcy9uYW1laS5jLTYzMzctXFx0ZW51bSBsYXN0X3R5cGUgb2xkX3R5cGUsIG5ld190eXBlO1xcbmZzL25hbWVpLmM6NjMzODpcXHRzdHJ1Y3QgZGVsZWdhdGVkX2lub2RlIGRlbGVnYXRlZF9pbm9kZSA9IHsgfTtcXG5mcy9uYW1laS5jLTYzMzktXFx0dW5zaWduZWQgaW50IGxvb2t1cF9mbGFncyA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE2OjE2OjMzLjg1ODE2MTQ3OVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDA1OTQ3OTY1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBPcGVuYXQgT19DUkVBVCB8IE9fRElSRUNUT1JZIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgbG9va3MgY2xlYW4gZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIFRoZXkncmUgYWRkaW5nIGEgZmVhdHVyZSwgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAsIHRvIGBvcGVuYXRgLCB3aGljaCBpcyBzZW5zaWJsZSBmb3IgbWFuYWdpbmcgZGlyZWN0b3J5IGNyZWF0aW9uLiBUaGUgYGRlbGVnYXRlZF9pbm9kZWAgaXMgaW5pdGlhbGl6ZWQgYXMgYHsgfWAsIHNvIHdlJ3JlIHN0YXJ0aW5nIHdpdGggYSBjbGVhbiBzbGF0ZSB0aGVyZS5cblxuVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgZmxhZyBoYW5kbGluZyBhbmQgY29udHJvbCBmbG93IHdpdGhpbiB0aGUgVkZTIGFuZCBmaWxlc3lzdGVtcy4gSXQncyBlc3NlbnRpYWxseSBhYm91dCByb3V0aW5nIGRpcmVjdG9yeSBjcmVhdGlvbiByZXF1ZXN0cyB2aWEgYG9wZW5hdGAgbW9yZSBjb25zaXN0ZW50bHkuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhpbmdzIGxpa2UgdGhlIGBPX0lTX01LRElSYCBtYWNybywgbW9kaWZpY2F0aW9ucyB0byBgYnVpbGRfb3Blbl9mbGFncygpYCwgYW5kIHVwZGF0ZXMgdG8gZnVuY3Rpb25zIGxpa2UgYGxvb2t1cF9vcGVuKClgLCBgdmZzX21rZGlyKClgLCBhbmQgYGF0b21pY19vcGVuKClgLiBJbXBvcnRhbnRseSwgaXQgc2VlbXMgbGlrZSB0aGV5J3JlIGVuc3VyaW5nIGRpcmVjdG9yeSBjcmVhdGlvbiBnb2VzIGRvd24gdGhlIHByb3BlciwgbWtkaXItc3BlY2lmaWMgcGF0aHMsIGxldmVyYWdpbmcgZXhpc3RpbmcgbWVjaGFuaXNtcyBsaWtlIGB2ZnNfbWtkaXJfbm9fcGVybSgpYCBhbmQgYHNlY3VyaXR5X3BhdGhfbWtkaXIoKWAuXG5cblRoaW5raW5nIGFib3V0IHBvdGVudGlhbCByaXNrcywgYmVjYXVzZSBpdCBpcyBwdXJlbHkgbG9naWNhbCBjaGFuZ2VzLCBhbmQgaXQncyBub3QgaW50cm9kdWNpbmcgY29tcGxleCBuZXcgZGF0YSBzdHJ1Y3R1cmVzIG9yIGRpcmVjdGx5IGV4cG9zaW5nIGludGVybmFsIGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlIHRyYWRpdGlvbmFsIG1lbW9yeSBlcnJvciBkZXRlY3RvcnMsIHBhcnRpY3VsYXJseSBLQVNBTiwgYXJlIGxpa2VseSBzdWZmaWNpZW50IHRvIGRldGVjdCBhbnkgaXNzdWVzLiBBbnkgYnVncyBhcmUgbXVjaCBtb3JlIGxpa2VseSB0byBtYW5pZmVzdCBhcyBsb2dpYyBlcnJvcnMsIGRlcmVmZXJlbmNlcywgb3Igb3V0LW9mLWJvdW5kcyByZWFkcy93cml0ZXMuIFRoZXNlIGFyZSBhbGwgdGhpbmdzIHRoYXQgS0FTQU4gc2hvdWxkIGJlIGFibGUgdG8gZmxhZyBlZmZlY3RpdmVseS4gVGhlIGRlc2lnbiBzZWVtcyBzb3VuZCBhbmQgYXZvaWRzIHRoZSBwaXRmYWxscyB0aGF0IHdvdWxkIHdhcnJhbnQgS01TQU4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjIyLCJPdXRwdXRUb2tlbnMiOjI2NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxNjoxNjo0My45MTc2NDM1MTNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgVkZTIGFuZCB2YXJpb3VzIGZpbGVzeXN0ZW1zIHRvIHN1cHBvcnQgY3JlYXRpbmcgZGlyZWN0b3JpZXMgdmlhIGBvcGVuYXQoKWAgd2l0aCB0aGUgYE9fQ1JFQVQgfCBPX0RJUkVDVE9SWWAgZmxhZ3MuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIGFkZGluZyB0aGUgYE9fSVNfTUtESVJgIG1hY3JvLCBtb2RpZnlpbmcgYGJ1aWxkX29wZW5fZmxhZ3MoKWAgdG8gaGFuZGxlIHRoZSBuZXcgZmxhZyBjb21iaW5hdGlvbiwgYW5kIHVwZGF0aW5nIGBsb29rdXBfb3BlbigpYCBhbmQgYHZmc19ta2RpcigpYCBwYXRocyBpbiBgZnMvbmFtZWkuY2AgdG8gcm91dGUgZGlyZWN0b3J5IGNyZWF0aW9uIHJlcXVlc3RzIHRvIGB2ZnNfbWtkaXJfbm9fcGVybSgpYCBpbnN0ZWFkIG9mIHJlZ3VsYXIgZmlsZSBjcmVhdGlvbiBmdW5jdGlvbnMuXFxuXFxuVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IGxvZ2ljYWwsIGFsdGVyaW5nIGNvbnRyb2wgZmxvdyBhbmQgZmxhZyBoYW5kbGluZyB3aXRoaW4gdGhlIFZGUyBsYXllci4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gQWxsIHZhcmlhYmxlcyB1c2VkIChzdWNoIGFzIGBkZWxlZ2F0ZWRfaW5vZGVgKSBhcmUgcHJvcGVybHkgemVyby1pbml0aWFsaXplZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgbG9naWMgZXJyb3JzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCBuZWNlc3NpdGF0ZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBWRlMgYW5kIHZhcmlvdXMgZmlsZXN5c3RlbXMgdG8gc3VwcG9ydCBjcmVhdGluZyBkaXJlY3RvcmllcyB2aWEgYG9wZW5hdCgpYCB3aXRoIHRoZSBgT19DUkVBVCB8IE9fRElSRUNUT1JZYCBmbGFncy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgYWRkaW5nIHRoZSBgT19JU19NS0RJUmAgbWFjcm8sIG1vZGlmeWluZyBgYnVpbGRfb3Blbl9mbGFncygpYCB0byBoYW5kbGUgdGhlIG5ldyBmbGFnIGNvbWJpbmF0aW9uLCBhbmQgdXBkYXRpbmcgYGxvb2t1cF9vcGVuKClgIGFuZCBgdmZzX21rZGlyKClgIHBhdGhzIGluIGBmcy9uYW1laS5jYCB0byByb3V0ZSBkaXJlY3RvcnkgY3JlYXRpb24gcmVxdWVzdHMgdG8gYHZmc19ta2Rpcl9ub19wZXJtKClgIGluc3RlYWQgb2YgcmVndWxhciBmaWxlIGNyZWF0aW9uIGZ1bmN0aW9ucy5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgbG9naWNhbCwgYWx0ZXJpbmcgY29udHJvbCBmbG93IGFuZCBmbGFnIGhhbmRsaW5nIHdpdGhpbiB0aGUgVkZTIGxheWVyLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBBbGwgdmFyaWFibGVzIHVzZWQgKHN1Y2ggYXMgYGRlbGVnYXRlZF9pbm9kZWApIGFyZSBwcm9wZXJseSB6ZXJvLWluaXRpYWxpemVkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowlgk96[1] Phase: Succeeded StartedAt: 2026-08-23 16:16:55 +0000 UTC FinishedAt: 2026-08-23 16:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-23 16:16:55 +0000 UTC FinishedAt: 2026-08-23 16:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2] Phase: Succeeded StartedAt: 2026-08-23 16:16:55 +0000 UTC FinishedAt: 2026-08-23 20:00:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN) Phase: Succeeded StartedAt: 2026-08-23 16:16:55 +0000 UTC FinishedAt: 2026-08-23 20:00:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-23 16:16:55 +0000 UTC FinishedAt: 2026-08-23 16:17:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-23 16:16:55 +0000 UTC FinishedAt: 2026-08-23 16:17:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowlgk96/series-workflowlgk96-convert-artifact-3759990718/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-23 16:17:05 +0000 UTC FinishedAt: 2026-08-23 16:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-23 16:17:05 +0000 UTC FinishedAt: 2026-08-23 16:33:23 +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:*e2e2b4bd-b6fb-483e-aa99-ee9a6fb5c295,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-workflowlgk96/series-workflowlgk96-convert-artifact-3759990718/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": "4b7c090a-296d-44ff-b013-012b41402202", "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-workflowlgk96/series-workflowlgk96-build-action-26525860/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-23 16:17:05 +0000 UTC FinishedAt: 2026-08-23 16:33:13 +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:*e2e2b4bd-b6fb-483e-aa99-ee9a6fb5c295,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-workflowlgk96/series-workflowlgk96-convert-artifact-3759990718/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": "4b7c090a-296d-44ff-b013-012b41402202", "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-workflowlgk96/series-workflowlgk96-build-action-26525860/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-23 16:33:23 +0000 UTC FinishedAt: 2026-08-23 16:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-23 16:33:23 +0000 UTC FinishedAt: 2026-08-23 16:33:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-23 16:33:23 +0000 UTC FinishedAt: 2026-08-23 16:33:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-23 16:33:23 +0000 UTC FinishedAt: 2026-08-23 16:33:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowlgk96/series-workflowlgk96-convert-artifact-1191873777/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-23 16:33:33 +0000 UTC FinishedAt: 2026-08-23 16:35:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-23 16:33:33 +0000 UTC FinishedAt: 2026-08-23 16:35:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4b7c090a-296d-44ff-b013-012b41402202,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-workflowlgk96/series-workflowlgk96-build-action-26525860/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-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-23 16:35:45 +0000 UTC FinishedAt: 2026-08-23 16:35:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-23 16:35:45 +0000 UTC FinishedAt: 2026-08-23 16:35:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-23 16:35:45 +0000 UTC FinishedAt: 2026-08-23 16:52:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-23 16:35:45 +0000 UTC FinishedAt: 2026-08-23 16:52:10 +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:*e2e2b4bd-b6fb-483e-aa99-ee9a6fb5c295,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-workflowlgk96/series-workflowlgk96-convert-artifact-1191873777/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": "60543e9e-38fe-468c-bf86-11b01c834b25", "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-workflowlgk96/series-workflowlgk96-build-action-3042978493/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-23 16:35:45 +0000 UTC FinishedAt: 2026-08-23 16:52:00 +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:*e2e2b4bd-b6fb-483e-aa99-ee9a6fb5c295,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-workflowlgk96/series-workflowlgk96-convert-artifact-1191873777/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": "60543e9e-38fe-468c-bf86-11b01c834b25", "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-workflowlgk96/series-workflowlgk96-build-action-3042978493/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-23 16:52:10 +0000 UTC FinishedAt: 2026-08-23 16:52:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-23 16:52:10 +0000 UTC FinishedAt: 2026-08-23 16:52:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-23 16:52:10 +0000 UTC FinishedAt: 2026-08-23 16:54:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-23 16:52:10 +0000 UTC FinishedAt: 2026-08-23 16:53:52 +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:*60543e9e-38fe-468c-bf86-11b01c834b25,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-workflowlgk96/series-workflowlgk96-build-action-3042978493/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-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-23 16:54:02 +0000 UTC FinishedAt: 2026-08-23 20:00:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-23 16:54:02 +0000 UTC FinishedAt: 2026-08-23 20:00:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*4b7c090a-296d-44ff-b013-012b41402202,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*60543e9e-38fe-468c-bf86-11b01c834b25,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-workflowlgk96/series-workflowlgk96-build-action-26525860/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-workflowlgk96/series-workflowlgk96-build-action-3042978493/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-23 16:54:02 +0000 UTC FinishedAt: 2026-08-23 16:54:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-23 16:54:02 +0000 UTC FinishedAt: 2026-08-23 16:54:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlgk96/series-workflowlgk96-convert-artifact-2110956454/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-23 16:54:02 +0000 UTC FinishedAt: 2026-08-23 16:54:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-23 16:54:02 +0000 UTC FinishedAt: 2026-08-23 16:54:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[10].run-retest Phase: Succeeded StartedAt: 2026-08-23 16:54:03 +0000 UTC FinishedAt: 2026-08-23 17:41:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:retest-data,Default:nil,Value:*{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*4b7c090a-296d-44ff-b013-012b41402202,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*60543e9e-38fe-468c-bf86-11b01c834b25,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,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-workflowlgk96/series-workflowlgk96-build-action-26525860/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-workflowlgk96/series-workflowlgk96-build-action-3042978493/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[10].run-retest[0] Phase: Succeeded StartedAt: 2026-08-23 16:54:03 +0000 UTC FinishedAt: 2026-08-23 16:54:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[10].run-retest[0].save-retest-task Phase: Succeeded StartedAt: 2026-08-23 16:54:03 +0000 UTC FinishedAt: 2026-08-23 16:54:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},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-workflowlgk96/series-workflowlgk96-convert-artifact-2725063149/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-23 16:54:13 +0000 UTC FinishedAt: 2026-08-23 20:00:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-23 16:54:13 +0000 UTC FinishedAt: 2026-08-23 20:00:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4b7c090a-296d-44ff-b013-012b41402202,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*60543e9e-38fe-468c-bf86-11b01c834b25,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-workflowlgk96/series-workflowlgk96-build-action-26525860/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-workflowlgk96/series-workflowlgk96-build-action-3042978493/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-workflowlgk96/series-workflowlgk96-convert-artifact-2110956454/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,} --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[10].run-retest[1] Phase: Succeeded StartedAt: 2026-08-23 16:54:13 +0000 UTC FinishedAt: 2026-08-23 17:41:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlgk96[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_mkdir","vfs_create","vfs_lookup_open","dentry_create","filename_mkdirat","filename_unlinkat","filename_renameat2","v9fs_vfs_atomic_open","v9fs_vfs_atomic_open_dotl","ceph_atomic_open","fuse_atomic_open","gfs2_atomic_open","nfs_atomic_open","nfs_atomic_open_v23","cifs_atomic_open","vboxsf_dir_atomic_open"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["9P_FS","CEPH_FS","FUSE_FS","GFS2_FS","NFS_FS","CIFS","VBOXSF_FS"],"series_id":"9c6e0cff-a88b-4746-8ab0-9db0532c23f8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["512f2832-177b-4b65-b835-bdff3e4402bc","7bdf5f73-8cce-4785-aa9e-dd89622cf613","6d4f386f-fb66-4862-b644-4ac19c79f6a3"]},track:KASAN)[10].run-retest[1].retest Phase: Succeeded StartedAt: 2026-08-23 16:54:13 +0000 UTC FinishedAt: 2026-08-23 17:41:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4b7c090a-296d-44ff-b013-012b41402202,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*60543e9e-38fe-468c-bf86-11b01c834b25,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Previous reproducers,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-workflowlgk96/series-workflowlgk96-build-action-26525860/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-workflowlgk96/series-workflowlgk96-build-action-3042978493/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:retest-task,Path:/data/retest.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-workflowlgk96/series-workflowlgk96-convert-artifact-2725063149/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,}