Name: series-workflowtbg6t Phase: Succeeded StartedAt: 2026-07-22 13:37:41 +0000 UTC FinishedAt: 2026-07-22 18:04:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[0] Phase: Succeeded StartedAt: 2026-07-22 13:37:41 +0000 UTC FinishedAt: 2026-07-22 13:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[0].run-triage Phase: Succeeded StartedAt: 2026-07-22 13:37:41 +0000 UTC FinishedAt: 2026-07-22 13:59:14 +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": "e61e6fd4f139f2342a6bc86da602df7456ef87f6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_VERITY", "XFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "e61e6fd4f139f2342a6bc86da602df7456ef87f6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_VERITY", "XFS_FS" ], "series_id": "f9af06ff-2752-4dc6-89f9-dbc566fd8f0d" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "xfs_fsverity_begin_enable", "xfs_fsverity_end_enable", "xfs_fsverity_get_descriptor", "xfs_fsverity_read_merkle", "xfs_fsverity_readahead_merkle_tree", "xfs_fsverity_write_merkle", "xfs_fsverity_delete_metadata", "xfs_fsverity_cancel_unwritten", "xfs_fsverity_write_descriptor", "xchk_inode_setup_verity", "xchk_inode_verity_broken", "xrep_inode_verity", "xfs_read_ioend_compare", "xfs_end_ioend_read", "xfs_iomap_writepages", "fsverity_ensure_verity_info", "fsverity_pagecache_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDEzOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX1ZFUklUWSYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9lbmRfZW5hYmxlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvciYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X3JlYWRhaGVhZF9tZXJrbGVfdHJlZSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4mIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3ImIzM0OywKICAgICYjMzQ7eGNoa19pbm9kZV9zZXR1cF92ZXJpdHkmIzM0OywKICAgICYjMzQ7eGNoa19pbm9kZV92ZXJpdHlfYnJva2VuJiMzNDssCiAgICAmIzM0O3hyZXBfaW5vZGVfdmVyaXR5JiMzNDssCiAgICAmIzM0O3hmc19yZWFkX2lvZW5kX2NvbXBhcmUmIzM0OywKICAgICYjMzQ7eGZzX2VuZF9pb2VuZF9yZWFkJiMzNDssCiAgICAmIzM0O3hmc19pb21hcF93cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O2ZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyYjMzQ7LAogICAgJiMzNDtmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGZzLXZlcml0eSBzdXBwb3J0IGZvciB0aGUgWEZTIGZpbGVzeXN0ZW0uIEl0IGludHJvZHVjZXMgYSBuZXcgZmlsZSBgZnMveGZzL3hmc19mc3Zlcml0eS5jYCB3aXRoIHRoZSBjb3JlIGxvZ2ljLCBtb2RpZmllcyBYRlMgSS9PIHBhdGhzLCBhbmQgaW50ZWdyYXRlcyB3aXRoIHRoZSBnZW5lcmljIGZzLXZlcml0eSBsYXllci4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTM6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjZDFiM2M1ZGQ4YWE1ZDgwMzIyM2NkZmVkYWNjMDJiNjRiMjZjZWQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTM6NTg6NDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYXR0ci5jIGIvZnMvYXR0ci5jXG5pbmRleCA0ZjQzN2ZhYmI3ZjBmNS4uNzE4ODhhYzkwM2MyN2QgMTAwNjQ0XG4tLS0gYS9mcy9hdHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2F0dHIuY1xuQEAgLTE3Niw3ICYjNDM7MTc2LDcgQEAgaW50IHNldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0XHQgKiBjb3ZlcmVkIGJ5IHRoZSBvcGVuLXRpbWUgY2hlY2sgYmVjYXVzZSBzeXNfdHJ1bmNhdGUoKSB0YWtlcyBhXG4gXHRcdCAqIHBhdGgsIG5vdCBhbiBvcGVuIGZpbGUuXG4gXHRcdCAqL1xuLVx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfVkVSSVRZKSBcdTAwMjZcdTAwMjYgSVNfVkVSSVRZKGlub2RlKSlcbiYjNDM7XHRcdGlmIChJU19WRVJJVFkoaW5vZGUpKVxuIFx0XHRcdHJldHVybiAtRVBFUk07XG4gXG4gXHRcdGVycm9yID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgYXR0ci1cdTAwM2VpYV9zaXplKTtcbmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuY1xuaW5kZXggMjcyNTk4ZjZhZTc3YWYuLmRlNzI5YzQ0ZDZkMjUxIDEwMDY0NFxuLS0tIGEvZnMvYnRyZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnRyZnMvaW5vZGUuY1xuQEAgLTgwNDAsNyAmIzQzOzgwNDAsNiBAQCBzdGF0aWMgaW50IGJ0cmZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShwYXRoLVx1MDAzZWRlbnRyeSk7XG4gXHR1MzIgYmxvY2tzaXplID0gYnRyZnNfc2IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc2VjdG9yc2l6ZTtcbiBcdHUzMiBiaV9mbGFncyA9IEJUUkZTX0koaW5vZGUpLVx1MDAzZWZsYWdzO1xuLVx0dTMyIGJpX3JvX2ZsYWdzID0gQlRSRlNfSShpbm9kZSktXHUwMDNlcm9fZmxhZ3M7XG4gXG4gXHRzdGF0LVx1MDAzZXJlc3VsdF9tYXNrIHw9IFNUQVRYX0JUSU1FO1xuIFx0c3RhdC1cdTAwM2VidGltZS50dl9zZWMgPSBCVFJGU19JKGlub2RlKS1cdTAwM2VpX290aW1lX3NlYztcbkBAIC04MDUzLDggJiM0Mzs4MDUyLDYgQEAgc3RhdGljIGludCBidHJmc19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9JTU1VVEFCTEU7XG4gXHRpZiAoYmlfZmxhZ3MgXHUwMDI2IEJUUkZTX0lOT0RFX05PRFVNUClcbiBcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfTk9EVU1QO1xuLVx0aWYgKGJpX3JvX2ZsYWdzIFx1MDAyNiBCVFJGU19JTk9ERV9ST19WRVJJVFkpXG4tXHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX1ZFUklUWTtcbiBcbiBcdHN0YXQtXHUwMDNlYXR0cmlidXRlc19tYXNrIHw9IChTVEFUWF9BVFRSX0FQUEVORCB8XG4gXHRcdFx0XHQgIFNUQVRYX0FUVFJfQ09NUFJFU1NFRCB8XG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdmVyaXR5LmMgYi9mcy9idHJmcy92ZXJpdHkuY1xuaW5kZXggOTgzMzY1YTczNTQxNjguLmJkNzllMzQzYWUyMzdmIDEwMDY0NFxuLS0tIGEvZnMvYnRyZnMvdmVyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2J0cmZzL3Zlcml0eS5jXG5AQCAtNzczLDExICYjNDM7NzczLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqYnRyZnNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gICogQGJ1ZjpcdE1lcmtsZSB0cmVlIGJsb2NrIHRvIHdyaXRlXG4gICogQHBvczpcdHRoZSBwb3NpdGlvbiBvZiB0aGUgYmxvY2sgaW4gdGhlIE1lcmtsZSB0cmVlIChpbiBieXRlcylcbiAgKiBAc2l6ZTpcdHRoZSBNZXJrbGUgdHJlZSBibG9jayBzaXplIChpbiBieXRlcylcbiYjNDM7ICogQHplcm9fZGlnZXN0Olx0dGhlIGhhc2ggb2YgdGhlIGFsbC16ZXJvZXMgYmxvY2tcbiYjNDM7ICogQGRpZ2VzdF9zaXplOlx0c2l6ZSBvZiB6ZXJvX2RpZ2VzdCwgaW4gYnl0ZXNcbiAgKlxuICAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZVxuICAqL1xuIHN0YXRpYyBpbnQgYnRyZnNfd3JpdGVfbWVya2xlX3RyZWVfYmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1Zixcbi1cdFx0XHRcdFx0IHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKVxuJiM0MztcdFx0XHRcdFx0IHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxuJiM0MztcdFx0XHRcdFx0IGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCxcbiYjNDM7XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4gXHRsb2ZmX3QgbWVya2xlX3BvcyA9IG1lcmtsZV9maWxlX3Bvcyhpbm9kZSk7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXG5pbmRleCBjZTk5ODA3YzVmNWIyYy4uOTlmYTdhMjg5NTFmNWUgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTYyNTAsMTUgJiM0Mzs2MjUwLDEyIEBAIGludCBleHQ0X2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuIFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9JTU1VVEFCTEU7XG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEVYVDRfTk9EVU1QX0ZMKVxuIFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9OT0RVTVA7XG4tXHRpZiAoZmxhZ3MgXHUwMDI2IEVYVDRfVkVSSVRZX0ZMKVxuLVx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9WRVJJVFk7XG4gXG4gXHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXNfbWFzayB8PSAoU1RBVFhfQVRUUl9BUFBFTkQgfFxuIFx0XHRcdFx0ICBTVEFUWF9BVFRSX0NPTVBSRVNTRUQgfFxuIFx0XHRcdFx0ICBTVEFUWF9BVFRSX0VOQ1JZUFRFRCB8XG4gXHRcdFx0XHQgIFNUQVRYX0FUVFJfSU1NVVRBQkxFIHxcbi1cdFx0XHRcdCAgU1RBVFhfQVRUUl9OT0RVTVAgfFxuLVx0XHRcdFx0ICBTVEFUWF9BVFRSX1ZFUklUWSk7XG4mIzQzO1x0XHRcdFx0ICBTVEFUWF9BVFRSX05PRFVNUCk7XG4gXG4gXHRnZW5lcmljX2ZpbGxhdHRyKGlkbWFwLCByZXF1ZXN0X21hc2ssIGlub2RlLCBzdGF0KTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvdmVyaXR5LmMgYi9mcy9leHQ0L3Zlcml0eS5jXG5pbmRleCBjYTYxZGE1M2YzMTNmYS4uYWM1YzEzM2Y1NTI5MjUgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3Zlcml0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3Zlcml0eS5jXG5AQCAtMzQsMzIgJiM0MzszNCw2IEBAIHN0YXRpYyBpbmxpbmUgbG9mZl90IGV4dDRfdmVyaXR5X21ldGFkYXRhX3Bvcyhjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0cmV0dXJuIHJvdW5kX3VwKGlub2RlLVx1MDAzZWlfc2l6ZSwgNjU1MzYpO1xuIH1cbiBcbi0vKlxuLSAqIFJlYWQgc29tZSB2ZXJpdHkgbWV0YWRhdGEgZnJvbSB0aGUgaW5vZGUuICBfX3Zmc19yZWFkKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZVxuLSAqIHdlIG5lZWQgdG8gcmVhZCBiZXlvbmQgaV9zaXplLlxuLSAqL1xuLXN0YXRpYyBpbnQgcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsXG4tXHRcdFx0ICBsb2ZmX3QgcG9zKVxuLXtcbi1cdHdoaWxlIChjb3VudCkge1xuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0XHRzaXplX3Qgbjtcbi1cbi1cdFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8oaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4tXHRcdFx0XHRcdCBOVUxMKTtcbi1cdFx0aWYgKElTX0VSUihmb2xpbykpXG4tXHRcdFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xuLVxuLVx0XHRuID0gbWVtY3B5X2Zyb21fZmlsZV9mb2xpbyhidWYsIGZvbGlvLCBwb3MsIGNvdW50KTtcbi1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cbi1cdFx0YnVmICYjNDM7PSBuO1xuLVx0XHRwb3MgJiM0Mzs9IG47XG4tXHRcdGNvdW50IC09IG47XG4tXHR9XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gLypcbiAgKiBXcml0ZSBzb21lIHZlcml0eSBtZXRhZGF0YSB0byB0aGUgaW5vZGUgZm9yIEZTX0lPQ19FTkFCTEVfVkVSSVRZLlxuICAqIGtlcm5lbF93cml0ZSgpIGNhbiYjMzk7dCBiZSB1c2VkIGJlY2F1c2UgdGhlIGZpbGUgZGVzY3JpcHRvciBpcyByZWFkb25seS5cbkBAIC0zMTEsOCAmIzQzOzI4NSw4IEBAIHN0YXRpYyBpbnQgZXh0NF9nZXRfdmVyaXR5X2Rlc2NyaXB0b3JfbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0Z290byBiYWQ7XG4gXHRkZXNjX3NpemVfcG9zIC09IHNpemVvZihkZXNjX3NpemVfZGlzayk7XG4gXG4tXHRlcnIgPSBwYWdlY2FjaGVfcmVhZChpbm9kZSwgXHUwMDI2ZGVzY19zaXplX2Rpc2ssIHNpemVvZihkZXNjX3NpemVfZGlzayksXG4tXHRcdFx0ICAgICBkZXNjX3NpemVfcG9zKTtcbiYjNDM7XHRlcnIgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgXHUwMDI2ZGVzY19zaXplX2Rpc2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSwgZGVzY19zaXplX3Bvcyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0ZGVzY19zaXplID0gbGUzMl90b19jcHUoZGVzY19zaXplX2Rpc2spO1xuQEAgLTM1Miw3ICYjNDM7MzI2LDcgQEAgc3RhdGljIGludCBleHQ0X2dldF92ZXJpdHlfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsXG4gXHRpZiAoYnVmX3NpemUpIHtcbiBcdFx0aWYgKGRlc2Nfc2l6ZSBcdTAwM2UgYnVmX3NpemUpXG4gXHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4tXHRcdGVyciA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIGRlc2Nfc2l6ZSwgZGVzY19wb3MpO1xuJiM0MztcdFx0ZXJyID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0zNzQsNyAmIzQzOzM0OCw5IEBAIHN0YXRpYyB2b2lkIGV4dDRfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gfVxuIFxuIHN0YXRpYyBpbnQgZXh0NF93cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLFxuLVx0XHRcdFx0XHR1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbiYjNDM7XHRcdFx0XHRcdHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxuJiM0MztcdFx0XHRcdFx0Y29uc3QgdTggKnplcm9fZGlnZXN0LFxuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKVxuIHtcbiBcdHBvcyAmIzQzOz0gZXh0NF92ZXJpdHlfbWV0YWRhdGFfcG9zKGZpbGVfaW5vZGUoZmlsZSkpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZmlsZS5jIGIvZnMvZjJmcy9maWxlLmNcbmluZGV4IDRiNTJjNTZkNzFmMDdmLi45YjUzMWEwMTZlZDRkOSAxMDA2NDRcbi0tLSBhL2ZzL2YyZnMvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mMmZzL2ZpbGUuY1xuQEAgLTEwMjQsMTUgJiM0MzsxMDI0LDEyIEBAIGludCBmMmZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuIFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9JTU1VVEFCTEU7XG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEYyRlNfTk9EVU1QX0ZMKVxuIFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9OT0RVTVA7XG4tXHRpZiAoSVNfVkVSSVRZKGlub2RlKSlcbi1cdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfVkVSSVRZO1xuIFxuIFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzX21hc2sgfD0gKFNUQVRYX0FUVFJfQ09NUFJFU1NFRCB8XG4gXHRcdFx0XHQgIFNUQVRYX0FUVFJfQVBQRU5EIHxcbiBcdFx0XHRcdCAgU1RBVFhfQVRUUl9FTkNSWVBURUQgfFxuIFx0XHRcdFx0ICBTVEFUWF9BVFRSX0lNTVVUQUJMRSB8XG4tXHRcdFx0XHQgIFNUQVRYX0FUVFJfTk9EVU1QIHxcbi1cdFx0XHRcdCAgU1RBVFhfQVRUUl9WRVJJVFkpO1xuJiM0MztcdFx0XHRcdCAgU1RBVFhfQVRUUl9OT0RVTVApO1xuIFxuIFx0Z2VuZXJpY19maWxsYXR0cihpZG1hcCwgcmVxdWVzdF9tYXNrLCBpbm9kZSwgc3RhdCk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZjJmcy92ZXJpdHkuYyBiL2ZzL2YyZnMvdmVyaXR5LmNcbmluZGV4IDM5ZjQ4MjUxNTQ0NTJhLi5mM2E0NjE3NjU2ZGI5YiAxMDA2NDRcbi0tLSBhL2ZzL2YyZnMvdmVyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2YyZnMvdmVyaXR5LmNcbkBAIC0zNywzNCAmIzQzOzM3LDYgQEAgc3RhdGljIGlubGluZSBsb2ZmX3QgZjJmc192ZXJpdHlfbWV0YWRhdGFfcG9zKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gcm91bmRfdXAoaW5vZGUtXHUwMDNlaV9zaXplLCA2NTUzNik7XG4gfVxuIFxuLS8qXG4tICogUmVhZCBzb21lIHZlcml0eSBtZXRhZGF0YSBmcm9tIHRoZSBpbm9kZS4gIF9fdmZzX3JlYWQoKSBjYW4mIzM5O3QgYmUgdXNlZCBiZWNhdXNlXG4tICogd2UgbmVlZCB0byByZWFkIGJleW9uZCBpX3NpemUuXG4tICovXG4tc3RhdGljIGludCBwYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbi1cdFx0XHQgIGxvZmZfdCBwb3MpXG4te1xuLVx0d2hpbGUgKGNvdW50KSB7XG4tXHRcdHNpemVfdCBuID0gbWluX3Qoc2l6ZV90LCBjb3VudCxcbi1cdFx0XHRcdCBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShwb3MpKTtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4tXG4tXHRcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbi1cdFx0XHRcdFx0IE5VTEwpO1xuLVx0XHRpZiAoSVNfRVJSKHBhZ2UpKVxuLVx0XHRcdHJldHVybiBQVFJfRVJSKHBhZ2UpO1xuLVxuLVx0XHRtZW1jcHlfZnJvbV9wYWdlKGJ1ZiwgcGFnZSwgb2Zmc2V0X2luX3BhZ2UocG9zKSwgbik7XG4tXG4tXHRcdHB1dF9wYWdlKHBhZ2UpO1xuLVxuLVx0XHRidWYgJiM0Mzs9IG47XG4tXHRcdHBvcyAmIzQzOz0gbjtcbi1cdFx0Y291bnQgLT0gbjtcbi1cdH1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIFdyaXRlIHNvbWUgdmVyaXR5IG1ldGFkYXRhIHRvIHRoZSBpbm9kZSBmb3IgRlNfSU9DX0VOQUJMRV9WRVJJVFkuXG4gICoga2VybmVsX3dyaXRlKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIHJlYWRvbmx5LlxuQEAgLTI1MCw3ICYjNDM7MjIyLDcgQEAgc3RhdGljIGludCBmMmZzX2dldF92ZXJpdHlfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsXG4gXHRpZiAoYnVmX3NpemUpIHtcbiBcdFx0aWYgKHNpemUgXHUwMDNlIGJ1Zl9zaXplKVxuIFx0XHRcdHJldHVybiAtRVJBTkdFO1xuLVx0XHRyZXMgPSBwYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBzaXplLCBwb3MpO1xuJiM0MztcdFx0cmVzID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1Ziwgc2l6ZSwgcG9zKTtcbiBcdFx0aWYgKHJlcylcbiBcdFx0XHRyZXR1cm4gcmVzO1xuIFx0fVxuQEAgLTI3Miw3ICYjNDM7MjQ0LDkgQEAgc3RhdGljIHZvaWQgZjJmc19yZWFkYWhlYWRfbWVya2xlX3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiB9XG4gXG4gc3RhdGljIGludCBmMmZzX3dyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsXG4tXHRcdFx0XHRcdHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKVxuJiM0MztcdFx0XHRcdFx0dTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsXG4mIzQzO1x0XHRcdFx0XHRjb25zdCB1OCAqemVyb19kaWdlc3QsXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpXG4ge1xuIFx0cG9zICYjNDM7PSBmMmZzX3Zlcml0eV9tZXRhZGF0YV9wb3MoZmlsZV9pbm9kZShmaWxlKSk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZmlsZV9hdHRyLmMgYi9mcy9maWxlX2F0dHIuY1xuaW5kZXggYmZiMDBkMjU2ZGQ1NjAuLjU0MjRlYzRlMzk0OTNmIDEwMDY0NFxuLS0tIGEvZnMvZmlsZV9hdHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZpbGVfYXR0ci5jXG5AQCAtMjQ2LDYgJiM0MzsyNDYsMTEgQEAgc3RhdGljIGludCBmaWxlYXR0cl9zZXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0aWYgKGZhLVx1MDAzZWZzeF9jb3dleHRzaXplID09IDApXG4gXHRcdGZhLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2PSB+RlNfWEZMQUdfQ09XRVhUU0laRTtcbiBcbiYjNDM7XHQvKiBDYW4gbm90IGVuYWJsZSBEQVggb24gZnN2ZXJpdHkgZmlsZSAqL1xuJiM0MztcdGlmICgob2xkX21hLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX1ZFUklUWSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdGZhLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX0RBWClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy9pb21hcC9pb2VuZC5jIGIvZnMvaW9tYXAvaW9lbmQuY1xuaW5kZXggMDU2NTMyODc2NGMxNzUuLjhlNDZiN2YxYWE2YTk3IDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvaW9lbmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW9tYXAvaW9lbmQuY1xuQEAgLTQsNyAmIzQzOzQsNiBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby1pbnRlZ3JpdHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X3NvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dyaXRlYmFjay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnNlcnJvci5oXHUwMDNlXG5AQCAtNDI1LDcgJiM0Mzs0MjQsNyBAQCB2b2lkIGlvbWFwX2lvZW5kX3RyeV9tZXJnZShzdHJ1Y3QgaW9tYXBfaW9lbmQgKmlvZW5kLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pb2VuZF90cnlfbWVyZ2UpO1xuIFxuLXN0YXRpYyBpbnQgaW9tYXBfaW9lbmRfY29tcGFyZSh2b2lkICpwcml2LCBjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICphLFxuJiM0MztpbnQgaW9tYXBfaW9lbmRfY29tcGFyZSh2b2lkICpwcml2LCBjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICphLFxuIFx0XHRjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpiKVxuIHtcbiBcdHN0cnVjdCBpb21hcF9pb2VuZCAqaWEgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IGlvbWFwX2lvZW5kLCBpb19saXN0KTtcbkBAIC00MzcsMTAgJiM0Mzs0MzYsMTEgQEAgc3RhdGljIGludCBpb21hcF9pb2VuZF9jb21wYXJlKHZvaWQgKnByaXYsIGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmEsXG4gXHRcdHJldHVybiAxO1xuIFx0cmV0dXJuIDA7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pb2VuZF9jb21wYXJlKTtcbiBcbi12b2lkIGlvbWFwX3NvcnRfaW9lbmRzKHN0cnVjdCBsaXN0X2hlYWQgKmlvZW5kX2xpc3QpXG4mIzQzO3ZvaWQgaW9tYXBfc29ydF9pb2VuZHMoc3RydWN0IGxpc3RfaGVhZCAqaW9lbmRfbGlzdCwgbGlzdF9jbXBfZnVuY190IGNtcClcbiB7XG4tXHRsaXN0X3NvcnQoTlVMTCwgaW9lbmRfbGlzdCwgaW9tYXBfaW9lbmRfY29tcGFyZSk7XG4mIzQzO1x0bGlzdF9zb3J0KE5VTEwsIGlvZW5kX2xpc3QsIGNtcCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3NvcnRfaW9lbmRzKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9zdGF0LmMgYi9mcy9zdGF0LmNcbmluZGV4IDg5OTA5NzQ2YmVkMTllLi5hZTEyOTliZDc0MzY2YyAxMDA2NDRcbi0tLSBhL2ZzL3N0YXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3RhdC5jXG5AQCAtMjAzLDggJiM0MzsyMDMsMTIgQEAgaW50IHZmc19nZXRhdHRyX25vc2VjKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQsXG4gXHRpZiAoSVNfREFYKGlub2RlKSlcbiBcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfREFYO1xuIFxuJiM0MztcdGlmIChJU19WRVJJVFkoaW5vZGUpKVxuJiM0MztcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfVkVSSVRZO1xuJiM0MztcbiBcdHN0YXQtXHUwMDNlYXR0cmlidXRlc19tYXNrIHw9IChTVEFUWF9BVFRSX0FVVE9NT1VOVCB8XG4tXHRcdFx0XHQgIFNUQVRYX0FUVFJfREFYKTtcbiYjNDM7XHRcdFx0XHQgIFNUQVRYX0FUVFJfREFYIHxcbiYjNDM7XHRcdFx0XHQgIFNUQVRYX0FUVFJfVkVSSVRZKTtcbiBcbiBcdGlkbWFwID0gbW50X2lkbWFwKHBhdGgtXHUwMDNlbW50KTtcbiBcdGlmIChpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWdldGF0dHIpIHtcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvZW5hYmxlLmMgYi9mcy92ZXJpdHkvZW5hYmxlLmNcbmluZGV4IDQyZGZlZDFjZTBjZTY2Li5hZDRmZjcxZDdkZDk1YiAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9lbmFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmVyaXR5L2VuYWJsZS5jXG5AQCAtNTAsNyAmIzQzOzUwLDkgQEAgc3RhdGljIGludCB3cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgdTggKmJ1ZixcbiBcdGludCBlcnI7XG4gXG4gXHRlcnIgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfdm9wLVx1MDAzZXdyaXRlX21lcmtsZV90cmVlX2Jsb2NrKGZpbGUsIGJ1ZiwgcG9zLFxuLVx0XHRcdFx0XHRcdFx0ICBwYXJhbXMtXHUwMDNlYmxvY2tfc2l6ZSk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBwYXJhbXMtXHUwMDNlYmxvY2tfc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIHBhcmFtcy1cdTAwM2V6ZXJvX2RpZ2VzdCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIHBhcmFtcy1cdTAwM2VkaWdlc3Rfc2l6ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRmc3Zlcml0eV9lcnIoaW5vZGUsIFwmIzM0O0Vycm9yICVkIHdyaXRpbmcgTWVya2xlIHRyZWUgYmxvY2sgJWx1XCYjMzQ7LFxuIFx0XHRcdCAgICAgZXJyLCBpbmRleCk7XG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L29wZW4uYyBiL2ZzL3Zlcml0eS9vcGVuLmNcbmluZGV4IGQwYzU2YTdmYWEzYmIxLi44NzVlODg1MGNjYmFjZSAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9vcGVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zlcml0eS9vcGVuLmNcbkBAIC0zNDcsNyAmIzQzOzM0NywyNCBAQCBpbnQgZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3Ioc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGVuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0MzsvKipcbiYjNDM7ICogZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKCkgLSBjYWNoZSB2ZXJpdHkgaW5mbyBpZiBpdCYjMzk7cyBub3QgYWxyZWFkeSBjYWNoZWRcbiYjNDM7ICogQGlub2RlOiB0aGUgaW5vZGUgZm9yIHdoaWNoIHZlcml0eSBpbmZvIHNob3VsZCBiZSBjYWNoZWRcbiYjNDM7ICpcbiYjNDM7ICogRW5zdXJlIHRoaXMgaW5vZGUgaGFzIHZlcml0eSBpbmZvIGF0dGFjaGVkIHRvIGl0LCBpdCYjMzk7cyBhc3N1bWVkIHRoZSBpbm9kZVxuJiM0MzsgKiBhbHJlYWR5IGhhcyBmc3Zlcml0eSBlbmFibGVkLiBSZWFkIGZzdmVyaXR5IGRlc2NyaXB0b3IgYW5kIGNyZWF0ZXMgdmVyaXR5XG4mIzQzOyAqIGJhc2VkIG9uIHRoYXQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGF0IGxlYXN0IG9uY2UgYmVmb3JlIGFueSBvZiB0aGUgaW5vZGUmIzM5O3MgZGF0YVxuJiM0MzsgKiBjYW4gYmUgdmVyaWZpZWQgKGFuZCB0aHVzIHJlYWQgYXQgYWxsKSBvciB0aGUgaW5vZGUmIzM5O3MgZnN2ZXJpdHkgZGlnZXN0XG4mIzQzOyAqIHJldHJpZXZlZC4gIGZzdmVyaXR5X2ZpbGVfb3BlbigpIGNhbGxzIHRoaXMgYWxyZWFkeSwgd2hpY2ggaGFuZGxlc1xuJiM0MzsgKiBub3JtYWwgZmlsZSBhY2Nlc3Nlcy4gIElmIGEgZmlsZXN5c3RlbSBkb2VzIGFueSBpbnRlcm5hbCAoaS5lLiBub3RcbiYjNDM7ICogYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSBkZXNjcmlwdG9yKSByZWFkcyBvZiB0aGUgZmlsZSYjMzk7cyBkYXRhIG9yXG4mIzQzOyAqIGZzdmVyaXR5IGRpZ2VzdCwgaXQgbXVzdCBjYWxsIHRoaXMgZXhwbGljaXRseSBiZWZvcmUgZG9pbmcgc28uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZVxuJiM0MzsgKi9cbiYjNDM7aW50IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSA9IGZzdmVyaXR5X2dldF9pbmZvKGlub2RlKSwgKmZvdW5kO1xuIFx0c3RydWN0IGZzdmVyaXR5X2Rlc2NyaXB0b3IgKmRlc2M7XG5AQCAtMzgzLDEyICYjNDM7NDAwLDEzIEBAIHN0YXRpYyBpbnQgZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRrZnJlZShkZXNjKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8pO1xuIFxuIGludCBfX2ZzdmVyaXR5X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiB7XG4gXHRpZiAoZmlscC1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1dSSVRFKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuLVx0cmV0dXJuIGVuc3VyZV92ZXJpdHlfaW5mbyhpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhpbm9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKF9fZnN2ZXJpdHlfZmlsZV9vcGVuKTtcbiBcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvcGFnZWNhY2hlLmMgYi9mcy92ZXJpdHkvcGFnZWNhY2hlLmNcbmluZGV4IDk5ZjVmNTNlZWE5ODVmLi4yNzBhYmQ2NTJlNDhjNiAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9wYWdlY2FjaGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jXG5AQCAtNjgsMTMgJiM0Mzs2OCw2NCBAQCBFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZSk7XG4gdm9pZCBmc3Zlcml0eV9maWxsX3plcm9oYXNoKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4sXG4gXHRcdFx0ICAgICAgc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpKVxuIHtcbi1cdHNpemVfdCBvZmYgPSBvZmZzZXQ7XG4mIzQzO1x0dm9pZCAqdmFkZHI7XG4mIzQzO1x0dm9pZCAqdG87XG4mIzQzO1x0c2l6ZV90IGNodW5rO1xuIFxuIFx0V0FSTl9PTl9PTkNFKCFJU19BTElHTkVEKG9mZnNldCwgdmktXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpKTtcbiBcdFdBUk5fT05fT05DRSghSVNfQUxJR05FRChsZW4sIHZpLVx1MDAzZXRyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFKG9mZnNldCAmIzQzOyBsZW4gXHUwMDNlIGZvbGlvX3NpemUoZm9saW8pKTtcbiBcbi1cdGZvciAoOyBvZmYgXHUwMDNjIChvZmZzZXQgJiM0MzsgbGVuKTsgb2ZmICYjNDM7PSB2aS1cdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSlcbi1cdFx0bWVtY3B5X3RvX2ZvbGlvKGZvbGlvLCBvZmYsIHZpLVx1MDAzZXRyZWVfcGFyYW1zLnplcm9fZGlnZXN0LFxuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHZhZGRyID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgb2Zmc2V0KTtcbiYjNDM7XHRcdGNodW5rID0gbGVuO1xuJiM0MztcdFx0dG8gPSB2YWRkcjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsX2ttYXAoZm9saW8pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGNodW5rIFx1MDAzZSBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpKVxuJiM0MztcdFx0XHRjaHVuayA9IFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKG9mZnNldCk7XG4mIzQzO1x0XHRmb3IgKDsgdG8gXHUwMDNjICh2YWRkciAmIzQzOyBjaHVuayk7IHRvICYjNDM7PSB2aS1cdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSlcbiYjNDM7XHRcdFx0bWVtY3B5KHRvLCB2aS1cdTAwM2V0cmVlX3BhcmFtcy56ZXJvX2RpZ2VzdCxcbiBcdFx0XHRcdHZpLVx1MDAzZXRyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKTtcbiYjNDM7XHRcdGt1bm1hcF9sb2NhbCh2YWRkcik7XG4mIzQzO1xuJiM0MztcdFx0b2Zmc2V0ICYjNDM7PSBjaHVuaztcbiYjNDM7XHRcdGxlbiAtPSBjaHVuaztcbiYjNDM7XHR9IHdoaWxlIChsZW4gXHUwMDNlIDApO1xuJiM0MztcbiYjNDM7XHRmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9maWxsX3plcm9oYXNoKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZCgpIC0gcmVhZCBwYWdlIGFuZCBjb3B5IGRhdGEgdG8gYnVmZmVyXG4mIzQzOyAqIEBpbm9kZTpcdGNvcHkgZnJvbSB0aGlzIGlub2RlJiMzOTtzIGFkZHJlc3Mgc3BhY2VcbiYjNDM7ICogQGJ1ZjpcdGJ1ZmZlciB0byBjb3B5IHRvXG4mIzQzOyAqIEBjb3VudDpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4mIzQzOyAqIEBwb3M6XHRwb3NpdGlvbiBvZiB0aGUgZm9saW8gdG8gY29weSBmcm9tXG4mIzQzOyAqXG4mIzQzOyAqIFJlYWQgc29tZSB2ZXJpdHkgbWV0YWRhdGEgZnJvbSB0aGUgaW5vZGUuICBfX3Zmc19yZWFkKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZVxuJiM0MzsgKiB3ZSBuZWVkIHRvIHJlYWQgYmV5b25kIGlfc2l6ZS5cbiYjNDM7ICovXG4mIzQzO2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbiYjNDM7XHRcdFx0ICBsb2ZmX3QgcG9zKVxuJiM0Mzt7XG4mIzQzO1x0d2hpbGUgKGNvdW50KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdFx0c2l6ZV90IG47XG4mIzQzO1xuJiM0MztcdFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8oaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4mIzQzO1x0XHRcdFx0XHQgTlVMTCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbiYjNDM7XHRcdFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xuJiM0MztcbiYjNDM7XHRcdG4gPSBtZW1jcHlfZnJvbV9maWxlX2ZvbGlvKGJ1ZiwgZm9saW8sIHBvcywgY291bnQpO1xuJiM0MztcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0XHRidWYgJiM0Mzs9IG47XG4mIzQzO1x0XHRwb3MgJiM0Mzs9IG47XG4mIzQzO1x0XHRjb3VudCAtPSBuO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZCk7XG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L3ZlcmlmeS5jIGIvZnMvdmVyaXR5L3ZlcmlmeS5jXG5pbmRleCA0MDA0YTFkNDI4NzUxZi4uZGI4YzM1MDIzNGJiNzEgMTAwNjQ0XG4tLS0gYS9mcy92ZXJpdHkvdmVyaWZ5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zlcml0eS92ZXJpZnkuY1xuQEAgLTksNiAmIzQzOzksNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnNlcnJvci5oXHUwMDNlXG4gXG4gI2RlZmluZSBGU19WRVJJVFlfTUFYX1BFTkRJTkdfQkxPQ0tTIDJcbiBcbkBAIC0yMDUsNiAmIzQzOzIwNiw4IEBAIHN0YXRpYyBib29sIHZlcmlmeV9kYXRhX2Jsb2NrKHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSxcbiBcdFx0aWYgKG1lbWNocl9pbnYoZGJsb2NrLVx1MDAzZWRhdGEsIDAsIHBhcmFtcy1cdTAwM2VibG9ja19zaXplKSkge1xuIFx0XHRcdGZzdmVyaXR5X2Vycihpbm9kZSxcbiBcdFx0XHRcdCAgICAgXCYjMzQ7RklMRSBDT1JSVVBURUQhICBEYXRhIHBhc3QgRU9GIGlzIG5vdCB6ZXJvZWRcJiMzNDspO1xuJiM0MztcdFx0XHRmc2Vycm9yX3JlcG9ydF9kYXRhX2xvc3QoaW5vZGUsIGRhdGFfcG9zLFxuJiM0MztcdFx0XHRcdFx0XHQgcGFyYW1zLVx1MDAzZWJsb2NrX3NpemUsIEdGUF9OT0ZTKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtMzEyLDYgJiM0MzszMTUsNyBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlfZGF0YV9ibG9jayhzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmksXG4gXHRcdGRhdGFfcG9zLCBsZXZlbCAtIDEsIHBhcmFtcy1cdTAwM2VoYXNoX2FsZy1cdTAwM2VuYW1lLCBoc2l6ZSwgd2FudF9oYXNoLFxuIFx0XHRwYXJhbXMtXHUwMDNlaGFzaF9hbGctXHUwMDNlbmFtZSwgaHNpemUsXG4gXHRcdGxldmVsID09IDAgPyBkYmxvY2stXHUwMDNlcmVhbF9oYXNoIDogcmVhbF9oYXNoKTtcbiYjNDM7XHRmc2Vycm9yX3JlcG9ydF9kYXRhX2xvc3QoaW5vZGUsIGRhdGFfcG9zLCBwYXJhbXMtXHUwMDNlYmxvY2tfc2l6ZSwgR0ZQX05PRlMpO1xuIGVycm9yOlxuIFx0Zm9yICg7IGxldmVsIFx1MDAzZSAwOyBsZXZlbC0tKSB7XG4gXHRcdGt1bm1hcF9sb2NhbChoYmxvY2tzW2xldmVsIC0gMV0uYWRkcik7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL01ha2VmaWxlIGIvZnMveGZzL01ha2VmaWxlXG5pbmRleCA5ZjcxMzNlMDI1NzY4ZC4uMzhiN2Y1MWU1ZDg0MDUgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9NYWtlZmlsZVxuQEAgLTE0OSw2ICYjNDM7MTQ5LDcgQEAgeGZzLSQoQ09ORklHX1hGU19QT1NJWF9BQ0wpXHQmIzQzOz0geGZzX2FjbC5vXG4geGZzLSQoQ09ORklHX1NZU0NUTClcdFx0JiM0Mzs9IHhmc19zeXNjdGwub1xuIHhmcy0kKENPTkZJR19DT01QQVQpXHRcdCYjNDM7PSB4ZnNfaW9jdGwzMi5vXG4geGZzLSQoQ09ORklHX0VYUE9SVEZTX0JMT0NLX09QUylcdCYjNDM7PSB4ZnNfcG5mcy5vXG4mIzQzO3hmcy0kKENPTkZJR19GU19WRVJJVFkpXHRcdCYjNDM7PSB4ZnNfZnN2ZXJpdHkub1xuIFxuICMgbm90aWZ5IGZhaWx1cmVcbiBpZmVxICgkKENPTkZJR19NRU1PUllfRkFJTFVSRSkseSlcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmNcbmluZGV4IGQ2NGRlZmVkYTY0NWVkLi5jYzQ4ZjZlMjBlODAwMCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXG5AQCAtNDEsNiAmIzQzOzQxLDggQEBcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfaW5vZGVfdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGZzX3J0Z3JvdXAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc196b25lX2FsbG9jLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eGZzX2ZzdmVyaXR5LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuIHN0cnVjdCBrbWVtX2NhY2hlXHRcdCp4ZnNfYm1hcF9pbnRlbnRfY2FjaGU7XG4gXG5AQCAtNDQwMiw2ICYjNDM7NDQwNCwxMCBAQCB4ZnNfYm1hcGlfY29udmVydF9vbmVfZGVsYWxsb2MoXG4gXHQgKiB0aGUgZXh0ZW50LiAgSnVzdCByZXR1cm4gdGhlIHJlYWwgZXh0ZW50IGF0IHRoaXMgb2Zmc2V0LlxuIFx0ICovXG4gXHRpZiAoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSkge1xuJiM0MztcdFx0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIFhGU19GU0JfVE9fQihtcCwgYm1hLmdvdC5icl9zdGFydG9mZikgXHUwMDNlPVxuJiM0MztcdFx0XHQgICAgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXG4mIzQzO1x0XHRcdGZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XG4gXHRcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2Ym1hLmdvdCwgMCwgZmxhZ3MsXG4gXHRcdFx0XHR4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIGZsYWdzKSk7XG4gXHRcdGlmIChzZXEpXG5AQCAtNDQ0OSw2ICYjNDM7NDQ1NSwxMSBAQCB4ZnNfYm1hcGlfY29udmVydF9vbmVfZGVsYWxsb2MoXG4gXHRYRlNfU1RBVFNfQUREKG1wLCB4c194c3RyYXRfYnl0ZXMsIFhGU19GU0JfVE9fQihtcCwgYm1hLmxlbmd0aCkpO1xuIFx0WEZTX1NUQVRTX0lOQyhtcCwgeHNfeHN0cmF0X3F1aWNrKTtcbiBcbiYjNDM7XHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIFhGU19GU0JfVE9fQihtcCwgYm1hLmdvdC5icl9zdGFydG9mZikgXHUwMDNlPVxuJiM0MztcdFx0ICAgIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKVxuJiM0MztcdFx0ZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiYjNDM7XG4gXHRBU1NFUlQoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSk7XG4gXHR4ZnNfYm1idF90b19pb21hcChpcCwgaW9tYXAsIFx1MDAyNmJtYS5nb3QsIDAsIGZsYWdzLFxuIFx0XHRcdFx0eGZzX2lvbWFwX2lub2RlX3NlcXVlbmNlKGlwLCBmbGFncykpO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oIGIvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmhcbmluZGV4IGRkMGVkMDQ2ZmJlOWM5Li44YmUxYjEwMWIxOTY5OSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaFxuQEAgLTM3NCwxMSAmIzQzOzM3NCwxMyBAQCB4ZnNfc2JfaGFzX2NvbXBhdF9mZWF0dXJlKFxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JNQVBCVCAgICgxIFx1MDAzY1x1MDAzYyAxKVx0XHQvKiByZXZlcnNlIG1hcCBidHJlZSAqL1xuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JFRkxJTksgICgxIFx1MDAzY1x1MDAzYyAyKVx0XHQvKiByZWZsaW5rZWQgZmlsZXMgKi9cbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVCAoMSBcdTAwM2NcdTAwM2MgMylcdFx0LyogaW5vYnQgYmxvY2sgY291bnRzICovXG4mIzQzOyNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSAgICgxIFx1MDAzY1x1MDAzYyA0KVx0XHQvKiBmcy12ZXJpdHkgKi9cbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9BTEwgXFxcbiBcdFx0KFhGU19TQl9GRUFUX1JPX0NPTVBBVF9GSU5PQlQgfCBcXFxuIFx0XHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JNQVBCVCB8IFxcXG4tXHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOS3wgXFxcbi1cdFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVClcbiYjNDM7XHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOSyB8IFxcXG4mIzQzO1x0XHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0lOT0JUQ05UIHwgXFxcbiYjNDM7XHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZKVxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1VOS05PV05cdH5YRlNfU0JfRkVBVF9ST19DT01QQVRfQUxMXG4gc3RhdGljIGlubGluZSBib29sXG4geGZzX3NiX2hhc19yb19jb21wYXRfZmVhdHVyZShcbkBAIC0xMjMwLDE2ICYjNDM7MTIzMiwyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgeGZzX2Rpbm9kZV9wdXRfcmRldihzdHJ1Y3QgeGZzX2Rpbm9kZSAqZGlwLCB4ZnNfZGV2X3QgcmRldilcbiAgKi9cbiAjZGVmaW5lIFhGU19ESUZMQUcyX01FVEFEQVRBX0JJVFx0NVxuIFxuJiM0MzsvKiBpbm9kZXMgc2VhbGVkIHdpdGggZnMtdmVyaXR5ICovXG4mIzQzOyNkZWZpbmUgWEZTX0RJRkxBRzJfVkVSSVRZX0JJVFx0XHQ2XG4mIzQzO1xuICNkZWZpbmUgWEZTX0RJRkxBRzJfREFYXHRcdCgxVUxMIFx1MDAzY1x1MDAzYyBYRlNfRElGTEFHMl9EQVhfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfUkVGTElOS1x0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX1JFRkxJTktfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfQ09XRVhUU0laRVx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX0NPV0VYVFNJWkVfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfQklHVElNRVx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX0JJR1RJTUVfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfTlJFWFQ2NFx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX05SRVhUNjRfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfTUVUQURBVEFcdCgxVUxMIFx1MDAzY1x1MDAzYyBYRlNfRElGTEFHMl9NRVRBREFUQV9CSVQpXG4mIzQzOyNkZWZpbmUgWEZTX0RJRkxBRzJfVkVSSVRZXHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfVkVSSVRZX0JJVClcbiBcbiAjZGVmaW5lIFhGU19ESUZMQUcyX0FOWSBcXFxuIFx0KFhGU19ESUZMQUcyX0RBWCB8IFhGU19ESUZMQUcyX1JFRkxJTksgfCBYRlNfRElGTEFHMl9DT1dFWFRTSVpFIHwgXFxcbi1cdCBYRlNfRElGTEFHMl9CSUdUSU1FIHwgWEZTX0RJRkxBRzJfTlJFWFQ2NCB8IFhGU19ESUZMQUcyX01FVEFEQVRBKVxuJiM0MztcdCBYRlNfRElGTEFHMl9CSUdUSU1FIHwgWEZTX0RJRkxBRzJfTlJFWFQ2NCB8IFhGU19ESUZMQUcyX01FVEFEQVRBIHwgXFxcbiYjNDM7XHQgWEZTX0RJRkxBRzJfVkVSSVRZKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB4ZnNfZGlub2RlX2hhc19iaWd0aW1lKGNvbnN0IHN0cnVjdCB4ZnNfZGlub2RlICpkaXApXG4ge1xuQEAgLTIwMjcsNCAmIzQzOzIwMzQsMjYgQEAgc3RydWN0IHhmc19hY2wge1xuICNkZWZpbmUgU0dJX0FDTF9GSUxFX1NJWkVcdChzaXplb2YoU0dJX0FDTF9GSUxFKS0xKVxuICNkZWZpbmUgU0dJX0FDTF9ERUZBVUxUX1NJWkVcdChzaXplb2YoU0dJX0FDTF9ERUZBVUxUKS0xKVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBBdCBtYXhpbXVtIG9mIDggbGV2ZWxzIHdpdGggMTI4IGhhc2hlcyBwZXIgYmxvY2sgKDMyIGJ5dGVzIFNIQS0yNTYpIG1heGltdW1cbiYjNDM7ICogdHJlZSBzaXplIGlzICgoMTI4Xjgg4oiSIDEpLygxMjgg4oiSIDEpKSA9IDU2NyoxMF4xMiBibG9ja3MuIFRoaXMgc2hvdWxkIGZpdCBpblxuJiM0MzsgKiA1MyBiaXRzIGFkZHJlc3Mgc3BhY2UuXG4mIzQzOyAqXG4mIzQzOyAqIEF0IHRoaXMgTWVya2xlIHRyZWUgc2l6ZSB3ZSBjYW4gY292ZXIgMjk1RUIgbGFyZ2UgZmlsZS4gVGhpcyBpcyBtdWNoIGxhcmdlclxuJiM0MzsgKiB0aGFuIHRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIGZpbGUgc2l6ZS5cbiYjNDM7ICpcbiYjNDM7ICogRm9yIHNoYTUxMiB0aGUgbGFyZ2VzdCBmaWxlIHdlIGNhbiBjb3ZlciBlbmRzIGF0IDEgXHUwMDNjXHUwMDNjIDUwIG9mZnNldCwgdGhpcyBpcyBhbHNvXG4mIzQzOyAqIGdvb2QuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFhGU19GU1ZFUklUWV9MQVJHRVNUX0ZJTEVcdCgobG9mZl90KTFVTEwgXHUwMDNjXHUwMDNjIDUzKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQWxpZ25tZW50IG9mIHRoZSBmc3Zlcml0eSBtZXRhZGF0YSBwbGFjZW1lbnQuIFRoaXMgaXMgbGFyZ2VzdCBzdXBwb3J0ZWQgUEFHRVxuJiM0MzsgKiBTSVpFIGZvciBmc3Zlcml0eS4gVGhpcyBpcyB1c2VkIHRvIHNwYWNlIG91dCBkYXRhIGFuZCBtZXRhZGF0YSBpbiBwYWdlIGNhY2hlLlxuJiM0MzsgKiBUaGUgc3BhY2luZyBpcyBuZWNlc3NhcnkgZm9yIG5vbi1leHBvc3VyZSBvZiBtZXRhZGF0YSB0byB1c2Vyc3BhY2UgYW5kXG4mIzQzOyAqIGNvcnJlY3QgbWVya2xlIHRyZWUgc3ludGhlc2lzIGluIHRoZSBpb21hcC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgWEZTX0ZTVkVSSVRZX1NUQVJUX0FMSUdOXHQoNjU1MzYpXG4mIzQzO1xuJiM0MztcbiAjZW5kaWYgLyogX19YRlNfRk9STUFUX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2ZzLmggYi9mcy94ZnMvbGlieGZzL3hmc19mcy5oXG5pbmRleCAxODVmMDlmMzI3YzAwYy4uODRkNjJiNzUwNmE5YWQgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19mcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19mcy5oXG5AQCAtMjUwLDYgJiM0MzsyNTAsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfZnNvcF9yZXNibGtzIHtcbiAjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfUEFSRU5UXHQoMSBcdTAwM2NcdTAwM2MgMjUpIC8qIGxpbnV4IHBhcmVudCBwb2ludGVycyAqL1xuICNkZWZpbmUgWEZTX0ZTT1BfR0VPTV9GTEFHU19NRVRBRElSXHQoMSBcdTAwM2NcdTAwM2MgMjYpIC8qIG1ldGFkYXRhIGRpcmVjdG9yaWVzICovXG4gI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1pPTkVEXHQoMSBcdTAwM2NcdTAwM2MgMjcpIC8qIHpvbmVkIHJ0IGRldmljZSAqL1xuJiM0MzsjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfVkVSSVRZXHQoMSBcdTAwM2NcdTAwM2MgMjgpIC8qIGZzLXZlcml0eSAqL1xuIFxuIC8qXG4gICogTWluaW11bSBhbmQgbWF4aW11bSBzaXplcyBuZWVkIGZvciBncm93dGggY2hlY2tzLlxuQEAgLTQyMSw2ICYjNDM7NDIyLDcgQEAgc3RydWN0IHhmc19idWxrc3RhdCB7XG4gI2RlZmluZSBYRlNfQlNfU0lDS19TWU1MSU5LXHQoMSBcdTAwM2NcdTAwM2MgNikgIC8qIHN5bWJvbGljIGxpbmsgcmVtb3RlIHRhcmdldCAqL1xuICNkZWZpbmUgWEZTX0JTX1NJQ0tfUEFSRU5UXHQoMSBcdTAwM2NcdTAwM2MgNykgIC8qIHBhcmVudCBwb2ludGVycyAqL1xuICNkZWZpbmUgWEZTX0JTX1NJQ0tfRElSVFJFRVx0KDEgXHUwMDNjXHUwMDNjIDgpICAvKiBkaXJlY3RvcnkgdHJlZSBzdHJ1Y3R1cmUgKi9cbiYjNDM7I2RlZmluZSBYRlNfQlNfU0lDS19GU1ZFUklUWVx0KDEgXHUwMDNjXHUwMDNjIDkpICAvKiBmc3Zlcml0eSBtZXRhZGF0YSAqL1xuIFxuIC8qXG4gICogUHJvamVjdCBxdW90YSBpZCBoZWxwZXJzIChwcmV2aW91c2x5IHByb2ppZCB3YXMgMTZiaXQgb25seVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oIGIvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmhcbmluZGV4IDFkNDVjZjU3ODllODY0Li45MzJiNDQ3MTkwZGE3NiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaFxuQEAgLTEwNCw2ICYjNDM7MTA0LDcgQEAgc3RydWN0IHhmc19ydGdyb3VwO1xuIC8qIERvbiYjMzk7dCBwcm9wYWdhdGUgc2ljayBzdGF0dXMgdG8gYWcgaGVhbHRoIHN1bW1hcnkgZHVyaW5nIGluYWN0aXZhdGlvbiAqL1xuICNkZWZpbmUgWEZTX1NJQ0tfSU5PX0ZPUkdFVFx0KDEgXHUwMDNjXHUwMDNjIDEyKVxuICNkZWZpbmUgWEZTX1NJQ0tfSU5PX0RJUlRSRUVcdCgxIFx1MDAzY1x1MDAzYyAxMykgIC8qIGRpcmVjdG9yeSB0cmVlIHN0cnVjdHVyZSAqL1xuJiM0MzsjZGVmaW5lIFhGU19TSUNLX0lOT19GU1ZFUklUWVx0KDEgXHUwMDNjXHUwMDNjIDE0KSAgLyogZnN2ZXJpdHkgbWV0YWRhdGEgKi9cbiBcbiAvKiBQcmltYXJ5IGV2aWRlbmNlIG9mIGhlYWx0aCBwcm9ibGVtcyBpbiBhIGdpdmVuIGdyb3VwLiAqL1xuICNkZWZpbmUgWEZTX1NJQ0tfRlNfUFJJTUFSWVx0KFhGU19TSUNLX0ZTX0NPVU5URVJTIHwgXFxcbkBAIC0xNDAsNyAmIzQzOzE0MSw4IEBAIHN0cnVjdCB4ZnNfcnRncm91cDtcbiBcdFx0XHRcdCBYRlNfU0lDS19JTk9fWEFUVFIgfCBcXFxuIFx0XHRcdFx0IFhGU19TSUNLX0lOT19TWU1MSU5LIHwgXFxcbiBcdFx0XHRcdCBYRlNfU0lDS19JTk9fUEFSRU5UIHwgXFxcbi1cdFx0XHRcdCBYRlNfU0lDS19JTk9fRElSVFJFRSlcbiYjNDM7XHRcdFx0XHQgWEZTX1NJQ0tfSU5PX0RJUlRSRUUgfCBcXFxuJiM0MztcdFx0XHRcdCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpXG4gXG4gI2RlZmluZSBYRlNfU0lDS19JTk9fWkFQUEVEXHQoWEZTX1NJQ0tfSU5PX0JNQlREX1pBUFBFRCB8IFxcXG4gXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX0JNQlRBX1pBUFBFRCB8IFxcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmMgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuY1xuaW5kZXggMzM2ZWY4NDNmMmZlNGYuLmJkODBhMTlmMmUwOTI5IDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX2J1Zi5jXG5AQCAtNzYwLDYgJiM0Mzs3NjAsMTQgQEAgeGZzX2Rpbm9kZV92ZXJpZnkoXG4gXHQgICAgIXhmc19oYXNfcnRyZWZsaW5rKG1wKSlcbiBcdFx0cmV0dXJuIF9fdGhpc19hZGRyZXNzO1xuIFxuJiM0MztcdC8qIG9ubHkgcmVndWxhciBmaWxlcyBjYW4gaGF2ZSBmc3Zlcml0eSAqL1xuJiM0MztcdGlmIChmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX1ZFUklUWSkge1xuJiM0MztcdFx0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkpXG4mIzQzO1x0XHRcdHJldHVybiBfX3RoaXNfYWRkcmVzcztcbiYjNDM7XHRcdGlmICghU19JU1JFRyhtb2RlKSlcbiYjNDM7XHRcdFx0cmV0dXJuIF9fdGhpc19hZGRyZXNzO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoeGZzX2hhc196b25lZChtcCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgZGlwLVx1MDAzZWRpX21ldGF0eXBlID09IGNwdV90b19iZTE2KFhGU19NRVRBRklMRV9SVFJNQVApKSB7XG4gXHRcdGlmIChiZTMyX3RvX2NwdShkaXAtXHUwMDNlZGlfdXNlZF9ibG9ja3MpIFx1MDAzZSBtcC1cdTAwM2VtX3NiLnNiX3JnZXh0ZW50cylcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmMgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmNcbmluZGV4IDI1OGFjM2QwZDQ4NmU2Li41YTUxNmJkMzFjMzE3NSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfdXRpbC5jXG5AQCAtNzQsNyAmIzQzOzc0LDggQEAgeGZzX2ZsYWdzMmRpZmxhZ3MyKFxuIFx0dWludDY0X3RcdFx0ZGlfZmxhZ3MyID1cbiBcdFx0KGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IChYRlNfRElGTEFHMl9SRUZMSU5LIHxcbiBcdFx0XHRcdCAgIFhGU19ESUZMQUcyX0JJR1RJTUUgfFxuLVx0XHRcdFx0ICAgWEZTX0RJRkxBRzJfTlJFWFQ2NCkpO1xuJiM0MztcdFx0XHRcdCAgIFhGU19ESUZMQUcyX05SRVhUNjQgfFxuJiM0MztcdFx0XHRcdCAgIFhGU19ESUZMQUcyX1ZFUklUWSkpO1xuIFxuIFx0aWYgKHhmbGFncyBcdTAwMjYgRlNfWEZMQUdfREFYKVxuIFx0XHRkaV9mbGFnczIgfD0gWEZTX0RJRkxBRzJfREFYO1xuQEAgLTEyNiw2ICYjNDM7MTI3LDggQEAgeGZzX2lwMnhmbGFncyhcbiBcdFx0XHRmbGFncyB8PSBGU19YRkxBR19EQVg7XG4gXHRcdGlmIChpcC1cdTAwM2VpX2RpZmxhZ3MyIFx1MDAyNiBYRlNfRElGTEFHMl9DT1dFWFRTSVpFKVxuIFx0XHRcdGZsYWdzIHw9IEZTX1hGTEFHX0NPV0VYVFNJWkU7XG4mIzQzO1x0XHRpZiAoaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjYgWEZTX0RJRkxBRzJfVkVSSVRZKVxuJiM0MztcdFx0XHRmbGFncyB8PSBGU19YRkxBR19WRVJJVFk7XG4gXHR9XG4gXG4gXHRpZiAoeGZzX2lub2RlX2hhc19hdHRyX2ZvcmsoaXApKVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmMgYi9mcy94ZnMvbGlieGZzL3hmc19zYi5jXG5pbmRleCA0NzMyMmFkYjc2OTA1OS4uMjIyYmJlNTU1OWRmNDcgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19zYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19zYi5jXG5AQCAtMTY1LDYgJiM0MzsxNjUsOCBAQCB4ZnNfc2JfdmVyc2lvbl90b19mZWF0dXJlcyhcbiBcdFx0ZmVhdHVyZXMgfD0gWEZTX0ZFQVRfUkVGTElOSztcbiBcdGlmIChzYnAtXHUwMDNlc2JfZmVhdHVyZXNfcm9fY29tcGF0IFx1MDAyNiBYRlNfU0JfRkVBVF9ST19DT01QQVRfSU5PQlRDTlQpXG4gXHRcdGZlYXR1cmVzIHw9IFhGU19GRUFUX0lOT0JUQ05UO1xuJiM0MztcdGlmIChzYnAtXHUwMDNlc2JfZmVhdHVyZXNfcm9fY29tcGF0IFx1MDAyNiBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZKVxuJiM0MztcdFx0ZmVhdHVyZXMgfD0gWEZTX0ZFQVRfVkVSSVRZO1xuIFx0aWYgKHNicC1cdTAwM2VzYl9mZWF0dXJlc19pbmNvbXBhdCBcdTAwMjYgWEZTX1NCX0ZFQVRfSU5DT01QQVRfRlRZUEUpXG4gXHRcdGZlYXR1cmVzIHw9IFhGU19GRUFUX0ZUWVBFO1xuIFx0aWYgKHNicC1cdTAwM2VzYl9mZWF0dXJlc19pbmNvbXBhdCBcdTAwMjYgWEZTX1NCX0ZFQVRfSU5DT01QQVRfU1BJTk9ERVMpXG5AQCAtMTU4OCw2ICYjNDM7MTU5MCw4IEBAIHhmc19mc19nZW9tZXRyeShcbiBcdFx0Z2VvLVx1MDAzZWZsYWdzIHw9IFhGU19GU09QX0dFT01fRkxBR1NfTUVUQURJUjtcbiBcdGlmICh4ZnNfaGFzX3pvbmVkKG1wKSlcbiBcdFx0Z2VvLVx1MDAzZWZsYWdzIHw9IFhGU19GU09QX0dFT01fRkxBR1NfWk9ORUQ7XG4mIzQzO1x0aWYgKHhmc19oYXNfdmVyaXR5KG1wKSlcbiYjNDM7XHRcdGdlby1cdTAwM2VmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1ZFUklUWTtcbiBcdGdlby1cdTAwM2VydHNlY3RzaXplID0gc2JwLVx1MDAzZXNiX2Jsb2Nrc2l6ZTtcbiBcdGdlby1cdTAwM2VkaXJibG9ja3NpemUgPSB4ZnNfZGlyMl9kaXJibG9ja19ieXRlcyhzYnApO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uYyBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uY1xuaW5kZXggZTUyMzNlMzFhYmI3NTAuLjAyYjY4YmY0YzUxMjcwIDEwMDY0NFxuLS0tIGEvZnMveGZzL3NjcnViL2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvc2NydWIvY29tbW9uLmNcbkBAIC00NSw2ICYjNDM7NDUsOCBAQFxuICNpbmNsdWRlIFwmIzM0O3NjcnViL2hlYWx0aC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c2NydWIvdGVtcGZpbGUuaFwmIzM0O1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4mIzQzO1xuIC8qIENvbW1vbiBjb2RlIGZvciB0aGUgbWV0YWRhdGEgc2NydWJiZXJzLiAqL1xuIFxuIC8qXG5AQCAtMTc1NCwzICYjNDM7MTc1Niw1NiBAQCB4Y2hrX2lub2RlX2NvdW50X2Jsb2NrcyhcbiBcdHJldHVybiB4ZnNfYm1hcF9jb3VudF9ibG9ja3Moc2MtXHUwMDNldHAsIHNjLVx1MDAzZWlwLCB3aGljaGZvcmssIG5leHRlbnRzLFxuIFx0XHRcdGNvdW50KTtcbiB9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBJZiB0aGlzIGlub2RlIGhhcyBTX1ZFUklUWSBzZXQgb24gaXQsIHJlYWQgdGhlIHZlcml0eSBpbmZvLiBJZiB0aGUgcmVhZGluZ1xuJiM0MzsgKiBmYWlscyB3aXRoIGFueXRoaW5nIG90aGVyIHRoYW4gRU5PTUVNLCB0aGUgZmlsZSBpcyBjb3JydXB0LCB3aGljaCB3ZSBjYW5cbiYjNDM7ICogZGV0ZWN0IGxhdGVyIHdpdGggZnN2ZXJpdHlfYWN0aXZlLlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsZXJzIG11c3QgaG9sZCB0aGUgSU9MT0NLIGFuZCBtdXN0IG5vdCBob2xkIHRoZSBJTE9DSyBvZiBzYy1cdTAwM2VpcCBiZWNhdXNlXG4mIzQzOyAqIGFjdGl2YXRpb24gcmVhZHMgaW5vZGUgZGF0YS5cbiYjNDM7ICovXG4mIzQzO2ludFxuJiM0Mzt4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShcbiYjNDM7XHRzdHJ1Y3QgeGZzX3NjcnViXHQqc2MpXG4mIzQzO3tcbiYjNDM7XHRpbnRcdFx0XHRlcnJvcjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFmc3Zlcml0eV9hY3RpdmUoVkZTX0koc2MtXHUwMDNlaXApKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhWRlNfSShzYy1cdTAwM2VpcCkpO1xuJiM0MztcdHN3aXRjaCAoZXJyb3IpIHtcbiYjNDM7XHRjYXNlIDA6XG4mIzQzO1x0XHQvKiBmc3Zlcml0eSBpcyBhY3RpdmUgKi9cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgLUVOT0RBVEE6XG4mIzQzO1x0Y2FzZSAtRU1TR1NJWkU6XG4mIzQzO1x0Y2FzZSAtRUlOVkFMOlxuJiM0MztcdGNhc2UgLUVGU0NPUlJVUFRFRDpcbiYjNDM7XHRjYXNlIC1FRkJJRzpcbiYjNDM7XHRjYXNlIC1FUkFOR0U6XG4mIzQzO1x0Y2FzZSAtRUJBRE1TRzpcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgbm9uemVybyBlcnJubyBjb2RlcyBhYm92ZSBhcmUgdGhlIGVycm9yIGNvZGVzIHRoYXQgY2FuXG4mIzQzO1x0XHQgKiBiZSByZXR1cm5lZCBmcm9tIGZzdmVyaXR5IG9uIG1ldGFkYXRhIHZhbGlkYXRpb24gZXJyb3JzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0LyogcnVudGltZSBlcnJvcnMgKi9cbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBJcyB0aGlzIGEgdmVyaXR5IGZpbGUgdGhhdCBmYWlsZWQgdG8gYWN0aXZhdGU/ICBDYWxsZXJzIG11c3QgaGF2ZSB0cmllZCB0b1xuJiM0MzsgKiBhY3RpdmF0ZSBmc3Zlcml0eSB2aWEgeGNoa19pbm9kZV9zZXR1cF92ZXJpdHkuXG4mIzQzOyAqL1xuJiM0Mztib29sXG4mIzQzO3hjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbihcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZnN2ZXJpdHlfYWN0aXZlKFZGU19JKGlwKSkgXHUwMDI2XHUwMDI2ICFmc3Zlcml0eV9nZXRfaW5mbyhWRlNfSShpcCkpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2NvbW1vbi5oIGIvZnMveGZzL3NjcnViL2NvbW1vbi5oXG5pbmRleCA5ZDYyN2ZkNTA2ODdlNC4uM2RlMmI2MDA5YTk5NDEgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvc2NydWIvY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uaFxuQEAgLTI2OCw2ICYjNDM7MjY4LDggQEAgaW50IHhjaGtfaW5vZGVfaXNfYWxsb2NhdGVkKHN0cnVjdCB4ZnNfc2NydWIgKnNjLCB4ZnNfYWdpbm9fdCBhZ2lubyxcbiBcdFx0Ym9vbCAqaW51c2UpO1xuIGludCB4Y2hrX2lub2RlX2NvdW50X2Jsb2NrcyhzdHJ1Y3QgeGZzX3NjcnViICpzYywgaW50IHdoaWNoZm9yayxcbiBcdFx0eGZzX2V4dG51bV90ICpuZXh0ZW50cywgeGZzX2ZpbGJsa3NfdCAqY291bnQpO1xuJiM0MztpbnQgeGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoc3RydWN0IHhmc19zY3J1YiAqc2MpO1xuJiM0Mztib29sIHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbihzdHJ1Y3QgeGZzX2lub2RlICppcCk7XG4gXG4gYm9vbCB4Y2hrX2lub2RlX2lzX2RpcnRyZWVfcm9vdChjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCk7XG4gYm9vbCB4Y2hrX2lub2RlX2lzX3NiX3Jvb3RlZChjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCk7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2lub2RlLmMgYi9mcy94ZnMvc2NydWIvaW5vZGUuY1xuaW5kZXggNjViMTNlMzExOTE2ODEuLmQxY2RkNmI0NDVkMDE3IDEwMDY0NFxuLS0tIGEvZnMveGZzL3NjcnViL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jXG5AQCAtMzYsNiAmIzQzOzM2LDEwIEBAIHhjaGtfcHJlcGFyZV9pc2NydWIoXG4gXG4gXHR4Y2hrX2lsb2NrKHNjLCBYRlNfSU9MT0NLX0VYQ0wpO1xuIFxuJiM0MztcdGVycm9yID0geGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoc2MpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4gXHRlcnJvciA9IHhjaGtfdHJhbnNfYWxsb2Moc2MsIDApO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG5AQCAtODMzLDYgJiM0Mzs4MzcsOSBAQCB4Y2hrX2lub2RlKFxuIFx0aWYgKFNfSVNSRUcoVkZTX0koc2MtXHUwMDNlaXApLVx1MDAzZWlfbW9kZSkpXG4gXHRcdHhjaGtfaW5vZGVfY2hlY2tfcmVmbGlua19pZmxhZyhzYywgSV9JTk8oc2MtXHUwMDNlaXApKTtcbiBcbiYjNDM7XHRpZiAoeGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKHNjLVx1MDAzZWlwKSlcbiYjNDM7XHRcdHhjaGtfaW5vX3NldF9jb3JydXB0KHNjLCBzYy1cdTAwM2VzbS1cdTAwM2VzbV9pbm8pO1xuJiM0MztcbiBcdHhjaGtfaW5vZGVfY2hlY2tfdW5saW5rZWQoc2MpO1xuIFxuIFx0eGNoa19pbm9kZV94cmVmKHNjLCBJX0lOTyhzYy1cdTAwM2VpcCksIFx1MDAyNmRpKTtcbmRpZmYgLS1naXQgYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmMgYi9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNcbmluZGV4IDNlYzQxYzE5ODM1MTE2Li4zNWU5M2E0YjUwY2Q5ZiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9zY3J1Yi9pbm9kZV9yZXBhaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3NjcnViL2lub2RlX3JlcGFpci5jXG5AQCAtNTczLDYgJiM0Mzs1NzMsOCBAQCB4cmVwX2Rpbm9kZV9mbGFncyhcbiBcdFx0ZGlwLVx1MDAzZWRpX25yZXh0NjRfcGFkID0gMDtcbiBcdGVsc2UgaWYgKGRpcC1cdTAwM2VkaV92ZXJzaW9uIFx1MDAzZT0gMylcbiBcdFx0ZGlwLVx1MDAzZWRpX3YzX3BhZCA9IDA7XG4mIzQzO1x0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkgfHwgIVNfSVNSRUcobW9kZSkpXG4mIzQzO1x0XHRmbGFnczIgXHUwMDI2PSB+WEZTX0RJRkxBRzJfVkVSSVRZO1xuIFxuIFx0aWYgKGZsYWdzMiBcdTAwMjYgWEZTX0RJRkxBRzJfTUVUQURBVEEpIHtcbiBcdFx0eGZzX2ZhaWxhZGRyX3RcdGZhO1xuQEAgLTE2MTcsNiAmIzQzOzE2MTksMTAgQEAgeHJlcF9kaW5vZGVfY29yZShcbiBcdGlmIChpZ2V0X2Vycm9yKVxuIFx0XHRyZXR1cm4gaWdldF9lcnJvcjtcbiBcbiYjNDM7XHRlcnJvciA9IHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5KHNjKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuIFx0ZXJyb3IgPSB4Y2hrX3RyYW5zX2FsbG9jKHNjLCAwKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuQEAgLTIwMzUsNiAmIzQzOzIwNDEsMjcgQEAgeHJlcF9pbm9kZV91bmxpbmtlZChcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogSWYgdGhpcyBmaWxlIGlzIGEgZnN2ZXJpdHkgZmlsZSwgeGNoa19wcmVwYXJlX2lzY3J1YiBvciB4cmVwX2Rpbm9kZV9jb3JlXG4mIzQzOyAqIHNob3VsZCBoYXZlIGFjdGl2YXRlZCBpdC4gIElmIGl0JiMzOTtzIHN0aWxsIG5vdCBhY3RpdmUsIHRoZW4gdGhlcmUmIzM5O3Mgc29tZXRoaW5nXG4mIzQzOyAqIHdyb25nIHdpdGggdGhlIHZlcml0eSBkZXNjcmlwdG9yIGFuZCB3ZSBzaG91bGQgdHVybiBpdCBvZmYuXG4mIzQzOyAqL1xuJiM0MztTVEFUSUMgaW50XG4mIzQzO3hyZXBfaW5vZGVfdmVyaXR5KFxuJiM0MztcdHN0cnVjdCB4ZnNfc2NydWJcdCpzYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUgPSBWRlNfSShzYy1cdTAwM2VpcCk7XG4mIzQzO1xuJiM0MztcdGlmICh4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oc2MtXHUwMDNlaXApKSB7XG4mIzQzO1x0XHRzYy1cdTAwM2VpcC1cdTAwM2VpX2RpZmxhZ3MyIFx1MDAyNj0gflhGU19ESUZMQUcyX1ZFUklUWTtcbiYjNDM7XHRcdGlub2RlX3NldF9mbGFncyhpbm9kZSwgMCwgU19WRVJJVFkpO1xuJiM0MztcbiYjNDM7XHRcdHhmc190cmFuc19sb2dfaW5vZGUoc2MtXHUwMDNldHAsIHNjLVx1MDAzZWlwLCBYRlNfSUxPR19DT1JFKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIFJlcGFpciBhbiBpbm9kZSYjMzk7cyBmaWVsZHMuICovXG4gaW50XG4geHJlcF9pbm9kZShcbkBAIC0yMDg0LDYgJiM0MzsyMTExLDE1IEBAIHhyZXBfaW5vZGUoXG4gXHRcdFx0cmV0dXJuIGVycm9yO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogRGlzYWJsZSBmc3Zlcml0eSBpZiBpdCBjYW5ub3QgYmUgYWN0aXZhdGVkLiAgQWN0aXZhdGlvbiBmYWlsdXJlXG4mIzQzO1x0ICogcHJvaGliaXRzIHRoZSBmaWxlIGZyb20gYmVpbmcgb3BlbmVkLCBzbyB0aGVyZSBjYW5ub3QgYmUgYW5vdGhlclxuJiM0MztcdCAqIHByb2dyYW0gd2l0aCBhbiBvcGVuIGZkIHRvIHdoYXQgaXQgdGhpbmtzIGlzIGEgdmVyaXR5IGZpbGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyb3IgPSB4cmVwX2lub2RlX3Zlcml0eShzYyk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiBcdC8qIFJlY29ubmVjdCBpbmNvcmUgdW5saW5rZWQgbGlzdCAqL1xuIFx0ZXJyb3IgPSB4cmVwX2lub2RlX3VubGlua2VkKHNjKTtcbiBcdGlmIChlcnJvcilcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FvcHMuYyBiL2ZzL3hmcy94ZnNfYW9wcy5jXG5pbmRleCA1MTI5M2I2ZjMzMWYwYi4uMTM1YmU3MTFmOWE0MDkgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2FvcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19hb3BzLmNcbkBAIC0yMiw3ICYjNDM7MjIsOSBAQFxuICNpbmNsdWRlIFwmIzM0O3hmc19pY2FjaGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc196b25lX2FsbG9jLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfcnRncm91cC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19mc3Zlcml0eS5oXCYjMzQ7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmlvLWludGVncml0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiBzdHJ1Y3QgeGZzX3dyaXRlcGFnZV9jdHgge1xuIFx0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggY3R4O1xuQEAgLTE4MSw2ICYjNDM7MTgzLDQ5IEBAIHhmc19lbmRfaW9lbmRfd3JpdGUoXG4gXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUobm9mc19mbGFnKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFByaW9yaXRpemUgZnN2ZXJpdHkgbWV0YWRhdGEgb3ZlciBmaWxlIGRhdGEuIFNvcnQgYmFzZWQgb24gaV9zaXplIGFzIGZzdmVyaXR5XG4mIzQzOyAqIG1ldGFkYXRhIGlzIGFsd2F5cyBiZXlvbmQgRU9GXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3hmc19yZWFkX2lvZW5kX2NvbXBhcmUoXG4mIzQzO1x0dm9pZFx0XHRcdCpwcml2LFxuJiM0MztcdGNvbnN0IHN0cnVjdCBsaXN0X2hlYWRcdCphLFxuJiM0MztcdGNvbnN0IHN0cnVjdCBsaXN0X2hlYWRcdCpiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvbWFwX2lvZW5kXHQqaWEgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IGlvbWFwX2lvZW5kLFxuJiM0MztcdFx0XHRpb19saXN0KTtcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfaW9lbmRcdCppYiA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3QgaW9tYXBfaW9lbmQsXG4mIzQzO1x0XHRcdGlvX2xpc3QpO1xuJiM0MztcdGxvZmZfdFx0XHRcdGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlhLVx1MDAzZWlvX2lub2RlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFJU19WRVJJVFkoaWEtXHUwMDNlaW9faW5vZGUpKVxuJiM0MztcdFx0cmV0dXJuIGlvbWFwX2lvZW5kX2NvbXBhcmUocHJpdiwgYSwgYik7XG4mIzQzO1xuJiM0MztcdGlmIChpYS1cdTAwM2Vpb19vZmZzZXQgXHUwMDNlIGlfc2l6ZSBcdTAwMjZcdTAwMjYgaWItXHUwMDNlaW9fb2Zmc2V0IFx1MDAzYyBpX3NpemUpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0aWYgKGlhLVx1MDAzZWlvX29mZnNldCBcdTAwM2MgaV9zaXplIFx1MDAyNlx1MDAyNiBpYi1cdTAwM2Vpb19vZmZzZXQgXHUwMDNlIGlfc2l6ZSlcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBJTyByZWFkIGNvbXBsZXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0Mzt4ZnNfZW5kX2lvZW5kX3JlYWQoXG4mIzQzO1x0c3RydWN0IGlvbWFwX2lvZW5kXHQqaW9lbmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpb2VuZC1cdTAwM2Vpb19pbm9kZSk7XG4mIzQzO1xuJiM0MztcdGlmICghaW9lbmQtXHUwMDNlaW9fYmlvLmJpX3N0YXR1cyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0eGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShpcCwgaW9lbmQtXHUwMDNlaW9fb2Zmc2V0KSlcbiYjNDM7XHRcdGZzdmVyaXR5X3ZlcmlmeV9iaW8oaW9lbmQtXHUwMDNlaW9fdmksXG4mIzQzO1x0XHRcdFx0ICAgIFx1MDAyNmlvZW5kLVx1MDAzZWlvX2Jpbyk7XG4mIzQzO1x0aW9tYXBfZmluaXNoX2lvZW5kcyhpb2VuZCxcbiYjNDM7XHRcdGJsa19zdGF0dXNfdG9fZXJybm8oaW9lbmQtXHUwMDNlaW9fYmlvLmJpX3N0YXR1cykpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogRmluaXNoIGFsbCBwZW5kaW5nIElPIGNvbXBsZXRpb25zIHRoYXQgcmVxdWlyZSB0cmFuc2FjdGlvbmFsIG1vZGlmaWNhdGlvbnMuXG4gICpcbkBAIC0yMDksMTQgJiM0MzsyNTQsMTcgQEAgeGZzX2VuZF9pbyhcbiBcdGxpc3RfcmVwbGFjZV9pbml0KFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfbGlzdCwgXHUwMDI2dG1wKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9sb2NrLCBmbGFncyk7XG4gXG4tXHRpb21hcF9zb3J0X2lvZW5kcyhcdTAwMjZ0bXApO1xuJiM0MztcdGlvZW5kID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNnRtcCwgc3RydWN0IGlvbWFwX2lvZW5kLCBpb19saXN0KTtcbiYjNDM7XHRpZiAoYmlvX29wKFx1MDAyNmlvZW5kLVx1MDAzZWlvX2JpbykgPT0gUkVRX09QX1JFQUQpXG4mIzQzO1x0XHRpb21hcF9zb3J0X2lvZW5kcyhcdTAwMjZ0bXAsIHhmc19yZWFkX2lvZW5kX2NvbXBhcmUpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGlvbWFwX3NvcnRfaW9lbmRzKFx1MDAyNnRtcCwgaW9tYXBfaW9lbmRfY29tcGFyZSk7XG4gXHR3aGlsZSAoKGlvZW5kID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNnRtcCwgc3RydWN0IGlvbWFwX2lvZW5kLFxuIFx0XHRcdGlvX2xpc3QpKSkge1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmlvZW5kLVx1MDAzZWlvX2xpc3QpO1xuIFx0XHRpb21hcF9pb2VuZF90cnlfbWVyZ2UoaW9lbmQsIFx1MDAyNnRtcCk7XG4gXHRcdGlmIChiaW9fb3AoXHUwMDI2aW9lbmQtXHUwMDNlaW9fYmlvKSA9PSBSRVFfT1BfUkVBRClcbi1cdFx0XHRpb21hcF9maW5pc2hfaW9lbmRzKGlvZW5kLFxuLVx0XHRcdFx0YmxrX3N0YXR1c190b19lcnJubyhpb2VuZC1cdTAwM2Vpb19iaW8uYmlfc3RhdHVzKSk7XG4mIzQzO1x0XHRcdHhmc19lbmRfaW9lbmRfcmVhZChpb2VuZCk7XG4gXHRcdGVsc2VcbiBcdFx0XHR4ZnNfZW5kX2lvZW5kX3dyaXRlKGlvZW5kKTtcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG5AQCAtMjQyLDkgJiM0MzsyOTAsMTQgQEAgeGZzX2VuZF9iaW8oXG4gXHR9XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX2xvY2ssIGZsYWdzKTtcbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfbGlzdCkpXG4tXHRcdFdBUk5fT05fT05DRSghcXVldWVfd29yayhtcC1cdTAwM2VtX3Vud3JpdHRlbl93b3JrcXVldWUsXG4mIzQzO1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9saXN0KSkge1xuJiM0MztcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX1ZFUklUWSkgXHUwMDI2XHUwMDI2IGlvZW5kLVx1MDAzZWlvX3ZpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGlvZW5kLVx1MDAzZWlvX29mZnNldCBcdTAwM2MgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXG4mIzQzO1x0XHRcdGZzdmVyaXR5X2VucXVldWVfdmVyaWZ5X3dvcmsoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF93b3JrKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0V0FSTl9PTl9PTkNFKCFxdWV1ZV93b3JrKG1wLVx1MDAzZW1fdW53cml0dGVuX3dvcmtxdWV1ZSxcbiBcdFx0XHRcdFx0IFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfd29yaykpO1xuJiM0MztcdH1cbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2aW9lbmQtXHUwMDNlaW9fbGlzdCwgXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9saXN0KTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9sb2NrLCBmbGFncyk7XG4gfVxuQEAgLTM1MCwxMiAmIzQzOzQwMywxNiBAQCB4ZnNfbWFwX2Jsb2NrcyhcbiBcdGludFx0XHRcdHJldHJpZXMgPSAwO1xuIFx0aW50XHRcdFx0ZXJyb3IgPSAwO1xuIFx0dW5zaWduZWQgaW50XHRcdCpzZXE7XG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdGlvbWFwX2ZsYWdzID0gMDtcbiBcbiBcdGlmICh4ZnNfaXNfc2h1dGRvd24obXApKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdFhGU19FUlJPUlRBR19ERUxBWShtcCwgWEZTX0VSUlRBR19XQl9ERUxBWV9NUyk7XG4gXG4mIzQzO1x0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxuJiM0MztcdFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogQ09XIGZvcmsgYmxvY2tzIGNhbiBvdmVybGFwIGRhdGEgZm9yayBibG9ja3MgZXZlbiBpZiB0aGUgYmxvY2tzXG4gXHQgKiBhcmVuJiMzOTt0IHNoYXJlZC4gIENPVyBJL08gYWx3YXlzIHRha2VzIHByZWNlZGVudCwgc28gd2UgbXVzdCBhbHdheXNcbkBAIC00NDMsNyAmIzQzOzUwMCw4IEBAIHhmc19tYXBfYmxvY2tzKFxuIFx0ICAgIGlzbnVsbHN0YXJ0YmxvY2soaW1hcC5icl9zdGFydGJsb2NrKSlcbiBcdFx0Z290byBhbGxvY2F0ZV9ibG9ja3M7XG4gXG4tXHR4ZnNfYm1idF90b19pb21hcChpcCwgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBcdTAwMjZpbWFwLCAwLCAwLCBYRlNfV1BDKHdwYyktXHUwMDNlZGF0YV9zZXEpO1xuJiM0MztcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIFx1MDAyNmltYXAsIDAsIGlvbWFwX2ZsYWdzLFxuJiM0MztcdFx0XHQgIFhGU19XUEMod3BjKS1cdTAwM2VkYXRhX3NlcSk7XG4gXHR0cmFjZV94ZnNfbWFwX2Jsb2Nrc19mb3VuZChpcCwgb2Zmc2V0LCBjb3VudCwgd2hpY2hmb3JrLCBcdTAwMjZpbWFwKTtcbiBcdHJldHVybiAwO1xuIGFsbG9jYXRlX2Jsb2NrczpcbkBAIC01OTAsMTIgJiM0Mzs2NDgsMTYgQEAgeGZzX3pvbmVkX21hcF9ibG9ja3MoXG4gXHR4ZnNfZmlsYmxrc190XHRcdGNvdW50X2ZzYjtcbiBcdHN0cnVjdCB4ZnNfYm1idF9pcmVjXHRpbWFwLCBkZWw7XG4gXHRzdHJ1Y3QgeGZzX2lleHRfY3Vyc29yXHRpY3VyO1xuJiM0MztcdHUxNlx0XHRcdGlvbWFwX2ZsYWdzID0gMDtcbiBcbiBcdGlmICh4ZnNfaXNfc2h1dGRvd24obXApKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdFhGU19FUlJPUlRBR19ERUxBWShtcCwgWEZTX0VSUlRBR19XQl9ERUxBWV9NUyk7XG4gXG4mIzQzO1x0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxuJiM0MztcdFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogQWxsIGRpcnR5IGRhdGEgbXVzdCBiZSBjb3ZlcmVkIGJ5IGRlbGFsbG9jIGV4dGVudHMuICBCdXQgdHJ1bmNhdGUgY2FuXG4gXHQgKiByZW1vdmUgZGVsYWxsb2MgZXh0ZW50cyB1bmRlcm5lYXRoIHVzIG9yIHJlZHVjZSB0aGVpciBzaXplLlxuQEAgLTYxOSw3ICYjNDM7NjgxLDcgQEAgeGZzX3pvbmVkX21hcF9ibG9ja3MoXG4gXHRcdGltYXAuYnJfc3RhcnRibG9jayA9IEhPTEVTVEFSVEJMT0NLO1xuIFx0XHRpbWFwLmJyX3N0YXRlID0gWEZTX0VYVF9OT1JNO1xuIFx0XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuLVx0XHR4ZnNfYm1idF90b19pb21hcChpcCwgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBcdTAwMjZpbWFwLCAwLCAwLCAwKTtcbiYjNDM7XHRcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIFx1MDAyNmltYXAsIDAsIGlvbWFwX2ZsYWdzLCAwKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRlbmRfZnNiID0gbWluKGVuZF9mc2IsIGltYXAuYnJfc3RhcnRvZmYgJiM0MzsgaW1hcC5icl9ibG9ja2NvdW50KTtcbkBAIC02MzIsMTEgJiM0Mzs2OTQsMTAgQEAgeGZzX3pvbmVkX21hcF9ibG9ja3MoXG4gXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuIFxuIFx0d3BjLVx1MDAzZWlvbWFwLnR5cGUgPSBJT01BUF9NQVBQRUQ7XG4tXHR3cGMtXHUwMDNlaW9tYXAuZmxhZ3MgPSBJT01BUF9GX0RJUlRZO1xuIFx0d3BjLVx1MDAzZWlvbWFwLmJkZXYgPSBtcC1cdTAwM2VtX3J0ZGV2X3RhcmdwLVx1MDAzZWJ0X2JkZXY7XG4gXHR3cGMtXHUwMDNlaW9tYXAub2Zmc2V0ID0gb2Zmc2V0O1xuIFx0d3BjLVx1MDAzZWlvbWFwLmxlbmd0aCA9IFhGU19GU0JfVE9fQihtcCwgY291bnRfZnNiKTtcbi1cdHdwYy1cdTAwM2Vpb21hcC5mbGFncyA9IElPTUFQX0ZfQU5PTl9XUklURTtcbiYjNDM7XHR3cGMtXHUwMDNlaW9tYXAuZmxhZ3MgPSBpb21hcF9mbGFncyB8IElPTUFQX0ZfQU5PTl9XUklURTtcbiBcbiBcdHRyYWNlX3hmc196b25lZF9tYXBfYmxvY2tzKGlwLCBvZmZzZXQsIHdwYy1cdTAwM2Vpb21hcC5sZW5ndGgpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNjg0LDYgJiM0Mzs3NDUsMjIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIHhmc196b25lZF93cml0ZWJhY2tfb3BzID0ge1xuIFx0LndyaXRlYmFja19zdWJtaXRcdD0geGZzX3pvbmVkX3dyaXRlYmFja19zdWJtaXQsXG4gfTtcbiBcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt4ZnNfaW9tYXBfd3JpdGVwYWdlcyhcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHRcdCppcCxcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eFx0KmN0eClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV3JpdGViYWNrIGRvZXMgbm90IHdvcmsgZm9yIGZvbGlvcyBwYXN0IEVPRiwgbGV0IGl0IGtub3cgdGhhdFxuJiM0MztcdCAqIEkvTyBoYXBwZW5zIGZvciBmc3Zlcml0eSBtZXRhZGF0YSBhbmQgdGhpcyByZXN0cmljdGlvbiBuZWVkXG4mIzQzO1x0ICogdG8gYmUgc2tpcHBlZFxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcbiYjNDM7XHRcdGN0eC1cdTAwM2Vpb21hcC5mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcyhjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuIFNUQVRJQyBpbnRcbiB4ZnNfdm1fd3JpdGVwYWdlcyhcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlXHQqbWFwcGluZyxcbkBAIC03MDMsNyAmIzQzOzc4MCw3IEBAIHhmc192bV93cml0ZXBhZ2VzKFxuIFx0XHR9O1xuIFx0XHRpbnRcdFx0XHRcdGVycm9yO1xuIFxuLVx0XHRlcnJvciA9IGlvbWFwX3dyaXRlcGFnZXMoXHUwMDI2eGMuY3R4KTtcbiYjNDM7XHRcdGVycm9yID0geGZzX2lvbWFwX3dyaXRlcGFnZXMoaXAsIFx1MDAyNnhjLmN0eCk7XG4gXHRcdGlmICh4Yy5vcGVuX3pvbmUpXG4gXHRcdFx0eGZzX29wZW5fem9uZV9wdXQoeGMub3Blbl96b25lKTtcbiBcdFx0cmV0dXJuIGVycm9yO1xuQEAgLTcxNiw3ICYjNDM7NzkzLDcgQEAgeGZzX3ZtX3dyaXRlcGFnZXMoXG4gXHRcdFx0fSxcbiBcdFx0fTtcbiBcbi1cdFx0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXHUwMDI2d3BjLmN0eCk7XG4mIzQzO1x0XHRyZXR1cm4geGZzX2lvbWFwX3dyaXRlcGFnZXMoaXAsIFx1MDAyNndwYy5jdHgpO1xuIFx0fVxuIH1cbiBcbkBAIC03NjEsOSAmIzQzOzgzOCwxMiBAQCB4ZnNfYmlvX3N1Ym1pdF9yZWFkKFxuIFx0c3RydWN0IGlvbWFwX3JlYWRfZm9saW9fY3R4XHQqY3R4KVxuIHtcbiBcdHN0cnVjdCBiaW9cdFx0XHQqYmlvID0gY3R4LVx1MDAzZXJlYWRfY3R4O1xuJiM0MztcdHN0cnVjdCBpb21hcF9pb2VuZFx0XHQqaW9lbmQ7XG4gXG4gXHQvKiBkZWZlciByZWFkIGNvbXBsZXRpb25zIHRvIHRoZSBpb2VuZCB3b3JrcXVldWUgKi9cbi1cdGlvbWFwX2luaXRfaW9lbmQoaXRlci1cdTAwM2Vpbm9kZSwgYmlvLCBjdHgtXHUwMDNlcmVhZF9jdHhfZmlsZV9vZmZzZXQsIDApO1xuJiM0MztcdGlvZW5kID0gaW9tYXBfaW5pdF9pb2VuZChpdGVyLVx1MDAzZWlub2RlLCBiaW8sIGN0eC1cdTAwM2VyZWFkX2N0eF9maWxlX29mZnNldCxcbiYjNDM7XHRcdFx0MCk7XG4mIzQzO1x0aW9lbmQtXHUwMDNlaW9fdmkgPSBjdHgtXHUwMDNldmk7XG4gXHRpb21hcF9iaW9fc3VibWl0X3JlYWRfZW5kaW8oaXRlciwgY3R4LCB4ZnNfZW5kX2Jpbyk7XG4gfVxuIFxuQEAgLTc3NSwxMSAmIzQzOzg1NSwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3JlYWRfb3BzIHhmc19pb21hcF9yZWFkX29wcyA9IHtcbiBcbiBzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBpb21hcF9yZWFkX29wcyAqXG4geGZzX2dldF9pb21hcF9yZWFkX29wcyhcbi1cdGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlXHQqbWFwcGluZylcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZVx0Km1hcHBpbmcsXG4mIzQzO1x0bG9mZl90XHRcdFx0XHRwb3NpdGlvbilcbiB7XG4gXHRzdHJ1Y3QgeGZzX2lub2RlXHRcdCppcCA9IFhGU19JKG1hcHBpbmctXHUwMDNlaG9zdCk7XG4gXG4tXHRpZiAoYmRldl9oYXNfaW50ZWdyaXR5X2NzdW0oeGZzX2lub2RlX2J1ZnRhcmcoaXApLVx1MDAzZWJ0X2JkZXYpKVxuJiM0MztcdGlmIChiZGV2X2hhc19pbnRlZ3JpdHlfY3N1bSh4ZnNfaW5vZGVfYnVmdGFyZyhpcCktXHUwMDNlYnRfYmRldikgfHxcbiYjNDM7XHRcdFx0eGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShpcCwgcG9zaXRpb24pKVxuIFx0XHRyZXR1cm4gXHUwMDI2eGZzX2lvbWFwX3JlYWRfb3BzO1xuIFx0cmV0dXJuIFx1MDAyNmlvbWFwX2Jpb19yZWFkX29wcztcbiB9XG5AQCAtNzkxLDcgJiM0Mzs4NzMsNyBAQCB4ZnNfdm1fcmVhZF9mb2xpbyhcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfcmVhZF9mb2xpb19jdHhcdGN0eCA9IHsgLmN1cl9mb2xpbyA9IGZvbGlvIH07XG4gXG4tXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhmb2xpby1cdTAwM2VtYXBwaW5nKTtcbiYjNDM7XHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhmb2xpby1cdTAwM2VtYXBwaW5nLCBmb2xpb19wb3MoZm9saW8pKTtcbiBcdGlvbWFwX3JlYWRfZm9saW8oXHUwMDI2eGZzX3JlYWRfaW9tYXBfb3BzLCBcdTAwMjZjdHgsIE5VTEwpO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTgwMiw3ICYjNDM7ODg0LDcgQEAgeGZzX3ZtX3JlYWRhaGVhZChcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfcmVhZF9mb2xpb19jdHhcdGN0eCA9IHsgLnJhYyA9IHJhYyB9O1xuIFxuLVx0Y3R4Lm9wcyA9IHhmc19nZXRfaW9tYXBfcmVhZF9vcHMocmFjLVx1MDAzZW1hcHBpbmcpLFxuJiM0MztcdGN0eC5vcHMgPSB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKHJhYy1cdTAwM2VtYXBwaW5nLCByZWFkYWhlYWRfcG9zKHJhYykpO1xuIFx0aW9tYXBfcmVhZGFoZWFkKFx1MDAyNnhmc19yZWFkX2lvbWFwX29wcywgXHUwMDI2Y3R4LCBOVUxMKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwX3V0aWwuYyBiL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmNcbmluZGV4IGM4OGI5YWRlNzM4OWRkLi5iMTg3NWQ2ZTc0NTI5NiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmNcbkBAIC0zMSw2ICYjNDM7MzEsNyBAQFxuICNpbmNsdWRlIFwmIzM0O3hmc19ydGJpdG1hcC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGZzX3J0Z3JvdXAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc196b25lX2FsbG9jLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuIC8qIEtlcm5lbCBvbmx5IEJNQVAgcmVsYXRlZCBkZWZpbml0aW9ucyBhbmQgZnVuY3Rpb25zICovXG4gXG5AQCAtNTUzLDYgJiM0Mzs1NTQsMTQgQEAgeGZzX2Nhbl9mcmVlX2VvZmJsb2NrcyhcbiBcdGlmIChsYXN0X2ZzYiBcdTAwM2M9IGVuZF9mc2IpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vdGhpbmcgdG8gY2xlYW4gb24gZnN2ZXJpdHkgaW5vZGVzIGFzIHRoZXkgZG9uJiMzOTt0IHVzZSBwcmVhbGxvYyBhbmRcbiYjNDM7XHQgKiB0aGVyZSBubyBkZWxhbGxvYyBhcyBvbmx5IHdyaXR0ZW4gZGF0YSBpcyBmc3Zlcml0eSBtZXRhZGF0YVxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChJU19WRVJJVFkoVkZTX0koaXApKSB8fFxuJiM0MztcdCAgICB4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogQ2hlY2sgaWYgdGhlcmUgaXMgYW4gcG9zdC1FT0YgZXh0ZW50IHRvIGZyZWUuICBJZiB0aGVyZSBhcmUgYW55XG4gXHQgKiBkZWxhbGxvYyBibG9ja3MgYXR0YWNoZWQgdG8gdGhlIGlub2RlIChkYXRhIGZvcmsgZGVsYWxsb2NcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZpbGUuYyBiL2ZzL3hmcy94ZnNfZmlsZS5jXG5pbmRleCA4NDVhOTdjOWIwNjMwYi4uY2JhMTk0ZDY3OGZjNzcgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19maWxlLmNcbkBAIC0zNyw2ICYjNDM7MzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhZHZpc2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlbG9jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wcztcbiBcbkBAIC0yNDUsNiAmIzQzOzI0NiwyNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgeGZzX2Rpb19yZWFkX2JvdW5jZV9vcHMgPSB7XG4gXHQuYmlvX3NldFx0PSBcdTAwMjZpb21hcF9pb2VuZF9iaW9zZXQsXG4gfTtcbiBcbiYjNDM7U1RBVElDIHNzaXplX3RcbiYjNDM7eGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChcbiYjNDM7XHRzdHJ1Y3Qga2lvY2JcdFx0KmlvY2IsXG4mIzQzO1x0c3RydWN0IGlvdl9pdGVyXHRcdCp0bylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKSk7XG4mIzQzO1x0c3NpemVfdFx0XHRcdHJldDtcbiYjNDM7XG4mIzQzO1x0dHJhY2VfeGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKGlvY2IsIHRvKTtcbiYjNDM7XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIFNUQVRJQyBzc2l6ZV90XG4geGZzX2ZpbGVfZGlvX3JlYWQoXG4gXHRzdHJ1Y3Qga2lvY2JcdFx0KmlvY2IsXG5AQCAtMjY1LDYgJiM0MzsyODUsMTYgQEAgeGZzX2ZpbGVfZGlvX3JlYWQoXG4gXHRyZXQgPSB4ZnNfaWxvY2tfaW9jYihpb2NiLCBYRlNfSU9MT0NLX1NIQVJFRCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmUtY2hlY2sgdmVyaXR5IHN0YXR1cyBhZnRlciBhY3F1aXJpbmcgbG9jay4gVGhpcyBwcmV2ZW50cyBUT0NUT1UgaW5cbiYjNDM7XHQgKiB4ZnNfZmlsZV9yZWFkX2l0ZXIoKSB3aGlsZSBmYWxsaW5nIGJhY2sgZnJvbSBESU8gdG8gYnVmZmVyZWQgSS9PIGFzXG4mIzQzO1x0ICogbm93IHdlIGFyZSBob2xkaW5nIGEgbG9ja1xuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmc3Zlcml0eV9hY3RpdmUoVkZTX0koaXApKSkge1xuJiM0MztcdFx0eGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTtcbiYjNDM7XHRcdGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2PSB+SU9DQl9ESVJFQ1Q7XG4mIzQzO1x0XHRyZXR1cm4geGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7XG4mIzQzO1x0fVxuIFx0aWYgKG1hcHBpbmdfc3RhYmxlX3dyaXRlcyhpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nKSkge1xuIFx0XHRkaW9fb3BzID0gXHUwMDI2eGZzX2Rpb19yZWFkX2JvdW5jZV9vcHM7XG4gXHRcdGRpb19mbGFncyB8PSBJT01BUF9ESU9fQk9VTkNFO1xuQEAgLTI4MSw3ICYjNDM7MzExLDggQEAgeGZzX2ZpbGVfZGF4X3JlYWQoXG4gXHRzdHJ1Y3Qga2lvY2JcdFx0KmlvY2IsXG4gXHRzdHJ1Y3QgaW92X2l0ZXJcdFx0KnRvKVxuIHtcbi1cdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdCk7XG4mIzQzO1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpbm9kZSk7XG4gXHRzc2l6ZV90XHRcdFx0cmV0ID0gMDtcbiBcbiBcdHRyYWNlX3hmc19maWxlX2RheF9yZWFkKGlvY2IsIHRvKTtcbkBAIC0yOTksMjUgJiM0MzszMzAsNiBAQCB4ZnNfZmlsZV9kYXhfcmVhZChcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLVNUQVRJQyBzc2l6ZV90XG4teGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChcbi1cdHN0cnVjdCBraW9jYlx0XHQqaW9jYixcbi1cdHN0cnVjdCBpb3ZfaXRlclx0XHQqdG8pXG4te1xuLVx0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApKTtcbi1cdHNzaXplX3RcdFx0XHRyZXQ7XG4tXG4tXHR0cmFjZV94ZnNfZmlsZV9idWZmZXJlZF9yZWFkKGlvY2IsIHRvKTtcbi1cbi1cdHJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXHRyZXQgPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKGlvY2IsIHRvKTtcbi1cdHhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbiBTVEFUSUMgc3NpemVfdFxuIHhmc19maWxlX3JlYWRfaXRlcihcbiBcdHN0cnVjdCBraW9jYlx0XHQqaW9jYixcbkBAIC0zMzIsNiAmIzQzOzM0NCwxNCBAQCB4ZnNfZmlsZV9yZWFkX2l0ZXIoXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJbiBjYXNlIGZzLXZlcml0eSBpcyBlbmFibGVkLCB3ZSBhbHNvIGZhbGxiYWNrIHRvIHRoZSBidWZmZXJlZCByZWFkXG4mIzQzO1x0ICogZnJvbSB0aGUgZGlyZWN0IHJlYWQgcGF0aC4gVGhlcmVmb3JlLCBJT0NCX0RJUkVDVCBpcyBzZXQgYW5kIG5lZWQgdG9cbiYjNDM7XHQgKiBiZSBjbGVhcmVkIChzZWUgZ2VuZXJpY19maWxlX3JlYWRfaXRlcigpKVxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmc3Zlcml0eV9hY3RpdmUoaW5vZGUpKVxuJiM0MztcdFx0aW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjY9IH5JT0NCX0RJUkVDVDtcbiYjNDM7XG4gXHRpZiAoSVNfREFYKGlub2RlKSlcbiBcdFx0cmV0ID0geGZzX2ZpbGVfZGF4X3JlYWQoaW9jYiwgdG8pO1xuIFx0ZWxzZSBpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ESVJFQ1QpXG5AQCAtMTcwMCwxMSAmIzQzOzE3MjAsMTggQEAgeGZzX2ZpbGVfb3BlbihcbiBcdHN0cnVjdCBpbm9kZVx0Kmlub2RlLFxuIFx0c3RydWN0IGZpbGVcdCpmaWxlKVxuIHtcbiYjNDM7XHRpbnRcdFx0ZXJyb3I7XG4mIzQzO1xuIFx0aWYgKHhmc19pc19zaHV0ZG93bihYRlNfTShpbm9kZS1cdTAwM2VpX3NiKSkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFx0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfTk9XQUlUIHwgRk1PREVfQ0FOX09ESVJFQ1Q7XG4gXHRpZiAoeGZzX2dldF9hdG9taWNfd3JpdGVfbWluKFhGU19JKGlub2RlKSkgXHUwMDNlIDApXG4gXHRcdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9BVE9NSUNfV1JJVEU7XG4mIzQzO1xuJiM0MztcdGVycm9yID0gZnN2ZXJpdHlfZmlsZV9vcGVuKGlub2RlLCBmaWxlKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuIFx0cmV0dXJuIGdlbmVyaWNfZmlsZV9vcGVuKGlub2RlLCBmaWxlKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc3Zlcml0eS5jIGIvZnMveGZzL3hmc19mc3Zlcml0eS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ2MjIyM2I0NjE5YjA2XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2ZzdmVyaXR5LmNcbkBAIC0wLDAgJiM0MzsxLDQ4MCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgUmVkIEhhdCwgSW5jLlxuJiM0MzsgKi9cbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eGZzX3BsYXRmb3JtLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eGZzX2Zvcm1hdC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19zaGFyZWQuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfdHJhbnNfcmVzdi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19tb3VudC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19kYV9mb3JtYXQuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfZGFfYnRyZWUuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfaW5vZGUuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfbG9nX2Zvcm1hdC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc190cmFucy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19kZWZlci5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc190cmFjZS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19xdW90YS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19mc3Zlcml0eS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19pb21hcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19lcnJvci5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19oZWFsdGguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfYm1hcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19ibWFwX3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4mIzQzO1xuJiM0Mztsb2ZmX3RcbiYjNDM7eGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgeGZzX2lub2RlXHQqaXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcm91bmRfdXAoaV9zaXplX3JlYWQoVkZTX0lDKGlwKSksIFhGU19GU1ZFUklUWV9TVEFSVF9BTElHTik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2xcbiYjNDM7eGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgeGZzX2lub2RlXHQqaXAsXG4mIzQzO1x0bG9mZl90XHRcdFx0b2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZzdmVyaXR5X2FjdGl2ZShWRlNfSUMoaXApKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0b2Zmc2V0IFx1MDAzYyB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmV0cmlldmUgdGhlIHZlcml0eSBkZXNjcmlwdG9yLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludFxuJiM0Mzt4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3IoXG4mIzQzO1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSxcbiYjNDM7XHR2b2lkXHRcdFx0KmJ1ZixcbiYjNDM7XHRzaXplX3RcdFx0XHRidWZfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlub2RlKTtcbiYjNDM7XHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuJiM0MztcdF9fYmUzMlx0XHRcdGRfZGVzY19zaXplO1xuJiM0MztcdHUzMlx0XHRcdGRlc2Nfc2l6ZTtcbiYjNDM7XHR1NjRcdFx0XHRkZXNjX3NpemVfcG9zO1xuJiM0MztcdGludFx0XHRcdGVycm9yO1xuJiM0MztcdHU2NFx0XHRcdGRlc2NfcG9zO1xuJiM0MztcdHN0cnVjdCB4ZnNfYm1idF9pcmVjXHRyZWM7XG4mIzQzO1x0aW50XHRcdFx0aXNfZW1wdHk7XG4mIzQzO1x0dWludDMyX3RcdFx0YmxvY2tzaXplID0gaV9ibG9ja3NpemUoVkZTX0koaXApKTtcbiYjNDM7XHR4ZnNfZmlsZW9mZl90XHRcdGxhc3RfYmxvY2tfb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRBU1NFUlQoaW5vZGUtXHUwMDNlaV9mbGFncyBcdTAwMjYgU19WRVJJVFkpO1xuJiM0MztcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7XG4mIzQzO1x0ZXJyb3IgPSB4ZnNfYm1hcF9sYXN0X2V4dGVudChOVUxMLCBpcCwgWEZTX0RBVEFfRk9SSywgXHUwMDI2cmVjLCBcdTAwMjZpc19lbXB0eSk7XG4mIzQzO1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX2VtcHR5KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9EQVRBO1xuJiM0MztcbiYjNDM7XHRsYXN0X2Jsb2NrX29mZnNldCA9XG4mIzQzO1x0XHRYRlNfRlNCX1RPX0IobXAsIHJlYy5icl9zdGFydG9mZiAmIzQzOyByZWMuYnJfYmxvY2tjb3VudCk7XG4mIzQzO1x0aWYgKGxhc3RfYmxvY2tfb2Zmc2V0IFx1MDAzYz0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4mIzQzO1xuJiM0MztcdGRlc2Nfc2l6ZV9wb3MgPSBsYXN0X2Jsb2NrX29mZnNldCAtIHNpemVvZihfX2JlMzIpO1xuJiM0MztcdGVycm9yID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIChjaGFyICopXHUwMDI2ZF9kZXNjX3NpemUsXG4mIzQzO1x0XHRcdHNpemVvZihkX2Rlc2Nfc2l6ZSksIGRlc2Nfc2l6ZV9wb3MpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0ZGVzY19zaXplID0gYmUzMl90b19jcHUoZF9kZXNjX3NpemUpO1xuJiM0MztcdGlmIChYRlNfSVNfQ09SUlVQVChtcCwgZGVzY19zaXplIFx1MDAzZSBGU19WRVJJVFlfTUFYX0RFU0NSSVBUT1JfU0laRSkpIHtcbiYjNDM7XHRcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoWEZTX0lTX0NPUlJVUFQobXAsIGRlc2Nfc2l6ZSBcdTAwM2UgZGVzY19zaXplX3BvcykpIHtcbiYjNDM7XHRcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWJ1Zl9zaXplKVxuJiM0MztcdFx0cmV0dXJuIGRlc2Nfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKFhGU19JU19DT1JSVVBUKG1wLCBkZXNjX3NpemUgXHUwMDNlIGJ1Zl9zaXplKSkge1xuJiM0MztcdFx0eGZzX2lub2RlX21hcmtfc2ljayhYRlNfSShpbm9kZSksIFhGU19TSUNLX0lOT19GU1ZFUklUWSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRlc2NfcG9zID0gcm91bmRfZG93bihkZXNjX3NpemVfcG9zIC0gZGVzY19zaXplLCBibG9ja3NpemUpO1xuJiM0MztcdGlmIChkZXNjX3BvcyBcdTAwM2MgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpIHtcbiYjNDM7XHRcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnJvciA9IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIGRlc2Nfc2l6ZSwgZGVzY19wb3MpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRlc2Nfc2l6ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvcihcbiYjNDM7XHRzdHJ1Y3QgZmlsZVx0XHQqZmlsZSxcbiYjNDM7XHRjb25zdCB2b2lkXHRcdCpkZXNjLFxuJiM0MztcdHUzMlx0XHRcdGRlc2Nfc2l6ZSxcbiYjNDM7XHR1NjRcdFx0XHRtZXJrbGVfdHJlZV9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0aW50XHRcdFx0ZXJyb3I7XG4mIzQzO1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koaW5vZGUpO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRibGtzaXplID0gaXAtXHUwMDNlaV9tb3VudC1cdTAwM2VtX3NiLnNiX2Jsb2Nrc2l6ZTtcbiYjNDM7XHR1NjRcdFx0XHR0cmVlX2xhc3RfYmxvY2sgPVxuJiM0MztcdFx0XHR4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSAmIzQzOyBtZXJrbGVfdHJlZV9zaXplO1xuJiM0MztcdHU2NFx0XHRcdGRlc2NfcG9zID1cbiYjNDM7XHRcdFx0cm91bmRfdXAodHJlZV9sYXN0X2Jsb2NrLCBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR04pO1xuJiM0MztcdHU2NFx0XHRcdGRlc2NfZW5kID0gZGVzY19wb3MgJiM0MzsgZGVzY19zaXplO1xuJiM0MztcdF9fYmUzMlx0XHRcdGRlc2Nfc2l6ZV9kaXNrID0gY3B1X3RvX2JlMzIoZGVzY19zaXplKTtcbiYjNDM7XHR1NjRcdFx0XHRkZXNjX3NpemVfcG9zID1cbiYjNDM7XHRcdFx0cm91bmRfdXAoZGVzY19lbmQgJiM0Mzsgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSwgYmxrc2l6ZSkgLVxuJiM0MztcdFx0XHRzaXplb2YoZGVzY19zaXplX2Rpc2spO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IGlvbWFwX2ZzdmVyaXR5X3dyaXRlKGZpbGUsIGRlc2Nfc2l6ZV9wb3MsIHNpemVvZihfX2JlMzIpLFxuJiM0MztcdFx0XHQoY29uc3Qgdm9pZCAqKVx1MDAyNmRlc2Nfc2l6ZV9kaXNrLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb21hcF9mc3Zlcml0eV93cml0ZShmaWxlLCBkZXNjX3BvcywgZGVzY19zaXplLCBkZXNjLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVHJ5IHRvIHJlbW92ZSBhbGwgdGhlIGZzdmVyaXR5IG1ldGFkYXRhIGFmdGVyIGEgZmFpbGVkIGVuYWJsZW1lbnQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3hmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoXG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmc190cmFuc1x0KnRwO1xuJiM0MztcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4mIzQzO1x0aW50XHRcdFx0ZXJyb3I7XG4mIzQzO1xuJiM0MztcdGVycm9yID0geGZzX3RyYW5zX2FsbG9jKG1wLCBcdTAwMjZNX1JFUyhtcCktXHUwMDNldHJfaXRydW5jYXRlLCAwLCAwLCAwLCBcdTAwMjZ0cCk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHR4ZnNfaWxvY2soaXAsIFhGU19NTUFQTE9DS19FWENMIHwgWEZTX0lMT0NLX0VYQ0wpO1xuJiM0MztcdHRydW5jYXRlX2lub2RlX3BhZ2VzKFZGU19JKGlwKS1cdTAwM2VpX21hcHBpbmcsIFhGU19JU0laRShpcCkpO1xuJiM0MztcdHhmc190cmFuc19pam9pbih0cCwgaXAsIDApO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIHJlbW92ZSBwb3N0IEVPRiBkYXRhLCBubyBuZWVkIHRvIHVwZGF0ZSBpX3NpemUgYXMgZnN2ZXJpdHlcbiYjNDM7XHQgKiBkaWRuJiMzOTt0IG1vdmUgaV9zaXplIGluIHRoZSBmaXJzdCBwbGFjZVxuJiM0MztcdCAqL1xuJiM0MztcdGVycm9yID0geGZzX2l0cnVuY2F0ZV9leHRlbnRzKFx1MDAyNnRwLCBpcCwgWEZTX0RBVEFfRk9SSywgWEZTX0lTSVpFKGlwKSk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBlcnJfY2FuY2VsO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IHhmc190cmFuc19jb21taXQodHApO1xuJiM0MztcdHhmc19pdW5sb2NrKGlwLCBYRlNfTU1BUExPQ0tfRVhDTCB8IFhGU19JTE9DS19FWENMKTtcbiYjNDM7XHRyZXR1cm4gZXJyb3I7XG4mIzQzO2Vycl9jYW5jZWw6XG4mIzQzO1x0eGZzX3RyYW5zX2NhbmNlbCh0cCk7XG4mIzQzO1x0eGZzX2l1bmxvY2soaXAsIFhGU19NTUFQTE9DS19FWENMIHwgWEZTX0lMT0NLX0VYQ0wpO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbihcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAsXG4mIzQzO1x0bG9mZl90XHRcdFx0c3RhcnQsXG4mIzQzO1x0bG9mZl90XHRcdFx0ZW5kKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmc19tb3VudFx0Km1wID0gaXAtXHUwMDNlaV9tb3VudDtcbiYjNDM7XHRzdHJ1Y3QgeGZzX3RyYW5zXHQqdHA7XG4mIzQzO1x0eGZzX2ZpbGVvZmZfdFx0XHRvZmZzZXRfZnNiID0gWEZTX0JfVE9fRlNCVChtcCwgc3RhcnQpO1xuJiM0MztcdHhmc19maWxlb2ZmX3RcdFx0ZW5kX2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgZW5kKTtcbiYjNDM7XHRzdHJ1Y3QgeGZzX2JtYnRfaXJlY1x0aW1hcDtcbiYjNDM7XHRpbnRcdFx0XHRuaW1hcHM7XG4mIzQzO1x0aW50XHRcdFx0ZXJyb3IgPSAwO1xuJiM0MztcdGludFx0XHRcdGRvbmU7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChvZmZzZXRfZnNiIFx1MDAzYyBlbmRfZnNiKSB7XG4mIzQzO1x0XHRuaW1hcHMgPSAxO1xuJiM0MztcbiYjNDM7XHRcdGVycm9yID0geGZzX3RyYW5zX2FsbG9jKG1wLCBcdTAwMjZNX1JFUyhtcCktXHUwMDNldHJfd3JpdGUsIDAsIDAsIDAsIFx1MDAyNnRwKTtcbiYjNDM7XHRcdGlmIChlcnJvcilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHRcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuJiM0MztcdFx0ZXJyb3IgPSB4ZnNfYm1hcGlfcmVhZChpcCwgb2Zmc2V0X2ZzYixcbiYjNDM7XHRcdFx0XHRlbmRfZnNiIC0gb2Zmc2V0X2ZzYiwgXHUwMDI2aW1hcCwgXHUwMDI2bmltYXBzLFxuJiM0MztcdFx0XHRcdDApO1xuJiM0MztcdFx0aWYgKGVycm9yKVxuJiM0MztcdFx0XHRnb3RvIG91dF9jYW5jZWw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5pbWFwcyA9PSAwKVxuJiM0MztcdFx0XHRnb3RvIG91dF9jYW5jZWw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGltYXAuYnJfc3RhdGUgPT0gWEZTX0VYVF9VTldSSVRURU4pIHtcbiYjNDM7XHRcdFx0ZG9uZSA9IDA7XG4mIzQzO1xuJiM0MztcdFx0XHR4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHdoaWxlICghZG9uZSkge1xuJiM0MztcdFx0XHRcdGVycm9yID0geGZzX2J1bm1hcGkodHAsIGlwLCBpbWFwLmJyX3N0YXJ0b2ZmLFxuJiM0MztcdFx0XHRcdFx0XHRpbWFwLmJyX2Jsb2NrY291bnQsIDAsIDEsXG4mIzQzO1x0XHRcdFx0XHRcdFx1MDAyNmRvbmUpO1xuJiM0MztcdFx0XHRcdGlmIChlcnJvcilcbiYjNDM7XHRcdFx0XHRcdGdvdG8gb3V0X2NhbmNlbDtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0ZXJyb3IgPSB4ZnNfZGVmZXJfZmluaXNoKFx1MDAyNnRwKTtcbiYjNDM7XHRcdFx0XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRcdFx0XHRnb3RvIG91dF9jYW5jZWw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdGVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCk7XG4mIzQzO1x0XHRcdGlmIChlcnJvcilcbiYjNDM7XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHR4ZnNfdHJhbnNfY2FuY2VsKHRwKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4mIzQzO1xuJiM0MztcdFx0b2Zmc2V0X2ZzYiA9IGltYXAuYnJfc3RhcnRvZmYgJiM0MzsgaW1hcC5icl9ibG9ja2NvdW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycm9yO1xuJiM0MztvdXRfY2FuY2VsOlxuJiM0MztcdHhmc190cmFuc19jYW5jZWwodHApO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4mIzQzO1x0cmV0dXJuIGVycm9yO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUHJlcGFyZSB0byBlbmFibGUgZnN2ZXJpdHkgYnkgY2xlYXJpbmcgb2xkIG1ldGFkYXRhLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludFxuJiM0Mzt4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlKFxuJiM0MztcdHN0cnVjdCBmaWxlXHRcdCpmaWxwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koaW5vZGUpO1xuJiM0MztcdGludFx0XHRcdGVycm9yO1xuJiM0MztcbiYjNDM7XHR4ZnNfYXNzZXJ0X2lsb2NrZWQoaXAsIFhGU19JT0xPQ0tfRVhDTCk7XG4mIzQzO1xuJiM0MztcdGlmIChJU19EQVgoaW5vZGUpIHx8IGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX0RBWClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoaW5vZGUtXHUwMDNlaV9zaXplIFx1MDAzZSBYRlNfRlNWRVJJVFlfTEFSR0VTVF9GSUxFKVxuJiM0MztcdFx0cmV0dXJuIC1FRkJJRztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGbHVzaCBwYWdlY2FjaGUgYmVmb3JlIGJ1aWxkaW5nIE1lcmtsZSB0cmVlLiBJbm9kZSBpcyBsb2NrZWQgYW5kIG5vXG4mIzQzO1x0ICogZnVydGhlciB3cml0ZXMgd2lsbCBoYXBwZW4gdG8gdGhlIGZpbGUgZXhjZXB0IGZzdmVyaXR5IG1ldGFkYXRhXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyb3IgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHRpZiAoeGZzX2lmbGFnc190ZXN0X2FuZF9zZXQoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdGVycm9yID0geGZzX3FtX2RxYXR0YWNoKGlwKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRnb3RvIG91dF9jbGVhcjtcbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRnb3RvIG91dF9jbGVhcjtcbiYjNDM7XHRyZXR1cm4gZXJyb3I7XG4mIzQzO291dF9jbGVhcjpcbiYjNDM7XHR4ZnNfaWZsYWdzX2NsZWFyKGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTik7XG4mIzQzO1x0cmV0dXJuIGVycm9yO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDb21wbGV0ZSAob3IgZmFpbCkgdGhlIHByb2Nlc3Mgb2YgZW5hYmxpbmcgZnN2ZXJpdHkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3hmc19mc3Zlcml0eV9lbmRfZW5hYmxlKFxuJiM0MztcdHN0cnVjdCBmaWxlXHRcdCpmaWxlLFxuJiM0MztcdGNvbnN0IHZvaWRcdFx0KmRlc2MsXG4mIzQzO1x0c2l6ZV90XHRcdFx0ZGVzY19zaXplLFxuJiM0MztcdHU2NFx0XHRcdG1lcmtsZV90cmVlX3NpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpbm9kZSk7XG4mIzQzO1x0c3RydWN0IHhmc19tb3VudFx0Km1wID0gaXAtXHUwMDNlaV9tb3VudDtcbiYjNDM7XHRzdHJ1Y3QgeGZzX3RyYW5zXHQqdHA7XG4mIzQzO1x0aW50XHRcdFx0ZXJyb3IgPSAwO1xuJiM0MztcdGxvZmZfdFx0XHRcdHJhbmdlX3N0YXJ0ID0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCk7XG4mIzQzO1xuJiM0MztcdHhmc19hc3NlcnRfaWxvY2tlZChpcCwgWEZTX0lPTE9DS19FWENMKTtcbiYjNDM7XG4mIzQzO1x0LyogZnMtdmVyaXR5IGZhaWxlZCwganVzdCBjbGVhbnVwICovXG4mIzQzO1x0aWYgKGRlc2MgPT0gTlVMTCkge1xuJiM0MztcdFx0ZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvcihmaWxlLCBkZXNjLCBkZXNjX3NpemUsXG4mIzQzO1x0XHRcdG1lcmtsZV90cmVlX3NpemUpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdhaXQgZm9yIE1lcmtsZSB0cmVlIGdldCB3cml0dGVuIHRvIGRpc2sgYmVmb3JlIHNldHRpbmcgb24tZGlzayBpbm9kZVxuJiM0MztcdCAqIGZsYWcgYW5kIGNsZWFyaW5nIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyb3IgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgcmFuZ2Vfc3RhcnQsXG4mIzQzO1x0XHRcdExMT05HX01BWCk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVtb3ZlIHVud3JpdHRlbiBleHRlbnRzIGxlZnQgYnkgQ09XIHByZWFsbG9jYXRpb25zIGFuZCB3cml0ZVxuJiM0MztcdCAqIHByZWFsbG9jYXRpb24gaW4gdGhlIG1lcmtsZSB0cmVlIGhvbGVzIGFuZCBwYXN0IGRlc2NyaXB0b3JcbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnJvciA9IHhmc19mc3Zlcml0eV9jYW5jZWxfdW53cml0dGVuKGlwLCByYW5nZV9zdGFydCwgTExPTkdfTUFYKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcm9hY3RpdmVseSBkcm9wIGFueSBkZWxheWVkIGFsbG9jYXRpb25zIGluIENPVyBmb3JrLCB0aGUgZnN2ZXJpdHlcbiYjNDM7XHQgKiBmaWxlcyBhcmUgcmVhZC1vbmx5XG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHhmc19pc19jb3dfaW5vZGUoaXApKSB7XG4mIzQzO1x0XHR4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbiYjNDM7XHRcdHhmc19pZm9ya19pbml0X2NvdyhpcCk7XG4mIzQzO1x0XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuJiM0MztcdFx0eGZzX2JtYXBfcHVuY2hfZGVsYWxsb2NfcmFuZ2UoaXAsIFhGU19DT1dfRk9SSywgMCwgTExPTkdfTUFYLFxuJiM0MztcdFx0XHRcdE5VTEwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZXQgZnN2ZXJpdHkgaW5vZGUgZmxhZ1xuJiM0MztcdCAqL1xuJiM0MztcdGVycm9yID0geGZzX3RyYW5zX2FsbG9jX2lub2RlKGlwLCBcdTAwMjZNX1JFUyhtcCktXHUwMDNldHJfaWNoYW5nZSxcbiYjNDM7XHRcdFx0MCwgMCwgZmFsc2UsIFx1MDAyNnRwKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbnN1cmUgdGhhdCB3ZSYjMzk7dmUgcGVyc2lzdGVkIHRoZSB2ZXJpdHkgaW5mb3JtYXRpb24gYmVmb3JlIHdlIGVuYWJsZVxuJiM0MztcdCAqIGl0IG9uIHRoZSBpbm9kZSBhbmQgdGVsbCB0aGUgY2FsbGVyIHdlIGhhdmUgc2VhbGVkIHRoZSBpbm9kZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpcC1cdTAwM2VpX2RpZmxhZ3MyIHw9IFhGU19ESUZMQUcyX1ZFUklUWTtcbiYjNDM7XG4mIzQzO1x0eGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpO1xuJiM0MztcdHhmc190cmFuc19zZXRfc3luYyh0cCk7XG4mIzQzO1xuJiM0MztcdGVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCk7XG4mIzQzO1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFlcnJvcilcbiYjNDM7XHRcdGlub2RlX3NldF9mbGFncyhpbm9kZSwgU19WRVJJVFksIFNfVkVSSVRZKTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAoZXJyb3IpIHtcbiYjNDM7XHRcdGludFx0ZXJyb3IyO1xuJiM0MztcbiYjNDM7XHRcdGVycm9yMiA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApO1xuJiM0MztcdFx0aWYgKGVycm9yMilcbiYjNDM7XHRcdFx0eGZzX2FsZXJ0KGlwLVx1MDAzZWlfbW91bnQsXG4mIzQzO1wmIzM0O2lubyAweCVsbHggZmFpbGVkIHRvIGNsZWFuIHVwIG5ldyBmc3Zlcml0eSBtZXRhZGF0YSwgZXJyICVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0SV9JTk8oaXApLCBlcnJvcjIpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0eGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmV0cmlldmUgYSBtZXJrbGUgdHJlZSBibG9jay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqXG4mIzQzO3hmc19mc3Zlcml0eV9yZWFkX21lcmtsZShcbiYjNDM7XHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlLFxuJiM0MztcdHBnb2ZmX3RcdFx0XHRpbmRleClcbiYjNDM7e1xuJiM0MztcdGluZGV4ICYjNDM7PSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KFhGU19JKGlub2RlKSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBnZW5lcmljX3JlYWRfbWVya2xlX3RyZWVfcGFnZShpbm9kZSwgaW5kZXgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZXRyaWV2ZSBhIG1lcmtsZSB0cmVlIGJsb2NrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7eGZzX2ZzdmVyaXR5X3JlYWRhaGVhZF9tZXJrbGVfdHJlZShcbiYjNDM7XHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlLFxuJiM0MztcdHBnb2ZmX3RcdFx0XHRpbmRleCxcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdG5yX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0aW5kZXggJiM0Mzs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoWEZTX0koaW5vZGUpKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XG4mIzQzO1x0Z2VuZXJpY19yZWFkYWhlYWRfbWVya2xlX3RyZWUoaW5vZGUsIGluZGV4LCBucl9wYWdlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFdyaXRlIGEgbWVya2xlIHRyZWUgYmxvY2suXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3hmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUoXG4mIzQzO1x0c3RydWN0IGZpbGVcdFx0KmZpbGUsXG4mIzQzO1x0Y29uc3Qgdm9pZFx0XHQqYnVmLFxuJiM0MztcdHU2NFx0XHRcdHBvcyxcbiYjNDM7XHR1bnNpZ25lZCBpbnRcdFx0c2l6ZSxcbiYjNDM7XHRjb25zdCB1OFx0XHQqemVyb19kaWdlc3QsXG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdGRpZ2VzdF9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koaW5vZGUpO1xuJiM0MztcdGxvZmZfdFx0XHRcdHBvc2l0aW9uID0gcG9zICYjNDM7XG4mIzQzO1x0XHR4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvc2l0aW9uICYjNDM7IHNpemUgXHUwMDNlIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19tYXhieXRlcylcbiYjNDM7XHRcdHJldHVybiAtRUZCSUc7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhpcyBpcyBhIGJsb2NrIGZ1bGwgb2YgaGFzaGVzIG9mIHplcm9lZCBibG9ja3MsIGRvbiYjMzk7dCBib3RoZXJcbiYjNDM7XHQgKiBzdG9yaW5nIHRoZSBibG9jay4gV2UgY2FuIHN5bnRoZXNpemUgdGhlbSBsYXRlci5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEhvd2V2ZXIsIGRvIHRoaXMgb25seSBpbiBjYXNlIE1lcmtsZSB0cmVlIGJsb2NrID09IGZzIGJsb2NrIHNpemUuXG4mIzQzO1x0ICogSW9tYXAgc3ludGhlc2l6ZXMgdGhlc2UgYmxvY2tzIGJhc2VkIG9uIGhvbGVzIGluIHRoZSBtZXJrbGUgdHJlZS4gV2VcbiYjNDM7XHQgKiB3b24mIzM5O3QgYmUgYWJsZSB0byB0ZWxsIGlmIHNvbWV0aGluZyBuZWVkIHRvIGJlIHN5bnRoZXNpemVzIGZvciB0aGVcbiYjNDM7XHQgKiByYW5nZSBpbiB0aGUgZnMgYmxvY2suIEZvciBleGFtcGxlLCBmb3IgNGsgZmlsZXN5c3RlbSBibG9ja1xuJiM0MztcdCAqXG4mIzQzO1x0ICpcdFsgMWsgfCB6ZXJvIGhhc2hlcyB8IHplcm8gaGFzaGVzIHwgMWsgXVxuJiM0MztcdCAqXG4mIzQzO1x0ICogSW9tYXAgd29uJiMzOTt0IGtub3cgYWJvdXQgdGhlc2UgZW1wdHkgYmxvY2tzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzaXplID09IGlwLVx1MDAzZWlfbW91bnQtXHUwMDNlbV9zYi5zYl9ibG9ja3NpemUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIEZpcnN0IGRpZ2VzdCBpcyB6ZXJvX2RpZ2VzdFxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0bWVtY21wKGJ1ZiwgemVyb19kaWdlc3QsIGRpZ2VzdF9zaXplKSA9PSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBFdmVyeSBkaWdlc3QgaXMgc2FtZSBhcyBwcmV2aW91cywgdGh1cyBhbGwgYXJlXG4mIzQzO1x0XHRcdCAqIHplcm9fZGlnZXN0XG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRtZW1jbXAoYnVmICYjNDM7IGRpZ2VzdF9zaXplLCBidWYsIHNpemUgLSBkaWdlc3Rfc2l6ZSkgPT0gMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9tYXBfZnN2ZXJpdHlfd3JpdGUoZmlsZSwgcG9zaXRpb24sIHNpemUsIGJ1ZixcbiYjNDM7XHRcdFx0XHUwMDI2eGZzX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX29wcyxcbiYjNDM7XHRcdFx0XHUwMDI2eGZzX2lvbWFwX3dyaXRlX29wcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHhmc19mc3Zlcml0eV9vcHMgPSB7XG4mIzQzO1x0LmJlZ2luX2VuYWJsZV92ZXJpdHlcdFx0PSB4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlLFxuJiM0MztcdC5lbmRfZW5hYmxlX3Zlcml0eVx0XHQ9IHhmc19mc3Zlcml0eV9lbmRfZW5hYmxlLFxuJiM0MztcdC5nZXRfdmVyaXR5X2Rlc2NyaXB0b3JcdFx0PSB4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3IsXG4mIzQzO1x0LnJlYWRfbWVya2xlX3RyZWVfcGFnZVx0XHQ9IHhmc19mc3Zlcml0eV9yZWFkX21lcmtsZSxcbiYjNDM7XHQucmVhZGFoZWFkX21lcmtsZV90cmVlXHRcdD0geGZzX2ZzdmVyaXR5X3JlYWRhaGVhZF9tZXJrbGVfdHJlZSxcbiYjNDM7XHQud3JpdGVfbWVya2xlX3RyZWVfYmxvY2tcdD0geGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZSxcbiYjNDM7fTtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZzdmVyaXR5LmggYi9mcy94ZnMveGZzX2ZzdmVyaXR5Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNmE5ODFlMjBhNzViYjhcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaFxuQEAgLTAsMCAmIzQzOzEsMjggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IFJlZCBIYXQsIEluYy5cbiYjNDM7ICovXG4mIzQzOyNpZm5kZWYgX19YRlNfRlNWRVJJVFlfSF9fXG4mIzQzOyNkZWZpbmUgX19YRlNfRlNWRVJJVFlfSF9fXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfcGxhdGZvcm0uaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMgeGZzX2ZzdmVyaXR5X29wcztcbiYjNDM7bG9mZl90IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xuJiM0Mztib29sIHhmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXAsIGxvZmZfdCBvZmZzZXQpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGxvZmZfdCB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKVxuJiM0Mzt7XG4mIzQzO1x0V0FSTl9PTl9PTkNFKDEpO1xuJiM0MztcdHJldHVybiBVTExPTkdfTUFYO1xuJiM0Mzt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwLFxuJiM0MztcdFx0XHRcdFx0ICAgIGxvZmZfdCBvZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7I2VuZGlmXHQvKiBDT05GSUdfRlNfVkVSSVRZICovXG4mIzQzO1xuJiM0MzsjZW5kaWZcdC8qIF9fWEZTX0ZTVkVSSVRZX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaGVhbHRoLmMgYi9mcy94ZnMveGZzX2hlYWx0aC5jXG5pbmRleCAyMzliODQzZTgzZDQyYS4uYmU2Njc2MGZiMTIwZjcgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2hlYWx0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2hlYWx0aC5jXG5AQCAtNjI1LDYgJiM0Mzs2MjUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvY3RsX3NpY2tfbWFwIGlub19tYXBbXSA9IHtcbiBcdHsgWEZTX1NJQ0tfSU5PX0RJUl9aQVBQRUQsXHRYRlNfQlNfU0lDS19ESVIgfSxcbiBcdHsgWEZTX1NJQ0tfSU5PX1NZTUxJTktfWkFQUEVELFx0WEZTX0JTX1NJQ0tfU1lNTElOSyB9LFxuIFx0eyBYRlNfU0lDS19JTk9fRElSVFJFRSxcdFhGU19CU19TSUNLX0RJUlRSRUUgfSxcbiYjNDM7XHR7IFhGU19TSUNLX0lOT19GU1ZFUklUWSxcdFhGU19CU19TSUNLX0ZTVkVSSVRZIH0sXG4gfTtcbiBcbiAvKiBGaWxsIG91dCBidWxrc3RhdCBoZWFsdGggaW5mby4gKi9cbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmhcbmluZGV4IDM0YzEwMzhlYmZjZGUxLi4xN2NlMDgzNTkxZjQwOCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19pbm9kZS5oXG5AQCAtNDE5LDYgJiM0Mzs0MTksMTIgQEAgc3RhdGljIGlubGluZSBib29sIHhmc19pbm9kZV9jYW5fc3dfYXRvbWljX3dyaXRlKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKVxuICAqL1xuICNkZWZpbmUgWEZTX0lSRU1BUFBJTkdcdFx0KDFVIFx1MDAzY1x1MDAzYyAxNSlcbiBcbiYjNDM7LypcbiYjNDM7ICogZnMtdmVyaXR5JiMzOTtzIE1lcmtsZSB0cmVlIGlzIHVuZGVyIGNvbnN0cnVjdGlvbi4gVGhlIGZpbGUgaXMgcmVhZC1vbmx5LCB0aGVcbiYjNDM7ICogb25seSB3cml0ZXMgaGFwcGVuaW5nIGFyZSBmb3IgdGhlIGZzdmVyaXR5IG1ldGFkYXRhLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTlx0KDFVIFx1MDAzY1x1MDAzYyAxNilcbiYjNDM7XG4gLyogQWxsIGlub2RlIHN0YXRlIGZsYWdzIHJlbGF0ZWQgdG8gaW5vZGUgcmVjbGFpbS4gKi9cbiAjZGVmaW5lIFhGU19BTExfSVJFQ0xBSU1fRkxBR1NcdChYRlNfSVJFQ0xBSU1BQkxFIHwgXFxcbiBcdFx0XHRcdCBYRlNfSVJFQ0xBSU0gfCBcXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9jdGwuYyBiL2ZzL3hmcy94ZnNfaW9jdGwuY1xuaW5kZXggMWI1MzcwMWJlYmVhMWEuLmZjNzg2MGE4YjVhYmIxIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lvY3RsLmNcbkBAIC00OSw2ICYjNDM7NDksNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlYXR0ci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiAvKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIHBvc2l0aXZlIGVycm9yICovXG4gaW50XG5AQCAtMTQ2Niw2ICYjNDM7MTQ2NywxOSBAQCB4ZnNfZmlsZV9pb2N0bChcbiBcdGNhc2UgWEZTX0lPQ19WRVJJRllfTUVESUE6XG4gXHRcdHJldHVybiB4ZnNfaW9jX3ZlcmlmeV9tZWRpYShmaWxwLCBhcmcpO1xuIFxuJiM0MztcdGNhc2UgRlNfSU9DX0VOQUJMRV9WRVJJVFk6XG4mIzQzO1x0XHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0cmV0dXJuIGZzdmVyaXR5X2lvY3RsX2VuYWJsZShmaWxwLCBhcmcpO1xuJiM0MztcdGNhc2UgRlNfSU9DX01FQVNVUkVfVkVSSVRZOlxuJiM0MztcdFx0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkpXG4mIzQzO1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdHJldHVybiBmc3Zlcml0eV9pb2N0bF9tZWFzdXJlKGZpbHAsIGFyZyk7XG4mIzQzO1x0Y2FzZSBGU19JT0NfUkVBRF9WRVJJVFlfTUVUQURBVEE6XG4mIzQzO1x0XHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0cmV0dXJuIGZzdmVyaXR5X2lvY3RsX3JlYWRfbWV0YWRhdGEoZmlscCwgYXJnKTtcbiYjNDM7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVOT1RUWTtcbiBcdH1cbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvbWFwLmMgYi9mcy94ZnMveGZzX2lvbWFwLmNcbmluZGV4IDIyNWMzZGU4OGQwM2IxLi5hNGQ1NjU2NjE5ODkzMSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19pb21hcC5jXG5AQCAtMzIsNiAmIzQzOzMyLDggQEBcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfcnRiaXRtYXAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc19pY2FjaGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc196b25lX2FsbG9jLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eGZzX2ZzdmVyaXR5LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuICNkZWZpbmUgWEZTX0FMTE9DX0FMSUdOKG1wLCBvZmYpIFxcXG4gXHQoKChvZmYpIFx1MDAzZVx1MDAzZSBtcC1cdTAwM2VtX2FsbG9jc2l6ZV9sb2cpIFx1MDAzY1x1MDAzYyBtcC1cdTAwM2VtX2FsbG9jc2l6ZV9sb2cpXG5AQCAtODgzLDYgJiM0Mzs4ODUsOSBAQCB4ZnNfZGlyZWN0X3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBJT01BUF9BVE9NSUMpXG4gXHRcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfQVRPTUlDX0JJTztcbiBcbiYjNDM7XHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXG4mIzQzO1x0XHRpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBDT1cgd3JpdGVzIG1heSBhbGxvY2F0ZSBkZWxhbGxvYyBzcGFjZSBvciBjb252ZXJ0IHVud3JpdHRlbiBDT1dcbiBcdCAqIGV4dGVudHMsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHRha2UgdGhlIGxvY2sgZXhjbHVzaXZlbHkgaGVyZS5cbkBAIC0xNTg5LDcgJiM0MzsxNTk0LDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0bG9mZl90XHRcdFx0Y291bnQsXG4gXHR1bnNpZ25lZFx0XHRmbGFncyxcbiBcdHN0cnVjdCBpb21hcFx0XHQqaW9tYXAsXG4tXHRzdHJ1Y3QgaW9tYXBcdFx0KnNyY21hcClcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBcdFx0KnNyY21hcCxcbiYjNDM7XHR1MTZcdFx0XHRpb21hcF9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfaXRlclx0Kml0ZXIgPVxuIFx0XHRjb250YWluZXJfb2YoaW9tYXAsIHN0cnVjdCBpb21hcF9pdGVyLCBpb21hcCk7XG5AQCAtMTU5OSw3ICYjNDM7MTYwNSw2IEBAIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihcbiBcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4gXHR4ZnNfZmlsZW9mZl90XHRcdG9mZnNldF9mc2IgPSBYRlNfQl9UT19GU0JUKG1wLCBvZmZzZXQpO1xuIFx0eGZzX2ZpbGVvZmZfdFx0XHRlbmRfZnNiID0geGZzX2lvbWFwX2VuZF9mc2IobXAsIG9mZnNldCwgY291bnQpO1xuLVx0dTE2XHRcdFx0aW9tYXBfZmxhZ3MgPSBJT01BUF9GX1NIQVJFRDtcbiBcdHVuc2lnbmVkIGludFx0XHRsb2NrbW9kZSA9IFhGU19JTE9DS19FWENMO1xuIFx0eGZzX2ZpbGJsa3NfdFx0XHRjb3VudF9mc2I7XG4gXHR4ZnNfZXh0bGVuX3RcdFx0aW5kbGVuO1xuQEAgLTE2NjIsNyAmIzQzOzE2NjcsOCBAQCB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oXG4gXHRcdFx0XHRzbWFwLmJyX3N0YXJ0b2ZmICYjNDM7IHNtYXAuYnJfYmxvY2tjb3VudCk7XG4gXHRcdFx0eGZzX3RyaW1fZXh0ZW50KFx1MDAyNnNtYXAsIG9mZnNldF9mc2IsXG4gXHRcdFx0XHRcdGVuZF9mc2IgLSBvZmZzZXRfZnNiKTtcbi1cdFx0XHRlcnJvciA9IHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBzcmNtYXAsIFx1MDAyNnNtYXAsIGZsYWdzLCAwLFxuJiM0MztcdFx0XHRlcnJvciA9IHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBzcmNtYXAsIFx1MDAyNnNtYXAsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0aW9tYXBfZmxhZ3MsXG4gXHRcdFx0XHRcdHhmc19pb21hcF9pbm9kZV9zZXF1ZW5jZShpcCwgMCkpO1xuIFx0XHRcdGlmIChlcnJvcilcbiBcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbkBAIC0xNjcyLDYgJiM0MzsxNjc4LDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0aWYgKCFpcC1cdTAwM2VpX2Nvd2ZwKVxuIFx0XHR4ZnNfaWZvcmtfaW5pdF9jb3coaXApO1xuIFxuJiM0MztcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfU0hBUkVEO1xuJiM0MztcbiBcdGlmICgheGZzX2lleHRfbG9va3VwX2V4dGVudChpcCwgaXAtXHUwMDNlaV9jb3dmcCwgb2Zmc2V0X2ZzYiwgXHUwMDI2aWN1ciwgXHUwMDI2Z290KSlcbiBcdFx0Z290LmJyX3N0YXJ0b2ZmID0gZW5kX2ZzYjtcbiBcdGlmIChnb3QuYnJfc3RhcnRvZmYgXHUwMDNjPSBvZmZzZXRfZnNiKSB7XG5AQCAtMTgwMyw5ICYjNDM7MTgxMSwxMiBAQCB4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4mIzQzO1x0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxuJiM0MztcdFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiYjNDM7XG4gXHRpZiAoeGZzX2lzX3pvbmVkX2lub2RlKGlwKSlcbiBcdFx0cmV0dXJuIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LFxuLVx0XHRcdFx0Y291bnQsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcbiYjNDM7XHRcdFx0XHRjb3VudCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXAsIGlvbWFwX2ZsYWdzKTtcbiBcbiBcdC8qIHdlIGNhbiYjMzk7dCB1c2UgZGVsYXllZCBhbGxvY2F0aW9ucyB3aGVuIHVzaW5nIGV4dGVudCBzaXplIGhpbnRzICovXG4gXHRpZiAoeGZzX2dldF9leHRzel9oaW50KGlwKSlcbkBAIC0yMTkxLDEyICYjNDM7MjIwMiwxNyBAQCB4ZnNfcmVhZF9pb21hcF9iZWdpbihcbiBcdGJvb2xcdFx0XHRzaGFyZWQgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGludFx0XHRsb2NrbW9kZSA9IFhGU19JTE9DS19TSEFSRUQ7XG4gXHR1NjRcdFx0XHRzZXE7XG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdGlvbWFwX2ZsYWdzID0gMDtcbiBcbiBcdEFTU0VSVCghKGZsYWdzIFx1MDAyNiAoSU9NQVBfV1JJVEUgfCBJT01BUF9aRVJPKSkpO1xuIFxuIFx0aWYgKHhmc19pc19zaHV0ZG93bihtcCkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuJiM0MztcdGlmIChmc3Zlcml0eV9hY3RpdmUoaW5vZGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAob2Zmc2V0IFx1MDAzZT0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpKVxuJiM0MztcdFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiYjNDM7XG4gXHRlcnJvciA9IHhmc19pbG9ja19mb3JfaW9tYXAoaXAsIGZsYWdzLCBcdTAwMjZsb2NrbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbkBAIC0yMjEwLDggJiM0MzsyMjI2LDkgQEAgeGZzX3JlYWRfaW9tYXBfYmVnaW4oXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdHRyYWNlX3hmc19pb21hcF9mb3VuZChpcCwgb2Zmc2V0LCBsZW5ndGgsIFhGU19EQVRBX0ZPUkssIFx1MDAyNmltYXApO1xuLVx0cmV0dXJuIHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2aW1hcCwgZmxhZ3MsXG4tXHRcdFx0XHQgc2hhcmVkID8gSU9NQVBfRl9TSEFSRUQgOiAwLCBzZXEpO1xuJiM0MztcdGlvbWFwX2ZsYWdzIHw9IHNoYXJlZCA/IElPTUFQX0ZfU0hBUkVEIDogMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2aW1hcCwgZmxhZ3MsIGlvbWFwX2ZsYWdzLCBzZXEpO1xuIH1cbiBcbiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIHhmc19yZWFkX2lvbWFwX29wcyA9IHtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvcHMuYyBiL2ZzL3hmcy94ZnNfaW9wcy5jXG5pbmRleCA2MzM5ZjQ5NTZlY2IzOS4uNzA2MzdjZGNjMjk5NzIgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lvcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19pb3BzLmNcbkBAIC0zNSw2ICYjNDM7MzUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pdmVyc2lvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmllbWFwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuIC8qXG4gICogRGlyZWN0b3JpZXMgaGF2ZSBkaWZmZXJlbnQgbG9jayBvcmRlciB3LnIudC4gbW1hcF9sb2NrIGNvbXBhcmVkIHRvIHJlZ3VsYXJcbkBAIC01ODAsNiAmIzQzOzU4MSwxMCBAQCB4ZnNfcmVwb3J0X2Rpb2FsaWduKFxuIFx0c3RydWN0IGJsb2NrX2RldmljZVx0KmJkZXYgPSB0YXJnZXQtXHUwMDNlYnRfYmRldjtcbiBcbiBcdHN0YXQtXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfRElPQUxJR04gfCBTVEFUWF9ESU9fUkVBRF9BTElHTjtcbiYjNDM7XG4mIzQzO1x0aWYgKGZzdmVyaXR5X2FjdGl2ZShWRlNfSShpcCkpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdHN0YXQtXHUwMDNlZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChiZGV2KSAmIzQzOyAxO1xuIFxuIFx0LypcbkBAIC0xMzcwLDYgJiM0MzsxMzc1LDggQEAgeGZzX2lub2RlX3Nob3VsZF9lbmFibGVfZGF4KFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAoIXhmc19pbm9kZV9zdXBwb3J0c19kYXgoaXApKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX1ZFUklUWSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcdGlmICh4ZnNfaGFzX2RheF9hbHdheXMoaXAtXHUwMDNlaV9tb3VudCkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0aWYgKGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX0RBWClcbkBAIC0xMzk4LDEyICYjNDM7MTQwNSwxNSBAQCB4ZnNfZGlmbGFnc190b19pZmxhZ3MoXG4gXHRcdGZsYWdzIHw9IFNfTk9BVElNRTtcbiBcdGlmIChpbml0IFx1MDAyNlx1MDAyNiB4ZnNfaW5vZGVfc2hvdWxkX2VuYWJsZV9kYXgoaXApKVxuIFx0XHRmbGFncyB8PSBTX0RBWDtcbiYjNDM7XHRpZiAoeGZsYWdzIFx1MDAyNiBGU19YRkxBR19WRVJJVFkpXG4mIzQzO1x0XHRmbGFncyB8PSBTX1ZFUklUWTtcbiBcbiBcdC8qXG4gXHQgKiBTX0RBWCBjYW4gb25seSBiZSBzZXQgZHVyaW5nIGlub2RlIGluaXRpYWxpemF0aW9uIGFuZCBpcyBuZXZlciBzZXQgYnlcbiBcdCAqIHRoZSBWRlMsIHNvIHdlIGNhbm5vdCBtYXNrIG9mZiBTX0RBWCBpbiBpX2ZsYWdzLlxuIFx0ICovXG4tXHRpbm9kZS1cdTAwM2VpX2ZsYWdzIFx1MDAyNj0gfihTX0lNTVVUQUJMRSB8IFNfQVBQRU5EIHwgU19TWU5DIHwgU19OT0FUSU1FKTtcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX2ZsYWdzIFx1MDAyNj1cbiYjNDM7XHRcdH4oU19JTU1VVEFCTEUgfCBTX0FQUEVORCB8IFNfU1lOQyB8IFNfTk9BVElNRSB8IFNfVkVSSVRZKTtcbiBcdGlub2RlLVx1MDAzZWlfZmxhZ3MgfD0gZmxhZ3M7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jIGIvZnMveGZzL3hmc19tZXNzYWdlLmNcbmluZGV4IDAyNDNlNTA5YTQ2ODkxLi40NGIxM2Q0NjA0OWM2MiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX21lc3NhZ2UuY1xuQEAgLTE0OSw2ICYjNDM7MTQ5LDEwIEBAIHhmc193YXJuX2V4cGVyaW1lbnRhbChcbiBcdFx0XHQub3BzdGF0ZVx0PSBYRlNfT1BTVEFURV9XQVJORURfTEFSUCxcbiBcdFx0XHQubmFtZVx0XHQ9IFwmIzM0O2xvZ2dlZCBleHRlbmRlZCBhdHRyaWJ1dGVzXCYjMzQ7LFxuIFx0XHR9LFxuJiM0MztcdFx0W1hGU19FWFBFUklNRU5UQUxfRlNWRVJJVFldID0ge1xuJiM0MztcdFx0XHQub3BzdGF0ZVx0PSBYRlNfT1BTVEFURV9XQVJORURfRlNWRVJJVFksXG4mIzQzO1x0XHRcdC5uYW1lXHRcdD0gXCYjMzQ7ZnN2ZXJpdHlcJiMzNDssXG4mIzQzO1x0XHR9LFxuIFx0fTtcbiBcdEFTU0VSVChmZWF0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZmVhdCBcdTAwM2MgWEZTX0VYUEVSSU1FTlRBTF9NQVgpO1xuIFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUoZmVhdHVyZXMpICE9IFhGU19FWFBFUklNRU5UQUxfTUFYKTtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21lc3NhZ2UuaCBiL2ZzL3hmcy94ZnNfbWVzc2FnZS5oXG5pbmRleCA4MTFiODg1ZjQxYzM1YS4uMzY0ZmNjN2U0MmIwODQgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX21lc3NhZ2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19tZXNzYWdlLmhcbkBAIC05Myw2ICYjNDM7OTMsNyBAQCB2b2lkIHhmc19idWZfYWxlcnRfcmF0ZWxpbWl0ZWQoc3RydWN0IHhmc19idWYgKmJwLCBjb25zdCBjaGFyICpybG1zZyxcbiBlbnVtIHhmc19leHBlcmltZW50YWxfZmVhdCB7XG4gXHRYRlNfRVhQRVJJTUVOVEFMX1NIUklOSyxcbiBcdFhGU19FWFBFUklNRU5UQUxfTEFSUCxcbiYjNDM7XHRYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZLFxuIFxuIFx0WEZTX0VYUEVSSU1FTlRBTF9NQVgsXG4gfTtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmhcbmluZGV4IDY2YTAyZDFiOWFkN2ExLi44NzVjOWIwZjhlOTkxZiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19tb3VudC5oXG5AQCAtMzg4LDYgJiM0MzszODgsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfbW91bnQge1xuICNkZWZpbmUgWEZTX0ZFQVRfRVhDSEFOR0VfUkFOR0VcdCgxVUxMIFx1MDAzY1x1MDAzYyAyNylcdC8qIGV4Y2hhbmdlIHJhbmdlICovXG4gI2RlZmluZSBYRlNfRkVBVF9NRVRBRElSXHQoMVVMTCBcdTAwM2NcdTAwM2MgMjgpXHQvKiBtZXRhZGF0YSBkaXJlY3RvcnkgdHJlZSAqL1xuICNkZWZpbmUgWEZTX0ZFQVRfWk9ORURcdFx0KDFVTEwgXHUwMDNjXHUwMDNjIDI5KVx0Lyogem9uZWQgUlQgZGV2aWNlICovXG4mIzQzOyNkZWZpbmUgWEZTX0ZFQVRfVkVSSVRZXHRcdCgxVUxMIFx1MDAzY1x1MDAzYyAzMClcdC8qIGZzLXZlcml0eSAqL1xuIFxuIC8qIE1vdW50IGZlYXR1cmVzICovXG4gI2RlZmluZSBYRlNfRkVBVF9OT0xJRkVUSU1FXHQoMVVMTCBcdTAwM2NcdTAwM2MgNDcpXHQvKiBkaXNhYmxlIGxpZmV0aW1lIGhpbnRzICovXG5AQCAtNDQ1LDYgJiM0Mzs0NDYsNyBAQCBfX1hGU19IQVNfRkVBVChleGNoYW5nZV9yYW5nZSwgRVhDSEFOR0VfUkFOR0UpXG4gX19YRlNfSEFTX0ZFQVQobWV0YWRpciwgTUVUQURJUilcbiBfX1hGU19IQVNfRkVBVCh6b25lZCwgWk9ORUQpXG4gX19YRlNfSEFTX0ZFQVQobm9saWZldGltZSwgTk9MSUZFVElNRSlcbiYjNDM7X19YRlNfSEFTX0ZFQVQodmVyaXR5LCBWRVJJVFkpXG4gXG4gc3RhdGljIGlubGluZSBib29sIHhmc19oYXNfcnRncm91cHMoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXApXG4ge1xuQEAgLTU4Miw2ICYjNDM7NTg0LDggQEAgX19YRlNfSEFTX0ZFQVQobm91dWlkLCBOT1VVSUQpXG4gI2RlZmluZSBYRlNfT1BTVEFURV9SRVNVTUlOR19RVU9UQU9OXHQxOFxuIC8qIChab25lZCkgR0MgaXMgaW4gcHJvZ3Jlc3MgKi9cbiAjZGVmaW5lIFhGU19PUFNUQVRFX1pPTkVHQ19SVU5OSU5HXHQyMFxuJiM0MzsvKiBLZXJuZWwgaGFzIGxvZ2dlZCBhIHdhcm5pbmcgYWJvdXQgZnN2ZXJpdHkgc3VwcG9ydCAqL1xuJiM0MzsjZGVmaW5lIFhGU19PUFNUQVRFX1dBUk5FRF9GU1ZFUklUWVx0MjFcbiBcbiAjZGVmaW5lIF9fWEZTX0lTX09QU1RBVEUobmFtZSwgTkFNRSkgXFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lzXyAjIyBuYW1lIChzdHJ1Y3QgeGZzX21vdW50ICptcCkgXFxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3N1cGVyLmMgYi9mcy94ZnMveGZzX3N1cGVyLmNcbmluZGV4IDg1MzFkNTI2ZmM0NDA5Li5hNzc3NGQyZDZiMjNmYyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19zdXBlci5jXG5AQCAtMzAsNiAmIzQzOzMwLDcgQEBcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfZmlsZXN0cmVhbS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGZzX3F1b3RhLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfc3lzZnMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfZnN2ZXJpdHkuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc19vbmRpc2suaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc19ybWFwX2l0ZW0uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc19yZWZjb3VudF9pdGVtLmhcJiMzNDtcbkBAIC0xNjg5LDYgJiM0MzsxNjkwLDkgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoXG4gXHRzYi1cdTAwM2VzX3F1b3RhX3R5cGVzID0gUVRZUEVfTUFTS19VU1IgfCBRVFlQRV9NQVNLX0dSUCB8IFFUWVBFX01BU0tfUFJKO1xuICNlbmRpZlxuIFx0c2ItXHUwMDNlc19vcCA9IFx1MDAyNnhmc19zdXBlcl9vcGVyYXRpb25zO1xuJiM0MzsjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxuJiM0MztcdHNiLVx1MDAzZXNfdm9wID0gXHUwMDI2eGZzX2ZzdmVyaXR5X29wcztcbiYjNDM7I2VuZGlmXG4gXG4gXHQvKlxuIFx0ICogRGVsYXkgbW91bnQgd29yayBpZiB0aGUgZGVidWcgaG9vayBpcyBzZXQuIFRoaXMgaXMgZGVidWdcbkBAIC0xOTQxLDYgJiM0MzsxOTQ1LDkgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoXG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gb3V0X2ZpbGVzdHJlYW1fdW5tb3VudDtcbiBcbiYjNDM7XHRpZiAoeGZzX2hhc192ZXJpdHkobXApKVxuJiM0MztcdFx0eGZzX3dhcm5fZXhwZXJpbWVudGFsKG1wLCBYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZKTtcbiYjNDM7XG4gXHRyb290ID0gaWdyYWIoVkZTX0kobXAtXHUwMDNlbV9yb290aXApKTtcbiBcdGlmICghcm9vdCkge1xuIFx0XHRlcnJvciA9IC1FTk9FTlQ7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oIGIvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oXG5pbmRleCA2YzQ2N2RlZDk3NTFmYy4uZjk0MzMzMzJjMjc0YmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnN2ZXJpdHkuaFxuQEAgLTEyNCw2ICYjNDM7MTI0LDggQEAgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMge1xuIFx0ICogQGJ1ZjogdGhlIE1lcmtsZSB0cmVlIGJsb2NrIHRvIHdyaXRlXG4gXHQgKiBAcG9zOiB0aGUgcG9zaXRpb24gb2YgdGhlIGJsb2NrIGluIHRoZSBNZXJrbGUgdHJlZSAoaW4gYnl0ZXMpXG4gXHQgKiBAc2l6ZTogdGhlIE1lcmtsZSB0cmVlIGJsb2NrIHNpemUgKGluIGJ5dGVzKVxuJiM0MztcdCAqIEB6ZXJvX2RpZ2VzdDogdGhlIGhhc2ggb2YgdGhlIGFsbC16ZXJvZXMgYmxvY2tcbiYjNDM7XHQgKiBAZGlnZXN0X3NpemU6IHNpemUgb2YgemVyb19kaWdlc3QsIGluIGJ5dGVzXG4gXHQgKlxuIFx0ICogVGhpcyBpcyBvbmx5IGNhbGxlZCBiZXR3ZWVuIC1cdTAwM2ViZWdpbl9lbmFibGVfdmVyaXR5KCkgYW5kXG4gXHQgKiAtXHUwMDNlZW5kX2VuYWJsZV92ZXJpdHkoKS5cbkBAIC0xMzEsNyAmIzQzOzEzMyw5IEBAIHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHtcbiBcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZVxuIFx0ICovXG4gXHRpbnQgKCp3cml0ZV9tZXJrbGVfdHJlZV9ibG9jaykoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1Zixcbi1cdFx0XHRcdCAgICAgICB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxuJiM0MztcdFx0XHRcdCAgICAgICBjb25zdCB1OCAqemVyb19kaWdlc3QsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBkaWdlc3Rfc2l6ZSk7XG4gfTtcbiBcbiAjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxuQEAgLTMxNywxMCAmIzQzOzMyMSwxNCBAQCBzdGF0aWMgaW5saW5lIGludCBmc3Zlcml0eV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO2ludCBmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8oc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO1xuIHZvaWQgZnN2ZXJpdHlfY2xlYW51cF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiBzdHJ1Y3QgcGFnZSAqZ2VuZXJpY19yZWFkX21lcmtsZV90cmVlX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCk7XG4gdm9pZCBnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4mIzQzO2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbiYjNDM7XHRcdFx0ICAgIGxvZmZfdCBwb3MpO1xuIFxuICNlbmRpZlx0LyogX0xJTlVYX0ZTVkVSSVRZX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmggYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbmluZGV4IDU2YjQzZDU5NGU2ZTI5Li4zNmZjOTMxMzgyYTg3NiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pb21hcC5oXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbV90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrZGV2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mb2xpb19iYXRjaC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3Rfc29ydC5oXHUwMDNlXG4gXG4gc3RydWN0IGFkZHJlc3Nfc3BhY2U7XG4gc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbztcbkBAIC00ODgsNyAmIzQzOzQ4OSw5IEBAIHN0cnVjdCBpb21hcF9pb2VuZCAqaW9tYXBfc3BsaXRfaW9lbmQoc3RydWN0IGlvbWFwX2lvZW5kICppb2VuZCxcbiB2b2lkIGlvbWFwX2ZpbmlzaF9pb2VuZHMoc3RydWN0IGlvbWFwX2lvZW5kICppb2VuZCwgaW50IGVycm9yKTtcbiB2b2lkIGlvbWFwX2lvZW5kX3RyeV9tZXJnZShzdHJ1Y3QgaW9tYXBfaW9lbmQgKmlvZW5kLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICptb3JlX2lvZW5kcyk7XG4tdm9pZCBpb21hcF9zb3J0X2lvZW5kcyhzdHJ1Y3QgbGlzdF9oZWFkICppb2VuZF9saXN0KTtcbiYjNDM7aW50IGlvbWFwX2lvZW5kX2NvbXBhcmUodm9pZCAqcHJpdiwgY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqYSxcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmIpO1xuJiM0Mzt2b2lkIGlvbWFwX3NvcnRfaW9lbmRzKHN0cnVjdCBsaXN0X2hlYWQgKmlvZW5kX2xpc3QsIGxpc3RfY21wX2Z1bmNfdCBjbXApO1xuIHNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGxvZmZfdCBwb3MsIGxvZmZfdCBlbmRfcG9zLCB1bnNpZ25lZCBpbnQgZGlydHlfbGVuKTtcbiBpbnQgaW9tYXBfaW9lbmRfd3JpdGViYWNrX3N1Ym1pdChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBpbnQgZXJyb3IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDEzOjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGU19WRVJJVFkmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3ImIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9yZWFkYWhlYWRfbWVya2xlX3RyZWUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9jYW5jZWxfdW53cml0dGVuJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yJiMzNDssCiAgICAmIzM0O3hjaGtfaW5vZGVfc2V0dXBfdmVyaXR5JiMzNDssCiAgICAmIzM0O3hjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbiYjMzQ7LAogICAgJiMzNDt4cmVwX2lub2RlX3Zlcml0eSYjMzQ7LAogICAgJiMzNDt4ZnNfcmVhZF9pb2VuZF9jb21wYXJlJiMzNDssCiAgICAmIzM0O3hmc19lbmRfaW9lbmRfcmVhZCYjMzQ7LAogICAgJiMzNDt4ZnNfaW9tYXBfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDtmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8mIzM0OywKICAgICYjMzQ7ZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBmcy12ZXJpdHkgc3VwcG9ydCBmb3IgdGhlIFhGUyBmaWxlc3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZpbGUgYGZzL3hmcy94ZnNfZnN2ZXJpdHkuY2Agd2l0aCB0aGUgY29yZSBsb2dpYywgbW9kaWZpZXMgWEZTIEkvTyBwYXRocywgYW5kIGludGVncmF0ZXMgd2l0aCB0aGUgZ2VuZXJpYyBmcy12ZXJpdHkgbGF5ZXIuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZDFiM2M1ZGQ4YWE1ZDgwMzIyM2NkZmVkYWNjMDJiNjRiMjZjZWQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjIgMTM6NTg6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9hdHRyLmMgYi9mcy9hdHRyLmMKaW5kZXggNGY0MzdmYWJiN2YwZjUuLjcxODg4YWM5MDNjMjdkIDEwMDY0NAotLS0gYS9mcy9hdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYXR0ci5jCkBAIC0xNzYsNyAmIzQzOzE3Niw3IEBAIGludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJICogY292ZXJlZCBieSB0aGUgb3Blbi10aW1lIGNoZWNrIGJlY2F1c2Ugc3lzX3RydW5jYXRlKCkgdGFrZXMgYQogCQkgKiBwYXRoLCBub3QgYW4gb3BlbiBmaWxlLgogCQkgKi8KLQkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX1ZFUklUWSkgJmFtcDsmYW1wOyBJU19WRVJJVFkoaW5vZGUpKQomIzQzOwkJaWYgKElTX1ZFUklUWShpbm9kZSkpCiAJCQlyZXR1cm4gLUVQRVJNOwogCiAJCWVycm9yID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgYXR0ci0mZ3Q7aWFfc2l6ZSk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuYwppbmRleCAyNzI1OThmNmFlNzdhZi4uZGU3MjljNDRkNmQyNTEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnRyZnMvaW5vZGUuYwpAQCAtODA0MCw3ICYjNDM7ODA0MCw2IEBAIHN0YXRpYyBpbnQgYnRyZnNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShwYXRoLSZndDtkZW50cnkpOwogCXUzMiBibG9ja3NpemUgPSBidHJmc19zYihpbm9kZS0mZ3Q7aV9zYiktJmd0O3NlY3RvcnNpemU7CiAJdTMyIGJpX2ZsYWdzID0gQlRSRlNfSShpbm9kZSktJmd0O2ZsYWdzOwotCXUzMiBiaV9yb19mbGFncyA9IEJUUkZTX0koaW5vZGUpLSZndDtyb19mbGFnczsKIAogCXN0YXQtJmd0O3Jlc3VsdF9tYXNrIHw9IFNUQVRYX0JUSU1FOwogCXN0YXQtJmd0O2J0aW1lLnR2X3NlYyA9IEJUUkZTX0koaW5vZGUpLSZndDtpX290aW1lX3NlYzsKQEAgLTgwNTMsOCAmIzQzOzgwNTIsNiBAQCBzdGF0aWMgaW50IGJ0cmZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCXN0YXQtJmd0O2F0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9JTU1VVEFCTEU7CiAJaWYgKGJpX2ZsYWdzICZhbXA7IEJUUkZTX0lOT0RFX05PRFVNUCkKIAkJc3RhdC0mZ3Q7YXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX05PRFVNUDsKLQlpZiAoYmlfcm9fZmxhZ3MgJmFtcDsgQlRSRlNfSU5PREVfUk9fVkVSSVRZKQotCQlzdGF0LSZndDthdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfVkVSSVRZOwogCiAJc3RhdC0mZ3Q7YXR0cmlidXRlc19tYXNrIHw9IChTVEFUWF9BVFRSX0FQUEVORCB8CiAJCQkJICBTVEFUWF9BVFRSX0NPTVBSRVNTRUQgfApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdmVyaXR5LmMgYi9mcy9idHJmcy92ZXJpdHkuYwppbmRleCA5ODMzNjVhNzM1NDE2OC4uYmQ3OWUzNDNhZTIzN2YgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3Zlcml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2J0cmZzL3Zlcml0eS5jCkBAIC03NzMsMTEgJiM0Mzs3NzMsMTUgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpidHJmc19yZWFkX21lcmtsZV90cmVlX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwKICAqIEBidWY6CU1lcmtsZSB0cmVlIGJsb2NrIHRvIHdyaXRlCiAgKiBAcG9zOgl0aGUgcG9zaXRpb24gb2YgdGhlIGJsb2NrIGluIHRoZSBNZXJrbGUgdHJlZSAoaW4gYnl0ZXMpCiAgKiBAc2l6ZToJdGhlIE1lcmtsZSB0cmVlIGJsb2NrIHNpemUgKGluIGJ5dGVzKQomIzQzOyAqIEB6ZXJvX2RpZ2VzdDoJdGhlIGhhc2ggb2YgdGhlIGFsbC16ZXJvZXMgYmxvY2sKJiM0MzsgKiBAZGlnZXN0X3NpemU6CXNpemUgb2YgemVyb19kaWdlc3QsIGluIGJ5dGVzCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlCiAgKi8KIHN0YXRpYyBpbnQgYnRyZnNfd3JpdGVfbWVya2xlX3RyZWVfYmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1ZiwKLQkJCQkJIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKQomIzQzOwkJCQkJIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLAomIzQzOwkJCQkJIGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCwKJiM0MzsJCQkJCSB1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiAJbG9mZl90IG1lcmtsZV9wb3MgPSBtZXJrbGVfZmlsZV9wb3MoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IGNlOTk4MDdjNWY1YjJjLi45OWZhN2EyODk1MWY1ZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtNjI1MCwxNSAmIzQzOzYyNTAsMTIgQEAgaW50IGV4dDRfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsCiAJCXN0YXQtJmd0O2F0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9JTU1VVEFCTEU7CiAJaWYgKGZsYWdzICZhbXA7IEVYVDRfTk9EVU1QX0ZMKQogCQlzdGF0LSZndDthdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfTk9EVU1QOwotCWlmIChmbGFncyAmYW1wOyBFWFQ0X1ZFUklUWV9GTCkKLQkJc3RhdC0mZ3Q7YXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX1ZFUklUWTsKIAogCXN0YXQtJmd0O2F0dHJpYnV0ZXNfbWFzayB8PSAoU1RBVFhfQVRUUl9BUFBFTkQgfAogCQkJCSAgU1RBVFhfQVRUUl9DT01QUkVTU0VEIHwKIAkJCQkgIFNUQVRYX0FUVFJfRU5DUllQVEVEIHwKIAkJCQkgIFNUQVRYX0FUVFJfSU1NVVRBQkxFIHwKLQkJCQkgIFNUQVRYX0FUVFJfTk9EVU1QIHwKLQkJCQkgIFNUQVRYX0FUVFJfVkVSSVRZKTsKJiM0MzsJCQkJICBTVEFUWF9BVFRSX05PRFVNUCk7CiAKIAlnZW5lcmljX2ZpbGxhdHRyKGlkbWFwLCByZXF1ZXN0X21hc2ssIGlub2RlLCBzdGF0KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvdmVyaXR5LmMgYi9mcy9leHQ0L3Zlcml0eS5jCmluZGV4IGNhNjFkYTUzZjMxM2ZhLi5hYzVjMTMzZjU1MjkyNSAxMDA2NDQKLS0tIGEvZnMvZXh0NC92ZXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3Zlcml0eS5jCkBAIC0zNCwzMiAmIzQzOzM0LDYgQEAgc3RhdGljIGlubGluZSBsb2ZmX3QgZXh0NF92ZXJpdHlfbWV0YWRhdGFfcG9zKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJcmV0dXJuIHJvdW5kX3VwKGlub2RlLSZndDtpX3NpemUsIDY1NTM2KTsKIH0KIAotLyoKLSAqIFJlYWQgc29tZSB2ZXJpdHkgbWV0YWRhdGEgZnJvbSB0aGUgaW5vZGUuICBfX3Zmc19yZWFkKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZQotICogd2UgbmVlZCB0byByZWFkIGJleW9uZCBpX3NpemUuCi0gKi8KLXN0YXRpYyBpbnQgcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCi0JCQkgIGxvZmZfdCBwb3MpCi17Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCXN0cnVjdCBmb2xpbyAqZm9saW87Ci0JCXNpemVfdCBuOwotCi0JCWZvbGlvID0gcmVhZF9tYXBwaW5nX2ZvbGlvKGlub2RlLSZndDtpX21hcHBpbmcsIHBvcyAmZ3Q7Jmd0OyBQQUdFX1NISUZULAotCQkJCQkgTlVMTCk7Ci0JCWlmIChJU19FUlIoZm9saW8pKQotCQkJcmV0dXJuIFBUUl9FUlIoZm9saW8pOwotCi0JCW4gPSBtZW1jcHlfZnJvbV9maWxlX2ZvbGlvKGJ1ZiwgZm9saW8sIHBvcywgY291bnQpOwotCQlmb2xpb19wdXQoZm9saW8pOwotCi0JCWJ1ZiAmIzQzOz0gbjsKLQkJcG9zICYjNDM7PSBuOwotCQljb3VudCAtPSBuOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFdyaXRlIHNvbWUgdmVyaXR5IG1ldGFkYXRhIHRvIHRoZSBpbm9kZSBmb3IgRlNfSU9DX0VOQUJMRV9WRVJJVFkuCiAgKiBrZXJuZWxfd3JpdGUoKSBjYW4mIzM5O3QgYmUgdXNlZCBiZWNhdXNlIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgcmVhZG9ubHkuCkBAIC0zMTEsOCAmIzQzOzI4NSw4IEBAIHN0YXRpYyBpbnQgZXh0NF9nZXRfdmVyaXR5X2Rlc2NyaXB0b3JfbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwKIAkJZ290byBiYWQ7CiAJZGVzY19zaXplX3BvcyAtPSBzaXplb2YoZGVzY19zaXplX2Rpc2spOwogCi0JZXJyID0gcGFnZWNhY2hlX3JlYWQoaW5vZGUsICZhbXA7ZGVzY19zaXplX2Rpc2ssIHNpemVvZihkZXNjX3NpemVfZGlzayksCi0JCQkgICAgIGRlc2Nfc2l6ZV9wb3MpOwomIzQzOwllcnIgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgJmFtcDtkZXNjX3NpemVfZGlzaywKJiM0MzsJCQkJICAgICAgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSwgZGVzY19zaXplX3Bvcyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAlkZXNjX3NpemUgPSBsZTMyX3RvX2NwdShkZXNjX3NpemVfZGlzayk7CkBAIC0zNTIsNyAmIzQzOzMyNiw3IEBAIHN0YXRpYyBpbnQgZXh0NF9nZXRfdmVyaXR5X2Rlc2NyaXB0b3Ioc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLAogCWlmIChidWZfc2l6ZSkgewogCQlpZiAoZGVzY19zaXplICZndDsgYnVmX3NpemUpCiAJCQlyZXR1cm4gLUVSQU5HRTsKLQkJZXJyID0gcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7CiYjNDM7CQllcnIgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBkZXNjX3NpemUsIGRlc2NfcG9zKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMzc0LDcgJiM0MzszNDgsOSBAQCBzdGF0aWMgdm9pZCBleHQ0X3JlYWRhaGVhZF9tZXJrbGVfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogfQogCiBzdGF0aWMgaW50IGV4dDRfd3JpdGVfbWVya2xlX3RyZWVfYmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1ZiwKLQkJCQkJdTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUpCiYjNDM7CQkJCQl1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSwKJiM0MzsJCQkJCWNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCwKJiM0MzsJCQkJCXVuc2lnbmVkIGludCBkaWdlc3Rfc2l6ZSkKIHsKIAlwb3MgJiM0Mzs9IGV4dDRfdmVyaXR5X21ldGFkYXRhX3BvcyhmaWxlX2lub2RlKGZpbGUpKTsKIApkaWZmIC0tZ2l0IGEvZnMvZjJmcy9maWxlLmMgYi9mcy9mMmZzL2ZpbGUuYwppbmRleCA0YjUyYzU2ZDcxZjA3Zi4uOWI1MzFhMDE2ZWQ0ZDkgMTAwNjQ0Ci0tLSBhL2ZzL2YyZnMvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2YyZnMvZmlsZS5jCkBAIC0xMDI0LDE1ICYjNDM7MTAyNCwxMiBAQCBpbnQgZjJmc19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwKIAkJc3RhdC0mZ3Q7YXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0lNTVVUQUJMRTsKIAlpZiAoZmxhZ3MgJmFtcDsgRjJGU19OT0RVTVBfRkwpCiAJCXN0YXQtJmd0O2F0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9OT0RVTVA7Ci0JaWYgKElTX1ZFUklUWShpbm9kZSkpCi0JCXN0YXQtJmd0O2F0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9WRVJJVFk7CiAKIAlzdGF0LSZndDthdHRyaWJ1dGVzX21hc2sgfD0gKFNUQVRYX0FUVFJfQ09NUFJFU1NFRCB8CiAJCQkJICBTVEFUWF9BVFRSX0FQUEVORCB8CiAJCQkJICBTVEFUWF9BVFRSX0VOQ1JZUFRFRCB8CiAJCQkJICBTVEFUWF9BVFRSX0lNTVVUQUJMRSB8Ci0JCQkJICBTVEFUWF9BVFRSX05PRFVNUCB8Ci0JCQkJICBTVEFUWF9BVFRSX1ZFUklUWSk7CiYjNDM7CQkJCSAgU1RBVFhfQVRUUl9OT0RVTVApOwogCiAJZ2VuZXJpY19maWxsYXR0cihpZG1hcCwgcmVxdWVzdF9tYXNrLCBpbm9kZSwgc3RhdCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2YyZnMvdmVyaXR5LmMgYi9mcy9mMmZzL3Zlcml0eS5jCmluZGV4IDM5ZjQ4MjUxNTQ0NTJhLi5mM2E0NjE3NjU2ZGI5YiAxMDA2NDQKLS0tIGEvZnMvZjJmcy92ZXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mMmZzL3Zlcml0eS5jCkBAIC0zNywzNCAmIzQzOzM3LDYgQEAgc3RhdGljIGlubGluZSBsb2ZmX3QgZjJmc192ZXJpdHlfbWV0YWRhdGFfcG9zKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJcmV0dXJuIHJvdW5kX3VwKGlub2RlLSZndDtpX3NpemUsIDY1NTM2KTsKIH0KIAotLyoKLSAqIFJlYWQgc29tZSB2ZXJpdHkgbWV0YWRhdGEgZnJvbSB0aGUgaW5vZGUuICBfX3Zmc19yZWFkKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZQotICogd2UgbmVlZCB0byByZWFkIGJleW9uZCBpX3NpemUuCi0gKi8KLXN0YXRpYyBpbnQgcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCi0JCQkgIGxvZmZfdCBwb3MpCi17Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCXNpemVfdCBuID0gbWluX3Qoc2l6ZV90LCBjb3VudCwKLQkJCQkgUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2UocG9zKSk7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShpbm9kZS0mZ3Q7aV9tYXBwaW5nLCBwb3MgJmd0OyZndDsgUEFHRV9TSElGVCwKLQkJCQkJIE5VTEwpOwotCQlpZiAoSVNfRVJSKHBhZ2UpKQotCQkJcmV0dXJuIFBUUl9FUlIocGFnZSk7Ci0KLQkJbWVtY3B5X2Zyb21fcGFnZShidWYsIHBhZ2UsIG9mZnNldF9pbl9wYWdlKHBvcyksIG4pOwotCi0JCXB1dF9wYWdlKHBhZ2UpOwotCi0JCWJ1ZiAmIzQzOz0gbjsKLQkJcG9zICYjNDM7PSBuOwotCQljb3VudCAtPSBuOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFdyaXRlIHNvbWUgdmVyaXR5IG1ldGFkYXRhIHRvIHRoZSBpbm9kZSBmb3IgRlNfSU9DX0VOQUJMRV9WRVJJVFkuCiAgKiBrZXJuZWxfd3JpdGUoKSBjYW4mIzM5O3QgYmUgdXNlZCBiZWNhdXNlIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgcmVhZG9ubHkuCkBAIC0yNTAsNyAmIzQzOzIyMiw3IEBAIHN0YXRpYyBpbnQgZjJmc19nZXRfdmVyaXR5X2Rlc2NyaXB0b3Ioc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLAogCWlmIChidWZfc2l6ZSkgewogCQlpZiAoc2l6ZSAmZ3Q7IGJ1Zl9zaXplKQogCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCXJlcyA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIHNpemUsIHBvcyk7CiYjNDM7CQlyZXMgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBzaXplLCBwb3MpOwogCQlpZiAocmVzKQogCQkJcmV0dXJuIHJlczsKIAl9CkBAIC0yNzIsNyAmIzQzOzI0NCw5IEBAIHN0YXRpYyB2b2lkIGYyZnNfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiB9CiAKIHN0YXRpYyBpbnQgZjJmc193cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLAotCQkJCQl1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSkKJiM0MzsJCQkJCXU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLAomIzQzOwkJCQkJY29uc3QgdTggKnplcm9fZGlnZXN0LAomIzQzOwkJCQkJdW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKQogewogCXBvcyAmIzQzOz0gZjJmc192ZXJpdHlfbWV0YWRhdGFfcG9zKGZpbGVfaW5vZGUoZmlsZSkpOwogCmRpZmYgLS1naXQgYS9mcy9maWxlX2F0dHIuYyBiL2ZzL2ZpbGVfYXR0ci5jCmluZGV4IGJmYjAwZDI1NmRkNTYwLi41NDI0ZWM0ZTM5NDkzZiAxMDA2NDQKLS0tIGEvZnMvZmlsZV9hdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmlsZV9hdHRyLmMKQEAgLTI0Niw2ICYjNDM7MjQ2LDExIEBAIHN0YXRpYyBpbnQgZmlsZWF0dHJfc2V0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwKIAlpZiAoZmEtJmd0O2ZzeF9jb3dleHRzaXplID09IDApCiAJCWZhLSZndDtmc3hfeGZsYWdzICZhbXA7PSB+RlNfWEZMQUdfQ09XRVhUU0laRTsKIAomIzQzOwkvKiBDYW4gbm90IGVuYWJsZSBEQVggb24gZnN2ZXJpdHkgZmlsZSAqLwomIzQzOwlpZiAoKG9sZF9tYS0mZ3Q7ZnN4X3hmbGFncyAmYW1wOyBGU19YRkxBR19WRVJJVFkpICZhbXA7JmFtcDsKJiM0MzsJCQlmYS0mZ3Q7ZnN4X3hmbGFncyAmYW1wOyBGU19YRkxBR19EQVgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvaW9tYXAvaW9lbmQuYyBiL2ZzL2lvbWFwL2lvZW5kLmMKaW5kZXggMDU2NTMyODc2NGMxNzUuLjhlNDZiN2YxYWE2YTk3IDEwMDY0NAotLS0gYS9mcy9pb21hcC9pb2VuZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2lvZW5kLmMKQEAgLTQsNyAmIzQzOzQsNiBAQAogICovCiAjaW5jbHVkZSAmbHQ7bGludXgvYmlvLWludGVncml0eS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvbGlzdF9zb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3dyaXRlYmFjay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZzZXJyb3IuaCZndDsKQEAgLTQyNSw3ICYjNDM7NDI0LDcgQEAgdm9pZCBpb21hcF9pb2VuZF90cnlfbWVyZ2Uoc3RydWN0IGlvbWFwX2lvZW5kICppb2VuZCwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2lvZW5kX3RyeV9tZXJnZSk7CiAKLXN0YXRpYyBpbnQgaW9tYXBfaW9lbmRfY29tcGFyZSh2b2lkICpwcml2LCBjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICphLAomIzQzO2ludCBpb21hcF9pb2VuZF9jb21wYXJlKHZvaWQgKnByaXYsIGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmEsCiAJCWNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmIpCiB7CiAJc3RydWN0IGlvbWFwX2lvZW5kICppYSA9IGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3QgaW9tYXBfaW9lbmQsIGlvX2xpc3QpOwpAQCAtNDM3LDEwICYjNDM7NDM2LDExIEBAIHN0YXRpYyBpbnQgaW9tYXBfaW9lbmRfY29tcGFyZSh2b2lkICpwcml2LCBjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICphLAogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pb2VuZF9jb21wYXJlKTsKIAotdm9pZCBpb21hcF9zb3J0X2lvZW5kcyhzdHJ1Y3QgbGlzdF9oZWFkICppb2VuZF9saXN0KQomIzQzO3ZvaWQgaW9tYXBfc29ydF9pb2VuZHMoc3RydWN0IGxpc3RfaGVhZCAqaW9lbmRfbGlzdCwgbGlzdF9jbXBfZnVuY190IGNtcCkKIHsKLQlsaXN0X3NvcnQoTlVMTCwgaW9lbmRfbGlzdCwgaW9tYXBfaW9lbmRfY29tcGFyZSk7CiYjNDM7CWxpc3Rfc29ydChOVUxMLCBpb2VuZF9saXN0LCBjbXApOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfc29ydF9pb2VuZHMpOwogCmRpZmYgLS1naXQgYS9mcy9zdGF0LmMgYi9mcy9zdGF0LmMKaW5kZXggODk5MDk3NDZiZWQxOWUuLmFlMTI5OWJkNzQzNjZjIDEwMDY0NAotLS0gYS9mcy9zdGF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3RhdC5jCkBAIC0yMDMsOCAmIzQzOzIwMywxMiBAQCBpbnQgdmZzX2dldGF0dHJfbm9zZWMoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBrc3RhdCAqc3RhdCwKIAlpZiAoSVNfREFYKGlub2RlKSkKIAkJc3RhdC0mZ3Q7YXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0RBWDsKIAomIzQzOwlpZiAoSVNfVkVSSVRZKGlub2RlKSkKJiM0MzsJCXN0YXQtJmd0O2F0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9WRVJJVFk7CiYjNDM7CiAJc3RhdC0mZ3Q7YXR0cmlidXRlc19tYXNrIHw9IChTVEFUWF9BVFRSX0FVVE9NT1VOVCB8Ci0JCQkJICBTVEFUWF9BVFRSX0RBWCk7CiYjNDM7CQkJCSAgU1RBVFhfQVRUUl9EQVggfAomIzQzOwkJCQkgIFNUQVRYX0FUVFJfVkVSSVRZKTsKIAogCWlkbWFwID0gbW50X2lkbWFwKHBhdGgtJmd0O21udCk7CiAJaWYgKGlub2RlLSZndDtpX29wLSZndDtnZXRhdHRyKSB7CmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvZW5hYmxlLmMgYi9mcy92ZXJpdHkvZW5hYmxlLmMKaW5kZXggNDJkZmVkMWNlMGNlNjYuLmFkNGZmNzFkN2RkOTViIDEwMDY0NAotLS0gYS9mcy92ZXJpdHkvZW5hYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmVyaXR5L2VuYWJsZS5jCkBAIC01MCw3ICYjNDM7NTAsOSBAQCBzdGF0aWMgaW50IHdyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB1OCAqYnVmLAogCWludCBlcnI7CiAKIAllcnIgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c192b3AtJmd0O3dyaXRlX21lcmtsZV90cmVlX2Jsb2NrKGZpbGUsIGJ1ZiwgcG9zLAotCQkJCQkJCSAgcGFyYW1zLSZndDtibG9ja19zaXplKTsKJiM0MzsJCQkJCQkJICBwYXJhbXMtJmd0O2Jsb2NrX3NpemUsCiYjNDM7CQkJCQkJCSAgcGFyYW1zLSZndDt6ZXJvX2RpZ2VzdCwKJiM0MzsJCQkJCQkJICBwYXJhbXMtJmd0O2RpZ2VzdF9zaXplKTsKIAlpZiAoZXJyKQogCQlmc3Zlcml0eV9lcnIoaW5vZGUsICYjMzQ7RXJyb3IgJWQgd3JpdGluZyBNZXJrbGUgdHJlZSBibG9jayAlbHUmIzM0OywKIAkJCSAgICAgZXJyLCBpbmRleCk7CmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvb3Blbi5jIGIvZnMvdmVyaXR5L29wZW4uYwppbmRleCBkMGM1NmE3ZmFhM2JiMS4uODc1ZTg4NTBjY2JhY2UgMTAwNjQ0Ci0tLSBhL2ZzL3Zlcml0eS9vcGVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmVyaXR5L29wZW4uYwpAQCAtMzQ3LDcgJiM0MzszNDcsMjQgQEAgaW50IGZzdmVyaXR5X2dldF9kZXNjcmlwdG9yKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7LyoqCiYjNDM7ICogZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKCkgLSBjYWNoZSB2ZXJpdHkgaW5mbyBpZiBpdCYjMzk7cyBub3QgYWxyZWFkeSBjYWNoZWQKJiM0MzsgKiBAaW5vZGU6IHRoZSBpbm9kZSBmb3Igd2hpY2ggdmVyaXR5IGluZm8gc2hvdWxkIGJlIGNhY2hlZAomIzQzOyAqCiYjNDM7ICogRW5zdXJlIHRoaXMgaW5vZGUgaGFzIHZlcml0eSBpbmZvIGF0dGFjaGVkIHRvIGl0LCBpdCYjMzk7cyBhc3N1bWVkIHRoZSBpbm9kZQomIzQzOyAqIGFscmVhZHkgaGFzIGZzdmVyaXR5IGVuYWJsZWQuIFJlYWQgZnN2ZXJpdHkgZGVzY3JpcHRvciBhbmQgY3JlYXRlcyB2ZXJpdHkKJiM0MzsgKiBiYXNlZCBvbiB0aGF0LgomIzQzOyAqCiYjNDM7ICogVGhpcyBuZWVkcyB0byBiZSBjYWxsZWQgYXQgbGVhc3Qgb25jZSBiZWZvcmUgYW55IG9mIHRoZSBpbm9kZSYjMzk7cyBkYXRhCiYjNDM7ICogY2FuIGJlIHZlcmlmaWVkIChhbmQgdGh1cyByZWFkIGF0IGFsbCkgb3IgdGhlIGlub2RlJiMzOTtzIGZzdmVyaXR5IGRpZ2VzdAomIzQzOyAqIHJldHJpZXZlZC4gIGZzdmVyaXR5X2ZpbGVfb3BlbigpIGNhbGxzIHRoaXMgYWxyZWFkeSwgd2hpY2ggaGFuZGxlcwomIzQzOyAqIG5vcm1hbCBmaWxlIGFjY2Vzc2VzLiAgSWYgYSBmaWxlc3lzdGVtIGRvZXMgYW55IGludGVybmFsIChpLmUuIG5vdAomIzQzOyAqIGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUgZGVzY3JpcHRvcikgcmVhZHMgb2YgdGhlIGZpbGUmIzM5O3MgZGF0YSBvcgomIzQzOyAqIGZzdmVyaXR5IGRpZ2VzdCwgaXQgbXVzdCBjYWxsIHRoaXMgZXhwbGljaXRseSBiZWZvcmUgZG9pbmcgc28uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUKJiM0MzsgKi8KJiM0MztpbnQgZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpID0gZnN2ZXJpdHlfZ2V0X2luZm8oaW5vZGUpLCAqZm91bmQ7CiAJc3RydWN0IGZzdmVyaXR5X2Rlc2NyaXB0b3IgKmRlc2M7CkBAIC0zODMsMTIgJiM0Mzs0MDAsMTMgQEAgc3RhdGljIGludCBlbnN1cmVfdmVyaXR5X2luZm8oc3RydWN0IGlub2RlICppbm9kZSkKIAlrZnJlZShkZXNjKTsKIAlyZXR1cm4gZXJyOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyk7CiAKIGludCBfX2ZzdmVyaXR5X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlpZiAoZmlscC0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX1dSSVRFKQogCQlyZXR1cm4gLUVQRVJNOwotCXJldHVybiBlbnN1cmVfdmVyaXR5X2luZm8oaW5vZGUpOwomIzQzOwlyZXR1cm4gZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKGlub2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fZnN2ZXJpdHlfZmlsZV9vcGVuKTsKIApkaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jIGIvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jCmluZGV4IDk5ZjVmNTNlZWE5ODVmLi4yNzBhYmQ2NTJlNDhjNiAxMDA2NDQKLS0tIGEvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zlcml0eS9wYWdlY2FjaGUuYwpAQCAtNjgsMTMgJiM0Mzs2OCw2NCBAQCBFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZSk7CiB2b2lkIGZzdmVyaXR5X2ZpbGxfemVyb2hhc2goc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbiwKIAkJCSAgICAgIHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSkKIHsKLQlzaXplX3Qgb2ZmID0gb2Zmc2V0OwomIzQzOwl2b2lkICp2YWRkcjsKJiM0MzsJdm9pZCAqdG87CiYjNDM7CXNpemVfdCBjaHVuazsKIAogCVdBUk5fT05fT05DRSghSVNfQUxJR05FRChvZmZzZXQsIHZpLSZndDt0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSkpOwogCVdBUk5fT05fT05DRSghSVNfQUxJR05FRChsZW4sIHZpLSZndDt0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSkpOwomIzQzOwlXQVJOX09OX09OQ0Uob2Zmc2V0ICYjNDM7IGxlbiAmZ3Q7IGZvbGlvX3NpemUoZm9saW8pKTsKIAotCWZvciAoOyBvZmYgJmx0OyAob2Zmc2V0ICYjNDM7IGxlbik7IG9mZiAmIzQzOz0gdmktJmd0O3RyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKQotCQltZW1jcHlfdG9fZm9saW8oZm9saW8sIG9mZiwgdmktJmd0O3RyZWVfcGFyYW1zLnplcm9fZGlnZXN0LAomIzQzOwlkbyB7CiYjNDM7CQl2YWRkciA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIG9mZnNldCk7CiYjNDM7CQljaHVuayA9IGxlbjsKJiM0MzsJCXRvID0gdmFkZHI7CiYjNDM7CiYjNDM7CQlpZiAoZm9saW9fdGVzdF9wYXJ0aWFsX2ttYXAoZm9saW8pICZhbXA7JmFtcDsKJiM0MzsJCSAgICBjaHVuayAmZ3Q7IFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKG9mZnNldCkpCiYjNDM7CQkJY2h1bmsgPSBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpOwomIzQzOwkJZm9yICg7IHRvICZsdDsgKHZhZGRyICYjNDM7IGNodW5rKTsgdG8gJiM0Mzs9IHZpLSZndDt0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSkKJiM0MzsJCQltZW1jcHkodG8sIHZpLSZndDt0cmVlX3BhcmFtcy56ZXJvX2RpZ2VzdCwKIAkJCQl2aS0mZ3Q7dHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpOwomIzQzOwkJa3VubWFwX2xvY2FsKHZhZGRyKTsKJiM0MzsKJiM0MzsJCW9mZnNldCAmIzQzOz0gY2h1bms7CiYjNDM7CQlsZW4gLT0gY2h1bms7CiYjNDM7CX0gd2hpbGUgKGxlbiAmZ3Q7IDApOwomIzQzOwomIzQzOwlmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZnN2ZXJpdHlfZmlsbF96ZXJvaGFzaCk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoKSAtIHJlYWQgcGFnZSBhbmQgY29weSBkYXRhIHRvIGJ1ZmZlcgomIzQzOyAqIEBpbm9kZToJY29weSBmcm9tIHRoaXMgaW5vZGUmIzM5O3MgYWRkcmVzcyBzcGFjZQomIzQzOyAqIEBidWY6CWJ1ZmZlciB0byBjb3B5IHRvCiYjNDM7ICogQGNvdW50OgludW1iZXIgb2YgYnl0ZXMgdG8gY29weQomIzQzOyAqIEBwb3M6CXBvc2l0aW9uIG9mIHRoZSBmb2xpbyB0byBjb3B5IGZyb20KJiM0MzsgKgomIzQzOyAqIFJlYWQgc29tZSB2ZXJpdHkgbWV0YWRhdGEgZnJvbSB0aGUgaW5vZGUuICBfX3Zmc19yZWFkKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZQomIzQzOyAqIHdlIG5lZWQgdG8gcmVhZCBiZXlvbmQgaV9zaXplLgomIzQzOyAqLwomIzQzO2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwKJiM0MzsJCQkgIGxvZmZfdCBwb3MpCiYjNDM7ewomIzQzOwl3aGlsZSAoY291bnQpIHsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CQlzaXplX3QgbjsKJiM0MzsKJiM0MzsJCWZvbGlvID0gcmVhZF9tYXBwaW5nX2ZvbGlvKGlub2RlLSZndDtpX21hcHBpbmcsIHBvcyAmZ3Q7Jmd0OyBQQUdFX1NISUZULAomIzQzOwkJCQkJIE5VTEwpOwomIzQzOwkJaWYgKElTX0VSUihmb2xpbykpCiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIoZm9saW8pOwomIzQzOwomIzQzOwkJbiA9IG1lbWNweV9mcm9tX2ZpbGVfZm9saW8oYnVmLCBmb2xpbywgcG9zLCBjb3VudCk7CiYjNDM7CQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwomIzQzOwkJYnVmICYjNDM7PSBuOwomIzQzOwkJcG9zICYjNDM7PSBuOwomIzQzOwkJY291bnQgLT0gbjsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQpOwpkaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L3ZlcmlmeS5jIGIvZnMvdmVyaXR5L3ZlcmlmeS5jCmluZGV4IDQwMDRhMWQ0Mjg3NTFmLi5kYjhjMzUwMjM0YmI3MSAxMDA2NDQKLS0tIGEvZnMvdmVyaXR5L3ZlcmlmeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zlcml0eS92ZXJpZnkuYwpAQCAtOSw2ICYjNDM7OSw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9iaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnNlcnJvci5oJmd0OwogCiAjZGVmaW5lIEZTX1ZFUklUWV9NQVhfUEVORElOR19CTE9DS1MgMgogCkBAIC0yMDUsNiAmIzQzOzIwNiw4IEBAIHN0YXRpYyBib29sIHZlcmlmeV9kYXRhX2Jsb2NrKHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSwKIAkJaWYgKG1lbWNocl9pbnYoZGJsb2NrLSZndDtkYXRhLCAwLCBwYXJhbXMtJmd0O2Jsb2NrX3NpemUpKSB7CiAJCQlmc3Zlcml0eV9lcnIoaW5vZGUsCiAJCQkJICAgICAmIzM0O0ZJTEUgQ09SUlVQVEVEISAgRGF0YSBwYXN0IEVPRiBpcyBub3QgemVyb2VkJiMzNDspOwomIzQzOwkJCWZzZXJyb3JfcmVwb3J0X2RhdGFfbG9zdChpbm9kZSwgZGF0YV9wb3MsCiYjNDM7CQkJCQkJIHBhcmFtcy0mZ3Q7YmxvY2tfc2l6ZSwgR0ZQX05PRlMpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCXJldHVybiB0cnVlOwpAQCAtMzEyLDYgJiM0MzszMTUsNyBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlfZGF0YV9ibG9jayhzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmksCiAJCWRhdGFfcG9zLCBsZXZlbCAtIDEsIHBhcmFtcy0mZ3Q7aGFzaF9hbGctJmd0O25hbWUsIGhzaXplLCB3YW50X2hhc2gsCiAJCXBhcmFtcy0mZ3Q7aGFzaF9hbGctJmd0O25hbWUsIGhzaXplLAogCQlsZXZlbCA9PSAwID8gZGJsb2NrLSZndDtyZWFsX2hhc2ggOiByZWFsX2hhc2gpOwomIzQzOwlmc2Vycm9yX3JlcG9ydF9kYXRhX2xvc3QoaW5vZGUsIGRhdGFfcG9zLCBwYXJhbXMtJmd0O2Jsb2NrX3NpemUsIEdGUF9OT0ZTKTsKIGVycm9yOgogCWZvciAoOyBsZXZlbCAmZ3Q7IDA7IGxldmVsLS0pIHsKIAkJa3VubWFwX2xvY2FsKGhibG9ja3NbbGV2ZWwgLSAxXS5hZGRyKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9NYWtlZmlsZSBiL2ZzL3hmcy9NYWtlZmlsZQppbmRleCA5ZjcxMzNlMDI1NzY4ZC4uMzhiN2Y1MWU1ZDg0MDUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvTWFrZWZpbGUKQEAgLTE0OSw2ICYjNDM7MTQ5LDcgQEAgeGZzLSQoQ09ORklHX1hGU19QT1NJWF9BQ0wpCSYjNDM7PSB4ZnNfYWNsLm8KIHhmcy0kKENPTkZJR19TWVNDVEwpCQkmIzQzOz0geGZzX3N5c2N0bC5vCiB4ZnMtJChDT05GSUdfQ09NUEFUKQkJJiM0Mzs9IHhmc19pb2N0bDMyLm8KIHhmcy0kKENPTkZJR19FWFBPUlRGU19CTE9DS19PUFMpCSYjNDM7PSB4ZnNfcG5mcy5vCiYjNDM7eGZzLSQoQ09ORklHX0ZTX1ZFUklUWSkJCSYjNDM7PSB4ZnNfZnN2ZXJpdHkubwogCiAjIG5vdGlmeSBmYWlsdXJlCiBpZmVxICgkKENPTkZJR19NRU1PUllfRkFJTFVSRSkseSkKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuYwppbmRleCBkNjRkZWZlZGE2NDVlZC4uY2M0OGY2ZTIwZTgwMDAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMKQEAgLTQxLDYgJiM0Mzs0MSw4IEBACiAjaW5jbHVkZSAmIzM0O3hmc19pbm9kZV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfcnRncm91cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX3pvbmVfYWxsb2MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfZnN2ZXJpdHkuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzdmVyaXR5LmgmZ3Q7CiAKIHN0cnVjdCBrbWVtX2NhY2hlCQkqeGZzX2JtYXBfaW50ZW50X2NhY2hlOwogCkBAIC00NDAyLDYgJiM0Mzs0NDA0LDEwIEBAIHhmc19ibWFwaV9jb252ZXJ0X29uZV9kZWxhbGxvYygKIAkgKiB0aGUgZXh0ZW50LiAgSnVzdCByZXR1cm4gdGhlIHJlYWwgZXh0ZW50IGF0IHRoaXMgb2Zmc2V0LgogCSAqLwogCWlmICghaXNudWxsc3RhcnRibG9jayhibWEuZ290LmJyX3N0YXJ0YmxvY2spKSB7CiYjNDM7CQlpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikgJmFtcDsmYW1wOwomIzQzOwkJICAgIFhGU19GU0JfVE9fQihtcCwgYm1hLmdvdC5icl9zdGFydG9mZikgJmd0Oz0KJiM0MzsJCQkgICAgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpCiYjNDM7CQkJZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTsKIAkJeGZzX2JtYnRfdG9faW9tYXAoaXAsIGlvbWFwLCAmYW1wO2JtYS5nb3QsIDAsIGZsYWdzLAogCQkJCXhmc19pb21hcF9pbm9kZV9zZXF1ZW5jZShpcCwgZmxhZ3MpKTsKIAkJaWYgKHNlcSkKQEAgLTQ0NDksNiAmIzQzOzQ0NTUsMTEgQEAgeGZzX2JtYXBpX2NvbnZlcnRfb25lX2RlbGFsbG9jKAogCVhGU19TVEFUU19BREQobXAsIHhzX3hzdHJhdF9ieXRlcywgWEZTX0ZTQl9UT19CKG1wLCBibWEubGVuZ3RoKSk7CiAJWEZTX1NUQVRTX0lOQyhtcCwgeHNfeHN0cmF0X3F1aWNrKTsKIAomIzQzOwlpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikgJmFtcDsmYW1wOwomIzQzOwkgICAgWEZTX0ZTQl9UT19CKG1wLCBibWEuZ290LmJyX3N0YXJ0b2ZmKSAmZ3Q7PQomIzQzOwkJICAgIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKQomIzQzOwkJZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTsKJiM0MzsKIAlBU1NFUlQoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSk7CiAJeGZzX2JtYnRfdG9faW9tYXAoaXAsIGlvbWFwLCAmYW1wO2JtYS5nb3QsIDAsIGZsYWdzLAogCQkJCXhmc19pb21hcF9pbm9kZV9zZXF1ZW5jZShpcCwgZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oIGIvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmgKaW5kZXggZGQwZWQwNDZmYmU5YzkuLjhiZTFiMTAxYjE5Njk5IDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaApAQCAtMzc0LDExICYjNDM7Mzc0LDEzIEBAIHhmc19zYl9oYXNfY29tcGF0X2ZlYXR1cmUoCiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9STUFQQlQgICAoMSAmbHQ7Jmx0OyAxKQkJLyogcmV2ZXJzZSBtYXAgYnRyZWUgKi8KICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JFRkxJTksgICgxICZsdDsmbHQ7IDIpCQkvKiByZWZsaW5rZWQgZmlsZXMgKi8KICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0lOT0JUQ05UICgxICZsdDsmbHQ7IDMpCQkvKiBpbm9idCBibG9jayBjb3VudHMgKi8KJiM0MzsjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9WRVJJVFkgICAoMSAmbHQ7Jmx0OyA0KQkJLyogZnMtdmVyaXR5ICovCiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9BTEwgXAogCQkoWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0ZJTk9CVCB8IFwKIAkJIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9STUFQQlQgfCBcCi0JCSBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOS3wgXAotCQkgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0lOT0JUQ05UKQomIzQzOwkJIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9SRUZMSU5LIHwgXAomIzQzOwkJIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVCB8IFwKJiM0MzsJCSBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZKQogI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfVU5LTk9XTgl+WEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0FMTAogc3RhdGljIGlubGluZSBib29sCiB4ZnNfc2JfaGFzX3JvX2NvbXBhdF9mZWF0dXJlKApAQCAtMTIzMCwxNiAmIzQzOzEyMzIsMjEgQEAgc3RhdGljIGlubGluZSB2b2lkIHhmc19kaW5vZGVfcHV0X3JkZXYoc3RydWN0IHhmc19kaW5vZGUgKmRpcCwgeGZzX2Rldl90IHJkZXYpCiAgKi8KICNkZWZpbmUgWEZTX0RJRkxBRzJfTUVUQURBVEFfQklUCTUKIAomIzQzOy8qIGlub2RlcyBzZWFsZWQgd2l0aCBmcy12ZXJpdHkgKi8KJiM0MzsjZGVmaW5lIFhGU19ESUZMQUcyX1ZFUklUWV9CSVQJCTYKJiM0MzsKICNkZWZpbmUgWEZTX0RJRkxBRzJfREFYCQkoMVVMTCAmbHQ7Jmx0OyBYRlNfRElGTEFHMl9EQVhfQklUKQogI2RlZmluZSBYRlNfRElGTEFHMl9SRUZMSU5LCSgxVUxMICZsdDsmbHQ7IFhGU19ESUZMQUcyX1JFRkxJTktfQklUKQogI2RlZmluZSBYRlNfRElGTEFHMl9DT1dFWFRTSVpFCSgxVUxMICZsdDsmbHQ7IFhGU19ESUZMQUcyX0NPV0VYVFNJWkVfQklUKQogI2RlZmluZSBYRlNfRElGTEFHMl9CSUdUSU1FCSgxVUxMICZsdDsmbHQ7IFhGU19ESUZMQUcyX0JJR1RJTUVfQklUKQogI2RlZmluZSBYRlNfRElGTEFHMl9OUkVYVDY0CSgxVUxMICZsdDsmbHQ7IFhGU19ESUZMQUcyX05SRVhUNjRfQklUKQogI2RlZmluZSBYRlNfRElGTEFHMl9NRVRBREFUQQkoMVVMTCAmbHQ7Jmx0OyBYRlNfRElGTEFHMl9NRVRBREFUQV9CSVQpCiYjNDM7I2RlZmluZSBYRlNfRElGTEFHMl9WRVJJVFkJKDFVTEwgJmx0OyZsdDsgWEZTX0RJRkxBRzJfVkVSSVRZX0JJVCkKIAogI2RlZmluZSBYRlNfRElGTEFHMl9BTlkgXAogCShYRlNfRElGTEFHMl9EQVggfCBYRlNfRElGTEFHMl9SRUZMSU5LIHwgWEZTX0RJRkxBRzJfQ09XRVhUU0laRSB8IFwKLQkgWEZTX0RJRkxBRzJfQklHVElNRSB8IFhGU19ESUZMQUcyX05SRVhUNjQgfCBYRlNfRElGTEFHMl9NRVRBREFUQSkKJiM0MzsJIFhGU19ESUZMQUcyX0JJR1RJTUUgfCBYRlNfRElGTEFHMl9OUkVYVDY0IHwgWEZTX0RJRkxBRzJfTUVUQURBVEEgfCBcCiYjNDM7CSBYRlNfRElGTEFHMl9WRVJJVFkpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB4ZnNfZGlub2RlX2hhc19iaWd0aW1lKGNvbnN0IHN0cnVjdCB4ZnNfZGlub2RlICpkaXApCiB7CkBAIC0yMDI3LDQgJiM0MzsyMDM0LDI2IEBAIHN0cnVjdCB4ZnNfYWNsIHsKICNkZWZpbmUgU0dJX0FDTF9GSUxFX1NJWkUJKHNpemVvZihTR0lfQUNMX0ZJTEUpLTEpCiAjZGVmaW5lIFNHSV9BQ0xfREVGQVVMVF9TSVpFCShzaXplb2YoU0dJX0FDTF9ERUZBVUxUKS0xKQogCiYjNDM7LyoKJiM0MzsgKiBBdCBtYXhpbXVtIG9mIDggbGV2ZWxzIHdpdGggMTI4IGhhc2hlcyBwZXIgYmxvY2sgKDMyIGJ5dGVzIFNIQS0yNTYpIG1heGltdW0KJiM0MzsgKiB0cmVlIHNpemUgaXMgKCgxMjheOCDiiJIgMSkvKDEyOCDiiJIgMSkpID0gNTY3KjEwXjEyIGJsb2Nrcy4gVGhpcyBzaG91bGQgZml0IGluCiYjNDM7ICogNTMgYml0cyBhZGRyZXNzIHNwYWNlLgomIzQzOyAqCiYjNDM7ICogQXQgdGhpcyBNZXJrbGUgdHJlZSBzaXplIHdlIGNhbiBjb3ZlciAyOTVFQiBsYXJnZSBmaWxlLiBUaGlzIGlzIG11Y2ggbGFyZ2VyCiYjNDM7ICogdGhhbiB0aGUgY3VycmVudGx5IHN1cHBvcnRlZCBmaWxlIHNpemUuCiYjNDM7ICoKJiM0MzsgKiBGb3Igc2hhNTEyIHRoZSBsYXJnZXN0IGZpbGUgd2UgY2FuIGNvdmVyIGVuZHMgYXQgMSAmbHQ7Jmx0OyA1MCBvZmZzZXQsIHRoaXMgaXMgYWxzbwomIzQzOyAqIGdvb2QuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBYRlNfRlNWRVJJVFlfTEFSR0VTVF9GSUxFCSgobG9mZl90KTFVTEwgJmx0OyZsdDsgNTMpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBbGlnbm1lbnQgb2YgdGhlIGZzdmVyaXR5IG1ldGFkYXRhIHBsYWNlbWVudC4gVGhpcyBpcyBsYXJnZXN0IHN1cHBvcnRlZCBQQUdFCiYjNDM7ICogU0laRSBmb3IgZnN2ZXJpdHkuIFRoaXMgaXMgdXNlZCB0byBzcGFjZSBvdXQgZGF0YSBhbmQgbWV0YWRhdGEgaW4gcGFnZSBjYWNoZS4KJiM0MzsgKiBUaGUgc3BhY2luZyBpcyBuZWNlc3NhcnkgZm9yIG5vbi1leHBvc3VyZSBvZiBtZXRhZGF0YSB0byB1c2Vyc3BhY2UgYW5kCiYjNDM7ICogY29ycmVjdCBtZXJrbGUgdHJlZSBzeW50aGVzaXMgaW4gdGhlIGlvbWFwLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgWEZTX0ZTVkVSSVRZX1NUQVJUX0FMSUdOCSg2NTUzNikKJiM0MzsKJiM0MzsKICNlbmRpZiAvKiBfX1hGU19GT1JNQVRfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19mcy5oIGIvZnMveGZzL2xpYnhmcy94ZnNfZnMuaAppbmRleCAxODVmMDlmMzI3YzAwYy4uODRkNjJiNzUwNmE5YWQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfZnMuaApAQCAtMjUwLDYgJiM0MzsyNTAsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfZnNvcF9yZXNibGtzIHsKICNkZWZpbmUgWEZTX0ZTT1BfR0VPTV9GTEFHU19QQVJFTlQJKDEgJmx0OyZsdDsgMjUpIC8qIGxpbnV4IHBhcmVudCBwb2ludGVycyAqLwogI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX01FVEFESVIJKDEgJmx0OyZsdDsgMjYpIC8qIG1ldGFkYXRhIGRpcmVjdG9yaWVzICovCiAjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfWk9ORUQJKDEgJmx0OyZsdDsgMjcpIC8qIHpvbmVkIHJ0IGRldmljZSAqLwomIzQzOyNkZWZpbmUgWEZTX0ZTT1BfR0VPTV9GTEFHU19WRVJJVFkJKDEgJmx0OyZsdDsgMjgpIC8qIGZzLXZlcml0eSAqLwogCiAvKgogICogTWluaW11bSBhbmQgbWF4aW11bSBzaXplcyBuZWVkIGZvciBncm93dGggY2hlY2tzLgpAQCAtNDIxLDYgJiM0Mzs0MjIsNyBAQCBzdHJ1Y3QgeGZzX2J1bGtzdGF0IHsKICNkZWZpbmUgWEZTX0JTX1NJQ0tfU1lNTElOSwkoMSAmbHQ7Jmx0OyA2KSAgLyogc3ltYm9saWMgbGluayByZW1vdGUgdGFyZ2V0ICovCiAjZGVmaW5lIFhGU19CU19TSUNLX1BBUkVOVAkoMSAmbHQ7Jmx0OyA3KSAgLyogcGFyZW50IHBvaW50ZXJzICovCiAjZGVmaW5lIFhGU19CU19TSUNLX0RJUlRSRUUJKDEgJmx0OyZsdDsgOCkgIC8qIGRpcmVjdG9yeSB0cmVlIHN0cnVjdHVyZSAqLwomIzQzOyNkZWZpbmUgWEZTX0JTX1NJQ0tfRlNWRVJJVFkJKDEgJmx0OyZsdDsgOSkgIC8qIGZzdmVyaXR5IG1ldGFkYXRhICovCiAKIC8qCiAgKiBQcm9qZWN0IHF1b3RhIGlkIGhlbHBlcnMgKHByZXZpb3VzbHkgcHJvamlkIHdhcyAxNmJpdCBvbmx5CmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaCBiL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oCmluZGV4IDFkNDVjZjU3ODllODY0Li45MzJiNDQ3MTkwZGE3NiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmgKQEAgLTEwNCw2ICYjNDM7MTA0LDcgQEAgc3RydWN0IHhmc19ydGdyb3VwOwogLyogRG9uJiMzOTt0IHByb3BhZ2F0ZSBzaWNrIHN0YXR1cyB0byBhZyBoZWFsdGggc3VtbWFyeSBkdXJpbmcgaW5hY3RpdmF0aW9uICovCiAjZGVmaW5lIFhGU19TSUNLX0lOT19GT1JHRVQJKDEgJmx0OyZsdDsgMTIpCiAjZGVmaW5lIFhGU19TSUNLX0lOT19ESVJUUkVFCSgxICZsdDsmbHQ7IDEzKSAgLyogZGlyZWN0b3J5IHRyZWUgc3RydWN0dXJlICovCiYjNDM7I2RlZmluZSBYRlNfU0lDS19JTk9fRlNWRVJJVFkJKDEgJmx0OyZsdDsgMTQpICAvKiBmc3Zlcml0eSBtZXRhZGF0YSAqLwogCiAvKiBQcmltYXJ5IGV2aWRlbmNlIG9mIGhlYWx0aCBwcm9ibGVtcyBpbiBhIGdpdmVuIGdyb3VwLiAqLwogI2RlZmluZSBYRlNfU0lDS19GU19QUklNQVJZCShYRlNfU0lDS19GU19DT1VOVEVSUyB8IFwKQEAgLTE0MCw3ICYjNDM7MTQxLDggQEAgc3RydWN0IHhmc19ydGdyb3VwOwogCQkJCSBYRlNfU0lDS19JTk9fWEFUVFIgfCBcCiAJCQkJIFhGU19TSUNLX0lOT19TWU1MSU5LIHwgXAogCQkJCSBYRlNfU0lDS19JTk9fUEFSRU5UIHwgXAotCQkJCSBYRlNfU0lDS19JTk9fRElSVFJFRSkKJiM0MzsJCQkJIFhGU19TSUNLX0lOT19ESVJUUkVFIHwgXAomIzQzOwkJCQkgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKQogCiAjZGVmaW5lIFhGU19TSUNLX0lOT19aQVBQRUQJKFhGU19TSUNLX0lOT19CTUJURF9aQVBQRUQgfCBcCiAJCQkJIFhGU19TSUNLX0lOT19CTUJUQV9aQVBQRUQgfCBcCmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX2J1Zi5jCmluZGV4IDMzNmVmODQzZjJmZTRmLi5iZDgwYTE5ZjJlMDkyOSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmMKQEAgLTc2MCw2ICYjNDM7NzYwLDE0IEBAIHhmc19kaW5vZGVfdmVyaWZ5KAogCSAgICAheGZzX2hhc19ydHJlZmxpbmsobXApKQogCQlyZXR1cm4gX190aGlzX2FkZHJlc3M7CiAKJiM0MzsJLyogb25seSByZWd1bGFyIGZpbGVzIGNhbiBoYXZlIGZzdmVyaXR5ICovCiYjNDM7CWlmIChmbGFnczIgJmFtcDsgWEZTX0RJRkxBRzJfVkVSSVRZKSB7CiYjNDM7CQlpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSkKJiM0MzsJCQlyZXR1cm4gX190aGlzX2FkZHJlc3M7CiYjNDM7CQlpZiAoIVNfSVNSRUcobW9kZSkpCiYjNDM7CQkJcmV0dXJuIF9fdGhpc19hZGRyZXNzOwomIzQzOwl9CiYjNDM7CiAJaWYgKHhmc19oYXNfem9uZWQobXApICZhbXA7JmFtcDsKIAkgICAgZGlwLSZndDtkaV9tZXRhdHlwZSA9PSBjcHVfdG9fYmUxNihYRlNfTUVUQUZJTEVfUlRSTUFQKSkgewogCQlpZiAoYmUzMl90b19jcHUoZGlwLSZndDtkaV91c2VkX2Jsb2NrcykgJmd0OyBtcC0mZ3Q7bV9zYi5zYl9yZ2V4dGVudHMpCmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmMgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmMKaW5kZXggMjU4YWMzZDBkNDg2ZTYuLjVhNTE2YmQzMWMzMTc1IDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfdXRpbC5jCkBAIC03NCw3ICYjNDM7NzQsOCBAQCB4ZnNfZmxhZ3MyZGlmbGFnczIoCiAJdWludDY0X3QJCWRpX2ZsYWdzMiA9CiAJCShpcC0mZ3Q7aV9kaWZsYWdzMiAmYW1wOyAoWEZTX0RJRkxBRzJfUkVGTElOSyB8CiAJCQkJICAgWEZTX0RJRkxBRzJfQklHVElNRSB8Ci0JCQkJICAgWEZTX0RJRkxBRzJfTlJFWFQ2NCkpOwomIzQzOwkJCQkgICBYRlNfRElGTEFHMl9OUkVYVDY0IHwKJiM0MzsJCQkJICAgWEZTX0RJRkxBRzJfVkVSSVRZKSk7CiAKIAlpZiAoeGZsYWdzICZhbXA7IEZTX1hGTEFHX0RBWCkKIAkJZGlfZmxhZ3MyIHw9IFhGU19ESUZMQUcyX0RBWDsKQEAgLTEyNiw2ICYjNDM7MTI3LDggQEAgeGZzX2lwMnhmbGFncygKIAkJCWZsYWdzIHw9IEZTX1hGTEFHX0RBWDsKIAkJaWYgKGlwLSZndDtpX2RpZmxhZ3MyICZhbXA7IFhGU19ESUZMQUcyX0NPV0VYVFNJWkUpCiAJCQlmbGFncyB8PSBGU19YRkxBR19DT1dFWFRTSVpFOwomIzQzOwkJaWYgKGlwLSZndDtpX2RpZmxhZ3MyICZhbXA7IFhGU19ESUZMQUcyX1ZFUklUWSkKJiM0MzsJCQlmbGFncyB8PSBGU19YRkxBR19WRVJJVFk7CiAJfQogCiAJaWYgKHhmc19pbm9kZV9oYXNfYXR0cl9mb3JrKGlwKSkKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmMgYi9mcy94ZnMvbGlieGZzL3hmc19zYi5jCmluZGV4IDQ3MzIyYWRiNzY5MDU5Li4yMjJiYmU1NTU5ZGY0NyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfc2IuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19zYi5jCkBAIC0xNjUsNiAmIzQzOzE2NSw4IEBAIHhmc19zYl92ZXJzaW9uX3RvX2ZlYXR1cmVzKAogCQlmZWF0dXJlcyB8PSBYRlNfRkVBVF9SRUZMSU5LOwogCWlmIChzYnAtJmd0O3NiX2ZlYXR1cmVzX3JvX2NvbXBhdCAmYW1wOyBYRlNfU0JfRkVBVF9ST19DT01QQVRfSU5PQlRDTlQpCiAJCWZlYXR1cmVzIHw9IFhGU19GRUFUX0lOT0JUQ05UOwomIzQzOwlpZiAoc2JwLSZndDtzYl9mZWF0dXJlc19yb19jb21wYXQgJmFtcDsgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSkKJiM0MzsJCWZlYXR1cmVzIHw9IFhGU19GRUFUX1ZFUklUWTsKIAlpZiAoc2JwLSZndDtzYl9mZWF0dXJlc19pbmNvbXBhdCAmYW1wOyBYRlNfU0JfRkVBVF9JTkNPTVBBVF9GVFlQRSkKIAkJZmVhdHVyZXMgfD0gWEZTX0ZFQVRfRlRZUEU7CiAJaWYgKHNicC0mZ3Q7c2JfZmVhdHVyZXNfaW5jb21wYXQgJmFtcDsgWEZTX1NCX0ZFQVRfSU5DT01QQVRfU1BJTk9ERVMpCkBAIC0xNTg4LDYgJiM0MzsxNTkwLDggQEAgeGZzX2ZzX2dlb21ldHJ5KAogCQlnZW8tJmd0O2ZsYWdzIHw9IFhGU19GU09QX0dFT01fRkxBR1NfTUVUQURJUjsKIAlpZiAoeGZzX2hhc196b25lZChtcCkpCiAJCWdlby0mZ3Q7ZmxhZ3MgfD0gWEZTX0ZTT1BfR0VPTV9GTEFHU19aT05FRDsKJiM0MzsJaWYgKHhmc19oYXNfdmVyaXR5KG1wKSkKJiM0MzsJCWdlby0mZ3Q7ZmxhZ3MgfD0gWEZTX0ZTT1BfR0VPTV9GTEFHU19WRVJJVFk7CiAJZ2VvLSZndDtydHNlY3RzaXplID0gc2JwLSZndDtzYl9ibG9ja3NpemU7CiAJZ2VvLSZndDtkaXJibG9ja3NpemUgPSB4ZnNfZGlyMl9kaXJibG9ja19ieXRlcyhzYnApOwogCmRpZmYgLS1naXQgYS9mcy94ZnMvc2NydWIvY29tbW9uLmMgYi9mcy94ZnMvc2NydWIvY29tbW9uLmMKaW5kZXggZTUyMzNlMzFhYmI3NTAuLjAyYjY4YmY0YzUxMjcwIDEwMDY0NAotLS0gYS9mcy94ZnMvc2NydWIvY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3NjcnViL2NvbW1vbi5jCkBAIC00NSw2ICYjNDM7NDUsOCBAQAogI2luY2x1ZGUgJiMzNDtzY3J1Yi9oZWFsdGguaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3NjcnViL3RlbXBmaWxlLmgmIzM0OwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzdmVyaXR5LmgmZ3Q7CiYjNDM7CiAvKiBDb21tb24gY29kZSBmb3IgdGhlIG1ldGFkYXRhIHNjcnViYmVycy4gKi8KIAogLyoKQEAgLTE3NTQsMyAmIzQzOzE3NTYsNTYgQEAgeGNoa19pbm9kZV9jb3VudF9ibG9ja3MoCiAJcmV0dXJuIHhmc19ibWFwX2NvdW50X2Jsb2NrcyhzYy0mZ3Q7dHAsIHNjLSZndDtpcCwgd2hpY2hmb3JrLCBuZXh0ZW50cywKIAkJCWNvdW50KTsKIH0KJiM0MzsKJiM0MzsvKgomIzQzOyAqIElmIHRoaXMgaW5vZGUgaGFzIFNfVkVSSVRZIHNldCBvbiBpdCwgcmVhZCB0aGUgdmVyaXR5IGluZm8uIElmIHRoZSByZWFkaW5nCiYjNDM7ICogZmFpbHMgd2l0aCBhbnl0aGluZyBvdGhlciB0aGFuIEVOT01FTSwgdGhlIGZpbGUgaXMgY29ycnVwdCwgd2hpY2ggd2UgY2FuCiYjNDM7ICogZGV0ZWN0IGxhdGVyIHdpdGggZnN2ZXJpdHlfYWN0aXZlLgomIzQzOyAqCiYjNDM7ICogQ2FsbGVycyBtdXN0IGhvbGQgdGhlIElPTE9DSyBhbmQgbXVzdCBub3QgaG9sZCB0aGUgSUxPQ0sgb2Ygc2MtJmd0O2lwIGJlY2F1c2UKJiM0MzsgKiBhY3RpdmF0aW9uIHJlYWRzIGlub2RlIGRhdGEuCiYjNDM7ICovCiYjNDM7aW50CiYjNDM7eGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoCiYjNDM7CXN0cnVjdCB4ZnNfc2NydWIJKnNjKQomIzQzO3sKJiM0MzsJaW50CQkJZXJyb3I7CiYjNDM7CiYjNDM7CWlmICghZnN2ZXJpdHlfYWN0aXZlKFZGU19JKHNjLSZndDtpcCkpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWVycm9yID0gZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKFZGU19JKHNjLSZndDtpcCkpOwomIzQzOwlzd2l0Y2ggKGVycm9yKSB7CiYjNDM7CWNhc2UgMDoKJiM0MzsJCS8qIGZzdmVyaXR5IGlzIGFjdGl2ZSAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgLUVOT0RBVEE6CiYjNDM7CWNhc2UgLUVNU0dTSVpFOgomIzQzOwljYXNlIC1FSU5WQUw6CiYjNDM7CWNhc2UgLUVGU0NPUlJVUFRFRDoKJiM0MzsJY2FzZSAtRUZCSUc6CiYjNDM7CWNhc2UgLUVSQU5HRToKJiM0MzsJY2FzZSAtRUJBRE1TRzoKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgbm9uemVybyBlcnJubyBjb2RlcyBhYm92ZSBhcmUgdGhlIGVycm9yIGNvZGVzIHRoYXQgY2FuCiYjNDM7CQkgKiBiZSByZXR1cm5lZCBmcm9tIGZzdmVyaXR5IG9uIG1ldGFkYXRhIHZhbGlkYXRpb24gZXJyb3JzLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCS8qIHJ1bnRpbWUgZXJyb3JzICovCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogSXMgdGhpcyBhIHZlcml0eSBmaWxlIHRoYXQgZmFpbGVkIHRvIGFjdGl2YXRlPyAgQ2FsbGVycyBtdXN0IGhhdmUgdHJpZWQgdG8KJiM0MzsgKiBhY3RpdmF0ZSBmc3Zlcml0eSB2aWEgeGNoa19pbm9kZV9zZXR1cF92ZXJpdHkuCiYjNDM7ICovCiYjNDM7Ym9vbAomIzQzO3hjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbigKJiM0MzsJc3RydWN0IHhmc19pbm9kZQkqaXApCiYjNDM7ewomIzQzOwlyZXR1cm4gZnN2ZXJpdHlfYWN0aXZlKFZGU19JKGlwKSkgJmFtcDsmYW1wOyAhZnN2ZXJpdHlfZ2V0X2luZm8oVkZTX0koaXApKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9mcy94ZnMvc2NydWIvY29tbW9uLmggYi9mcy94ZnMvc2NydWIvY29tbW9uLmgKaW5kZXggOWQ2MjdmZDUwNjg3ZTQuLjNkZTJiNjAwOWE5OTQxIDEwMDY0NAotLS0gYS9mcy94ZnMvc2NydWIvY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3NjcnViL2NvbW1vbi5oCkBAIC0yNjgsNiAmIzQzOzI2OCw4IEBAIGludCB4Y2hrX2lub2RlX2lzX2FsbG9jYXRlZChzdHJ1Y3QgeGZzX3NjcnViICpzYywgeGZzX2FnaW5vX3QgYWdpbm8sCiAJCWJvb2wgKmludXNlKTsKIGludCB4Y2hrX2lub2RlX2NvdW50X2Jsb2NrcyhzdHJ1Y3QgeGZzX3NjcnViICpzYywgaW50IHdoaWNoZm9yaywKIAkJeGZzX2V4dG51bV90ICpuZXh0ZW50cywgeGZzX2ZpbGJsa3NfdCAqY291bnQpOwomIzQzO2ludCB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzdHJ1Y3QgeGZzX3NjcnViICpzYyk7CiYjNDM7Ym9vbCB4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oc3RydWN0IHhmc19pbm9kZSAqaXApOwogCiBib29sIHhjaGtfaW5vZGVfaXNfZGlydHJlZV9yb290KGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTsKIGJvb2wgeGNoa19pbm9kZV9pc19zYl9yb290ZWQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2lub2RlLmMgYi9mcy94ZnMvc2NydWIvaW5vZGUuYwppbmRleCA2NWIxM2UzMTE5MTY4MS4uZDFjZGQ2YjQ0NWQwMTcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jCkBAIC0zNiw2ICYjNDM7MzYsMTAgQEAgeGNoa19wcmVwYXJlX2lzY3J1YigKIAogCXhjaGtfaWxvY2soc2MsIFhGU19JT0xPQ0tfRVhDTCk7CiAKJiM0MzsJZXJyb3IgPSB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzYyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKIAllcnJvciA9IHhjaGtfdHJhbnNfYWxsb2Moc2MsIDApOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwpAQCAtODMzLDYgJiM0Mzs4MzcsOSBAQCB4Y2hrX2lub2RlKAogCWlmIChTX0lTUkVHKFZGU19JKHNjLSZndDtpcCktJmd0O2lfbW9kZSkpCiAJCXhjaGtfaW5vZGVfY2hlY2tfcmVmbGlua19pZmxhZyhzYywgSV9JTk8oc2MtJmd0O2lwKSk7CiAKJiM0MzsJaWYgKHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbihzYy0mZ3Q7aXApKQomIzQzOwkJeGNoa19pbm9fc2V0X2NvcnJ1cHQoc2MsIHNjLSZndDtzbS0mZ3Q7c21faW5vKTsKJiM0MzsKIAl4Y2hrX2lub2RlX2NoZWNrX3VubGlua2VkKHNjKTsKIAogCXhjaGtfaW5vZGVfeHJlZihzYywgSV9JTk8oc2MtJmd0O2lwKSwgJmFtcDtkaSk7CmRpZmYgLS1naXQgYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmMgYi9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmMKaW5kZXggM2VjNDFjMTk4MzUxMTYuLjM1ZTkzYTRiNTBjZDlmIDEwMDY0NAotLS0gYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3NjcnViL2lub2RlX3JlcGFpci5jCkBAIC01NzMsNiAmIzQzOzU3Myw4IEBAIHhyZXBfZGlub2RlX2ZsYWdzKAogCQlkaXAtJmd0O2RpX25yZXh0NjRfcGFkID0gMDsKIAllbHNlIGlmIChkaXAtJmd0O2RpX3ZlcnNpb24gJmd0Oz0gMykKIAkJZGlwLSZndDtkaV92M19wYWQgPSAwOwomIzQzOwlpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSB8fCAhU19JU1JFRyhtb2RlKSkKJiM0MzsJCWZsYWdzMiAmYW1wOz0gflhGU19ESUZMQUcyX1ZFUklUWTsKIAogCWlmIChmbGFnczIgJmFtcDsgWEZTX0RJRkxBRzJfTUVUQURBVEEpIHsKIAkJeGZzX2ZhaWxhZGRyX3QJZmE7CkBAIC0xNjE3LDYgJiM0MzsxNjE5LDEwIEBAIHhyZXBfZGlub2RlX2NvcmUoCiAJaWYgKGlnZXRfZXJyb3IpCiAJCXJldHVybiBpZ2V0X2Vycm9yOwogCiYjNDM7CWVycm9yID0geGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoc2MpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiAJZXJyb3IgPSB4Y2hrX3RyYW5zX2FsbG9jKHNjLCAwKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTIwMzUsNiAmIzQzOzIwNDEsMjcgQEAgeHJlcF9pbm9kZV91bmxpbmtlZCgKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qCiYjNDM7ICogSWYgdGhpcyBmaWxlIGlzIGEgZnN2ZXJpdHkgZmlsZSwgeGNoa19wcmVwYXJlX2lzY3J1YiBvciB4cmVwX2Rpbm9kZV9jb3JlCiYjNDM7ICogc2hvdWxkIGhhdmUgYWN0aXZhdGVkIGl0LiAgSWYgaXQmIzM5O3Mgc3RpbGwgbm90IGFjdGl2ZSwgdGhlbiB0aGVyZSYjMzk7cyBzb21ldGhpbmcKJiM0MzsgKiB3cm9uZyB3aXRoIHRoZSB2ZXJpdHkgZGVzY3JpcHRvciBhbmQgd2Ugc2hvdWxkIHR1cm4gaXQgb2ZmLgomIzQzOyAqLwomIzQzO1NUQVRJQyBpbnQKJiM0Mzt4cmVwX2lub2RlX3Zlcml0eSgKJiM0MzsJc3RydWN0IHhmc19zY3J1Ygkqc2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IFZGU19JKHNjLSZndDtpcCk7CiYjNDM7CiYjNDM7CWlmICh4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oc2MtJmd0O2lwKSkgewomIzQzOwkJc2MtJmd0O2lwLSZndDtpX2RpZmxhZ3MyICZhbXA7PSB+WEZTX0RJRkxBRzJfVkVSSVRZOwomIzQzOwkJaW5vZGVfc2V0X2ZsYWdzKGlub2RlLCAwLCBTX1ZFUklUWSk7CiYjNDM7CiYjNDM7CQl4ZnNfdHJhbnNfbG9nX2lub2RlKHNjLSZndDt0cCwgc2MtJmd0O2lwLCBYRlNfSUxPR19DT1JFKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKiBSZXBhaXIgYW4gaW5vZGUmIzM5O3MgZmllbGRzLiAqLwogaW50CiB4cmVwX2lub2RlKApAQCAtMjA4NCw2ICYjNDM7MjExMSwxNSBAQCB4cmVwX2lub2RlKAogCQkJcmV0dXJuIGVycm9yOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBEaXNhYmxlIGZzdmVyaXR5IGlmIGl0IGNhbm5vdCBiZSBhY3RpdmF0ZWQuICBBY3RpdmF0aW9uIGZhaWx1cmUKJiM0MzsJICogcHJvaGliaXRzIHRoZSBmaWxlIGZyb20gYmVpbmcgb3BlbmVkLCBzbyB0aGVyZSBjYW5ub3QgYmUgYW5vdGhlcgomIzQzOwkgKiBwcm9ncmFtIHdpdGggYW4gb3BlbiBmZCB0byB3aGF0IGl0IHRoaW5rcyBpcyBhIHZlcml0eSBmaWxlLgomIzQzOwkgKi8KJiM0MzsJZXJyb3IgPSB4cmVwX2lub2RlX3Zlcml0eShzYyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKIAkvKiBSZWNvbm5lY3QgaW5jb3JlIHVubGlua2VkIGxpc3QgKi8KIAllcnJvciA9IHhyZXBfaW5vZGVfdW5saW5rZWQoc2MpOwogCWlmIChlcnJvcikKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYW9wcy5jIGIvZnMveGZzL3hmc19hb3BzLmMKaW5kZXggNTEyOTNiNmYzMzFmMGIuLjEzNWJlNzExZjlhNDA5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2FvcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2FvcHMuYwpAQCAtMjIsNyAmIzQzOzIyLDkgQEAKICNpbmNsdWRlICYjMzQ7eGZzX2ljYWNoZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX3pvbmVfYWxsb2MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hmc19ydGdyb3VwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2ZzdmVyaXR5LmgmIzM0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Jpby1pbnRlZ3JpdHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnN2ZXJpdHkuaCZndDsKIAogc3RydWN0IHhmc193cml0ZXBhZ2VfY3R4IHsKIAlzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCBjdHg7CkBAIC0xODEsNiAmIzQzOzE4Myw0OSBAQCB4ZnNfZW5kX2lvZW5kX3dyaXRlKAogCW1lbWFsbG9jX25vZnNfcmVzdG9yZShub2ZzX2ZsYWcpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBQcmlvcml0aXplIGZzdmVyaXR5IG1ldGFkYXRhIG92ZXIgZmlsZSBkYXRhLiBTb3J0IGJhc2VkIG9uIGlfc2l6ZSBhcyBmc3Zlcml0eQomIzQzOyAqIG1ldGFkYXRhIGlzIGFsd2F5cyBiZXlvbmQgRU9GCiYjNDM7ICovCiYjNDM7c3RhdGljIGludAomIzQzO3hmc19yZWFkX2lvZW5kX2NvbXBhcmUoCiYjNDM7CXZvaWQJCQkqcHJpdiwKJiM0MzsJY29uc3Qgc3RydWN0IGxpc3RfaGVhZAkqYSwKJiM0MzsJY29uc3Qgc3RydWN0IGxpc3RfaGVhZAkqYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb21hcF9pb2VuZAkqaWEgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IGlvbWFwX2lvZW5kLAomIzQzOwkJCWlvX2xpc3QpOwomIzQzOwlzdHJ1Y3QgaW9tYXBfaW9lbmQJKmliID0gY29udGFpbmVyX29mKGIsIHN0cnVjdCBpb21hcF9pb2VuZCwKJiM0MzsJCQlpb19saXN0KTsKJiM0MzsJbG9mZl90CQkJaV9zaXplID0gaV9zaXplX3JlYWQoaWEtJmd0O2lvX2lub2RlKTsKJiM0MzsKJiM0MzsJaWYgKCFJU19WRVJJVFkoaWEtJmd0O2lvX2lub2RlKSkKJiM0MzsJCXJldHVybiBpb21hcF9pb2VuZF9jb21wYXJlKHByaXYsIGEsIGIpOwomIzQzOwomIzQzOwlpZiAoaWEtJmd0O2lvX29mZnNldCAmZ3Q7IGlfc2l6ZSAmYW1wOyZhbXA7IGliLSZndDtpb19vZmZzZXQgJmx0OyBpX3NpemUpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CWlmIChpYS0mZ3Q7aW9fb2Zmc2V0ICZsdDsgaV9zaXplICZhbXA7JmFtcDsgaWItJmd0O2lvX29mZnNldCAmZ3Q7IGlfc2l6ZSkKJiM0MzsJCXJldHVybiAxOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBJTyByZWFkIGNvbXBsZXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQKJiM0Mzt4ZnNfZW5kX2lvZW5kX3JlYWQoCiYjNDM7CXN0cnVjdCBpb21hcF9pb2VuZAkqaW9lbmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlvZW5kLSZndDtpb19pbm9kZSk7CiYjNDM7CiYjNDM7CWlmICghaW9lbmQtJmd0O2lvX2Jpby5iaV9zdGF0dXMgJmFtcDsmYW1wOwomIzQzOwkJCXhmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoaXAsIGlvZW5kLSZndDtpb19vZmZzZXQpKQomIzQzOwkJZnN2ZXJpdHlfdmVyaWZ5X2Jpbyhpb2VuZC0mZ3Q7aW9fdmksCiYjNDM7CQkJCSAgICAmYW1wO2lvZW5kLSZndDtpb19iaW8pOwomIzQzOwlpb21hcF9maW5pc2hfaW9lbmRzKGlvZW5kLAomIzQzOwkJYmxrX3N0YXR1c190b19lcnJubyhpb2VuZC0mZ3Q7aW9fYmlvLmJpX3N0YXR1cykpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBGaW5pc2ggYWxsIHBlbmRpbmcgSU8gY29tcGxldGlvbnMgdGhhdCByZXF1aXJlIHRyYW5zYWN0aW9uYWwgbW9kaWZpY2F0aW9ucy4KICAqCkBAIC0yMDksMTQgJiM0MzsyNTQsMTcgQEAgeGZzX2VuZF9pbygKIAlsaXN0X3JlcGxhY2VfaW5pdCgmYW1wO2lwLSZndDtpX2lvZW5kX2xpc3QsICZhbXA7dG1wKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aXAtJmd0O2lfaW9lbmRfbG9jaywgZmxhZ3MpOwogCi0JaW9tYXBfc29ydF9pb2VuZHMoJmFtcDt0bXApOwomIzQzOwlpb2VuZCA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmYW1wO3RtcCwgc3RydWN0IGlvbWFwX2lvZW5kLCBpb19saXN0KTsKJiM0MzsJaWYgKGJpb19vcCgmYW1wO2lvZW5kLSZndDtpb19iaW8pID09IFJFUV9PUF9SRUFEKQomIzQzOwkJaW9tYXBfc29ydF9pb2VuZHMoJmFtcDt0bXAsIHhmc19yZWFkX2lvZW5kX2NvbXBhcmUpOwomIzQzOwllbHNlCiYjNDM7CQlpb21hcF9zb3J0X2lvZW5kcygmYW1wO3RtcCwgaW9tYXBfaW9lbmRfY29tcGFyZSk7CiAJd2hpbGUgKChpb2VuZCA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmYW1wO3RtcCwgc3RydWN0IGlvbWFwX2lvZW5kLAogCQkJaW9fbGlzdCkpKSB7CiAJCWxpc3RfZGVsX2luaXQoJmFtcDtpb2VuZC0mZ3Q7aW9fbGlzdCk7CiAJCWlvbWFwX2lvZW5kX3RyeV9tZXJnZShpb2VuZCwgJmFtcDt0bXApOwogCQlpZiAoYmlvX29wKCZhbXA7aW9lbmQtJmd0O2lvX2JpbykgPT0gUkVRX09QX1JFQUQpCi0JCQlpb21hcF9maW5pc2hfaW9lbmRzKGlvZW5kLAotCQkJCWJsa19zdGF0dXNfdG9fZXJybm8oaW9lbmQtJmd0O2lvX2Jpby5iaV9zdGF0dXMpKTsKJiM0MzsJCQl4ZnNfZW5kX2lvZW5kX3JlYWQoaW9lbmQpOwogCQllbHNlCiAJCQl4ZnNfZW5kX2lvZW5kX3dyaXRlKGlvZW5kKTsKIAkJY29uZF9yZXNjaGVkKCk7CkBAIC0yNDIsOSAmIzQzOzI5MCwxNCBAQCB4ZnNfZW5kX2JpbygKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2lwLSZndDtpX2lvZW5kX2xvY2ssIGZsYWdzKTsKLQlpZiAobGlzdF9lbXB0eSgmYW1wO2lwLSZndDtpX2lvZW5kX2xpc3QpKQotCQlXQVJOX09OX09OQ0UoIXF1ZXVlX3dvcmsobXAtJmd0O21fdW53cml0dGVuX3dvcmtxdWV1ZSwKJiM0MzsJaWYgKGxpc3RfZW1wdHkoJmFtcDtpcC0mZ3Q7aV9pb2VuZF9saXN0KSkgewomIzQzOwkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX1ZFUklUWSkgJmFtcDsmYW1wOyBpb2VuZC0mZ3Q7aW9fdmkgJmFtcDsmYW1wOwomIzQzOwkJICAgIGlvZW5kLSZndDtpb19vZmZzZXQgJmx0OyB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSkKJiM0MzsJCQlmc3Zlcml0eV9lbnF1ZXVlX3ZlcmlmeV93b3JrKCZhbXA7aXAtJmd0O2lfaW9lbmRfd29yayk7CiYjNDM7CQllbHNlCiYjNDM7CQkJV0FSTl9PTl9PTkNFKCFxdWV1ZV93b3JrKG1wLSZndDttX3Vud3JpdHRlbl93b3JrcXVldWUsCiAJCQkJCSAmYW1wO2lwLSZndDtpX2lvZW5kX3dvcmspKTsKJiM0MzsJfQogCWxpc3RfYWRkX3RhaWwoJmFtcDtpb2VuZC0mZ3Q7aW9fbGlzdCwgJmFtcDtpcC0mZ3Q7aV9pb2VuZF9saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aXAtJmd0O2lfaW9lbmRfbG9jaywgZmxhZ3MpOwogfQpAQCAtMzUwLDEyICYjNDM7NDAzLDE2IEBAIHhmc19tYXBfYmxvY2tzKAogCWludAkJCXJldHJpZXMgPSAwOwogCWludAkJCWVycm9yID0gMDsKIAl1bnNpZ25lZCBpbnQJCSpzZXE7CiYjNDM7CXVuc2lnbmVkIGludAkJaW9tYXBfZmxhZ3MgPSAwOwogCiAJaWYgKHhmc19pc19zaHV0ZG93bihtcCkpCiAJCXJldHVybiAtRUlPOwogCiAJWEZTX0VSUk9SVEFHX0RFTEFZKG1wLCBYRlNfRVJSVEFHX1dCX0RFTEFZX01TKTsKIAomIzQzOwlpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpCiYjNDM7CQlpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZOwomIzQzOwogCS8qCiAJICogQ09XIGZvcmsgYmxvY2tzIGNhbiBvdmVybGFwIGRhdGEgZm9yayBibG9ja3MgZXZlbiBpZiB0aGUgYmxvY2tzCiAJICogYXJlbiYjMzk7dCBzaGFyZWQuICBDT1cgSS9PIGFsd2F5cyB0YWtlcyBwcmVjZWRlbnQsIHNvIHdlIG11c3QgYWx3YXlzCkBAIC00NDMsNyAmIzQzOzUwMCw4IEBAIHhmc19tYXBfYmxvY2tzKAogCSAgICBpc251bGxzdGFydGJsb2NrKGltYXAuYnJfc3RhcnRibG9jaykpCiAJCWdvdG8gYWxsb2NhdGVfYmxvY2tzOwogCi0JeGZzX2JtYnRfdG9faW9tYXAoaXAsICZhbXA7d3BjLSZndDtpb21hcCwgJmFtcDtpbWFwLCAwLCAwLCBYRlNfV1BDKHdwYyktJmd0O2RhdGFfc2VxKTsKJiM0MzsJeGZzX2JtYnRfdG9faW9tYXAoaXAsICZhbXA7d3BjLSZndDtpb21hcCwgJmFtcDtpbWFwLCAwLCBpb21hcF9mbGFncywKJiM0MzsJCQkgIFhGU19XUEMod3BjKS0mZ3Q7ZGF0YV9zZXEpOwogCXRyYWNlX3hmc19tYXBfYmxvY2tzX2ZvdW5kKGlwLCBvZmZzZXQsIGNvdW50LCB3aGljaGZvcmssICZhbXA7aW1hcCk7CiAJcmV0dXJuIDA7CiBhbGxvY2F0ZV9ibG9ja3M6CkBAIC01OTAsMTIgJiM0Mzs2NDgsMTYgQEAgeGZzX3pvbmVkX21hcF9ibG9ja3MoCiAJeGZzX2ZpbGJsa3NfdAkJY291bnRfZnNiOwogCXN0cnVjdCB4ZnNfYm1idF9pcmVjCWltYXAsIGRlbDsKIAlzdHJ1Y3QgeGZzX2lleHRfY3Vyc29yCWljdXI7CiYjNDM7CXUxNgkJCWlvbWFwX2ZsYWdzID0gMDsKIAogCWlmICh4ZnNfaXNfc2h1dGRvd24obXApKQogCQlyZXR1cm4gLUVJTzsKIAogCVhGU19FUlJPUlRBR19ERUxBWShtcCwgWEZTX0VSUlRBR19XQl9ERUxBWV9NUyk7CiAKJiM0MzsJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKQomIzQzOwkJaW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTsKJiM0MzsKIAkvKgogCSAqIEFsbCBkaXJ0eSBkYXRhIG11c3QgYmUgY292ZXJlZCBieSBkZWxhbGxvYyBleHRlbnRzLiAgQnV0IHRydW5jYXRlIGNhbgogCSAqIHJlbW92ZSBkZWxhbGxvYyBleHRlbnRzIHVuZGVybmVhdGggdXMgb3IgcmVkdWNlIHRoZWlyIHNpemUuCkBAIC02MTksNyAmIzQzOzY4MSw3IEBAIHhmc196b25lZF9tYXBfYmxvY2tzKAogCQlpbWFwLmJyX3N0YXJ0YmxvY2sgPSBIT0xFU1RBUlRCTE9DSzsKIAkJaW1hcC5icl9zdGF0ZSA9IFhGU19FWFRfTk9STTsKIAkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQkJeGZzX2JtYnRfdG9faW9tYXAoaXAsICZhbXA7d3BjLSZndDtpb21hcCwgJmFtcDtpbWFwLCAwLCAwLCAwKTsKJiM0MzsJCXhmc19ibWJ0X3RvX2lvbWFwKGlwLCAmYW1wO3dwYy0mZ3Q7aW9tYXAsICZhbXA7aW1hcCwgMCwgaW9tYXBfZmxhZ3MsIDApOwogCQlyZXR1cm4gMDsKIAl9CiAJZW5kX2ZzYiA9IG1pbihlbmRfZnNiLCBpbWFwLmJyX3N0YXJ0b2ZmICYjNDM7IGltYXAuYnJfYmxvY2tjb3VudCk7CkBAIC02MzIsMTEgJiM0Mzs2OTQsMTAgQEAgeGZzX3pvbmVkX21hcF9ibG9ja3MoCiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAogCXdwYy0mZ3Q7aW9tYXAudHlwZSA9IElPTUFQX01BUFBFRDsKLQl3cGMtJmd0O2lvbWFwLmZsYWdzID0gSU9NQVBfRl9ESVJUWTsKIAl3cGMtJmd0O2lvbWFwLmJkZXYgPSBtcC0mZ3Q7bV9ydGRldl90YXJncC0mZ3Q7YnRfYmRldjsKIAl3cGMtJmd0O2lvbWFwLm9mZnNldCA9IG9mZnNldDsKIAl3cGMtJmd0O2lvbWFwLmxlbmd0aCA9IFhGU19GU0JfVE9fQihtcCwgY291bnRfZnNiKTsKLQl3cGMtJmd0O2lvbWFwLmZsYWdzID0gSU9NQVBfRl9BTk9OX1dSSVRFOwomIzQzOwl3cGMtJmd0O2lvbWFwLmZsYWdzID0gaW9tYXBfZmxhZ3MgfCBJT01BUF9GX0FOT05fV1JJVEU7CiAKIAl0cmFjZV94ZnNfem9uZWRfbWFwX2Jsb2NrcyhpcCwgb2Zmc2V0LCB3cGMtJmd0O2lvbWFwLmxlbmd0aCk7CiAJcmV0dXJuIDA7CkBAIC02ODQsNiAmIzQzOzc0NSwyMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgeGZzX3pvbmVkX3dyaXRlYmFja19vcHMgPSB7CiAJLndyaXRlYmFja19zdWJtaXQJPSB4ZnNfem9uZWRfd3JpdGViYWNrX3N1Ym1pdCwKIH07CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2lvbWFwX3dyaXRlcGFnZXMoCiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJCSppcCwKJiM0MzsJc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHgJKmN0eCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFdyaXRlYmFjayBkb2VzIG5vdCB3b3JrIGZvciBmb2xpb3MgcGFzdCBFT0YsIGxldCBpdCBrbm93IHRoYXQKJiM0MzsJICogSS9PIGhhcHBlbnMgZm9yIGZzdmVyaXR5IG1ldGFkYXRhIGFuZCB0aGlzIHJlc3RyaWN0aW9uIG5lZWQKJiM0MzsJICogdG8gYmUgc2tpcHBlZAomIzQzOwkgKi8KJiM0MzsJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKQomIzQzOwkJY3R4LSZndDtpb21hcC5mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZOwomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcyhjdHgpOwomIzQzO30KJiM0MzsKIFNUQVRJQyBpbnQKIHhmc192bV93cml0ZXBhZ2VzKAogCXN0cnVjdCBhZGRyZXNzX3NwYWNlCSptYXBwaW5nLApAQCAtNzAzLDcgJiM0Mzs3ODAsNyBAQCB4ZnNfdm1fd3JpdGVwYWdlcygKIAkJfTsKIAkJaW50CQkJCWVycm9yOwogCi0JCWVycm9yID0gaW9tYXBfd3JpdGVwYWdlcygmYW1wO3hjLmN0eCk7CiYjNDM7CQllcnJvciA9IHhmc19pb21hcF93cml0ZXBhZ2VzKGlwLCAmYW1wO3hjLmN0eCk7CiAJCWlmICh4Yy5vcGVuX3pvbmUpCiAJCQl4ZnNfb3Blbl96b25lX3B1dCh4Yy5vcGVuX3pvbmUpOwogCQlyZXR1cm4gZXJyb3I7CkBAIC03MTYsNyAmIzQzOzc5Myw3IEBAIHhmc192bV93cml0ZXBhZ2VzKAogCQkJfSwKIAkJfTsKIAotCQlyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcygmYW1wO3dwYy5jdHgpOwomIzQzOwkJcmV0dXJuIHhmc19pb21hcF93cml0ZXBhZ2VzKGlwLCAmYW1wO3dwYy5jdHgpOwogCX0KIH0KIApAQCAtNzYxLDkgJiM0Mzs4MzgsMTIgQEAgeGZzX2Jpb19zdWJtaXRfcmVhZCgKIAlzdHJ1Y3QgaW9tYXBfcmVhZF9mb2xpb19jdHgJKmN0eCkKIHsKIAlzdHJ1Y3QgYmlvCQkJKmJpbyA9IGN0eC0mZ3Q7cmVhZF9jdHg7CiYjNDM7CXN0cnVjdCBpb21hcF9pb2VuZAkJKmlvZW5kOwogCiAJLyogZGVmZXIgcmVhZCBjb21wbGV0aW9ucyB0byB0aGUgaW9lbmQgd29ya3F1ZXVlICovCi0JaW9tYXBfaW5pdF9pb2VuZChpdGVyLSZndDtpbm9kZSwgYmlvLCBjdHgtJmd0O3JlYWRfY3R4X2ZpbGVfb2Zmc2V0LCAwKTsKJiM0MzsJaW9lbmQgPSBpb21hcF9pbml0X2lvZW5kKGl0ZXItJmd0O2lub2RlLCBiaW8sIGN0eC0mZ3Q7cmVhZF9jdHhfZmlsZV9vZmZzZXQsCiYjNDM7CQkJMCk7CiYjNDM7CWlvZW5kLSZndDtpb192aSA9IGN0eC0mZ3Q7dmk7CiAJaW9tYXBfYmlvX3N1Ym1pdF9yZWFkX2VuZGlvKGl0ZXIsIGN0eCwgeGZzX2VuZF9iaW8pOwogfQogCkBAIC03NzUsMTEgJiM0Mzs4NTUsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9yZWFkX29wcyB4ZnNfaW9tYXBfcmVhZF9vcHMgPSB7CiAKIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGlvbWFwX3JlYWRfb3BzICoKIHhmc19nZXRfaW9tYXBfcmVhZF9vcHMoCi0JY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UJKm1hcHBpbmcpCiYjNDM7CWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlCSptYXBwaW5nLAomIzQzOwlsb2ZmX3QJCQkJcG9zaXRpb24pCiB7CiAJc3RydWN0IHhmc19pbm9kZQkJKmlwID0gWEZTX0kobWFwcGluZy0mZ3Q7aG9zdCk7CiAKLQlpZiAoYmRldl9oYXNfaW50ZWdyaXR5X2NzdW0oeGZzX2lub2RlX2J1ZnRhcmcoaXApLSZndDtidF9iZGV2KSkKJiM0MzsJaWYgKGJkZXZfaGFzX2ludGVncml0eV9jc3VtKHhmc19pbm9kZV9idWZ0YXJnKGlwKS0mZ3Q7YnRfYmRldikgfHwKJiM0MzsJCQl4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGlwLCBwb3NpdGlvbikpCiAJCXJldHVybiAmYW1wO3hmc19pb21hcF9yZWFkX29wczsKIAlyZXR1cm4gJmFtcDtpb21hcF9iaW9fcmVhZF9vcHM7CiB9CkBAIC03OTEsNyAmIzQzOzg3Myw3IEBAIHhmc192bV9yZWFkX2ZvbGlvKAogewogCXN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eAljdHggPSB7IC5jdXJfZm9saW8gPSBmb2xpbyB9OwogCi0JY3R4Lm9wcyA9IHhmc19nZXRfaW9tYXBfcmVhZF9vcHMoZm9saW8tJmd0O21hcHBpbmcpOwomIzQzOwljdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhmb2xpby0mZ3Q7bWFwcGluZywgZm9saW9fcG9zKGZvbGlvKSk7CiAJaW9tYXBfcmVhZF9mb2xpbygmYW1wO3hmc19yZWFkX2lvbWFwX29wcywgJmFtcDtjdHgsIE5VTEwpOwogCXJldHVybiAwOwogfQpAQCAtODAyLDcgJiM0Mzs4ODQsNyBAQCB4ZnNfdm1fcmVhZGFoZWFkKAogewogCXN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eAljdHggPSB7IC5yYWMgPSByYWMgfTsKIAotCWN0eC5vcHMgPSB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKHJhYy0mZ3Q7bWFwcGluZyksCiYjNDM7CWN0eC5vcHMgPSB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKHJhYy0mZ3Q7bWFwcGluZywgcmVhZGFoZWFkX3BvcyhyYWMpKTsKIAlpb21hcF9yZWFkYWhlYWQoJmFtcDt4ZnNfcmVhZF9pb21hcF9vcHMsICZhbXA7Y3R4LCBOVUxMKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwX3V0aWwuYyBiL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmMKaW5kZXggYzg4YjlhZGU3Mzg5ZGQuLmIxODc1ZDZlNzQ1Mjk2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXBfdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmMKQEAgLTMxLDYgJiM0MzszMSw3IEBACiAjaW5jbHVkZSAmIzM0O3hmc19ydGJpdG1hcC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX3J0Z3JvdXAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hmc196b25lX2FsbG9jLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mc3Zlcml0eS5oJmd0OwogCiAvKiBLZXJuZWwgb25seSBCTUFQIHJlbGF0ZWQgZGVmaW5pdGlvbnMgYW5kIGZ1bmN0aW9ucyAqLwogCkBAIC01NTMsNiAmIzQzOzU1NCwxNCBAQCB4ZnNfY2FuX2ZyZWVfZW9mYmxvY2tzKAogCWlmIChsYXN0X2ZzYiAmbHQ7PSBlbmRfZnNiKQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJLyoKJiM0MzsJICogTm90aGluZyB0byBjbGVhbiBvbiBmc3Zlcml0eSBpbm9kZXMgYXMgdGhleSBkb24mIzM5O3QgdXNlIHByZWFsbG9jIGFuZAomIzQzOwkgKiB0aGVyZSBubyBkZWxhbGxvYyBhcyBvbmx5IHdyaXR0ZW4gZGF0YSBpcyBmc3Zlcml0eSBtZXRhZGF0YQomIzQzOwkgKi8KJiM0MzsJaWYgKElTX1ZFUklUWShWRlNfSShpcCkpIHx8CiYjNDM7CSAgICB4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAkvKgogCSAqIENoZWNrIGlmIHRoZXJlIGlzIGFuIHBvc3QtRU9GIGV4dGVudCB0byBmcmVlLiAgSWYgdGhlcmUgYXJlIGFueQogCSAqIGRlbGFsbG9jIGJsb2NrcyBhdHRhY2hlZCB0byB0aGUgaW5vZGUgKGRhdGEgZm9yayBkZWxhbGxvYwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19maWxlLmMgYi9mcy94ZnMveGZzX2ZpbGUuYwppbmRleCA4NDVhOTdjOWIwNjMwYi4uY2JhMTk0ZDY3OGZjNzcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfZmlsZS5jCkBAIC0zNyw2ICYjNDM7MzcsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZhZHZpc2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb3VudC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZpbGVsb2NrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzdmVyaXR5LmgmZ3Q7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgeGZzX2ZpbGVfdm1fb3BzOwogCkBAIC0yNDUsNiAmIzQzOzI0NiwyNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgeGZzX2Rpb19yZWFkX2JvdW5jZV9vcHMgPSB7CiAJLmJpb19zZXQJPSAmYW1wO2lvbWFwX2lvZW5kX2Jpb3NldCwKIH07CiAKJiM0MztTVEFUSUMgc3NpemVfdAomIzQzO3hmc19maWxlX2J1ZmZlcmVkX3JlYWQoCiYjNDM7CXN0cnVjdCBraW9jYgkJKmlvY2IsCiYjNDM7CXN0cnVjdCBpb3ZfaXRlcgkJKnRvKQomIzQzO3sKJiM0MzsJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApKTsKJiM0MzsJc3NpemVfdAkJCXJldDsKJiM0MzsKJiM0MzsJdHJhY2VfeGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7CiYjNDM7CiYjNDM7CXJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoaW9jYiwgdG8pOwomIzQzOwl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIFNUQVRJQyBzc2l6ZV90CiB4ZnNfZmlsZV9kaW9fcmVhZCgKIAlzdHJ1Y3Qga2lvY2IJCSppb2NiLApAQCAtMjY1LDYgJiM0MzsyODUsMTYgQEAgeGZzX2ZpbGVfZGlvX3JlYWQoCiAJcmV0ID0geGZzX2lsb2NrX2lvY2IoaW9jYiwgWEZTX0lPTE9DS19TSEFSRUQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiYjNDM7CS8qCiYjNDM7CSAqIFJlLWNoZWNrIHZlcml0eSBzdGF0dXMgYWZ0ZXIgYWNxdWlyaW5nIGxvY2suIFRoaXMgcHJldmVudHMgVE9DVE9VIGluCiYjNDM7CSAqIHhmc19maWxlX3JlYWRfaXRlcigpIHdoaWxlIGZhbGxpbmcgYmFjayBmcm9tIERJTyB0byBidWZmZXJlZCBJL08gYXMKJiM0MzsJICogbm93IHdlIGFyZSBob2xkaW5nIGEgbG9jawomIzQzOwkgKi8KJiM0MzsJaWYgKGZzdmVyaXR5X2FjdGl2ZShWRlNfSShpcCkpKSB7CiYjNDM7CQl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOwomIzQzOwkJaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDs9IH5JT0NCX0RJUkVDVDsKJiM0MzsJCXJldHVybiB4ZnNfZmlsZV9idWZmZXJlZF9yZWFkKGlvY2IsIHRvKTsKJiM0MzsJfQogCWlmIChtYXBwaW5nX3N0YWJsZV93cml0ZXMoaW9jYi0mZ3Q7a2lfZmlscC0mZ3Q7Zl9tYXBwaW5nKSkgewogCQlkaW9fb3BzID0gJmFtcDt4ZnNfZGlvX3JlYWRfYm91bmNlX29wczsKIAkJZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19CT1VOQ0U7CkBAIC0yODEsNyAmIzQzOzMxMSw4IEBAIHhmc19maWxlX2RheF9yZWFkKAogCXN0cnVjdCBraW9jYgkJKmlvY2IsCiAJc3RydWN0IGlvdl9pdGVyCQkqdG8pCiB7Ci0Jc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmctJmd0O2hvc3QpOwomIzQzOwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IGlvY2ItJmd0O2tpX2ZpbHAtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdDsKJiM0MzsJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CiAJc3NpemVfdAkJCXJldCA9IDA7CiAKIAl0cmFjZV94ZnNfZmlsZV9kYXhfcmVhZChpb2NiLCB0byk7CkBAIC0yOTksMjUgJiM0MzszMzAsNiBAQCB4ZnNfZmlsZV9kYXhfcmVhZCgKIAlyZXR1cm4gcmV0OwogfQogCi1TVEFUSUMgc3NpemVfdAoteGZzX2ZpbGVfYnVmZmVyZWRfcmVhZCgKLQlzdHJ1Y3Qga2lvY2IJCSppb2NiLAotCXN0cnVjdCBpb3ZfaXRlcgkJKnRvKQotewotCXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koZmlsZV9pbm9kZShpb2NiLSZndDtraV9maWxwKSk7Ci0Jc3NpemVfdAkJCXJldDsKLQotCXRyYWNlX3hmc19maWxlX2J1ZmZlcmVkX3JlYWQoaW9jYiwgdG8pOwotCi0JcmV0ID0geGZzX2lsb2NrX2lvY2IoaW9jYiwgWEZTX0lPTE9DS19TSEFSRUQpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JcmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7Ci0JeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIFNUQVRJQyBzc2l6ZV90CiB4ZnNfZmlsZV9yZWFkX2l0ZXIoCiAJc3RydWN0IGtpb2NiCQkqaW9jYiwKQEAgLTMzMiw2ICYjNDM7MzQ0LDE0IEBAIHhmc19maWxlX3JlYWRfaXRlcigKIAlpZiAoeGZzX2lzX3NodXRkb3duKG1wKSkKIAkJcmV0dXJuIC1FSU87CiAKJiM0MzsJLyoKJiM0MzsJICogSW4gY2FzZSBmcy12ZXJpdHkgaXMgZW5hYmxlZCwgd2UgYWxzbyBmYWxsYmFjayB0byB0aGUgYnVmZmVyZWQgcmVhZAomIzQzOwkgKiBmcm9tIHRoZSBkaXJlY3QgcmVhZCBwYXRoLiBUaGVyZWZvcmUsIElPQ0JfRElSRUNUIGlzIHNldCBhbmQgbmVlZCB0bwomIzQzOwkgKiBiZSBjbGVhcmVkIChzZWUgZ2VuZXJpY19maWxlX3JlYWRfaXRlcigpKQomIzQzOwkgKi8KJiM0MzsJaWYgKGZzdmVyaXR5X2FjdGl2ZShpbm9kZSkpCiYjNDM7CQlpb2NiLSZndDtraV9mbGFncyAmYW1wOz0gfklPQ0JfRElSRUNUOwomIzQzOwogCWlmIChJU19EQVgoaW5vZGUpKQogCQlyZXQgPSB4ZnNfZmlsZV9kYXhfcmVhZChpb2NiLCB0byk7CiAJZWxzZSBpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9ESVJFQ1QpCkBAIC0xNzAwLDExICYjNDM7MTcyMCwxOCBAQCB4ZnNfZmlsZV9vcGVuKAogCXN0cnVjdCBpbm9kZQkqaW5vZGUsCiAJc3RydWN0IGZpbGUJKmZpbGUpCiB7CiYjNDM7CWludAkJZXJyb3I7CiYjNDM7CiAJaWYgKHhmc19pc19zaHV0ZG93bihYRlNfTShpbm9kZS0mZ3Q7aV9zYikpKQogCQlyZXR1cm4gLUVJTzsKIAlmaWxlLSZndDtmX21vZGUgfD0gRk1PREVfTk9XQUlUIHwgRk1PREVfQ0FOX09ESVJFQ1Q7CiAJaWYgKHhmc19nZXRfYXRvbWljX3dyaXRlX21pbihYRlNfSShpbm9kZSkpICZndDsgMCkKIAkJZmlsZS0mZ3Q7Zl9tb2RlIHw9IEZNT0RFX0NBTl9BVE9NSUNfV1JJVEU7CiYjNDM7CiYjNDM7CWVycm9yID0gZnN2ZXJpdHlfZmlsZV9vcGVuKGlub2RlLCBmaWxlKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwogCXJldHVybiBnZW5lcmljX2ZpbGVfb3Blbihpbm9kZSwgZmlsZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuYyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNDYyMjIzYjQ2MTliMDYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2ZzdmVyaXR5LmMKQEAgLTAsMCAmIzQzOzEsNDgwIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBSZWQgSGF0LCBJbmMuCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfcGxhdGZvcm0uaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfZm9ybWF0LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX3NoYXJlZC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc190cmFuc19yZXN2LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX21vdW50LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2RhX2Zvcm1hdC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19kYV9idHJlZS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19pbm9kZS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19sb2dfZm9ybWF0LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX3RyYW5zLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2RlZmVyLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX3RyYWNlLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX3F1b3RhLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2ZzdmVyaXR5LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2lvbWFwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2Vycm9yLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2hlYWx0aC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19ibWFwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2JtYXBfdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnN2ZXJpdHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9tYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwomIzQzOwomIzQzO2xvZmZfdAomIzQzO3hmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoCiYjNDM7CWNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUJKmlwKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJvdW5kX3VwKGlfc2l6ZV9yZWFkKFZGU19JQyhpcCkpLCBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR04pOwomIzQzO30KJiM0MzsKJiM0Mztib29sCiYjNDM7eGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YSgKJiM0MzsJY29uc3Qgc3RydWN0IHhmc19pbm9kZQkqaXAsCiYjNDM7CWxvZmZfdAkJCW9mZnNldCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmc3Zlcml0eV9hY3RpdmUoVkZTX0lDKGlwKSkgJmFtcDsmYW1wOwomIzQzOwkJCW9mZnNldCAmbHQ7IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJldHJpZXZlIHRoZSB2ZXJpdHkgZGVzY3JpcHRvci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yKAomIzQzOwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKJiM0MzsJdm9pZAkJCSpidWYsCiYjNDM7CXNpemVfdAkJCWJ1Zl9zaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CiYjNDM7CXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gaXAtJmd0O2lfbW91bnQ7CiYjNDM7CV9fYmUzMgkJCWRfZGVzY19zaXplOwomIzQzOwl1MzIJCQlkZXNjX3NpemU7CiYjNDM7CXU2NAkJCWRlc2Nfc2l6ZV9wb3M7CiYjNDM7CWludAkJCWVycm9yOwomIzQzOwl1NjQJCQlkZXNjX3BvczsKJiM0MzsJc3RydWN0IHhmc19ibWJ0X2lyZWMJcmVjOwomIzQzOwlpbnQJCQlpc19lbXB0eTsKJiM0MzsJdWludDMyX3QJCWJsb2Nrc2l6ZSA9IGlfYmxvY2tzaXplKFZGU19JKGlwKSk7CiYjNDM7CXhmc19maWxlb2ZmX3QJCWxhc3RfYmxvY2tfb2Zmc2V0OwomIzQzOwomIzQzOwlBU1NFUlQoaW5vZGUtJmd0O2lfZmxhZ3MgJmFtcDsgU19WRVJJVFkpOwomIzQzOwl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwomIzQzOwllcnJvciA9IHhmc19ibWFwX2xhc3RfZXh0ZW50KE5VTEwsIGlwLCBYRlNfREFUQV9GT1JLLCAmYW1wO3JlYywgJmFtcDtpc19lbXB0eSk7CiYjNDM7CXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwlpZiAoaXNfZW1wdHkpCiYjNDM7CQlyZXR1cm4gLUVOT0RBVEE7CiYjNDM7CiYjNDM7CWxhc3RfYmxvY2tfb2Zmc2V0ID0KJiM0MzsJCVhGU19GU0JfVE9fQihtcCwgcmVjLmJyX3N0YXJ0b2ZmICYjNDM7IHJlYy5icl9ibG9ja2NvdW50KTsKJiM0MzsJaWYgKGxhc3RfYmxvY2tfb2Zmc2V0ICZsdDs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKQomIzQzOwkJcmV0dXJuIC1FTk9EQVRBOwomIzQzOwomIzQzOwlkZXNjX3NpemVfcG9zID0gbGFzdF9ibG9ja19vZmZzZXQgLSBzaXplb2YoX19iZTMyKTsKJiM0MzsJZXJyb3IgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgKGNoYXIgKikmYW1wO2RfZGVzY19zaXplLAomIzQzOwkJCXNpemVvZihkX2Rlc2Nfc2l6ZSksIGRlc2Nfc2l6ZV9wb3MpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CWRlc2Nfc2l6ZSA9IGJlMzJfdG9fY3B1KGRfZGVzY19zaXplKTsKJiM0MzsJaWYgKFhGU19JU19DT1JSVVBUKG1wLCBkZXNjX3NpemUgJmd0OyBGU19WRVJJVFlfTUFYX0RFU0NSSVBUT1JfU0laRSkpIHsKJiM0MzsJCXhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpOwomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKFhGU19JU19DT1JSVVBUKG1wLCBkZXNjX3NpemUgJmd0OyBkZXNjX3NpemVfcG9zKSkgewomIzQzOwkJeGZzX2lub2RlX21hcmtfc2ljayhYRlNfSShpbm9kZSksIFhGU19TSUNLX0lOT19GU1ZFUklUWSk7CiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWJ1Zl9zaXplKQomIzQzOwkJcmV0dXJuIGRlc2Nfc2l6ZTsKJiM0MzsKJiM0MzsJaWYgKFhGU19JU19DT1JSVVBUKG1wLCBkZXNjX3NpemUgJmd0OyBidWZfc2l6ZSkpIHsKJiM0MzsJCXhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpOwomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGVzY19wb3MgPSByb3VuZF9kb3duKGRlc2Nfc2l6ZV9wb3MgLSBkZXNjX3NpemUsIGJsb2Nrc2l6ZSk7CiYjNDM7CWlmIChkZXNjX3BvcyAmbHQ7IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKSB7CiYjNDM7CQl4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTsKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVycm9yID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJcmV0dXJuIGRlc2Nfc2l6ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3hmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yKAomIzQzOwlzdHJ1Y3QgZmlsZQkJKmZpbGUsCiYjNDM7CWNvbnN0IHZvaWQJCSpkZXNjLAomIzQzOwl1MzIJCQlkZXNjX3NpemUsCiYjNDM7CXU2NAkJCW1lcmtsZV90cmVlX3NpemUpCiYjNDM7ewomIzQzOwlpbnQJCQllcnJvcjsKJiM0MzsJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKJiM0MzsJdW5zaWduZWQgaW50CQlibGtzaXplID0gaXAtJmd0O2lfbW91bnQtJmd0O21fc2Iuc2JfYmxvY2tzaXplOwomIzQzOwl1NjQJCQl0cmVlX2xhc3RfYmxvY2sgPQomIzQzOwkJCXhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApICYjNDM7IG1lcmtsZV90cmVlX3NpemU7CiYjNDM7CXU2NAkJCWRlc2NfcG9zID0KJiM0MzsJCQlyb3VuZF91cCh0cmVlX2xhc3RfYmxvY2ssIFhGU19GU1ZFUklUWV9TVEFSVF9BTElHTik7CiYjNDM7CXU2NAkJCWRlc2NfZW5kID0gZGVzY19wb3MgJiM0MzsgZGVzY19zaXplOwomIzQzOwlfX2JlMzIJCQlkZXNjX3NpemVfZGlzayA9IGNwdV90b19iZTMyKGRlc2Nfc2l6ZSk7CiYjNDM7CXU2NAkJCWRlc2Nfc2l6ZV9wb3MgPQomIzQzOwkJCXJvdW5kX3VwKGRlc2NfZW5kICYjNDM7IHNpemVvZihkZXNjX3NpemVfZGlzayksIGJsa3NpemUpIC0KJiM0MzsJCQlzaXplb2YoZGVzY19zaXplX2Rpc2spOwomIzQzOwomIzQzOwllcnJvciA9IGlvbWFwX2ZzdmVyaXR5X3dyaXRlKGZpbGUsIGRlc2Nfc2l6ZV9wb3MsIHNpemVvZihfX2JlMzIpLAomIzQzOwkJCShjb25zdCB2b2lkICopJmFtcDtkZXNjX3NpemVfZGlzaywKJiM0MzsJCQkmYW1wO3hmc19idWZmZXJlZF93cml0ZV9pb21hcF9vcHMsCiYjNDM7CQkJJmFtcDt4ZnNfaW9tYXBfd3JpdGVfb3BzKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfZnN2ZXJpdHlfd3JpdGUoZmlsZSwgZGVzY19wb3MsIGRlc2Nfc2l6ZSwgZGVzYywKJiM0MzsJCQkmYW1wO3hmc19idWZmZXJlZF93cml0ZV9pb21hcF9vcHMsCiYjNDM7CQkJJmFtcDt4ZnNfaW9tYXBfd3JpdGVfb3BzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUcnkgdG8gcmVtb3ZlIGFsbCB0aGUgZnN2ZXJpdHkgbWV0YWRhdGEgYWZ0ZXIgYSBmYWlsZWQgZW5hYmxlbWVudC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YSgKJiM0MzsJc3RydWN0IHhmc19pbm9kZQkqaXApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGZzX3RyYW5zCSp0cDsKJiM0MzsJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0mZ3Q7aV9tb3VudDsKJiM0MzsJaW50CQkJZXJyb3I7CiYjNDM7CiYjNDM7CWVycm9yID0geGZzX3RyYW5zX2FsbG9jKG1wLCAmYW1wO01fUkVTKG1wKS0mZ3Q7dHJfaXRydW5jYXRlLCAwLCAwLCAwLCAmYW1wO3RwKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwl4ZnNfaWxvY2soaXAsIFhGU19NTUFQTE9DS19FWENMIHwgWEZTX0lMT0NLX0VYQ0wpOwomIzQzOwl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhWRlNfSShpcCktJmd0O2lfbWFwcGluZywgWEZTX0lTSVpFKGlwKSk7CiYjNDM7CXhmc190cmFuc19pam9pbih0cCwgaXAsIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXZSByZW1vdmUgcG9zdCBFT0YgZGF0YSwgbm8gbmVlZCB0byB1cGRhdGUgaV9zaXplIGFzIGZzdmVyaXR5CiYjNDM7CSAqIGRpZG4mIzM5O3QgbW92ZSBpX3NpemUgaW4gdGhlIGZpcnN0IHBsYWNlCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IHhmc19pdHJ1bmNhdGVfZXh0ZW50cygmYW1wO3RwLCBpcCwgWEZTX0RBVEFfRk9SSywgWEZTX0lTSVpFKGlwKSk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gZXJyX2NhbmNlbDsKJiM0MzsKJiM0MzsJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwKTsKJiM0MzsJeGZzX2l1bmxvY2soaXAsIFhGU19NTUFQTE9DS19FWENMIHwgWEZTX0lMT0NLX0VYQ0wpOwomIzQzOwlyZXR1cm4gZXJyb3I7CiYjNDM7ZXJyX2NhbmNlbDoKJiM0MzsJeGZzX3RyYW5zX2NhbmNlbCh0cCk7CiYjNDM7CXhmc19pdW5sb2NrKGlwLCBYRlNfTU1BUExPQ0tfRVhDTCB8IFhGU19JTE9DS19FWENMKTsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4oCiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAomIzQzOwlsb2ZmX3QJCQlzdGFydCwKJiM0MzsJbG9mZl90CQkJZW5kKQomIzQzO3sKJiM0MzsJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0mZ3Q7aV9tb3VudDsKJiM0MzsJc3RydWN0IHhmc190cmFucwkqdHA7CiYjNDM7CXhmc19maWxlb2ZmX3QJCW9mZnNldF9mc2IgPSBYRlNfQl9UT19GU0JUKG1wLCBzdGFydCk7CiYjNDM7CXhmc19maWxlb2ZmX3QJCWVuZF9mc2IgPSBYRlNfQl9UT19GU0IobXAsIGVuZCk7CiYjNDM7CXN0cnVjdCB4ZnNfYm1idF9pcmVjCWltYXA7CiYjNDM7CWludAkJCW5pbWFwczsKJiM0MzsJaW50CQkJZXJyb3IgPSAwOwomIzQzOwlpbnQJCQlkb25lOwomIzQzOwomIzQzOwl3aGlsZSAob2Zmc2V0X2ZzYiAmbHQ7IGVuZF9mc2IpIHsKJiM0MzsJCW5pbWFwcyA9IDE7CiYjNDM7CiYjNDM7CQllcnJvciA9IHhmc190cmFuc19hbGxvYyhtcCwgJmFtcDtNX1JFUyhtcCktJmd0O3RyX3dyaXRlLCAwLCAwLCAwLCAmYW1wO3RwKTsKJiM0MzsJCWlmIChlcnJvcikKJiM0MzsJCQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKJiM0MzsJCWVycm9yID0geGZzX2JtYXBpX3JlYWQoaXAsIG9mZnNldF9mc2IsCiYjNDM7CQkJCWVuZF9mc2IgLSBvZmZzZXRfZnNiLCAmYW1wO2ltYXAsICZhbXA7bmltYXBzLAomIzQzOwkJCQkwKTsKJiM0MzsJCWlmIChlcnJvcikKJiM0MzsJCQlnb3RvIG91dF9jYW5jZWw7CiYjNDM7CiYjNDM7CQlpZiAobmltYXBzID09IDApCiYjNDM7CQkJZ290byBvdXRfY2FuY2VsOwomIzQzOwomIzQzOwkJaWYgKGltYXAuYnJfc3RhdGUgPT0gWEZTX0VYVF9VTldSSVRURU4pIHsKJiM0MzsJCQlkb25lID0gMDsKJiM0MzsKJiM0MzsJCQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCAwKTsKJiM0MzsKJiM0MzsJCQl3aGlsZSAoIWRvbmUpIHsKJiM0MzsJCQkJZXJyb3IgPSB4ZnNfYnVubWFwaSh0cCwgaXAsIGltYXAuYnJfc3RhcnRvZmYsCiYjNDM7CQkJCQkJaW1hcC5icl9ibG9ja2NvdW50LCAwLCAxLAomIzQzOwkJCQkJCSZhbXA7ZG9uZSk7CiYjNDM7CQkJCWlmIChlcnJvcikKJiM0MzsJCQkJCWdvdG8gb3V0X2NhbmNlbDsKJiM0MzsKJiM0MzsJCQkJZXJyb3IgPSB4ZnNfZGVmZXJfZmluaXNoKCZhbXA7dHApOwomIzQzOwkJCQlpZiAoZXJyb3IpCiYjNDM7CQkJCQlnb3RvIG91dF9jYW5jZWw7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCk7CiYjNDM7CQkJaWYgKGVycm9yKQomIzQzOwkJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXhmc190cmFuc19jYW5jZWwodHApOwomIzQzOwkJfQomIzQzOwkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKJiM0MzsKJiM0MzsJCW9mZnNldF9mc2IgPSBpbWFwLmJyX3N0YXJ0b2ZmICYjNDM7IGltYXAuYnJfYmxvY2tjb3VudDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZXJyb3I7CiYjNDM7b3V0X2NhbmNlbDoKJiM0MzsJeGZzX3RyYW5zX2NhbmNlbCh0cCk7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFByZXBhcmUgdG8gZW5hYmxlIGZzdmVyaXR5IGJ5IGNsZWFyaW5nIG9sZCBtZXRhZGF0YS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZSgKJiM0MzsJc3RydWN0IGZpbGUJCSpmaWxwKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApOwomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKJiM0MzsJaW50CQkJZXJyb3I7CiYjNDM7CiYjNDM7CXhmc19hc3NlcnRfaWxvY2tlZChpcCwgWEZTX0lPTE9DS19FWENMKTsKJiM0MzsKJiM0MzsJaWYgKElTX0RBWChpbm9kZSkgfHwgaXAtJmd0O2lfZGlmbGFnczIgJmFtcDsgWEZTX0RJRkxBRzJfREFYKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChpbm9kZS0mZ3Q7aV9zaXplICZndDsgWEZTX0ZTVkVSSVRZX0xBUkdFU1RfRklMRSkKJiM0MzsJCXJldHVybiAtRUZCSUc7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZsdXNoIHBhZ2VjYWNoZSBiZWZvcmUgYnVpbGRpbmcgTWVya2xlIHRyZWUuIElub2RlIGlzIGxvY2tlZCBhbmQgbm8KJiM0MzsJICogZnVydGhlciB3cml0ZXMgd2lsbCBoYXBwZW4gdG8gdGhlIGZpbGUgZXhjZXB0IGZzdmVyaXR5IG1ldGFkYXRhCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtJmd0O2lfbWFwcGluZyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJaWYgKHhmc19pZmxhZ3NfdGVzdF9hbmRfc2V0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwllcnJvciA9IHhmc19xbV9kcWF0dGFjaChpcCk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gb3V0X2NsZWFyOwomIzQzOwomIzQzOwllcnJvciA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlnb3RvIG91dF9jbGVhcjsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO291dF9jbGVhcjoKJiM0MzsJeGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pOwomIzQzOwlyZXR1cm4gZXJyb3I7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQ29tcGxldGUgKG9yIGZhaWwpIHRoZSBwcm9jZXNzIG9mIGVuYWJsaW5nIGZzdmVyaXR5LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZSgKJiM0MzsJc3RydWN0IGZpbGUJCSpmaWxlLAomIzQzOwljb25zdCB2b2lkCQkqZGVzYywKJiM0MzsJc2l6ZV90CQkJZGVzY19zaXplLAomIzQzOwl1NjQJCQltZXJrbGVfdHJlZV9zaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKJiM0MzsJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0mZ3Q7aV9tb3VudDsKJiM0MzsJc3RydWN0IHhmc190cmFucwkqdHA7CiYjNDM7CWludAkJCWVycm9yID0gMDsKJiM0MzsJbG9mZl90CQkJcmFuZ2Vfc3RhcnQgPSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKTsKJiM0MzsKJiM0MzsJeGZzX2Fzc2VydF9pbG9ja2VkKGlwLCBYRlNfSU9MT0NLX0VYQ0wpOwomIzQzOwomIzQzOwkvKiBmcy12ZXJpdHkgZmFpbGVkLCBqdXN0IGNsZWFudXAgKi8KJiM0MzsJaWYgKGRlc2MgPT0gTlVMTCkgewomIzQzOwkJZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWVycm9yID0geGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3IoZmlsZSwgZGVzYywgZGVzY19zaXplLAomIzQzOwkJCW1lcmtsZV90cmVlX3NpemUpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV2FpdCBmb3IgTWVya2xlIHRyZWUgZ2V0IHdyaXR0ZW4gdG8gZGlzayBiZWZvcmUgc2V0dGluZyBvbi1kaXNrIGlub2RlCiYjNDM7CSAqIGZsYWcgYW5kIGNsZWFyaW5nIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtJmd0O2lfbWFwcGluZywgcmFuZ2Vfc3RhcnQsCiYjNDM7CQkJTExPTkdfTUFYKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJlbW92ZSB1bndyaXR0ZW4gZXh0ZW50cyBsZWZ0IGJ5IENPVyBwcmVhbGxvY2F0aW9ucyBhbmQgd3JpdGUKJiM0MzsJICogcHJlYWxsb2NhdGlvbiBpbiB0aGUgbWVya2xlIHRyZWUgaG9sZXMgYW5kIHBhc3QgZGVzY3JpcHRvcgomIzQzOwkgKi8KJiM0MzsJZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbihpcCwgcmFuZ2Vfc3RhcnQsIExMT05HX01BWCk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcm9hY3RpdmVseSBkcm9wIGFueSBkZWxheWVkIGFsbG9jYXRpb25zIGluIENPVyBmb3JrLCB0aGUgZnN2ZXJpdHkKJiM0MzsJICogZmlsZXMgYXJlIHJlYWQtb25seQomIzQzOwkgKi8KJiM0MzsJaWYgKHhmc19pc19jb3dfaW5vZGUoaXApKSB7CiYjNDM7CQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKJiM0MzsJCXhmc19pZm9ya19pbml0X2NvdyhpcCk7CiYjNDM7CQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwomIzQzOwkJeGZzX2JtYXBfcHVuY2hfZGVsYWxsb2NfcmFuZ2UoaXAsIFhGU19DT1dfRk9SSywgMCwgTExPTkdfTUFYLAomIzQzOwkJCQlOVUxMKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTZXQgZnN2ZXJpdHkgaW5vZGUgZmxhZwomIzQzOwkgKi8KJiM0MzsJZXJyb3IgPSB4ZnNfdHJhbnNfYWxsb2NfaW5vZGUoaXAsICZhbXA7TV9SRVMobXApLSZndDt0cl9pY2hhbmdlLAomIzQzOwkJCTAsIDAsIGZhbHNlLCAmYW1wO3RwKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEVuc3VyZSB0aGF0IHdlJiMzOTt2ZSBwZXJzaXN0ZWQgdGhlIHZlcml0eSBpbmZvcm1hdGlvbiBiZWZvcmUgd2UgZW5hYmxlCiYjNDM7CSAqIGl0IG9uIHRoZSBpbm9kZSBhbmQgdGVsbCB0aGUgY2FsbGVyIHdlIGhhdmUgc2VhbGVkIHRoZSBpbm9kZS4KJiM0MzsJICovCiYjNDM7CWlwLSZndDtpX2RpZmxhZ3MyIHw9IFhGU19ESUZMQUcyX1ZFUklUWTsKJiM0MzsKJiM0MzsJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOwomIzQzOwl4ZnNfdHJhbnNfc2V0X3N5bmModHApOwomIzQzOwomIzQzOwllcnJvciA9IHhmc190cmFuc19jb21taXQodHApOwomIzQzOwl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwomIzQzOwomIzQzOwlpZiAoIWVycm9yKQomIzQzOwkJaW5vZGVfc2V0X2ZsYWdzKGlub2RlLCBTX1ZFUklUWSwgU19WRVJJVFkpOwomIzQzOwomIzQzO291dDoKJiM0MzsJaWYgKGVycm9yKSB7CiYjNDM7CQlpbnQJZXJyb3IyOwomIzQzOwomIzQzOwkJZXJyb3IyID0geGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YShpcCk7CiYjNDM7CQlpZiAoZXJyb3IyKQomIzQzOwkJCXhmc19hbGVydChpcC0mZ3Q7aV9tb3VudCwKJiM0MzsmIzM0O2lubyAweCVsbHggZmFpbGVkIHRvIGNsZWFuIHVwIG5ldyBmc3Zlcml0eSBtZXRhZGF0YSwgZXJyICVkJiMzNDssCiYjNDM7CQkJCQlJX0lOTyhpcCksIGVycm9yMik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJeGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pOwomIzQzOwlyZXR1cm4gZXJyb3I7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmV0cmlldmUgYSBtZXJrbGUgdHJlZSBibG9jay4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKgomIzQzO3hmc19mc3Zlcml0eV9yZWFkX21lcmtsZSgKJiM0MzsJc3RydWN0IGlub2RlCQkqaW5vZGUsCiYjNDM7CXBnb2ZmX3QJCQlpbmRleCkKJiM0Mzt7CiYjNDM7CWluZGV4ICYjNDM7PSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KFhGU19JKGlub2RlKSkgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbmVyaWNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKGlub2RlLCBpbmRleCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmV0cmlldmUgYSBtZXJrbGUgdHJlZSBibG9jay4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZAomIzQzO3hmc19mc3Zlcml0eV9yZWFkYWhlYWRfbWVya2xlX3RyZWUoCiYjNDM7CXN0cnVjdCBpbm9kZQkJKmlub2RlLAomIzQzOwlwZ29mZl90CQkJaW5kZXgsCiYjNDM7CXVuc2lnbmVkIGxvbmcJCW5yX3BhZ2VzKQomIzQzO3sKJiM0MzsJaW5kZXggJiM0Mzs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoWEZTX0koaW5vZGUpKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwomIzQzOwlnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZShpbm9kZSwgaW5kZXgsIG5yX3BhZ2VzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBXcml0ZSBhIG1lcmtsZSB0cmVlIGJsb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlKAomIzQzOwlzdHJ1Y3QgZmlsZQkJKmZpbGUsCiYjNDM7CWNvbnN0IHZvaWQJCSpidWYsCiYjNDM7CXU2NAkJCXBvcywKJiM0MzsJdW5zaWduZWQgaW50CQlzaXplLAomIzQzOwljb25zdCB1OAkJKnplcm9fZGlnZXN0LAomIzQzOwl1bnNpZ25lZCBpbnQJCWRpZ2VzdF9zaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKJiM0MzsJbG9mZl90CQkJcG9zaXRpb24gPSBwb3MgJiM0MzsKJiM0MzsJCXhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApOwomIzQzOwomIzQzOwlpZiAocG9zaXRpb24gJiM0Mzsgc2l6ZSAmZ3Q7IGlub2RlLSZndDtpX3NiLSZndDtzX21heGJ5dGVzKQomIzQzOwkJcmV0dXJuIC1FRkJJRzsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhpcyBpcyBhIGJsb2NrIGZ1bGwgb2YgaGFzaGVzIG9mIHplcm9lZCBibG9ja3MsIGRvbiYjMzk7dCBib3RoZXIKJiM0MzsJICogc3RvcmluZyB0aGUgYmxvY2suIFdlIGNhbiBzeW50aGVzaXplIHRoZW0gbGF0ZXIuCiYjNDM7CSAqCiYjNDM7CSAqIEhvd2V2ZXIsIGRvIHRoaXMgb25seSBpbiBjYXNlIE1lcmtsZSB0cmVlIGJsb2NrID09IGZzIGJsb2NrIHNpemUuCiYjNDM7CSAqIElvbWFwIHN5bnRoZXNpemVzIHRoZXNlIGJsb2NrcyBiYXNlZCBvbiBob2xlcyBpbiB0aGUgbWVya2xlIHRyZWUuIFdlCiYjNDM7CSAqIHdvbiYjMzk7dCBiZSBhYmxlIHRvIHRlbGwgaWYgc29tZXRoaW5nIG5lZWQgdG8gYmUgc3ludGhlc2l6ZXMgZm9yIHRoZQomIzQzOwkgKiByYW5nZSBpbiB0aGUgZnMgYmxvY2suIEZvciBleGFtcGxlLCBmb3IgNGsgZmlsZXN5c3RlbSBibG9jawomIzQzOwkgKgomIzQzOwkgKglbIDFrIHwgemVybyBoYXNoZXMgfCB6ZXJvIGhhc2hlcyB8IDFrIF0KJiM0MzsJICoKJiM0MzsJICogSW9tYXAgd29uJiMzOTt0IGtub3cgYWJvdXQgdGhlc2UgZW1wdHkgYmxvY2tzLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNpemUgPT0gaXAtJmd0O2lfbW91bnQtJmd0O21fc2Iuc2JfYmxvY2tzaXplICZhbXA7JmFtcDsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEZpcnN0IGRpZ2VzdCBpcyB6ZXJvX2RpZ2VzdAomIzQzOwkJCSAqLwomIzQzOwkJCW1lbWNtcChidWYsIHplcm9fZGlnZXN0LCBkaWdlc3Rfc2l6ZSkgPT0gMCAmYW1wOyZhbXA7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBFdmVyeSBkaWdlc3QgaXMgc2FtZSBhcyBwcmV2aW91cywgdGh1cyBhbGwgYXJlCiYjNDM7CQkJICogemVyb19kaWdlc3QKJiM0MzsJCQkgKi8KJiM0MzsJCQltZW1jbXAoYnVmICYjNDM7IGRpZ2VzdF9zaXplLCBidWYsIHNpemUgLSBkaWdlc3Rfc2l6ZSkgPT0gMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfZnN2ZXJpdHlfd3JpdGUoZmlsZSwgcG9zaXRpb24sIHNpemUsIGJ1ZiwKJiM0MzsJCQkmYW1wO3hmc19idWZmZXJlZF93cml0ZV9pb21hcF9vcHMsCiYjNDM7CQkJJmFtcDt4ZnNfaW9tYXBfd3JpdGVfb3BzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMgeGZzX2ZzdmVyaXR5X29wcyA9IHsKJiM0MzsJLmJlZ2luX2VuYWJsZV92ZXJpdHkJCT0geGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZSwKJiM0MzsJLmVuZF9lbmFibGVfdmVyaXR5CQk9IHhmc19mc3Zlcml0eV9lbmRfZW5hYmxlLAomIzQzOwkuZ2V0X3Zlcml0eV9kZXNjcmlwdG9yCQk9IHhmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvciwKJiM0MzsJLnJlYWRfbWVya2xlX3RyZWVfcGFnZQkJPSB4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGUsCiYjNDM7CS5yZWFkYWhlYWRfbWVya2xlX3RyZWUJCT0geGZzX2ZzdmVyaXR5X3JlYWRhaGVhZF9tZXJrbGVfdHJlZSwKJiM0MzsJLndyaXRlX21lcmtsZV90cmVlX2Jsb2NrCT0geGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZSwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc3Zlcml0eS5oIGIvZnMveGZzL3hmc19mc3Zlcml0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi42YTk4MWUyMGE3NWJiOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaApAQCAtMCwwICYjNDM7MSwyOCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgUmVkIEhhdCwgSW5jLgomIzQzOyAqLwomIzQzOyNpZm5kZWYgX19YRlNfRlNWRVJJVFlfSF9fCiYjNDM7I2RlZmluZSBfX1hGU19GU1ZFUklUWV9IX18KJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19wbGF0Zm9ybS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnN2ZXJpdHkuaCZndDsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWQomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB4ZnNfZnN2ZXJpdHlfb3BzOwomIzQzO2xvZmZfdCB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTsKJiM0Mztib29sIHhmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXAsIGxvZmZfdCBvZmZzZXQpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSBsb2ZmX3QgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCkKJiM0Mzt7CiYjNDM7CVdBUk5fT05fT05DRSgxKTsKJiM0MzsJcmV0dXJuIFVMTE9OR19NQVg7CiYjNDM7fQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwLAomIzQzOwkJCQkJICAgIGxvZmZfdCBvZmZzZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOyNlbmRpZgkvKiBDT05GSUdfRlNfVkVSSVRZICovCiYjNDM7CiYjNDM7I2VuZGlmCS8qIF9fWEZTX0ZTVkVSSVRZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19oZWFsdGguYyBiL2ZzL3hmcy94ZnNfaGVhbHRoLmMKaW5kZXggMjM5Yjg0M2U4M2Q0MmEuLmJlNjY3NjBmYjEyMGY3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2hlYWx0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaGVhbHRoLmMKQEAgLTYyNSw2ICYjNDM7NjI1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb2N0bF9zaWNrX21hcCBpbm9fbWFwW10gPSB7CiAJeyBYRlNfU0lDS19JTk9fRElSX1pBUFBFRCwJWEZTX0JTX1NJQ0tfRElSIH0sCiAJeyBYRlNfU0lDS19JTk9fU1lNTElOS19aQVBQRUQsCVhGU19CU19TSUNLX1NZTUxJTksgfSwKIAl7IFhGU19TSUNLX0lOT19ESVJUUkVFLAlYRlNfQlNfU0lDS19ESVJUUkVFIH0sCiYjNDM7CXsgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZLAlYRlNfQlNfU0lDS19GU1ZFUklUWSB9LAogfTsKIAogLyogRmlsbCBvdXQgYnVsa3N0YXQgaGVhbHRoIGluZm8uICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmgKaW5kZXggMzRjMTAzOGViZmNkZTEuLjE3Y2UwODM1OTFmNDA4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19pbm9kZS5oCkBAIC00MTksNiAmIzQzOzQxOSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lub2RlX2Nhbl9zd19hdG9taWNfd3JpdGUoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApCiAgKi8KICNkZWZpbmUgWEZTX0lSRU1BUFBJTkcJCSgxVSAmbHQ7Jmx0OyAxNSkKIAomIzQzOy8qCiYjNDM7ICogZnMtdmVyaXR5JiMzOTtzIE1lcmtsZSB0cmVlIGlzIHVuZGVyIGNvbnN0cnVjdGlvbi4gVGhlIGZpbGUgaXMgcmVhZC1vbmx5LCB0aGUKJiM0MzsgKiBvbmx5IHdyaXRlcyBoYXBwZW5pbmcgYXJlIGZvciB0aGUgZnN2ZXJpdHkgbWV0YWRhdGEuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTgkoMVUgJmx0OyZsdDsgMTYpCiYjNDM7CiAvKiBBbGwgaW5vZGUgc3RhdGUgZmxhZ3MgcmVsYXRlZCB0byBpbm9kZSByZWNsYWltLiAqLwogI2RlZmluZSBYRlNfQUxMX0lSRUNMQUlNX0ZMQUdTCShYRlNfSVJFQ0xBSU1BQkxFIHwgXAogCQkJCSBYRlNfSVJFQ0xBSU0gfCBcCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvY3RsLmMgYi9mcy94ZnMveGZzX2lvY3RsLmMKaW5kZXggMWI1MzcwMWJlYmVhMWEuLmZjNzg2MGE4YjVhYmIxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lvY3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19pb2N0bC5jCkBAIC00OSw2ICYjNDM7NDksNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvbW91bnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWxlYXR0ci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mc3Zlcml0eS5oJmd0OwogCiAvKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIHBvc2l0aXZlIGVycm9yICovCiBpbnQKQEAgLTE0NjYsNiAmIzQzOzE0NjcsMTkgQEAgeGZzX2ZpbGVfaW9jdGwoCiAJY2FzZSBYRlNfSU9DX1ZFUklGWV9NRURJQToKIAkJcmV0dXJuIHhmc19pb2NfdmVyaWZ5X21lZGlhKGZpbHAsIGFyZyk7CiAKJiM0MzsJY2FzZSBGU19JT0NfRU5BQkxFX1ZFUklUWToKJiM0MzsJCWlmICgheGZzX2hhc192ZXJpdHkobXApKQomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJCXJldHVybiBmc3Zlcml0eV9pb2N0bF9lbmFibGUoZmlscCwgYXJnKTsKJiM0MzsJY2FzZSBGU19JT0NfTUVBU1VSRV9WRVJJVFk6CiYjNDM7CQlpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQlyZXR1cm4gZnN2ZXJpdHlfaW9jdGxfbWVhc3VyZShmaWxwLCBhcmcpOwomIzQzOwljYXNlIEZTX0lPQ19SRUFEX1ZFUklUWV9NRVRBREFUQToKJiM0MzsJCWlmICgheGZzX2hhc192ZXJpdHkobXApKQomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJCXJldHVybiBmc3Zlcml0eV9pb2N0bF9yZWFkX21ldGFkYXRhKGZpbHAsIGFyZyk7CiYjNDM7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9UVFk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb21hcC5jIGIvZnMveGZzL3hmc19pb21hcC5jCmluZGV4IDIyNWMzZGU4OGQwM2IxLi5hNGQ1NjU2NjE5ODkzMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaW9tYXAuYwpAQCAtMzIsNiAmIzQzOzMyLDggQEAKICNpbmNsdWRlICYjMzQ7eGZzX3J0Yml0bWFwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfaWNhY2hlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfem9uZV9hbGxvYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19mc3Zlcml0eS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnN2ZXJpdHkuaCZndDsKIAogI2RlZmluZSBYRlNfQUxMT0NfQUxJR04obXAsIG9mZikgXAogCSgoKG9mZikgJmd0OyZndDsgbXAtJmd0O21fYWxsb2NzaXplX2xvZykgJmx0OyZsdDsgbXAtJmd0O21fYWxsb2NzaXplX2xvZykKQEAgLTg4Myw2ICYjNDM7ODg1LDkgQEAgeGZzX2RpcmVjdF93cml0ZV9pb21hcF9iZWdpbigKIAlpZiAoZmxhZ3MgJmFtcDsgSU9NQVBfQVRPTUlDKQogCQlpb21hcF9mbGFncyB8PSBJT01BUF9GX0FUT01JQ19CSU87CiAKJiM0MzsJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKQomIzQzOwkJaW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTsKJiM0MzsKIAkvKgogCSAqIENPVyB3cml0ZXMgbWF5IGFsbG9jYXRlIGRlbGFsbG9jIHNwYWNlIG9yIGNvbnZlcnQgdW53cml0dGVuIENPVwogCSAqIGV4dGVudHMsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHRha2UgdGhlIGxvY2sgZXhjbHVzaXZlbHkgaGVyZS4KQEAgLTE1ODksNyAmIzQzOzE1OTQsOCBAQCB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oCiAJbG9mZl90CQkJY291bnQsCiAJdW5zaWduZWQJCWZsYWdzLAogCXN0cnVjdCBpb21hcAkJKmlvbWFwLAotCXN0cnVjdCBpb21hcAkJKnNyY21hcCkKJiM0MzsJc3RydWN0IGlvbWFwCQkqc3JjbWFwLAomIzQzOwl1MTYJCQlpb21hcF9mbGFncykKIHsKIAlzdHJ1Y3QgaW9tYXBfaXRlcgkqaXRlciA9CiAJCWNvbnRhaW5lcl9vZihpb21hcCwgc3RydWN0IGlvbWFwX2l0ZXIsIGlvbWFwKTsKQEAgLTE1OTksNyAmIzQzOzE2MDUsNiBAQCB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oCiAJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0mZ3Q7aV9tb3VudDsKIAl4ZnNfZmlsZW9mZl90CQlvZmZzZXRfZnNiID0gWEZTX0JfVE9fRlNCVChtcCwgb2Zmc2V0KTsKIAl4ZnNfZmlsZW9mZl90CQllbmRfZnNiID0geGZzX2lvbWFwX2VuZF9mc2IobXAsIG9mZnNldCwgY291bnQpOwotCXUxNgkJCWlvbWFwX2ZsYWdzID0gSU9NQVBfRl9TSEFSRUQ7CiAJdW5zaWduZWQgaW50CQlsb2NrbW9kZSA9IFhGU19JTE9DS19FWENMOwogCXhmc19maWxibGtzX3QJCWNvdW50X2ZzYjsKIAl4ZnNfZXh0bGVuX3QJCWluZGxlbjsKQEAgLTE2NjIsNyAmIzQzOzE2NjcsOCBAQCB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oCiAJCQkJc21hcC5icl9zdGFydG9mZiAmIzQzOyBzbWFwLmJyX2Jsb2NrY291bnQpOwogCQkJeGZzX3RyaW1fZXh0ZW50KCZhbXA7c21hcCwgb2Zmc2V0X2ZzYiwKIAkJCQkJZW5kX2ZzYiAtIG9mZnNldF9mc2IpOwotCQkJZXJyb3IgPSB4ZnNfYm1idF90b19pb21hcChpcCwgc3JjbWFwLCAmYW1wO3NtYXAsIGZsYWdzLCAwLAomIzQzOwkJCWVycm9yID0geGZzX2JtYnRfdG9faW9tYXAoaXAsIHNyY21hcCwgJmFtcDtzbWFwLCBmbGFncywKJiM0MzsJCQkJCWlvbWFwX2ZsYWdzLAogCQkJCQl4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIDApKTsKIAkJCWlmIChlcnJvcikKIAkJCQlnb3RvIG91dF91bmxvY2s7CkBAIC0xNjcyLDYgJiM0MzsxNjc4LDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKAogCWlmICghaXAtJmd0O2lfY293ZnApCiAJCXhmc19pZm9ya19pbml0X2NvdyhpcCk7CiAKJiM0MzsJaW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9TSEFSRUQ7CiYjNDM7CiAJaWYgKCF4ZnNfaWV4dF9sb29rdXBfZXh0ZW50KGlwLCBpcC0mZ3Q7aV9jb3dmcCwgb2Zmc2V0X2ZzYiwgJmFtcDtpY3VyLCAmYW1wO2dvdCkpCiAJCWdvdC5icl9zdGFydG9mZiA9IGVuZF9mc2I7CiAJaWYgKGdvdC5icl9zdGFydG9mZiAmbHQ7PSBvZmZzZXRfZnNiKSB7CkBAIC0xODAzLDkgJiM0MzsxODExLDEyIEBAIHhmc19idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbigKIAlpZiAoeGZzX2lzX3NodXRkb3duKG1wKSkKIAkJcmV0dXJuIC1FSU87CiAKJiM0MzsJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKQomIzQzOwkJaW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTsKJiM0MzsKIAlpZiAoeGZzX2lzX3pvbmVkX2lub2RlKGlwKSkKIAkJcmV0dXJuIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LAotCQkJCWNvdW50LCBmbGFncywgaW9tYXAsIHNyY21hcCk7CiYjNDM7CQkJCWNvdW50LCBmbGFncywgaW9tYXAsIHNyY21hcCwgaW9tYXBfZmxhZ3MpOwogCiAJLyogd2UgY2FuJiMzOTt0IHVzZSBkZWxheWVkIGFsbG9jYXRpb25zIHdoZW4gdXNpbmcgZXh0ZW50IHNpemUgaGludHMgKi8KIAlpZiAoeGZzX2dldF9leHRzel9oaW50KGlwKSkKQEAgLTIxOTEsMTIgJiM0MzsyMjAyLDE3IEBAIHhmc19yZWFkX2lvbWFwX2JlZ2luKAogCWJvb2wJCQlzaGFyZWQgPSBmYWxzZTsKIAl1bnNpZ25lZCBpbnQJCWxvY2ttb2RlID0gWEZTX0lMT0NLX1NIQVJFRDsKIAl1NjQJCQlzZXE7CiYjNDM7CXVuc2lnbmVkIGludAkJaW9tYXBfZmxhZ3MgPSAwOwogCiAJQVNTRVJUKCEoZmxhZ3MgJmFtcDsgKElPTUFQX1dSSVRFIHwgSU9NQVBfWkVSTykpKTsKIAogCWlmICh4ZnNfaXNfc2h1dGRvd24obXApKQogCQlyZXR1cm4gLUVJTzsKIAomIzQzOwlpZiAoZnN2ZXJpdHlfYWN0aXZlKGlub2RlKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAob2Zmc2V0ICZndDs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKSkKJiM0MzsJCWlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7CiYjNDM7CiAJZXJyb3IgPSB4ZnNfaWxvY2tfZm9yX2lvbWFwKGlwLCBmbGFncywgJmFtcDtsb2NrbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CkBAIC0yMjEwLDggJiM0MzsyMjI2LDkgQEAgeGZzX3JlYWRfaW9tYXBfYmVnaW4oCiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJdHJhY2VfeGZzX2lvbWFwX2ZvdW5kKGlwLCBvZmZzZXQsIGxlbmd0aCwgWEZTX0RBVEFfRk9SSywgJmFtcDtpbWFwKTsKLQlyZXR1cm4geGZzX2JtYnRfdG9faW9tYXAoaXAsIGlvbWFwLCAmYW1wO2ltYXAsIGZsYWdzLAotCQkJCSBzaGFyZWQgPyBJT01BUF9GX1NIQVJFRCA6IDAsIHNlcSk7CiYjNDM7CWlvbWFwX2ZsYWdzIHw9IHNoYXJlZCA/IElPTUFQX0ZfU0hBUkVEIDogMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgJmFtcDtpbWFwLCBmbGFncywgaW9tYXBfZmxhZ3MsIHNlcSk7CiB9CiAKIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgeGZzX3JlYWRfaW9tYXBfb3BzID0gewpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb3BzLmMgYi9mcy94ZnMveGZzX2lvcHMuYwppbmRleCA2MzM5ZjQ5NTZlY2IzOS4uNzA2MzdjZGNjMjk5NzIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaW9wcy5jCkBAIC0zNSw2ICYjNDM7MzUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NlY3VyaXR5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXZlcnNpb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWVtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnN2ZXJpdHkuaCZndDsKIAogLyoKICAqIERpcmVjdG9yaWVzIGhhdmUgZGlmZmVyZW50IGxvY2sgb3JkZXIgdy5yLnQuIG1tYXBfbG9jayBjb21wYXJlZCB0byByZWd1bGFyCkBAIC01ODAsNiAmIzQzOzU4MSwxMCBAQCB4ZnNfcmVwb3J0X2Rpb2FsaWduKAogCXN0cnVjdCBibG9ja19kZXZpY2UJKmJkZXYgPSB0YXJnZXQtJmd0O2J0X2JkZXY7CiAKIAlzdGF0LSZndDtyZXN1bHRfbWFzayB8PSBTVEFUWF9ESU9BTElHTiB8IFNUQVRYX0RJT19SRUFEX0FMSUdOOwomIzQzOwomIzQzOwlpZiAoZnN2ZXJpdHlfYWN0aXZlKFZGU19JKGlwKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJc3RhdC0mZ3Q7ZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChiZGV2KSAmIzQzOyAxOwogCiAJLyoKQEAgLTEzNzAsNiAmIzQzOzEzNzUsOCBAQCB4ZnNfaW5vZGVfc2hvdWxkX2VuYWJsZV9kYXgoCiAJCXJldHVybiBmYWxzZTsKIAlpZiAoIXhmc19pbm9kZV9zdXBwb3J0c19kYXgoaXApKQogCQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChpcC0mZ3Q7aV9kaWZsYWdzMiAmYW1wOyBYRlNfRElGTEFHMl9WRVJJVFkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJaWYgKHhmc19oYXNfZGF4X2Fsd2F5cyhpcC0mZ3Q7aV9tb3VudCkpCiAJCXJldHVybiB0cnVlOwogCWlmIChpcC0mZ3Q7aV9kaWZsYWdzMiAmYW1wOyBYRlNfRElGTEFHMl9EQVgpCkBAIC0xMzk4LDEyICYjNDM7MTQwNSwxNSBAQCB4ZnNfZGlmbGFnc190b19pZmxhZ3MoCiAJCWZsYWdzIHw9IFNfTk9BVElNRTsKIAlpZiAoaW5pdCAmYW1wOyZhbXA7IHhmc19pbm9kZV9zaG91bGRfZW5hYmxlX2RheChpcCkpCiAJCWZsYWdzIHw9IFNfREFYOwomIzQzOwlpZiAoeGZsYWdzICZhbXA7IEZTX1hGTEFHX1ZFUklUWSkKJiM0MzsJCWZsYWdzIHw9IFNfVkVSSVRZOwogCiAJLyoKIAkgKiBTX0RBWCBjYW4gb25seSBiZSBzZXQgZHVyaW5nIGlub2RlIGluaXRpYWxpemF0aW9uIGFuZCBpcyBuZXZlciBzZXQgYnkKIAkgKiB0aGUgVkZTLCBzbyB3ZSBjYW5ub3QgbWFzayBvZmYgU19EQVggaW4gaV9mbGFncy4KIAkgKi8KLQlpbm9kZS0mZ3Q7aV9mbGFncyAmYW1wOz0gfihTX0lNTVVUQUJMRSB8IFNfQVBQRU5EIHwgU19TWU5DIHwgU19OT0FUSU1FKTsKJiM0MzsJaW5vZGUtJmd0O2lfZmxhZ3MgJmFtcDs9CiYjNDM7CQl+KFNfSU1NVVRBQkxFIHwgU19BUFBFTkQgfCBTX1NZTkMgfCBTX05PQVRJTUUgfCBTX1ZFUklUWSk7CiAJaW5vZGUtJmd0O2lfZmxhZ3MgfD0gZmxhZ3M7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jIGIvZnMveGZzL3hmc19tZXNzYWdlLmMKaW5kZXggMDI0M2U1MDlhNDY4OTEuLjQ0YjEzZDQ2MDQ5YzYyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21lc3NhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX21lc3NhZ2UuYwpAQCAtMTQ5LDYgJiM0MzsxNDksMTAgQEAgeGZzX3dhcm5fZXhwZXJpbWVudGFsKAogCQkJLm9wc3RhdGUJPSBYRlNfT1BTVEFURV9XQVJORURfTEFSUCwKIAkJCS5uYW1lCQk9ICYjMzQ7bG9nZ2VkIGV4dGVuZGVkIGF0dHJpYnV0ZXMmIzM0OywKIAkJfSwKJiM0MzsJCVtYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZXSA9IHsKJiM0MzsJCQkub3BzdGF0ZQk9IFhGU19PUFNUQVRFX1dBUk5FRF9GU1ZFUklUWSwKJiM0MzsJCQkubmFtZQkJPSAmIzM0O2ZzdmVyaXR5JiMzNDssCiYjNDM7CQl9LAogCX07CiAJQVNTRVJUKGZlYXQgJmd0Oz0gMCAmYW1wOyZhbXA7IGZlYXQgJmx0OyBYRlNfRVhQRVJJTUVOVEFMX01BWCk7CiAJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUoZmVhdHVyZXMpICE9IFhGU19FWFBFUklNRU5UQUxfTUFYKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5oIGIvZnMveGZzL3hmc19tZXNzYWdlLmgKaW5kZXggODExYjg4NWY0MWMzNWEuLjM2NGZjYzdlNDJiMDg0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21lc3NhZ2UuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX21lc3NhZ2UuaApAQCAtOTMsNiAmIzQzOzkzLDcgQEAgdm9pZCB4ZnNfYnVmX2FsZXJ0X3JhdGVsaW1pdGVkKHN0cnVjdCB4ZnNfYnVmICpicCwgY29uc3QgY2hhciAqcmxtc2csCiBlbnVtIHhmc19leHBlcmltZW50YWxfZmVhdCB7CiAJWEZTX0VYUEVSSU1FTlRBTF9TSFJJTkssCiAJWEZTX0VYUEVSSU1FTlRBTF9MQVJQLAomIzQzOwlYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZLAogCiAJWEZTX0VYUEVSSU1FTlRBTF9NQVgsCiB9OwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3VudC5oCmluZGV4IDY2YTAyZDFiOWFkN2ExLi44NzVjOWIwZjhlOTkxZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfbW91bnQuaApAQCAtMzg4LDYgJiM0MzszODgsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfbW91bnQgewogI2RlZmluZSBYRlNfRkVBVF9FWENIQU5HRV9SQU5HRQkoMVVMTCAmbHQ7Jmx0OyAyNykJLyogZXhjaGFuZ2UgcmFuZ2UgKi8KICNkZWZpbmUgWEZTX0ZFQVRfTUVUQURJUgkoMVVMTCAmbHQ7Jmx0OyAyOCkJLyogbWV0YWRhdGEgZGlyZWN0b3J5IHRyZWUgKi8KICNkZWZpbmUgWEZTX0ZFQVRfWk9ORUQJCSgxVUxMICZsdDsmbHQ7IDI5KQkvKiB6b25lZCBSVCBkZXZpY2UgKi8KJiM0MzsjZGVmaW5lIFhGU19GRUFUX1ZFUklUWQkJKDFVTEwgJmx0OyZsdDsgMzApCS8qIGZzLXZlcml0eSAqLwogCiAvKiBNb3VudCBmZWF0dXJlcyAqLwogI2RlZmluZSBYRlNfRkVBVF9OT0xJRkVUSU1FCSgxVUxMICZsdDsmbHQ7IDQ3KQkvKiBkaXNhYmxlIGxpZmV0aW1lIGhpbnRzICovCkBAIC00NDUsNiAmIzQzOzQ0Niw3IEBAIF9fWEZTX0hBU19GRUFUKGV4Y2hhbmdlX3JhbmdlLCBFWENIQU5HRV9SQU5HRSkKIF9fWEZTX0hBU19GRUFUKG1ldGFkaXIsIE1FVEFESVIpCiBfX1hGU19IQVNfRkVBVCh6b25lZCwgWk9ORUQpCiBfX1hGU19IQVNfRkVBVChub2xpZmV0aW1lLCBOT0xJRkVUSU1FKQomIzQzO19fWEZTX0hBU19GRUFUKHZlcml0eSwgVkVSSVRZKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2hhc19ydGdyb3Vwcyhjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCkKIHsKQEAgLTU4Miw2ICYjNDM7NTg0LDggQEAgX19YRlNfSEFTX0ZFQVQobm91dWlkLCBOT1VVSUQpCiAjZGVmaW5lIFhGU19PUFNUQVRFX1JFU1VNSU5HX1FVT1RBT04JMTgKIC8qIChab25lZCkgR0MgaXMgaW4gcHJvZ3Jlc3MgKi8KICNkZWZpbmUgWEZTX09QU1RBVEVfWk9ORUdDX1JVTk5JTkcJMjAKJiM0MzsvKiBLZXJuZWwgaGFzIGxvZ2dlZCBhIHdhcm5pbmcgYWJvdXQgZnN2ZXJpdHkgc3VwcG9ydCAqLwomIzQzOyNkZWZpbmUgWEZTX09QU1RBVEVfV0FSTkVEX0ZTVkVSSVRZCTIxCiAKICNkZWZpbmUgX19YRlNfSVNfT1BTVEFURShuYW1lLCBOQU1FKSBcCiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lzXyAjIyBuYW1lIChzdHJ1Y3QgeGZzX21vdW50ICptcCkgXApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19zdXBlci5jIGIvZnMveGZzL3hmc19zdXBlci5jCmluZGV4IDg1MzFkNTI2ZmM0NDA5Li5hNzc3NGQyZDZiMjNmYyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfc3VwZXIuYwpAQCAtMzAsNiAmIzQzOzMwLDcgQEAKICNpbmNsdWRlICYjMzQ7eGZzX2ZpbGVzdHJlYW0uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hmc19xdW90YS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX3N5c2ZzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2ZzdmVyaXR5LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfb25kaXNrLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfcm1hcF9pdGVtLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfcmVmY291bnRfaXRlbS5oJiMzNDsKQEAgLTE2ODksNiAmIzQzOzE2OTAsOSBAQCB4ZnNfZnNfZmlsbF9zdXBlcigKIAlzYi0mZ3Q7c19xdW90YV90eXBlcyA9IFFUWVBFX01BU0tfVVNSIHwgUVRZUEVfTUFTS19HUlAgfCBRVFlQRV9NQVNLX1BSSjsKICNlbmRpZgogCXNiLSZndDtzX29wID0gJmFtcDt4ZnNfc3VwZXJfb3BlcmF0aW9uczsKJiM0MzsjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWQomIzQzOwlzYi0mZ3Q7c192b3AgPSAmYW1wO3hmc19mc3Zlcml0eV9vcHM7CiYjNDM7I2VuZGlmCiAKIAkvKgogCSAqIERlbGF5IG1vdW50IHdvcmsgaWYgdGhlIGRlYnVnIGhvb2sgaXMgc2V0LiBUaGlzIGlzIGRlYnVnCkBAIC0xOTQxLDYgJiM0MzsxOTQ1LDkgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoCiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9maWxlc3RyZWFtX3VubW91bnQ7CiAKJiM0MzsJaWYgKHhmc19oYXNfdmVyaXR5KG1wKSkKJiM0MzsJCXhmc193YXJuX2V4cGVyaW1lbnRhbChtcCwgWEZTX0VYUEVSSU1FTlRBTF9GU1ZFUklUWSk7CiYjNDM7CiAJcm9vdCA9IGlncmFiKFZGU19JKG1wLSZndDttX3Jvb3RpcCkpOwogCWlmICghcm9vdCkgewogCQllcnJvciA9IC1FTk9FTlQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmggYi9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmgKaW5kZXggNmM0NjdkZWQ5NzUxZmMuLmY5NDMzMzMyYzI3NGJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oCkBAIC0xMjQsNiAmIzQzOzEyNCw4IEBAIHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHsKIAkgKiBAYnVmOiB0aGUgTWVya2xlIHRyZWUgYmxvY2sgdG8gd3JpdGUKIAkgKiBAcG9zOiB0aGUgcG9zaXRpb24gb2YgdGhlIGJsb2NrIGluIHRoZSBNZXJrbGUgdHJlZSAoaW4gYnl0ZXMpCiAJICogQHNpemU6IHRoZSBNZXJrbGUgdHJlZSBibG9jayBzaXplIChpbiBieXRlcykKJiM0MzsJICogQHplcm9fZGlnZXN0OiB0aGUgaGFzaCBvZiB0aGUgYWxsLXplcm9lcyBibG9jawomIzQzOwkgKiBAZGlnZXN0X3NpemU6IHNpemUgb2YgemVyb19kaWdlc3QsIGluIGJ5dGVzCiAJICoKIAkgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIGJldHdlZW4gLSZndDtiZWdpbl9lbmFibGVfdmVyaXR5KCkgYW5kCiAJICogLSZndDtlbmRfZW5hYmxlX3Zlcml0eSgpLgpAQCAtMTMxLDcgJiM0MzsxMzMsOSBAQCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB7CiAJICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlCiAJICovCiAJaW50ICgqd3JpdGVfbWVya2xlX3RyZWVfYmxvY2spKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsCi0JCQkJICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKTsKJiM0MzsJCQkJICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLAomIzQzOwkJCQkgICAgICAgY29uc3QgdTggKnplcm9fZGlnZXN0LAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKTsKIH07CiAKICNpZmRlZiBDT05GSUdfRlNfVkVSSVRZCkBAIC0zMTcsMTAgJiM0MzszMjEsMTQgQEAgc3RhdGljIGlubGluZSBpbnQgZnN2ZXJpdHlfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogCXJldHVybiAwOwogfQogCiYjNDM7aW50IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MzsKIHZvaWQgZnN2ZXJpdHlfY2xlYW51cF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogc3RydWN0IHBhZ2UgKmdlbmVyaWNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgpOwogdm9pZCBnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwomIzQzO2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwKJiM0MzsJCQkgICAgbG9mZl90IHBvcyk7CiAKICNlbmRpZgkvKiBfTElOVVhfRlNWRVJJVFlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oCmluZGV4IDU2YjQzZDU5NGU2ZTI5Li4zNmZjOTMxMzgyYTg3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaW9tYXAuaApAQCAtMTAsNiAmIzQzOzEwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9tbV90eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Jsa2Rldi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZvbGlvX2JhdGNoLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpc3Rfc29ydC5oJmd0OwogCiBzdHJ1Y3QgYWRkcmVzc19zcGFjZTsKIHN0cnVjdCBmaWVtYXBfZXh0ZW50X2luZm87CkBAIC00ODgsNyAmIzQzOzQ4OSw5IEBAIHN0cnVjdCBpb21hcF9pb2VuZCAqaW9tYXBfc3BsaXRfaW9lbmQoc3RydWN0IGlvbWFwX2lvZW5kICppb2VuZCwKIHZvaWQgaW9tYXBfZmluaXNoX2lvZW5kcyhzdHJ1Y3QgaW9tYXBfaW9lbmQgKmlvZW5kLCBpbnQgZXJyb3IpOwogdm9pZCBpb21hcF9pb2VuZF90cnlfbWVyZ2Uoc3RydWN0IGlvbWFwX2lvZW5kICppb2VuZCwKIAkJc3RydWN0IGxpc3RfaGVhZCAqbW9yZV9pb2VuZHMpOwotdm9pZCBpb21hcF9zb3J0X2lvZW5kcyhzdHJ1Y3QgbGlzdF9oZWFkICppb2VuZF9saXN0KTsKJiM0MztpbnQgaW9tYXBfaW9lbmRfY29tcGFyZSh2b2lkICpwcml2LCBjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICphLAomIzQzOwkJY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqYik7CiYjNDM7dm9pZCBpb21hcF9zb3J0X2lvZW5kcyhzdHJ1Y3QgbGlzdF9oZWFkICppb2VuZF9saXN0LCBsaXN0X2NtcF9mdW5jX3QgY21wKTsKIHNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCWxvZmZfdCBwb3MsIGxvZmZfdCBlbmRfcG9zLCB1bnNpZ25lZCBpbnQgZGlydHlfbGVuKTsKIGludCBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0KHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIGludCBlcnJvcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTY5CgkJCQkJCQlvdXRwdXQ6IDMzOAoJCQkJCQkJdGhvdWdodHM6IDEyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWEZTIGZzLXZlcml0eSBQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGFkZGluZyBmcy12ZXJpdHkgc3VwcG9ydCB0byBYRlMuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBhZGRpdGlvbiwgc28gbGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIFJpZ2h0IGF3YXksIEkmIzM5O20gbm90aWNpbmcgbW9kaWZpY2F0aW9ucyBhY3Jvc3MgbXVsdGlwbGUgZmlsZSBzeXN0ZW1zIOKAkyBgZnMveGZzL2AsIGBmcy92ZXJpdHkvYCwgYW5kIGV2ZW4gdG91Y2hlcyBpbiBgZnMvZXh0NC9gLCBgZnMvYnRyZnMvYCwgYW5kIGBmcy9mMmZzL2AuIFRoZSBmYWN0IHRoYXQgYGZzL3Zlcml0eS9gIGlzIGJlaW5nIHRvdWNoZWQgaXMgaW50ZXJlc3RpbmcsIGFsb25nIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBgZnMveGZzL3hmc19mc3Zlcml0eS5jYC4gQWRkaXRpb25hbGx5LCB3ZSBzZWUgY2hhbmdlcyBpbiBgZnMvYXR0ci5jYCwgYGZzL3N0YXQuY2AsIGBmcy9maWxlX2F0dHIuY2AsIGFuZCBgZnMvaW9tYXAvaW9lbmQuY2Ag4oCTIHRoaXMgdGhpbmcmIzM5O3MgZ290IGl0cyBmaW5nZXJzIGluIGEgbG90IG9mIHBpZXMuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBlbmFibGluZyBmcy12ZXJpdHkgYXMgYSBuZXcgZmVhdHVyZSBmb3IgWEZTLCB3aGljaCBtZWFucyBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlIGFuZCwgdGhlcmVmb3JlLCBmdXp6YWJsZS4gTXkgaW5pdGlhbCBzdHJhdGVneSBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBgQ09ORklHX0ZTX1ZFUklUWWAgaXMgYW4gb2J2aW91cyBwcmVyZXF1aXNpdGUuIEFuZCwgb2YgY291cnNlLCBgQ09ORklHX1hGU19GU2AgaXMgcmVxdWlyZWQuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY29yZSBmdW5jdGlvbnMgd2UgbmVlZCB0byBmb2N1cyBvbi4gSSYjMzk7bSBzZWVpbmcgYSBoYW5kZnVsIHRoYXQgbG9vayBwYXJ0aWN1bGFybHkgcmVsZXZhbnQ6IGB4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3JgLCBgeGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3JgLCBgeGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YWAsIGB4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbmAsIGB4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlYCwgYHhmc19mc3Zlcml0eV9lbmRfZW5hYmxlYCwgYHhmc19mc3Zlcml0eV9yZWFkX21lcmtsZWAsIGB4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlYCwgYHhmc19mc3Zlcml0eV93cml0ZV9tZXJrbGVgLCBhcyB3ZWxsIGFzIHN0YW5kYXJkIHJlYWQvd3JpdGUvb3BlbiByb3V0aW5lcyBsaWtlIGB4ZnNfZmlsZV9idWZmZXJlZF9yZWFkYCwgYHhmc19maWxlX2Rpb19yZWFkYCwgYHhmc19maWxlX3JlYWRfaXRlcmAsIGB4ZnNfZmlsZV9vcGVuYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldGAgYW5kIGB4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhYC4KCkkgd2FudCB0byBjb25maXJtIHdoZXRoZXIgYENPTkZJR19GU19WRVJJVFlgIGlzIHRoZSBvbmx5IGNvbmZpZyB0aGF0JiMzOTtzIHJlcXVpcmVkLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgWEZTIEtjb25maWcgb3IgTWFrZWZpbGUuIFRoZSBwYXRjaCBhZGRzIGB4ZnMtJChDT05GSUdfRlNfVkVSSVRZKSAmIzQzOz0geGZzX2ZzdmVyaXR5Lm9gLCBzbyB0aGF0IGNvbmZpcm1zIGl0LgoKTm93LCBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBub3RhYmxlIGNoYW5nZXMgaW4gdGhlIGV4aXN0aW5nIGBmcy92ZXJpdHkvYCBjb2RlLiBgZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvYCwgYGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkYCwgYW5kIGBmc3Zlcml0eV9maWxsX3plcm9oYXNoYCBsb29rIGxpa2UgdGhleSBjb3VsZCBiZSB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBpbnRlcmFjdGlvbnMuCgpJJiMzOTttIGFsc28gc2VlaW5nIHNvbWUgZnMtdmVyaXR5LXJlbGF0ZWQgYWRkaXRpb25zIG9yIG1vZGlmaWNhdGlvbnMgaW4gb3RoZXIgWEZTIHN1Yi1zeXN0ZW1zLiBJbiBgZnMveGZzL3NjcnViL2NvbW1vbi5jYCwgdGhlcmUmIzM5O3MgYHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5YCBhbmQgYHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbmAuIEluIGBmcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNgLCB0aGVyZSBpcyBgeHJlcF9pbm9kZV92ZXJpdHlgLiBJbiBgZnMveGZzL3hmc19hb3BzLmNgLCBJIHNlZSBgeGZzX3JlYWRfaW9lbmRfY29tcGFyZWAsIGB4ZnNfZW5kX2lvZW5kX3JlYWRgLCBhbmQgYHhmc19pb21hcF93cml0ZXBhZ2VzYCBiZWluZyB0b3VjaGVkLiBBbmQgZmluYWxseSwgSSBzZWUgYHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbmAgaW4gYGZzL3hmcy94ZnNfaW9tYXAuY2AsIGFsb25nIHdpdGggYHhmc19maWxlX2J1ZmZlcmVkX3JlYWRgIGluIGBmcy94ZnMveGZzX2ZpbGUuY2AuCgpPa2F5LCBiYXNlZCBvbiB0aGlzIGluaXRpYWwgc3dlZXAsIEkmIzM5O2xsIGNvbXBpbGUgYSBgRm9jdXNTeW1ib2xzYCBsaXN0IGZvciB0aGUgZnV6emluZyBjYW1wYWlnbi4gSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlOgoKLSBgeGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZWAKLSBgeGZzX2ZzdmVyaXR5X2VuZF9lbmFibGVgCi0gYHhmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvcmAKLSBgeGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlYAotIGB4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlYAotIGB4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlYAotIGB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhYAotIGB4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbmAKLSBgeGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3JgCi0gYHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5YAotCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNfVkVSSVRZJiMzNDssCiAgICAmIzM0O1hGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmc19mc3Zlcml0eV9iZWdpbl9lbmFibGUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9yZWFkX21lcmtsZSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbiYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvciYjMzQ7LAogICAgJiMzNDt4Y2hrX2lub2RlX3NldHVwX3Zlcml0eSYjMzQ7LAogICAgJiMzNDt4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4mIzM0OywKICAgICYjMzQ7eHJlcF9pbm9kZV92ZXJpdHkmIzM0OywKICAgICYjMzQ7eGZzX3JlYWRfaW9lbmRfY29tcGFyZSYjMzQ7LAogICAgJiMzNDt4ZnNfZW5kX2lvZW5kX3JlYWQmIzM0OywKICAgICYjMzQ7eGZzX2lvbWFwX3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7ZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvJiMzNDssCiAgICAmIzM0O2ZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgZnMtdmVyaXR5IHN1cHBvcnQgZm9yIHRoZSBYRlMgZmlsZXN5c3RlbS4gSXQgaW50cm9kdWNlcyBhIG5ldyBmaWxlIGBmcy94ZnMveGZzX2ZzdmVyaXR5LmNgIHdpdGggdGhlIGNvcmUgbG9naWMsIG1vZGlmaWVzIFhGUyBJL08gcGF0aHMsIGFuZCBpbnRlZ3JhdGVzIHdpdGggdGhlIGdlbmVyaWMgZnMtdmVyaXR5IGxheWVyLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNfVkVSSVRZJiMzNDssCiAgICAmIzM0O1hGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmc19mc3Zlcml0eV9iZWdpbl9lbmFibGUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9yZWFkX21lcmtsZSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbiYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvciYjMzQ7LAogICAgJiMzNDt4Y2hrX2lub2RlX3NldHVwX3Zlcml0eSYjMzQ7LAogICAgJiMzNDt4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4mIzM0OywKICAgICYjMzQ7eHJlcF9pbm9kZV92ZXJpdHkmIzM0OywKICAgICYjMzQ7eGZzX3JlYWRfaW9lbmRfY29tcGFyZSYjMzQ7LAogICAgJiMzNDt4ZnNfZW5kX2lvZW5kX3JlYWQmIzM0OywKICAgICYjMzQ7eGZzX2lvbWFwX3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7ZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvJiMzNDssCiAgICAmIzM0O2ZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgZnMtdmVyaXR5IHN1cHBvcnQgZm9yIHRoZSBYRlMgZmlsZXN5c3RlbS4gSXQgaW50cm9kdWNlcyBhIG5ldyBmaWxlIGBmcy94ZnMveGZzX2ZzdmVyaXR5LmNgIHdpdGggdGhlIGNvcmUgbG9naWMsIG1vZGlmaWVzIFhGUyBJL08gcGF0aHMsIGFuZCBpbnRlZ3JhdGVzIHdpdGggdGhlIGdlbmVyaWMgZnMtdmVyaXR5IGxheWVyLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDEzOjU4OjQyLjUxNDk1NTAyNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjY2MTY4MDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTX1ZFUklUWVwiLFxuICAgIFwiWEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZVwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X2VuZF9lbmFibGVcIixcbiAgICBcInhmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvclwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlblwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3JcIixcbiAgICBcInhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5XCIsXG4gICAgXCJ4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW5cIixcbiAgICBcInhyZXBfaW5vZGVfdmVyaXR5XCIsXG4gICAgXCJ4ZnNfcmVhZF9pb2VuZF9jb21wYXJlXCIsXG4gICAgXCJ4ZnNfZW5kX2lvZW5kX3JlYWRcIixcbiAgICBcInhmc19pb21hcF93cml0ZXBhZ2VzXCIsXG4gICAgXCJmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm9cIixcbiAgICBcImZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBmcy12ZXJpdHkgc3VwcG9ydCBmb3IgdGhlIFhGUyBmaWxlc3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZpbGUgYGZzL3hmcy94ZnNfZnN2ZXJpdHkuY2Agd2l0aCB0aGUgY29yZSBsb2dpYywgbW9kaWZpZXMgWEZTIEkvTyBwYXRocywgYW5kIGludGVncmF0ZXMgd2l0aCB0aGUgZ2VuZXJpYyBmcy12ZXJpdHkgbGF5ZXIuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMzo1ODo0Mi41MTQ5NjMxMDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTA2MjI2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZDFiM2M1ZGQ4YWE1ZDgwMzIyM2NkZmVkYWNjMDJiNjRiMjZjZWQ2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDIyIDEzOjU4OjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2F0dHIuYyBiL2ZzL2F0dHIuY1xcbmluZGV4IDRmNDM3ZmFiYjdmMGY1Li43MTg4OGFjOTAzYzI3ZCAxMDA2NDRcXG4tLS0gYS9mcy9hdHRyLmNcXG4rKysgYi9mcy9hdHRyLmNcXG5AQCAtMTc2LDcgKzE3Niw3IEBAIGludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0XFx0ICogY292ZXJlZCBieSB0aGUgb3Blbi10aW1lIGNoZWNrIGJlY2F1c2Ugc3lzX3RydW5jYXRlKCkgdGFrZXMgYVxcbiBcXHRcXHQgKiBwYXRoLCBub3QgYW4gb3BlbiBmaWxlLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX1ZFUklUWSkgXFx1MDAyNlxcdTAwMjYgSVNfVkVSSVRZKGlub2RlKSlcXG4rXFx0XFx0aWYgKElTX1ZFUklUWShpbm9kZSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIFxcbiBcXHRcXHRlcnJvciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIGF0dHItXFx1MDAzZWlhX3NpemUpO1xcbmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuY1xcbmluZGV4IDI3MjU5OGY2YWU3N2FmLi5kZTcyOWM0NGQ2ZDI1MSAxMDA2NDRcXG4tLS0gYS9mcy9idHJmcy9pbm9kZS5jXFxuKysrIGIvZnMvYnRyZnMvaW5vZGUuY1xcbkBAIC04MDQwLDcgKzgwNDAsNiBAQCBzdGF0aWMgaW50IGJ0cmZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKHBhdGgtXFx1MDAzZWRlbnRyeSk7XFxuIFxcdHUzMiBibG9ja3NpemUgPSBidHJmc19zYihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNlY3RvcnNpemU7XFxuIFxcdHUzMiBiaV9mbGFncyA9IEJUUkZTX0koaW5vZGUpLVxcdTAwM2VmbGFncztcXG4tXFx0dTMyIGJpX3JvX2ZsYWdzID0gQlRSRlNfSShpbm9kZSktXFx1MDAzZXJvX2ZsYWdzO1xcbiBcXG4gXFx0c3RhdC1cXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfQlRJTUU7XFxuIFxcdHN0YXQtXFx1MDAzZWJ0aW1lLnR2X3NlYyA9IEJUUkZTX0koaW5vZGUpLVxcdTAwM2VpX290aW1lX3NlYztcXG5AQCAtODA1Myw4ICs4MDUyLDYgQEAgc3RhdGljIGludCBidHJmc19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfSU1NVVRBQkxFO1xcbiBcXHRpZiAoYmlfZmxhZ3MgXFx1MDAyNiBCVFJGU19JTk9ERV9OT0RVTVApXFxuIFxcdFxcdHN0YXQtXFx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9OT0RVTVA7XFxuLVxcdGlmIChiaV9yb19mbGFncyBcXHUwMDI2IEJUUkZTX0lOT0RFX1JPX1ZFUklUWSlcXG4tXFx0XFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX1ZFUklUWTtcXG4gXFxuIFxcdHN0YXQtXFx1MDAzZWF0dHJpYnV0ZXNfbWFzayB8PSAoU1RBVFhfQVRUUl9BUFBFTkQgfFxcbiBcXHRcXHRcXHRcXHQgIFNUQVRYX0FUVFJfQ09NUFJFU1NFRCB8XFxuZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3Zlcml0eS5jIGIvZnMvYnRyZnMvdmVyaXR5LmNcXG5pbmRleCA5ODMzNjVhNzM1NDE2OC4uYmQ3OWUzNDNhZTIzN2YgMTAwNjQ0XFxuLS0tIGEvZnMvYnRyZnMvdmVyaXR5LmNcXG4rKysgYi9mcy9idHJmcy92ZXJpdHkuY1xcbkBAIC03NzMsMTEgKzc3MywxNSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmJ0cmZzX3JlYWRfbWVya2xlX3RyZWVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiAgKiBAYnVmOlxcdE1lcmtsZSB0cmVlIGJsb2NrIHRvIHdyaXRlXFxuICAqIEBwb3M6XFx0dGhlIHBvc2l0aW9uIG9mIHRoZSBibG9jayBpbiB0aGUgTWVya2xlIHRyZWUgKGluIGJ5dGVzKVxcbiAgKiBAc2l6ZTpcXHR0aGUgTWVya2xlIHRyZWUgYmxvY2sgc2l6ZSAoaW4gYnl0ZXMpXFxuKyAqIEB6ZXJvX2RpZ2VzdDpcXHR0aGUgaGFzaCBvZiB0aGUgYWxsLXplcm9lcyBibG9ja1xcbisgKiBAZGlnZXN0X3NpemU6XFx0c2l6ZSBvZiB6ZXJvX2RpZ2VzdCwgaW4gYnl0ZXNcXG4gICpcXG4gICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlXFxuICAqL1xcbiBzdGF0aWMgaW50IGJ0cmZzX3dyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsXFxuLVxcdFxcdFxcdFxcdFxcdCB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4rXFx0XFx0XFx0XFx0XFx0IHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxcbitcXHRcXHRcXHRcXHRcXHQgY29uc3QgdTggKnplcm9fZGlnZXN0LFxcbitcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xcbiBcXHRsb2ZmX3QgbWVya2xlX3BvcyA9IG1lcmtsZV9maWxlX3Bvcyhpbm9kZSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi45OWZhN2EyODk1MWY1ZSAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcXG4rKysgYi9mcy9leHQ0L2lub2RlLmNcXG5AQCAtNjI1MCwxNSArNjI1MCwxMiBAQCBpbnQgZXh0NF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcXG4gXFx0XFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0lNTVVUQUJMRTtcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgRVhUNF9OT0RVTVBfRkwpXFxuIFxcdFxcdHN0YXQtXFx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9OT0RVTVA7XFxuLVxcdGlmIChmbGFncyBcXHUwMDI2IEVYVDRfVkVSSVRZX0ZMKVxcbi1cXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfVkVSSVRZO1xcbiBcXG4gXFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlc19tYXNrIHw9IChTVEFUWF9BVFRSX0FQUEVORCB8XFxuIFxcdFxcdFxcdFxcdCAgU1RBVFhfQVRUUl9DT01QUkVTU0VEIHxcXG4gXFx0XFx0XFx0XFx0ICBTVEFUWF9BVFRSX0VOQ1JZUFRFRCB8XFxuIFxcdFxcdFxcdFxcdCAgU1RBVFhfQVRUUl9JTU1VVEFCTEUgfFxcbi1cXHRcXHRcXHRcXHQgIFNUQVRYX0FUVFJfTk9EVU1QIHxcXG4tXFx0XFx0XFx0XFx0ICBTVEFUWF9BVFRSX1ZFUklUWSk7XFxuK1xcdFxcdFxcdFxcdCAgU1RBVFhfQVRUUl9OT0RVTVApO1xcbiBcXG4gXFx0Z2VuZXJpY19maWxsYXR0cihpZG1hcCwgcmVxdWVzdF9tYXNrLCBpbm9kZSwgc3RhdCk7XFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3Zlcml0eS5jIGIvZnMvZXh0NC92ZXJpdHkuY1xcbmluZGV4IGNhNjFkYTUzZjMxM2ZhLi5hYzVjMTMzZjU1MjkyNSAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3Zlcml0eS5jXFxuKysrIGIvZnMvZXh0NC92ZXJpdHkuY1xcbkBAIC0zNCwzMiArMzQsNiBAQCBzdGF0aWMgaW5saW5lIGxvZmZfdCBleHQ0X3Zlcml0eV9tZXRhZGF0YV9wb3MoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0cmV0dXJuIHJvdW5kX3VwKGlub2RlLVxcdTAwM2VpX3NpemUsIDY1NTM2KTtcXG4gfVxcbiBcXG4tLypcXG4tICogUmVhZCBzb21lIHZlcml0eSBtZXRhZGF0YSBmcm9tIHRoZSBpbm9kZS4gIF9fdmZzX3JlYWQoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2VcXG4tICogd2UgbmVlZCB0byByZWFkIGJleW9uZCBpX3NpemUuXFxuLSAqL1xcbi1zdGF0aWMgaW50IHBhZ2VjYWNoZV9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LFxcbi1cXHRcXHRcXHQgIGxvZmZfdCBwb3MpXFxuLXtcXG4tXFx0d2hpbGUgKGNvdW50KSB7XFxuLVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuLVxcdFxcdHNpemVfdCBuO1xcbi1cXG4tXFx0XFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8oaW5vZGUtXFx1MDAzZWlfbWFwcGluZywgcG9zIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsXFxuLVxcdFxcdFxcdFxcdFxcdCBOVUxMKTtcXG4tXFx0XFx0aWYgKElTX0VSUihmb2xpbykpXFxuLVxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcXG4tXFxuLVxcdFxcdG4gPSBtZW1jcHlfZnJvbV9maWxlX2ZvbGlvKGJ1ZiwgZm9saW8sIHBvcywgY291bnQpO1xcbi1cXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi1cXG4tXFx0XFx0YnVmICs9IG47XFxuLVxcdFxcdHBvcyArPSBuO1xcbi1cXHRcXHRjb3VudCAtPSBuO1xcbi1cXHR9XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBXcml0ZSBzb21lIHZlcml0eSBtZXRhZGF0YSB0byB0aGUgaW5vZGUgZm9yIEZTX0lPQ19FTkFCTEVfVkVSSVRZLlxcbiAgKiBrZXJuZWxfd3JpdGUoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2UgdGhlIGZpbGUgZGVzY3JpcHRvciBpcyByZWFkb25seS5cXG5AQCAtMzExLDggKzI4NSw4IEBAIHN0YXRpYyBpbnQgZXh0NF9nZXRfdmVyaXR5X2Rlc2NyaXB0b3JfbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0Z290byBiYWQ7XFxuIFxcdGRlc2Nfc2l6ZV9wb3MgLT0gc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKTtcXG4gXFxuLVxcdGVyciA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBcXHUwMDI2ZGVzY19zaXplX2Rpc2ssIHNpemVvZihkZXNjX3NpemVfZGlzayksXFxuLVxcdFxcdFxcdCAgICAgZGVzY19zaXplX3Bvcyk7XFxuK1xcdGVyciA9IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKGlub2RlLCBcXHUwMDI2ZGVzY19zaXplX2Rpc2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgIHNpemVvZihkZXNjX3NpemVfZGlzayksIGRlc2Nfc2l6ZV9wb3MpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRkZXNjX3NpemUgPSBsZTMyX3RvX2NwdShkZXNjX3NpemVfZGlzayk7XFxuQEAgLTM1Miw3ICszMjYsNyBAQCBzdGF0aWMgaW50IGV4dDRfZ2V0X3Zlcml0eV9kZXNjcmlwdG9yKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZixcXG4gXFx0aWYgKGJ1Zl9zaXplKSB7XFxuIFxcdFxcdGlmIChkZXNjX3NpemUgXFx1MDAzZSBidWZfc2l6ZSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuLVxcdFxcdGVyciA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIGRlc2Nfc2l6ZSwgZGVzY19wb3MpO1xcbitcXHRcXHRlcnIgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBkZXNjX3NpemUsIGRlc2NfcG9zKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbkBAIC0zNzQsNyArMzQ4LDkgQEAgc3RhdGljIHZvaWQgZXh0NF9yZWFkYWhlYWRfbWVya2xlX3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4gfVxcbiBcXG4gc3RhdGljIGludCBleHQ0X3dyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsXFxuLVxcdFxcdFxcdFxcdFxcdHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKVxcbitcXHRcXHRcXHRcXHRcXHR1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0Y29uc3QgdTggKnplcm9fZGlnZXN0LFxcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpXFxuIHtcXG4gXFx0cG9zICs9IGV4dDRfdmVyaXR5X21ldGFkYXRhX3BvcyhmaWxlX2lub2RlKGZpbGUpKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZmlsZS5jIGIvZnMvZjJmcy9maWxlLmNcXG5pbmRleCA0YjUyYzU2ZDcxZjA3Zi4uOWI1MzFhMDE2ZWQ0ZDkgMTAwNjQ0XFxuLS0tIGEvZnMvZjJmcy9maWxlLmNcXG4rKysgYi9mcy9mMmZzL2ZpbGUuY1xcbkBAIC0xMDI0LDE1ICsxMDI0LDEyIEBAIGludCBmMmZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxcbiBcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfSU1NVVRBQkxFO1xcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBGMkZTX05PRFVNUF9GTClcXG4gXFx0XFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX05PRFVNUDtcXG4tXFx0aWYgKElTX1ZFUklUWShpbm9kZSkpXFxuLVxcdFxcdHN0YXQtXFx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9WRVJJVFk7XFxuIFxcbiBcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzX21hc2sgfD0gKFNUQVRYX0FUVFJfQ09NUFJFU1NFRCB8XFxuIFxcdFxcdFxcdFxcdCAgU1RBVFhfQVRUUl9BUFBFTkQgfFxcbiBcXHRcXHRcXHRcXHQgIFNUQVRYX0FUVFJfRU5DUllQVEVEIHxcXG4gXFx0XFx0XFx0XFx0ICBTVEFUWF9BVFRSX0lNTVVUQUJMRSB8XFxuLVxcdFxcdFxcdFxcdCAgU1RBVFhfQVRUUl9OT0RVTVAgfFxcbi1cXHRcXHRcXHRcXHQgIFNUQVRYX0FUVFJfVkVSSVRZKTtcXG4rXFx0XFx0XFx0XFx0ICBTVEFUWF9BVFRSX05PRFVNUCk7XFxuIFxcbiBcXHRnZW5lcmljX2ZpbGxhdHRyKGlkbWFwLCByZXF1ZXN0X21hc2ssIGlub2RlLCBzdGF0KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2YyZnMvdmVyaXR5LmMgYi9mcy9mMmZzL3Zlcml0eS5jXFxuaW5kZXggMzlmNDgyNTE1NDQ1MmEuLmYzYTQ2MTc2NTZkYjliIDEwMDY0NFxcbi0tLSBhL2ZzL2YyZnMvdmVyaXR5LmNcXG4rKysgYi9mcy9mMmZzL3Zlcml0eS5jXFxuQEAgLTM3LDM0ICszNyw2IEBAIHN0YXRpYyBpbmxpbmUgbG9mZl90IGYyZnNfdmVyaXR5X21ldGFkYXRhX3Bvcyhjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRyZXR1cm4gcm91bmRfdXAoaW5vZGUtXFx1MDAzZWlfc2l6ZSwgNjU1MzYpO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBSZWFkIHNvbWUgdmVyaXR5IG1ldGFkYXRhIGZyb20gdGhlIGlub2RlLiAgX192ZnNfcmVhZCgpIGNhbid0IGJlIHVzZWQgYmVjYXVzZVxcbi0gKiB3ZSBuZWVkIHRvIHJlYWQgYmV5b25kIGlfc2l6ZS5cXG4tICovXFxuLXN0YXRpYyBpbnQgcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsXFxuLVxcdFxcdFxcdCAgbG9mZl90IHBvcylcXG4te1xcbi1cXHR3aGlsZSAoY291bnQpIHtcXG4tXFx0XFx0c2l6ZV90IG4gPSBtaW5fdChzaXplX3QsIGNvdW50LFxcbi1cXHRcXHRcXHRcXHQgUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2UocG9zKSk7XFxuLVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbi1cXG4tXFx0XFx0cGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIHBvcyBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcbi1cXHRcXHRcXHRcXHRcXHQgTlVMTCk7XFxuLVxcdFxcdGlmIChJU19FUlIocGFnZSkpXFxuLVxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBhZ2UpO1xcbi1cXG4tXFx0XFx0bWVtY3B5X2Zyb21fcGFnZShidWYsIHBhZ2UsIG9mZnNldF9pbl9wYWdlKHBvcyksIG4pO1xcbi1cXG4tXFx0XFx0cHV0X3BhZ2UocGFnZSk7XFxuLVxcbi1cXHRcXHRidWYgKz0gbjtcXG4tXFx0XFx0cG9zICs9IG47XFxuLVxcdFxcdGNvdW50IC09IG47XFxuLVxcdH1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuIC8qXFxuICAqIFdyaXRlIHNvbWUgdmVyaXR5IG1ldGFkYXRhIHRvIHRoZSBpbm9kZSBmb3IgRlNfSU9DX0VOQUJMRV9WRVJJVFkuXFxuICAqIGtlcm5lbF93cml0ZSgpIGNhbid0IGJlIHVzZWQgYmVjYXVzZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIHJlYWRvbmx5LlxcbkBAIC0yNTAsNyArMjIyLDcgQEAgc3RhdGljIGludCBmMmZzX2dldF92ZXJpdHlfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsXFxuIFxcdGlmIChidWZfc2l6ZSkge1xcbiBcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIGJ1Zl9zaXplKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4tXFx0XFx0cmVzID0gcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1Ziwgc2l6ZSwgcG9zKTtcXG4rXFx0XFx0cmVzID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1Ziwgc2l6ZSwgcG9zKTtcXG4gXFx0XFx0aWYgKHJlcylcXG4gXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gXFx0fVxcbkBAIC0yNzIsNyArMjQ0LDkgQEAgc3RhdGljIHZvaWQgZjJmc19yZWFkYWhlYWRfbWVya2xlX3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4gfVxcbiBcXG4gc3RhdGljIGludCBmMmZzX3dyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsXFxuLVxcdFxcdFxcdFxcdFxcdHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKVxcbitcXHRcXHRcXHRcXHRcXHR1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0Y29uc3QgdTggKnplcm9fZGlnZXN0LFxcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpXFxuIHtcXG4gXFx0cG9zICs9IGYyZnNfdmVyaXR5X21ldGFkYXRhX3BvcyhmaWxlX2lub2RlKGZpbGUpKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2ZpbGVfYXR0ci5jIGIvZnMvZmlsZV9hdHRyLmNcXG5pbmRleCBiZmIwMGQyNTZkZDU2MC4uNTQyNGVjNGUzOTQ5M2YgMTAwNjQ0XFxuLS0tIGEvZnMvZmlsZV9hdHRyLmNcXG4rKysgYi9mcy9maWxlX2F0dHIuY1xcbkBAIC0yNDYsNiArMjQ2LDExIEBAIHN0YXRpYyBpbnQgZmlsZWF0dHJfc2V0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0aWYgKGZhLVxcdTAwM2Vmc3hfY293ZXh0c2l6ZSA9PSAwKVxcbiBcXHRcXHRmYS1cXHUwMDNlZnN4X3hmbGFncyBcXHUwMDI2PSB+RlNfWEZMQUdfQ09XRVhUU0laRTtcXG4gXFxuK1xcdC8qIENhbiBub3QgZW5hYmxlIERBWCBvbiBmc3Zlcml0eSBmaWxlICovXFxuK1xcdGlmICgob2xkX21hLVxcdTAwM2Vmc3hfeGZsYWdzIFxcdTAwMjYgRlNfWEZMQUdfVkVSSVRZKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRmYS1cXHUwMDNlZnN4X3hmbGFncyBcXHUwMDI2IEZTX1hGTEFHX0RBWClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvaW9lbmQuYyBiL2ZzL2lvbWFwL2lvZW5kLmNcXG5pbmRleCAwNTY1MzI4NzY0YzE3NS4uOGU0NmI3ZjFhYTZhOTcgMTAwNjQ0XFxuLS0tIGEvZnMvaW9tYXAvaW9lbmQuY1xcbisrKyBiL2ZzL2lvbWFwL2lvZW5kLmNcXG5AQCAtNCw3ICs0LDYgQEBcXG4gICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW8taW50ZWdyaXR5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21hcC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdF9zb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlbWFwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93cml0ZWJhY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzZXJyb3IuaFxcdTAwM2VcXG5AQCAtNDI1LDcgKzQyNCw3IEBAIHZvaWQgaW9tYXBfaW9lbmRfdHJ5X21lcmdlKHN0cnVjdCBpb21hcF9pb2VuZCAqaW9lbmQsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfaW9lbmRfdHJ5X21lcmdlKTtcXG4gXFxuLXN0YXRpYyBpbnQgaW9tYXBfaW9lbmRfY29tcGFyZSh2b2lkICpwcml2LCBjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICphLFxcbitpbnQgaW9tYXBfaW9lbmRfY29tcGFyZSh2b2lkICpwcml2LCBjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICphLFxcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpiKVxcbiB7XFxuIFxcdHN0cnVjdCBpb21hcF9pb2VuZCAqaWEgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IGlvbWFwX2lvZW5kLCBpb19saXN0KTtcXG5AQCAtNDM3LDEwICs0MzYsMTEgQEAgc3RhdGljIGludCBpb21hcF9pb2VuZF9jb21wYXJlKHZvaWQgKnByaXYsIGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmEsXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbitFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pb2VuZF9jb21wYXJlKTtcXG4gXFxuLXZvaWQgaW9tYXBfc29ydF9pb2VuZHMoc3RydWN0IGxpc3RfaGVhZCAqaW9lbmRfbGlzdClcXG4rdm9pZCBpb21hcF9zb3J0X2lvZW5kcyhzdHJ1Y3QgbGlzdF9oZWFkICppb2VuZF9saXN0LCBsaXN0X2NtcF9mdW5jX3QgY21wKVxcbiB7XFxuLVxcdGxpc3Rfc29ydChOVUxMLCBpb2VuZF9saXN0LCBpb21hcF9pb2VuZF9jb21wYXJlKTtcXG4rXFx0bGlzdF9zb3J0KE5VTEwsIGlvZW5kX2xpc3QsIGNtcCk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfc29ydF9pb2VuZHMpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvc3RhdC5jIGIvZnMvc3RhdC5jXFxuaW5kZXggODk5MDk3NDZiZWQxOWUuLmFlMTI5OWJkNzQzNjZjIDEwMDY0NFxcbi0tLSBhL2ZzL3N0YXQuY1xcbisrKyBiL2ZzL3N0YXQuY1xcbkBAIC0yMDMsOCArMjAzLDEyIEBAIGludCB2ZnNfZ2V0YXR0cl9ub3NlYyhjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGtzdGF0ICpzdGF0LFxcbiBcXHRpZiAoSVNfREFYKGlub2RlKSlcXG4gXFx0XFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0RBWDtcXG4gXFxuK1xcdGlmIChJU19WRVJJVFkoaW5vZGUpKVxcbitcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfVkVSSVRZO1xcbitcXG4gXFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlc19tYXNrIHw9IChTVEFUWF9BVFRSX0FVVE9NT1VOVCB8XFxuLVxcdFxcdFxcdFxcdCAgU1RBVFhfQVRUUl9EQVgpO1xcbitcXHRcXHRcXHRcXHQgIFNUQVRYX0FUVFJfREFYIHxcXG4rXFx0XFx0XFx0XFx0ICBTVEFUWF9BVFRSX1ZFUklUWSk7XFxuIFxcbiBcXHRpZG1hcCA9IG1udF9pZG1hcChwYXRoLVxcdTAwM2VtbnQpO1xcbiBcXHRpZiAoaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWdldGF0dHIpIHtcXG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L2VuYWJsZS5jIGIvZnMvdmVyaXR5L2VuYWJsZS5jXFxuaW5kZXggNDJkZmVkMWNlMGNlNjYuLmFkNGZmNzFkN2RkOTViIDEwMDY0NFxcbi0tLSBhL2ZzL3Zlcml0eS9lbmFibGUuY1xcbisrKyBiL2ZzL3Zlcml0eS9lbmFibGUuY1xcbkBAIC01MCw3ICs1MCw5IEBAIHN0YXRpYyBpbnQgd3JpdGVfbWVya2xlX3RyZWVfYmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHU4ICpidWYsXFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRlcnIgPSBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc192b3AtXFx1MDAzZXdyaXRlX21lcmtsZV90cmVlX2Jsb2NrKGZpbGUsIGJ1ZiwgcG9zLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHBhcmFtcy1cXHUwMDNlYmxvY2tfc2l6ZSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgcGFyYW1zLVxcdTAwM2VibG9ja19zaXplLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHBhcmFtcy1cXHUwMDNlemVyb19kaWdlc3QsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgcGFyYW1zLVxcdTAwM2VkaWdlc3Rfc2l6ZSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGZzdmVyaXR5X2Vycihpbm9kZSwgXFxcIkVycm9yICVkIHdyaXRpbmcgTWVya2xlIHRyZWUgYmxvY2sgJWx1XFxcIixcXG4gXFx0XFx0XFx0ICAgICBlcnIsIGluZGV4KTtcXG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L29wZW4uYyBiL2ZzL3Zlcml0eS9vcGVuLmNcXG5pbmRleCBkMGM1NmE3ZmFhM2JiMS4uODc1ZTg4NTBjY2JhY2UgMTAwNjQ0XFxuLS0tIGEvZnMvdmVyaXR5L29wZW4uY1xcbisrKyBiL2ZzL3Zlcml0eS9vcGVuLmNcXG5AQCAtMzQ3LDcgKzM0NywyNCBAQCBpbnQgZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3Ioc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuKy8qKlxcbisgKiBmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8oKSAtIGNhY2hlIHZlcml0eSBpbmZvIGlmIGl0J3Mgbm90IGFscmVhZHkgY2FjaGVkXFxuKyAqIEBpbm9kZTogdGhlIGlub2RlIGZvciB3aGljaCB2ZXJpdHkgaW5mbyBzaG91bGQgYmUgY2FjaGVkXFxuKyAqXFxuKyAqIEVuc3VyZSB0aGlzIGlub2RlIGhhcyB2ZXJpdHkgaW5mbyBhdHRhY2hlZCB0byBpdCwgaXQncyBhc3N1bWVkIHRoZSBpbm9kZVxcbisgKiBhbHJlYWR5IGhhcyBmc3Zlcml0eSBlbmFibGVkLiBSZWFkIGZzdmVyaXR5IGRlc2NyaXB0b3IgYW5kIGNyZWF0ZXMgdmVyaXR5XFxuKyAqIGJhc2VkIG9uIHRoYXQuXFxuKyAqXFxuKyAqIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGF0IGxlYXN0IG9uY2UgYmVmb3JlIGFueSBvZiB0aGUgaW5vZGUncyBkYXRhXFxuKyAqIGNhbiBiZSB2ZXJpZmllZCAoYW5kIHRodXMgcmVhZCBhdCBhbGwpIG9yIHRoZSBpbm9kZSdzIGZzdmVyaXR5IGRpZ2VzdFxcbisgKiByZXRyaWV2ZWQuICBmc3Zlcml0eV9maWxlX29wZW4oKSBjYWxscyB0aGlzIGFscmVhZHksIHdoaWNoIGhhbmRsZXNcXG4rICogbm9ybWFsIGZpbGUgYWNjZXNzZXMuICBJZiBhIGZpbGVzeXN0ZW0gZG9lcyBhbnkgaW50ZXJuYWwgKGkuZS4gbm90XFxuKyAqIGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUgZGVzY3JpcHRvcikgcmVhZHMgb2YgdGhlIGZpbGUncyBkYXRhIG9yXFxuKyAqIGZzdmVyaXR5IGRpZ2VzdCwgaXQgbXVzdCBjYWxsIHRoaXMgZXhwbGljaXRseSBiZWZvcmUgZG9pbmcgc28uXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZVxcbisgKi9cXG4raW50IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSA9IGZzdmVyaXR5X2dldF9pbmZvKGlub2RlKSwgKmZvdW5kO1xcbiBcXHRzdHJ1Y3QgZnN2ZXJpdHlfZGVzY3JpcHRvciAqZGVzYztcXG5AQCAtMzgzLDEyICs0MDAsMTMgQEAgc3RhdGljIGludCBlbnN1cmVfdmVyaXR5X2luZm8oc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0a2ZyZWUoZGVzYyk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTF9HUEwoZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKTtcXG4gXFxuIGludCBfX2ZzdmVyaXR5X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG4ge1xcbiBcXHRpZiAoZmlscC1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfV1JJVEUpXFxuIFxcdFxcdHJldHVybiAtRVBFUk07XFxuLVxcdHJldHVybiBlbnN1cmVfdmVyaXR5X2luZm8oaW5vZGUpO1xcbitcXHRyZXR1cm4gZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKGlub2RlKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChfX2ZzdmVyaXR5X2ZpbGVfb3Blbik7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvcGFnZWNhY2hlLmMgYi9mcy92ZXJpdHkvcGFnZWNhY2hlLmNcXG5pbmRleCA5OWY1ZjUzZWVhOTg1Zi4uMjcwYWJkNjUyZTQ4YzYgMTAwNjQ0XFxuLS0tIGEvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jXFxuKysrIGIvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jXFxuQEAgLTY4LDEzICs2OCw2NCBAQCBFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZSk7XFxuIHZvaWQgZnN2ZXJpdHlfZmlsbF96ZXJvaGFzaChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuLFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmkpXFxuIHtcXG4tXFx0c2l6ZV90IG9mZiA9IG9mZnNldDtcXG4rXFx0dm9pZCAqdmFkZHI7XFxuK1xcdHZvaWQgKnRvO1xcbitcXHRzaXplX3QgY2h1bms7XFxuIFxcbiBcXHRXQVJOX09OX09OQ0UoIUlTX0FMSUdORUQob2Zmc2V0LCB2aS1cXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpKTtcXG4gXFx0V0FSTl9PTl9PTkNFKCFJU19BTElHTkVEKGxlbiwgdmktXFx1MDAzZXRyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKSk7XFxuK1xcdFdBUk5fT05fT05DRShvZmZzZXQgKyBsZW4gXFx1MDAzZSBmb2xpb19zaXplKGZvbGlvKSk7XFxuIFxcbi1cXHRmb3IgKDsgb2ZmIFxcdTAwM2MgKG9mZnNldCArIGxlbik7IG9mZiArPSB2aS1cXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpXFxuLVxcdFxcdG1lbWNweV90b19mb2xpbyhmb2xpbywgb2ZmLCB2aS1cXHUwMDNldHJlZV9wYXJhbXMuemVyb19kaWdlc3QsXFxuK1xcdGRvIHtcXG4rXFx0XFx0dmFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBvZmZzZXQpO1xcbitcXHRcXHRjaHVuayA9IGxlbjtcXG4rXFx0XFx0dG8gPSB2YWRkcjtcXG4rXFxuK1xcdFxcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxfa21hcChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGNodW5rIFxcdTAwM2UgUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KSlcXG4rXFx0XFx0XFx0Y2h1bmsgPSBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpO1xcbitcXHRcXHRmb3IgKDsgdG8gXFx1MDAzYyAodmFkZHIgKyBjaHVuayk7IHRvICs9IHZpLVxcdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSlcXG4rXFx0XFx0XFx0bWVtY3B5KHRvLCB2aS1cXHUwMDNldHJlZV9wYXJhbXMuemVyb19kaWdlc3QsXFxuIFxcdFxcdFxcdFxcdHZpLVxcdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSk7XFxuK1xcdFxcdGt1bm1hcF9sb2NhbCh2YWRkcik7XFxuK1xcbitcXHRcXHRvZmZzZXQgKz0gY2h1bms7XFxuK1xcdFxcdGxlbiAtPSBjaHVuaztcXG4rXFx0fSB3aGlsZSAobGVuIFxcdTAwM2UgMCk7XFxuK1xcbitcXHRmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGZzdmVyaXR5X2ZpbGxfemVyb2hhc2gpO1xcbitcXG4rLyoqXFxuKyAqIGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKCkgLSByZWFkIHBhZ2UgYW5kIGNvcHkgZGF0YSB0byBidWZmZXJcXG4rICogQGlub2RlOlxcdGNvcHkgZnJvbSB0aGlzIGlub2RlJ3MgYWRkcmVzcyBzcGFjZVxcbisgKiBAYnVmOlxcdGJ1ZmZlciB0byBjb3B5IHRvXFxuKyAqIEBjb3VudDpcXHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxcbisgKiBAcG9zOlxcdHBvc2l0aW9uIG9mIHRoZSBmb2xpbyB0byBjb3B5IGZyb21cXG4rICpcXG4rICogUmVhZCBzb21lIHZlcml0eSBtZXRhZGF0YSBmcm9tIHRoZSBpbm9kZS4gIF9fdmZzX3JlYWQoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2VcXG4rICogd2UgbmVlZCB0byByZWFkIGJleW9uZCBpX3NpemUuXFxuKyAqL1xcbitpbnQgZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsXFxuK1xcdFxcdFxcdCAgbG9mZl90IHBvcylcXG4re1xcbitcXHR3aGlsZSAoY291bnQpIHtcXG4rXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0XFx0c2l6ZV90IG47XFxuK1xcbitcXHRcXHRmb2xpbyA9IHJlYWRfbWFwcGluZ19mb2xpbyhpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBwb3MgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG4rXFx0XFx0XFx0XFx0XFx0IE5VTEwpO1xcbitcXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4rXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xcbitcXG4rXFx0XFx0biA9IG1lbWNweV9mcm9tX2ZpbGVfZm9saW8oYnVmLCBmb2xpbywgcG9zLCBjb3VudCk7XFxuK1xcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcbitcXHRcXHRidWYgKz0gbjtcXG4rXFx0XFx0cG9zICs9IG47XFxuK1xcdFxcdGNvdW50IC09IG47XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQpO1xcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvdmVyaWZ5LmMgYi9mcy92ZXJpdHkvdmVyaWZ5LmNcXG5pbmRleCA0MDA0YTFkNDI4NzUxZi4uZGI4YzM1MDIzNGJiNzEgMTAwNjQ0XFxuLS0tIGEvZnMvdmVyaXR5L3ZlcmlmeS5jXFxuKysrIGIvZnMvdmVyaXR5L3ZlcmlmeS5jXFxuQEAgLTksNiArOSw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYmlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzZXJyb3IuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgRlNfVkVSSVRZX01BWF9QRU5ESU5HX0JMT0NLUyAyXFxuIFxcbkBAIC0yMDUsNiArMjA2LDggQEAgc3RhdGljIGJvb2wgdmVyaWZ5X2RhdGFfYmxvY2soc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpLFxcbiBcXHRcXHRpZiAobWVtY2hyX2ludihkYmxvY2stXFx1MDAzZWRhdGEsIDAsIHBhcmFtcy1cXHUwMDNlYmxvY2tfc2l6ZSkpIHtcXG4gXFx0XFx0XFx0ZnN2ZXJpdHlfZXJyKGlub2RlLFxcbiBcXHRcXHRcXHRcXHQgICAgIFxcXCJGSUxFIENPUlJVUFRFRCEgIERhdGEgcGFzdCBFT0YgaXMgbm90IHplcm9lZFxcXCIpO1xcbitcXHRcXHRcXHRmc2Vycm9yX3JlcG9ydF9kYXRhX2xvc3QoaW5vZGUsIGRhdGFfcG9zLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgcGFyYW1zLVxcdTAwM2VibG9ja19zaXplLCBHRlBfTk9GUyk7XFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtMzEyLDYgKzMxNSw3IEBAIHN0YXRpYyBib29sIHZlcmlmeV9kYXRhX2Jsb2NrKHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSxcXG4gXFx0XFx0ZGF0YV9wb3MsIGxldmVsIC0gMSwgcGFyYW1zLVxcdTAwM2VoYXNoX2FsZy1cXHUwMDNlbmFtZSwgaHNpemUsIHdhbnRfaGFzaCxcXG4gXFx0XFx0cGFyYW1zLVxcdTAwM2VoYXNoX2FsZy1cXHUwMDNlbmFtZSwgaHNpemUsXFxuIFxcdFxcdGxldmVsID09IDAgPyBkYmxvY2stXFx1MDAzZXJlYWxfaGFzaCA6IHJlYWxfaGFzaCk7XFxuK1xcdGZzZXJyb3JfcmVwb3J0X2RhdGFfbG9zdChpbm9kZSwgZGF0YV9wb3MsIHBhcmFtcy1cXHUwMDNlYmxvY2tfc2l6ZSwgR0ZQX05PRlMpO1xcbiBlcnJvcjpcXG4gXFx0Zm9yICg7IGxldmVsIFxcdTAwM2UgMDsgbGV2ZWwtLSkge1xcbiBcXHRcXHRrdW5tYXBfbG9jYWwoaGJsb2Nrc1tsZXZlbCAtIDFdLmFkZHIpO1xcbmRpZmYgLS1naXQgYS9mcy94ZnMvTWFrZWZpbGUgYi9mcy94ZnMvTWFrZWZpbGVcXG5pbmRleCA5ZjcxMzNlMDI1NzY4ZC4uMzhiN2Y1MWU1ZDg0MDUgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL01ha2VmaWxlXFxuKysrIGIvZnMveGZzL01ha2VmaWxlXFxuQEAgLTE0OSw2ICsxNDksNyBAQCB4ZnMtJChDT05GSUdfWEZTX1BPU0lYX0FDTClcXHQrPSB4ZnNfYWNsLm9cXG4geGZzLSQoQ09ORklHX1NZU0NUTClcXHRcXHQrPSB4ZnNfc3lzY3RsLm9cXG4geGZzLSQoQ09ORklHX0NPTVBBVClcXHRcXHQrPSB4ZnNfaW9jdGwzMi5vXFxuIHhmcy0kKENPTkZJR19FWFBPUlRGU19CTE9DS19PUFMpXFx0Kz0geGZzX3BuZnMub1xcbit4ZnMtJChDT05GSUdfRlNfVkVSSVRZKVxcdFxcdCs9IHhmc19mc3Zlcml0eS5vXFxuIFxcbiAjIG5vdGlmeSBmYWlsdXJlXFxuIGlmZXEgKCQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSx5KVxcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmNcXG5pbmRleCBkNjRkZWZlZGE2NDVlZC4uY2M0OGY2ZTIwZTgwMDAgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXFxuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXFxuQEAgLTQxLDYgKzQxLDggQEBcXG4gI2luY2x1ZGUgXFxcInhmc19pbm9kZV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfcnRncm91cC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGZzX3pvbmVfYWxsb2MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19mc3Zlcml0eS5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnN2ZXJpdHkuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBrbWVtX2NhY2hlXFx0XFx0Knhmc19ibWFwX2ludGVudF9jYWNoZTtcXG4gXFxuQEAgLTQ0MDIsNiArNDQwNCwxMCBAQCB4ZnNfYm1hcGlfY29udmVydF9vbmVfZGVsYWxsb2MoXFxuIFxcdCAqIHRoZSBleHRlbnQuICBKdXN0IHJldHVybiB0aGUgcmVhbCBleHRlbnQgYXQgdGhpcyBvZmZzZXQuXFxuIFxcdCAqL1xcbiBcXHRpZiAoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSkge1xcbitcXHRcXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIFhGU19GU0JfVE9fQihtcCwgYm1hLmdvdC5icl9zdGFydG9mZikgXFx1MDAzZT1cXG4rXFx0XFx0XFx0ICAgIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKVxcbitcXHRcXHRcXHRmbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xcbiBcXHRcXHR4ZnNfYm1idF90b19pb21hcChpcCwgaW9tYXAsIFxcdTAwMjZibWEuZ290LCAwLCBmbGFncyxcXG4gXFx0XFx0XFx0XFx0eGZzX2lvbWFwX2lub2RlX3NlcXVlbmNlKGlwLCBmbGFncykpO1xcbiBcXHRcXHRpZiAoc2VxKVxcbkBAIC00NDQ5LDYgKzQ0NTUsMTEgQEAgeGZzX2JtYXBpX2NvbnZlcnRfb25lX2RlbGFsbG9jKFxcbiBcXHRYRlNfU1RBVFNfQUREKG1wLCB4c194c3RyYXRfYnl0ZXMsIFhGU19GU0JfVE9fQihtcCwgYm1hLmxlbmd0aCkpO1xcbiBcXHRYRlNfU1RBVFNfSU5DKG1wLCB4c194c3RyYXRfcXVpY2spO1xcbiBcXG4rXFx0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBYRlNfRlNCX1RPX0IobXAsIGJtYS5nb3QuYnJfc3RhcnRvZmYpIFxcdTAwM2U9XFxuK1xcdFxcdCAgICB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSlcXG4rXFx0XFx0ZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcXG4rXFxuIFxcdEFTU0VSVCghaXNudWxsc3RhcnRibG9jayhibWEuZ290LmJyX3N0YXJ0YmxvY2spKTtcXG4gXFx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIGlvbWFwLCBcXHUwMDI2Ym1hLmdvdCwgMCwgZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdHhmc19pb21hcF9pbm9kZV9zZXF1ZW5jZShpcCwgZmxhZ3MpKTtcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmggYi9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaFxcbmluZGV4IGRkMGVkMDQ2ZmJlOWM5Li44YmUxYjEwMWIxOTY5OSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaFxcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oXFxuQEAgLTM3NCwxMSArMzc0LDEzIEBAIHhmc19zYl9oYXNfY29tcGF0X2ZlYXR1cmUoXFxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JNQVBCVCAgICgxIFxcdTAwM2NcXHUwMDNjIDEpXFx0XFx0LyogcmV2ZXJzZSBtYXAgYnRyZWUgKi9cXG4gI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOSyAgKDEgXFx1MDAzY1xcdTAwM2MgMilcXHRcXHQvKiByZWZsaW5rZWQgZmlsZXMgKi9cXG4gI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfSU5PQlRDTlQgKDEgXFx1MDAzY1xcdTAwM2MgMylcXHRcXHQvKiBpbm9idCBibG9jayBjb3VudHMgKi9cXG4rI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZICAgKDEgXFx1MDAzY1xcdTAwM2MgNClcXHRcXHQvKiBmcy12ZXJpdHkgKi9cXG4gI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfQUxMIFxcXFxcXG4gXFx0XFx0KFhGU19TQl9GRUFUX1JPX0NPTVBBVF9GSU5PQlQgfCBcXFxcXFxuIFxcdFxcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfUk1BUEJUIHwgXFxcXFxcbi1cXHRcXHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JFRkxJTkt8IFxcXFxcXG4tXFx0XFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVClcXG4rXFx0XFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9SRUZMSU5LIHwgXFxcXFxcbitcXHRcXHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0lOT0JUQ05UIHwgXFxcXFxcbitcXHRcXHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSlcXG4gI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfVU5LTk9XTlxcdH5YRlNfU0JfRkVBVF9ST19DT01QQVRfQUxMXFxuIHN0YXRpYyBpbmxpbmUgYm9vbFxcbiB4ZnNfc2JfaGFzX3JvX2NvbXBhdF9mZWF0dXJlKFxcbkBAIC0xMjMwLDE2ICsxMjMyLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnNfZGlub2RlX3B1dF9yZGV2KHN0cnVjdCB4ZnNfZGlub2RlICpkaXAsIHhmc19kZXZfdCByZGV2KVxcbiAgKi9cXG4gI2RlZmluZSBYRlNfRElGTEFHMl9NRVRBREFUQV9CSVRcXHQ1XFxuIFxcbisvKiBpbm9kZXMgc2VhbGVkIHdpdGggZnMtdmVyaXR5ICovXFxuKyNkZWZpbmUgWEZTX0RJRkxBRzJfVkVSSVRZX0JJVFxcdFxcdDZcXG4rXFxuICNkZWZpbmUgWEZTX0RJRkxBRzJfREFYXFx0XFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgWEZTX0RJRkxBRzJfREFYX0JJVClcXG4gI2RlZmluZSBYRlNfRElGTEFHMl9SRUZMSU5LXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgWEZTX0RJRkxBRzJfUkVGTElOS19CSVQpXFxuICNkZWZpbmUgWEZTX0RJRkxBRzJfQ09XRVhUU0laRVxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIFhGU19ESUZMQUcyX0NPV0VYVFNJWkVfQklUKVxcbiAjZGVmaW5lIFhGU19ESUZMQUcyX0JJR1RJTUVcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyBYRlNfRElGTEFHMl9CSUdUSU1FX0JJVClcXG4gI2RlZmluZSBYRlNfRElGTEFHMl9OUkVYVDY0XFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgWEZTX0RJRkxBRzJfTlJFWFQ2NF9CSVQpXFxuICNkZWZpbmUgWEZTX0RJRkxBRzJfTUVUQURBVEFcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyBYRlNfRElGTEFHMl9NRVRBREFUQV9CSVQpXFxuKyNkZWZpbmUgWEZTX0RJRkxBRzJfVkVSSVRZXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgWEZTX0RJRkxBRzJfVkVSSVRZX0JJVClcXG4gXFxuICNkZWZpbmUgWEZTX0RJRkxBRzJfQU5ZIFxcXFxcXG4gXFx0KFhGU19ESUZMQUcyX0RBWCB8IFhGU19ESUZMQUcyX1JFRkxJTksgfCBYRlNfRElGTEFHMl9DT1dFWFRTSVpFIHwgXFxcXFxcbi1cXHQgWEZTX0RJRkxBRzJfQklHVElNRSB8IFhGU19ESUZMQUcyX05SRVhUNjQgfCBYRlNfRElGTEFHMl9NRVRBREFUQSlcXG4rXFx0IFhGU19ESUZMQUcyX0JJR1RJTUUgfCBYRlNfRElGTEFHMl9OUkVYVDY0IHwgWEZTX0RJRkxBRzJfTUVUQURBVEEgfCBcXFxcXFxuK1xcdCBYRlNfRElGTEFHMl9WRVJJVFkpXFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2Rpbm9kZV9oYXNfYmlndGltZShjb25zdCBzdHJ1Y3QgeGZzX2Rpbm9kZSAqZGlwKVxcbiB7XFxuQEAgLTIwMjcsNCArMjAzNCwyNiBAQCBzdHJ1Y3QgeGZzX2FjbCB7XFxuICNkZWZpbmUgU0dJX0FDTF9GSUxFX1NJWkVcXHQoc2l6ZW9mKFNHSV9BQ0xfRklMRSktMSlcXG4gI2RlZmluZSBTR0lfQUNMX0RFRkFVTFRfU0laRVxcdChzaXplb2YoU0dJX0FDTF9ERUZBVUxUKS0xKVxcbiBcXG4rLypcXG4rICogQXQgbWF4aW11bSBvZiA4IGxldmVscyB3aXRoIDEyOCBoYXNoZXMgcGVyIGJsb2NrICgzMiBieXRlcyBTSEEtMjU2KSBtYXhpbXVtXFxuKyAqIHRyZWUgc2l6ZSBpcyAoKDEyOF44IOKIkiAxKS8oMTI4IOKIkiAxKSkgPSA1NjcqMTBeMTIgYmxvY2tzLiBUaGlzIHNob3VsZCBmaXQgaW5cXG4rICogNTMgYml0cyBhZGRyZXNzIHNwYWNlLlxcbisgKlxcbisgKiBBdCB0aGlzIE1lcmtsZSB0cmVlIHNpemUgd2UgY2FuIGNvdmVyIDI5NUVCIGxhcmdlIGZpbGUuIFRoaXMgaXMgbXVjaCBsYXJnZXJcXG4rICogdGhhbiB0aGUgY3VycmVudGx5IHN1cHBvcnRlZCBmaWxlIHNpemUuXFxuKyAqXFxuKyAqIEZvciBzaGE1MTIgdGhlIGxhcmdlc3QgZmlsZSB3ZSBjYW4gY292ZXIgZW5kcyBhdCAxIFxcdTAwM2NcXHUwMDNjIDUwIG9mZnNldCwgdGhpcyBpcyBhbHNvXFxuKyAqIGdvb2QuXFxuKyAqL1xcbisjZGVmaW5lIFhGU19GU1ZFUklUWV9MQVJHRVNUX0ZJTEVcXHQoKGxvZmZfdCkxVUxMIFxcdTAwM2NcXHUwMDNjIDUzKVxcbitcXG4rLypcXG4rICogQWxpZ25tZW50IG9mIHRoZSBmc3Zlcml0eSBtZXRhZGF0YSBwbGFjZW1lbnQuIFRoaXMgaXMgbGFyZ2VzdCBzdXBwb3J0ZWQgUEFHRVxcbisgKiBTSVpFIGZvciBmc3Zlcml0eS4gVGhpcyBpcyB1c2VkIHRvIHNwYWNlIG91dCBkYXRhIGFuZCBtZXRhZGF0YSBpbiBwYWdlIGNhY2hlLlxcbisgKiBUaGUgc3BhY2luZyBpcyBuZWNlc3NhcnkgZm9yIG5vbi1leHBvc3VyZSBvZiBtZXRhZGF0YSB0byB1c2Vyc3BhY2UgYW5kXFxuKyAqIGNvcnJlY3QgbWVya2xlIHRyZWUgc3ludGhlc2lzIGluIHRoZSBpb21hcC5cXG4rICovXFxuKyNkZWZpbmUgWEZTX0ZTVkVSSVRZX1NUQVJUX0FMSUdOXFx0KDY1NTM2KVxcbitcXG4rXFxuICNlbmRpZiAvKiBfX1hGU19GT1JNQVRfSF9fICovXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2ZzLmggYi9mcy94ZnMvbGlieGZzL3hmc19mcy5oXFxuaW5kZXggMTg1ZjA5ZjMyN2MwMGMuLjg0ZDYyYjc1MDZhOWFkIDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2ZzLmhcXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19mcy5oXFxuQEAgLTI1MCw2ICsyNTAsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfZnNvcF9yZXNibGtzIHtcXG4gI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1BBUkVOVFxcdCgxIFxcdTAwM2NcXHUwMDNjIDI1KSAvKiBsaW51eCBwYXJlbnQgcG9pbnRlcnMgKi9cXG4gI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX01FVEFESVJcXHQoMSBcXHUwMDNjXFx1MDAzYyAyNikgLyogbWV0YWRhdGEgZGlyZWN0b3JpZXMgKi9cXG4gI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1pPTkVEXFx0KDEgXFx1MDAzY1xcdTAwM2MgMjcpIC8qIHpvbmVkIHJ0IGRldmljZSAqL1xcbisjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfVkVSSVRZXFx0KDEgXFx1MDAzY1xcdTAwM2MgMjgpIC8qIGZzLXZlcml0eSAqL1xcbiBcXG4gLypcXG4gICogTWluaW11bSBhbmQgbWF4aW11bSBzaXplcyBuZWVkIGZvciBncm93dGggY2hlY2tzLlxcbkBAIC00MjEsNiArNDIyLDcgQEAgc3RydWN0IHhmc19idWxrc3RhdCB7XFxuICNkZWZpbmUgWEZTX0JTX1NJQ0tfU1lNTElOS1xcdCgxIFxcdTAwM2NcXHUwMDNjIDYpICAvKiBzeW1ib2xpYyBsaW5rIHJlbW90ZSB0YXJnZXQgKi9cXG4gI2RlZmluZSBYRlNfQlNfU0lDS19QQVJFTlRcXHQoMSBcXHUwMDNjXFx1MDAzYyA3KSAgLyogcGFyZW50IHBvaW50ZXJzICovXFxuICNkZWZpbmUgWEZTX0JTX1NJQ0tfRElSVFJFRVxcdCgxIFxcdTAwM2NcXHUwMDNjIDgpICAvKiBkaXJlY3RvcnkgdHJlZSBzdHJ1Y3R1cmUgKi9cXG4rI2RlZmluZSBYRlNfQlNfU0lDS19GU1ZFUklUWVxcdCgxIFxcdTAwM2NcXHUwMDNjIDkpICAvKiBmc3Zlcml0eSBtZXRhZGF0YSAqL1xcbiBcXG4gLypcXG4gICogUHJvamVjdCBxdW90YSBpZCBoZWxwZXJzIChwcmV2aW91c2x5IHByb2ppZCB3YXMgMTZiaXQgb25seVxcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaCBiL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oXFxuaW5kZXggMWQ0NWNmNTc4OWU4NjQuLjkzMmI0NDcxOTBkYTc2IDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oXFxuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmhcXG5AQCAtMTA0LDYgKzEwNCw3IEBAIHN0cnVjdCB4ZnNfcnRncm91cDtcXG4gLyogRG9uJ3QgcHJvcGFnYXRlIHNpY2sgc3RhdHVzIHRvIGFnIGhlYWx0aCBzdW1tYXJ5IGR1cmluZyBpbmFjdGl2YXRpb24gKi9cXG4gI2RlZmluZSBYRlNfU0lDS19JTk9fRk9SR0VUXFx0KDEgXFx1MDAzY1xcdTAwM2MgMTIpXFxuICNkZWZpbmUgWEZTX1NJQ0tfSU5PX0RJUlRSRUVcXHQoMSBcXHUwMDNjXFx1MDAzYyAxMykgIC8qIGRpcmVjdG9yeSB0cmVlIHN0cnVjdHVyZSAqL1xcbisjZGVmaW5lIFhGU19TSUNLX0lOT19GU1ZFUklUWVxcdCgxIFxcdTAwM2NcXHUwMDNjIDE0KSAgLyogZnN2ZXJpdHkgbWV0YWRhdGEgKi9cXG4gXFxuIC8qIFByaW1hcnkgZXZpZGVuY2Ugb2YgaGVhbHRoIHByb2JsZW1zIGluIGEgZ2l2ZW4gZ3JvdXAuICovXFxuICNkZWZpbmUgWEZTX1NJQ0tfRlNfUFJJTUFSWVxcdChYRlNfU0lDS19GU19DT1VOVEVSUyB8IFxcXFxcXG5AQCAtMTQwLDcgKzE0MSw4IEBAIHN0cnVjdCB4ZnNfcnRncm91cDtcXG4gXFx0XFx0XFx0XFx0IFhGU19TSUNLX0lOT19YQVRUUiB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0IFhGU19TSUNLX0lOT19TWU1MSU5LIHwgXFxcXFxcbiBcXHRcXHRcXHRcXHQgWEZTX1NJQ0tfSU5PX1BBUkVOVCB8IFxcXFxcXG4tXFx0XFx0XFx0XFx0IFhGU19TSUNLX0lOT19ESVJUUkVFKVxcbitcXHRcXHRcXHRcXHQgWEZTX1NJQ0tfSU5PX0RJUlRSRUUgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpXFxuIFxcbiAjZGVmaW5lIFhGU19TSUNLX0lOT19aQVBQRURcXHQoWEZTX1NJQ0tfSU5PX0JNQlREX1pBUFBFRCB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0IFhGU19TSUNLX0lOT19CTUJUQV9aQVBQRUQgfCBcXFxcXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX2J1Zi5jIGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmNcXG5pbmRleCAzMzZlZjg0M2YyZmU0Zi4uYmQ4MGExOWYyZTA5MjkgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmNcXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuY1xcbkBAIC03NjAsNiArNzYwLDE0IEBAIHhmc19kaW5vZGVfdmVyaWZ5KFxcbiBcXHQgICAgIXhmc19oYXNfcnRyZWZsaW5rKG1wKSlcXG4gXFx0XFx0cmV0dXJuIF9fdGhpc19hZGRyZXNzO1xcbiBcXG4rXFx0Lyogb25seSByZWd1bGFyIGZpbGVzIGNhbiBoYXZlIGZzdmVyaXR5ICovXFxuK1xcdGlmIChmbGFnczIgXFx1MDAyNiBYRlNfRElGTEFHMl9WRVJJVFkpIHtcXG4rXFx0XFx0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkpXFxuK1xcdFxcdFxcdHJldHVybiBfX3RoaXNfYWRkcmVzcztcXG4rXFx0XFx0aWYgKCFTX0lTUkVHKG1vZGUpKVxcbitcXHRcXHRcXHRyZXR1cm4gX190aGlzX2FkZHJlc3M7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICh4ZnNfaGFzX3pvbmVkKG1wKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgZGlwLVxcdTAwM2VkaV9tZXRhdHlwZSA9PSBjcHVfdG9fYmUxNihYRlNfTUVUQUZJTEVfUlRSTUFQKSkge1xcbiBcXHRcXHRpZiAoYmUzMl90b19jcHUoZGlwLVxcdTAwM2VkaV91c2VkX2Jsb2NrcykgXFx1MDAzZSBtcC1cXHUwMDNlbV9zYi5zYl9yZ2V4dGVudHMpXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuY1xcbmluZGV4IDI1OGFjM2QwZDQ4NmU2Li41YTUxNmJkMzFjMzE3NSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmNcXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmNcXG5AQCAtNzQsNyArNzQsOCBAQCB4ZnNfZmxhZ3MyZGlmbGFnczIoXFxuIFxcdHVpbnQ2NF90XFx0XFx0ZGlfZmxhZ3MyID1cXG4gXFx0XFx0KGlwLVxcdTAwM2VpX2RpZmxhZ3MyIFxcdTAwMjYgKFhGU19ESUZMQUcyX1JFRkxJTksgfFxcbiBcXHRcXHRcXHRcXHQgICBYRlNfRElGTEFHMl9CSUdUSU1FIHxcXG4tXFx0XFx0XFx0XFx0ICAgWEZTX0RJRkxBRzJfTlJFWFQ2NCkpO1xcbitcXHRcXHRcXHRcXHQgICBYRlNfRElGTEFHMl9OUkVYVDY0IHxcXG4rXFx0XFx0XFx0XFx0ICAgWEZTX0RJRkxBRzJfVkVSSVRZKSk7XFxuIFxcbiBcXHRpZiAoeGZsYWdzIFxcdTAwMjYgRlNfWEZMQUdfREFYKVxcbiBcXHRcXHRkaV9mbGFnczIgfD0gWEZTX0RJRkxBRzJfREFYO1xcbkBAIC0xMjYsNiArMTI3LDggQEAgeGZzX2lwMnhmbGFncyhcXG4gXFx0XFx0XFx0ZmxhZ3MgfD0gRlNfWEZMQUdfREFYO1xcbiBcXHRcXHRpZiAoaXAtXFx1MDAzZWlfZGlmbGFnczIgXFx1MDAyNiBYRlNfRElGTEFHMl9DT1dFWFRTSVpFKVxcbiBcXHRcXHRcXHRmbGFncyB8PSBGU19YRkxBR19DT1dFWFRTSVpFO1xcbitcXHRcXHRpZiAoaXAtXFx1MDAzZWlfZGlmbGFnczIgXFx1MDAyNiBYRlNfRElGTEFHMl9WRVJJVFkpXFxuK1xcdFxcdFxcdGZsYWdzIHw9IEZTX1hGTEFHX1ZFUklUWTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHhmc19pbm9kZV9oYXNfYXR0cl9mb3JrKGlwKSlcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfc2IuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmNcXG5pbmRleCA0NzMyMmFkYjc2OTA1OS4uMjIyYmJlNTU1OWRmNDcgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfc2IuY1xcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmNcXG5AQCAtMTY1LDYgKzE2NSw4IEBAIHhmc19zYl92ZXJzaW9uX3RvX2ZlYXR1cmVzKFxcbiBcXHRcXHRmZWF0dXJlcyB8PSBYRlNfRkVBVF9SRUZMSU5LO1xcbiBcXHRpZiAoc2JwLVxcdTAwM2VzYl9mZWF0dXJlc19yb19jb21wYXQgXFx1MDAyNiBYRlNfU0JfRkVBVF9ST19DT01QQVRfSU5PQlRDTlQpXFxuIFxcdFxcdGZlYXR1cmVzIHw9IFhGU19GRUFUX0lOT0JUQ05UO1xcbitcXHRpZiAoc2JwLVxcdTAwM2VzYl9mZWF0dXJlc19yb19jb21wYXQgXFx1MDAyNiBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZKVxcbitcXHRcXHRmZWF0dXJlcyB8PSBYRlNfRkVBVF9WRVJJVFk7XFxuIFxcdGlmIChzYnAtXFx1MDAzZXNiX2ZlYXR1cmVzX2luY29tcGF0IFxcdTAwMjYgWEZTX1NCX0ZFQVRfSU5DT01QQVRfRlRZUEUpXFxuIFxcdFxcdGZlYXR1cmVzIHw9IFhGU19GRUFUX0ZUWVBFO1xcbiBcXHRpZiAoc2JwLVxcdTAwM2VzYl9mZWF0dXJlc19pbmNvbXBhdCBcXHUwMDI2IFhGU19TQl9GRUFUX0lOQ09NUEFUX1NQSU5PREVTKVxcbkBAIC0xNTg4LDYgKzE1OTAsOCBAQCB4ZnNfZnNfZ2VvbWV0cnkoXFxuIFxcdFxcdGdlby1cXHUwMDNlZmxhZ3MgfD0gWEZTX0ZTT1BfR0VPTV9GTEFHU19NRVRBRElSO1xcbiBcXHRpZiAoeGZzX2hhc196b25lZChtcCkpXFxuIFxcdFxcdGdlby1cXHUwMDNlZmxhZ3MgfD0gWEZTX0ZTT1BfR0VPTV9GTEFHU19aT05FRDtcXG4rXFx0aWYgKHhmc19oYXNfdmVyaXR5KG1wKSlcXG4rXFx0XFx0Z2VvLVxcdTAwM2VmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1ZFUklUWTtcXG4gXFx0Z2VvLVxcdTAwM2VydHNlY3RzaXplID0gc2JwLVxcdTAwM2VzYl9ibG9ja3NpemU7XFxuIFxcdGdlby1cXHUwMDNlZGlyYmxvY2tzaXplID0geGZzX2RpcjJfZGlyYmxvY2tfYnl0ZXMoc2JwKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uYyBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uY1xcbmluZGV4IGU1MjMzZTMxYWJiNzUwLi4wMmI2OGJmNGM1MTI3MCAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvc2NydWIvY29tbW9uLmNcXG4rKysgYi9mcy94ZnMvc2NydWIvY29tbW9uLmNcXG5AQCAtNDUsNiArNDUsOCBAQFxcbiAjaW5jbHVkZSBcXFwic2NydWIvaGVhbHRoLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzY3J1Yi90ZW1wZmlsZS5oXFxcIlxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuK1xcbiAvKiBDb21tb24gY29kZSBmb3IgdGhlIG1ldGFkYXRhIHNjcnViYmVycy4gKi9cXG4gXFxuIC8qXFxuQEAgLTE3NTQsMyArMTc1Niw1NiBAQCB4Y2hrX2lub2RlX2NvdW50X2Jsb2NrcyhcXG4gXFx0cmV0dXJuIHhmc19ibWFwX2NvdW50X2Jsb2NrcyhzYy1cXHUwMDNldHAsIHNjLVxcdTAwM2VpcCwgd2hpY2hmb3JrLCBuZXh0ZW50cyxcXG4gXFx0XFx0XFx0Y291bnQpO1xcbiB9XFxuK1xcbisvKlxcbisgKiBJZiB0aGlzIGlub2RlIGhhcyBTX1ZFUklUWSBzZXQgb24gaXQsIHJlYWQgdGhlIHZlcml0eSBpbmZvLiBJZiB0aGUgcmVhZGluZ1xcbisgKiBmYWlscyB3aXRoIGFueXRoaW5nIG90aGVyIHRoYW4gRU5PTUVNLCB0aGUgZmlsZSBpcyBjb3JydXB0LCB3aGljaCB3ZSBjYW5cXG4rICogZGV0ZWN0IGxhdGVyIHdpdGggZnN2ZXJpdHlfYWN0aXZlLlxcbisgKlxcbisgKiBDYWxsZXJzIG11c3QgaG9sZCB0aGUgSU9MT0NLIGFuZCBtdXN0IG5vdCBob2xkIHRoZSBJTE9DSyBvZiBzYy1cXHUwMDNlaXAgYmVjYXVzZVxcbisgKiBhY3RpdmF0aW9uIHJlYWRzIGlub2RlIGRhdGEuXFxuKyAqL1xcbitpbnRcXG4reGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoXFxuK1xcdHN0cnVjdCB4ZnNfc2NydWJcXHQqc2MpXFxuK3tcXG4rXFx0aW50XFx0XFx0XFx0ZXJyb3I7XFxuK1xcbitcXHRpZiAoIWZzdmVyaXR5X2FjdGl2ZShWRlNfSShzYy1cXHUwMDNlaXApKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRlcnJvciA9IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhWRlNfSShzYy1cXHUwMDNlaXApKTtcXG4rXFx0c3dpdGNoIChlcnJvcikge1xcbitcXHRjYXNlIDA6XFxuK1xcdFxcdC8qIGZzdmVyaXR5IGlzIGFjdGl2ZSAqL1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAtRU5PREFUQTpcXG4rXFx0Y2FzZSAtRU1TR1NJWkU6XFxuK1xcdGNhc2UgLUVJTlZBTDpcXG4rXFx0Y2FzZSAtRUZTQ09SUlVQVEVEOlxcbitcXHRjYXNlIC1FRkJJRzpcXG4rXFx0Y2FzZSAtRVJBTkdFOlxcbitcXHRjYXNlIC1FQkFETVNHOlxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgbm9uemVybyBlcnJubyBjb2RlcyBhYm92ZSBhcmUgdGhlIGVycm9yIGNvZGVzIHRoYXQgY2FuXFxuK1xcdFxcdCAqIGJlIHJldHVybmVkIGZyb20gZnN2ZXJpdHkgb24gbWV0YWRhdGEgdmFsaWRhdGlvbiBlcnJvcnMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0LyogcnVudGltZSBlcnJvcnMgKi9cXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogSXMgdGhpcyBhIHZlcml0eSBmaWxlIHRoYXQgZmFpbGVkIHRvIGFjdGl2YXRlPyAgQ2FsbGVycyBtdXN0IGhhdmUgdHJpZWQgdG9cXG4rICogYWN0aXZhdGUgZnN2ZXJpdHkgdmlhIHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5LlxcbisgKi9cXG4rYm9vbFxcbit4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oXFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXApXFxuK3tcXG4rXFx0cmV0dXJuIGZzdmVyaXR5X2FjdGl2ZShWRlNfSShpcCkpIFxcdTAwMjZcXHUwMDI2ICFmc3Zlcml0eV9nZXRfaW5mbyhWRlNfSShpcCkpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uaCBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uaFxcbmluZGV4IDlkNjI3ZmQ1MDY4N2U0Li4zZGUyYjYwMDlhOTk0MSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvc2NydWIvY29tbW9uLmhcXG4rKysgYi9mcy94ZnMvc2NydWIvY29tbW9uLmhcXG5AQCAtMjY4LDYgKzI2OCw4IEBAIGludCB4Y2hrX2lub2RlX2lzX2FsbG9jYXRlZChzdHJ1Y3QgeGZzX3NjcnViICpzYywgeGZzX2FnaW5vX3QgYWdpbm8sXFxuIFxcdFxcdGJvb2wgKmludXNlKTtcXG4gaW50IHhjaGtfaW5vZGVfY291bnRfYmxvY2tzKHN0cnVjdCB4ZnNfc2NydWIgKnNjLCBpbnQgd2hpY2hmb3JrLFxcbiBcXHRcXHR4ZnNfZXh0bnVtX3QgKm5leHRlbnRzLCB4ZnNfZmlsYmxrc190ICpjb3VudCk7XFxuK2ludCB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzdHJ1Y3QgeGZzX3NjcnViICpzYyk7XFxuK2Jvb2wgeGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTtcXG4gXFxuIGJvb2wgeGNoa19pbm9kZV9pc19kaXJ0cmVlX3Jvb3QoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xcbiBib29sIHhjaGtfaW5vZGVfaXNfc2Jfcm9vdGVkKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTtcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2lub2RlLmMgYi9mcy94ZnMvc2NydWIvaW5vZGUuY1xcbmluZGV4IDY1YjEzZTMxMTkxNjgxLi5kMWNkZDZiNDQ1ZDAxNyAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvc2NydWIvaW5vZGUuY1xcbisrKyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jXFxuQEAgLTM2LDYgKzM2LDEwIEBAIHhjaGtfcHJlcGFyZV9pc2NydWIoXFxuIFxcbiBcXHR4Y2hrX2lsb2NrKHNjLCBYRlNfSU9MT0NLX0VYQ0wpO1xcbiBcXG4rXFx0ZXJyb3IgPSB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzYyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4gXFx0ZXJyb3IgPSB4Y2hrX3RyYW5zX2FsbG9jKHNjLCAwKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuQEAgLTgzMyw2ICs4MzcsOSBAQCB4Y2hrX2lub2RlKFxcbiBcXHRpZiAoU19JU1JFRyhWRlNfSShzYy1cXHUwMDNlaXApLVxcdTAwM2VpX21vZGUpKVxcbiBcXHRcXHR4Y2hrX2lub2RlX2NoZWNrX3JlZmxpbmtfaWZsYWcoc2MsIElfSU5PKHNjLVxcdTAwM2VpcCkpO1xcbiBcXG4rXFx0aWYgKHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbihzYy1cXHUwMDNlaXApKVxcbitcXHRcXHR4Y2hrX2lub19zZXRfY29ycnVwdChzYywgc2MtXFx1MDAzZXNtLVxcdTAwM2VzbV9pbm8pO1xcbitcXG4gXFx0eGNoa19pbm9kZV9jaGVja191bmxpbmtlZChzYyk7XFxuIFxcbiBcXHR4Y2hrX2lub2RlX3hyZWYoc2MsIElfSU5PKHNjLVxcdTAwM2VpcCksIFxcdTAwMjZkaSk7XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9pbm9kZV9yZXBhaXIuYyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZV9yZXBhaXIuY1xcbmluZGV4IDNlYzQxYzE5ODM1MTE2Li4zNWU5M2E0YjUwY2Q5ZiAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNcXG4rKysgYi9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNcXG5AQCAtNTczLDYgKzU3Myw4IEBAIHhyZXBfZGlub2RlX2ZsYWdzKFxcbiBcXHRcXHRkaXAtXFx1MDAzZWRpX25yZXh0NjRfcGFkID0gMDtcXG4gXFx0ZWxzZSBpZiAoZGlwLVxcdTAwM2VkaV92ZXJzaW9uIFxcdTAwM2U9IDMpXFxuIFxcdFxcdGRpcC1cXHUwMDNlZGlfdjNfcGFkID0gMDtcXG4rXFx0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkgfHwgIVNfSVNSRUcobW9kZSkpXFxuK1xcdFxcdGZsYWdzMiBcXHUwMDI2PSB+WEZTX0RJRkxBRzJfVkVSSVRZO1xcbiBcXG4gXFx0aWYgKGZsYWdzMiBcXHUwMDI2IFhGU19ESUZMQUcyX01FVEFEQVRBKSB7XFxuIFxcdFxcdHhmc19mYWlsYWRkcl90XFx0ZmE7XFxuQEAgLTE2MTcsNiArMTYxOSwxMCBAQCB4cmVwX2Rpbm9kZV9jb3JlKFxcbiBcXHRpZiAoaWdldF9lcnJvcilcXG4gXFx0XFx0cmV0dXJuIGlnZXRfZXJyb3I7XFxuIFxcbitcXHRlcnJvciA9IHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5KHNjKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbiBcXHRlcnJvciA9IHhjaGtfdHJhbnNfYWxsb2Moc2MsIDApO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG5AQCAtMjAzNSw2ICsyMDQxLDI3IEBAIHhyZXBfaW5vZGVfdW5saW5rZWQoXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKlxcbisgKiBJZiB0aGlzIGZpbGUgaXMgYSBmc3Zlcml0eSBmaWxlLCB4Y2hrX3ByZXBhcmVfaXNjcnViIG9yIHhyZXBfZGlub2RlX2NvcmVcXG4rICogc2hvdWxkIGhhdmUgYWN0aXZhdGVkIGl0LiAgSWYgaXQncyBzdGlsbCBub3QgYWN0aXZlLCB0aGVuIHRoZXJlJ3Mgc29tZXRoaW5nXFxuKyAqIHdyb25nIHdpdGggdGhlIHZlcml0eSBkZXNjcmlwdG9yIGFuZCB3ZSBzaG91bGQgdHVybiBpdCBvZmYuXFxuKyAqL1xcbitTVEFUSUMgaW50XFxuK3hyZXBfaW5vZGVfdmVyaXR5KFxcbitcXHRzdHJ1Y3QgeGZzX3NjcnViXFx0KnNjKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSA9IFZGU19JKHNjLVxcdTAwM2VpcCk7XFxuK1xcbitcXHRpZiAoeGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKHNjLVxcdTAwM2VpcCkpIHtcXG4rXFx0XFx0c2MtXFx1MDAzZWlwLVxcdTAwM2VpX2RpZmxhZ3MyIFxcdTAwMjY9IH5YRlNfRElGTEFHMl9WRVJJVFk7XFxuK1xcdFxcdGlub2RlX3NldF9mbGFncyhpbm9kZSwgMCwgU19WRVJJVFkpO1xcbitcXG4rXFx0XFx0eGZzX3RyYW5zX2xvZ19pbm9kZShzYy1cXHUwMDNldHAsIHNjLVxcdTAwM2VpcCwgWEZTX0lMT0dfQ09SRSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKiBSZXBhaXIgYW4gaW5vZGUncyBmaWVsZHMuICovXFxuIGludFxcbiB4cmVwX2lub2RlKFxcbkBAIC0yMDg0LDYgKzIxMTEsMTUgQEAgeHJlcF9pbm9kZShcXG4gXFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBEaXNhYmxlIGZzdmVyaXR5IGlmIGl0IGNhbm5vdCBiZSBhY3RpdmF0ZWQuICBBY3RpdmF0aW9uIGZhaWx1cmVcXG4rXFx0ICogcHJvaGliaXRzIHRoZSBmaWxlIGZyb20gYmVpbmcgb3BlbmVkLCBzbyB0aGVyZSBjYW5ub3QgYmUgYW5vdGhlclxcbitcXHQgKiBwcm9ncmFtIHdpdGggYW4gb3BlbiBmZCB0byB3aGF0IGl0IHRoaW5rcyBpcyBhIHZlcml0eSBmaWxlLlxcbitcXHQgKi9cXG4rXFx0ZXJyb3IgPSB4cmVwX2lub2RlX3Zlcml0eShzYyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4gXFx0LyogUmVjb25uZWN0IGluY29yZSB1bmxpbmtlZCBsaXN0ICovXFxuIFxcdGVycm9yID0geHJlcF9pbm9kZV91bmxpbmtlZChzYyk7XFxuIFxcdGlmIChlcnJvcilcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hb3BzLmMgYi9mcy94ZnMveGZzX2FvcHMuY1xcbmluZGV4IDUxMjkzYjZmMzMxZjBiLi4xMzViZTcxMWY5YTQwOSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2FvcHMuY1xcbisrKyBiL2ZzL3hmcy94ZnNfYW9wcy5jXFxuQEAgLTIyLDcgKzIyLDkgQEBcXG4gI2luY2x1ZGUgXFxcInhmc19pY2FjaGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhmc196b25lX2FsbG9jLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfcnRncm91cC5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2ZzdmVyaXR5LmhcXFwiXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW8taW50ZWdyaXR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc3Zlcml0eS5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IHhmc193cml0ZXBhZ2VfY3R4IHtcXG4gXFx0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggY3R4O1xcbkBAIC0xODEsNiArMTgzLDQ5IEBAIHhmc19lbmRfaW9lbmRfd3JpdGUoXFxuIFxcdG1lbWFsbG9jX25vZnNfcmVzdG9yZShub2ZzX2ZsYWcpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBQcmlvcml0aXplIGZzdmVyaXR5IG1ldGFkYXRhIG92ZXIgZmlsZSBkYXRhLiBTb3J0IGJhc2VkIG9uIGlfc2l6ZSBhcyBmc3Zlcml0eVxcbisgKiBtZXRhZGF0YSBpcyBhbHdheXMgYmV5b25kIEVPRlxcbisgKi9cXG4rc3RhdGljIGludFxcbit4ZnNfcmVhZF9pb2VuZF9jb21wYXJlKFxcbitcXHR2b2lkXFx0XFx0XFx0KnByaXYsXFxuK1xcdGNvbnN0IHN0cnVjdCBsaXN0X2hlYWRcXHQqYSxcXG4rXFx0Y29uc3Qgc3RydWN0IGxpc3RfaGVhZFxcdCpiKVxcbit7XFxuK1xcdHN0cnVjdCBpb21hcF9pb2VuZFxcdCppYSA9IGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3QgaW9tYXBfaW9lbmQsXFxuK1xcdFxcdFxcdGlvX2xpc3QpO1xcbitcXHRzdHJ1Y3QgaW9tYXBfaW9lbmRcXHQqaWIgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IGlvbWFwX2lvZW5kLFxcbitcXHRcXHRcXHRpb19saXN0KTtcXG4rXFx0bG9mZl90XFx0XFx0XFx0aV9zaXplID0gaV9zaXplX3JlYWQoaWEtXFx1MDAzZWlvX2lub2RlKTtcXG4rXFxuK1xcdGlmICghSVNfVkVSSVRZKGlhLVxcdTAwM2Vpb19pbm9kZSkpXFxuK1xcdFxcdHJldHVybiBpb21hcF9pb2VuZF9jb21wYXJlKHByaXYsIGEsIGIpO1xcbitcXG4rXFx0aWYgKGlhLVxcdTAwM2Vpb19vZmZzZXQgXFx1MDAzZSBpX3NpemUgXFx1MDAyNlxcdTAwMjYgaWItXFx1MDAzZWlvX29mZnNldCBcXHUwMDNjIGlfc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRpZiAoaWEtXFx1MDAzZWlvX29mZnNldCBcXHUwMDNjIGlfc2l6ZSBcXHUwMDI2XFx1MDAyNiBpYi1cXHUwMDNlaW9fb2Zmc2V0IFxcdTAwM2UgaV9zaXplKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIElPIHJlYWQgY29tcGxldGlvbi5cXG4rICovXFxuK3N0YXRpYyB2b2lkXFxuK3hmc19lbmRfaW9lbmRfcmVhZChcXG4rXFx0c3RydWN0IGlvbWFwX2lvZW5kXFx0KmlvZW5kKVxcbit7XFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShpb2VuZC1cXHUwMDNlaW9faW5vZGUpO1xcbitcXG4rXFx0aWYgKCFpb2VuZC1cXHUwMDNlaW9fYmlvLmJpX3N0YXR1cyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHR4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGlwLCBpb2VuZC1cXHUwMDNlaW9fb2Zmc2V0KSlcXG4rXFx0XFx0ZnN2ZXJpdHlfdmVyaWZ5X2Jpbyhpb2VuZC1cXHUwMDNlaW9fdmksXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2aW9lbmQtXFx1MDAzZWlvX2Jpbyk7XFxuK1xcdGlvbWFwX2ZpbmlzaF9pb2VuZHMoaW9lbmQsXFxuK1xcdFxcdGJsa19zdGF0dXNfdG9fZXJybm8oaW9lbmQtXFx1MDAzZWlvX2Jpby5iaV9zdGF0dXMpKTtcXG4rfVxcbitcXG4gLypcXG4gICogRmluaXNoIGFsbCBwZW5kaW5nIElPIGNvbXBsZXRpb25zIHRoYXQgcmVxdWlyZSB0cmFuc2FjdGlvbmFsIG1vZGlmaWNhdGlvbnMuXFxuICAqXFxuQEAgLTIwOSwxNCArMjU0LDE3IEBAIHhmc19lbmRfaW8oXFxuIFxcdGxpc3RfcmVwbGFjZV9pbml0KFxcdTAwMjZpcC1cXHUwMDNlaV9pb2VuZF9saXN0LCBcXHUwMDI2dG1wKTtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aXAtXFx1MDAzZWlfaW9lbmRfbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0aW9tYXBfc29ydF9pb2VuZHMoXFx1MDAyNnRtcCk7XFxuK1xcdGlvZW5kID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFxcdTAwMjZ0bXAsIHN0cnVjdCBpb21hcF9pb2VuZCwgaW9fbGlzdCk7XFxuK1xcdGlmIChiaW9fb3AoXFx1MDAyNmlvZW5kLVxcdTAwM2Vpb19iaW8pID09IFJFUV9PUF9SRUFEKVxcbitcXHRcXHRpb21hcF9zb3J0X2lvZW5kcyhcXHUwMDI2dG1wLCB4ZnNfcmVhZF9pb2VuZF9jb21wYXJlKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRpb21hcF9zb3J0X2lvZW5kcyhcXHUwMDI2dG1wLCBpb21hcF9pb2VuZF9jb21wYXJlKTtcXG4gXFx0d2hpbGUgKChpb2VuZCA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcXHUwMDI2dG1wLCBzdHJ1Y3QgaW9tYXBfaW9lbmQsXFxuIFxcdFxcdFxcdGlvX2xpc3QpKSkge1xcbiBcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZpb2VuZC1cXHUwMDNlaW9fbGlzdCk7XFxuIFxcdFxcdGlvbWFwX2lvZW5kX3RyeV9tZXJnZShpb2VuZCwgXFx1MDAyNnRtcCk7XFxuIFxcdFxcdGlmIChiaW9fb3AoXFx1MDAyNmlvZW5kLVxcdTAwM2Vpb19iaW8pID09IFJFUV9PUF9SRUFEKVxcbi1cXHRcXHRcXHRpb21hcF9maW5pc2hfaW9lbmRzKGlvZW5kLFxcbi1cXHRcXHRcXHRcXHRibGtfc3RhdHVzX3RvX2Vycm5vKGlvZW5kLVxcdTAwM2Vpb19iaW8uYmlfc3RhdHVzKSk7XFxuK1xcdFxcdFxcdHhmc19lbmRfaW9lbmRfcmVhZChpb2VuZCk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0eGZzX2VuZF9pb2VuZF93cml0ZShpb2VuZCk7XFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbkBAIC0yNDIsOSArMjkwLDE0IEBAIHhmc19lbmRfYmlvKFxcbiBcXHR9XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aXAtXFx1MDAzZWlfaW9lbmRfbG9jaywgZmxhZ3MpO1xcbi1cXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2aXAtXFx1MDAzZWlfaW9lbmRfbGlzdCkpXFxuLVxcdFxcdFdBUk5fT05fT05DRSghcXVldWVfd29yayhtcC1cXHUwMDNlbV91bndyaXR0ZW5fd29ya3F1ZXVlLFxcbitcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2aXAtXFx1MDAzZWlfaW9lbmRfbGlzdCkpIHtcXG4rXFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX1ZFUklUWSkgXFx1MDAyNlxcdTAwMjYgaW9lbmQtXFx1MDAzZWlvX3ZpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBpb2VuZC1cXHUwMDNlaW9fb2Zmc2V0IFxcdTAwM2MgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXFxuK1xcdFxcdFxcdGZzdmVyaXR5X2VucXVldWVfdmVyaWZ5X3dvcmsoXFx1MDAyNmlwLVxcdTAwM2VpX2lvZW5kX3dvcmspO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRSghcXVldWVfd29yayhtcC1cXHUwMDNlbV91bndyaXR0ZW5fd29ya3F1ZXVlLFxcbiBcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmlwLVxcdTAwM2VpX2lvZW5kX3dvcmspKTtcXG4rXFx0fVxcbiBcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZpb2VuZC1cXHUwMDNlaW9fbGlzdCwgXFx1MDAyNmlwLVxcdTAwM2VpX2lvZW5kX2xpc3QpO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZpcC1cXHUwMDNlaV9pb2VuZF9sb2NrLCBmbGFncyk7XFxuIH1cXG5AQCAtMzUwLDEyICs0MDMsMTYgQEAgeGZzX21hcF9ibG9ja3MoXFxuIFxcdGludFxcdFxcdFxcdHJldHJpZXMgPSAwO1xcbiBcXHRpbnRcXHRcXHRcXHRlcnJvciA9IDA7XFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdCpzZXE7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdGlvbWFwX2ZsYWdzID0gMDtcXG4gXFxuIFxcdGlmICh4ZnNfaXNfc2h1dGRvd24obXApKVxcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuIFxcdFhGU19FUlJPUlRBR19ERUxBWShtcCwgWEZTX0VSUlRBR19XQl9ERUxBWV9NUyk7XFxuIFxcbitcXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXFxuK1xcdFxcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBDT1cgZm9yayBibG9ja3MgY2FuIG92ZXJsYXAgZGF0YSBmb3JrIGJsb2NrcyBldmVuIGlmIHRoZSBibG9ja3NcXG4gXFx0ICogYXJlbid0IHNoYXJlZC4gIENPVyBJL08gYWx3YXlzIHRha2VzIHByZWNlZGVudCwgc28gd2UgbXVzdCBhbHdheXNcXG5AQCAtNDQzLDcgKzUwMCw4IEBAIHhmc19tYXBfYmxvY2tzKFxcbiBcXHQgICAgaXNudWxsc3RhcnRibG9jayhpbWFwLmJyX3N0YXJ0YmxvY2spKVxcbiBcXHRcXHRnb3RvIGFsbG9jYXRlX2Jsb2NrcztcXG4gXFxuLVxcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBcXHUwMDI2d3BjLVxcdTAwM2Vpb21hcCwgXFx1MDAyNmltYXAsIDAsIDAsIFhGU19XUEMod3BjKS1cXHUwMDNlZGF0YV9zZXEpO1xcbitcXHR4ZnNfYm1idF90b19pb21hcChpcCwgXFx1MDAyNndwYy1cXHUwMDNlaW9tYXAsIFxcdTAwMjZpbWFwLCAwLCBpb21hcF9mbGFncyxcXG4rXFx0XFx0XFx0ICBYRlNfV1BDKHdwYyktXFx1MDAzZWRhdGFfc2VxKTtcXG4gXFx0dHJhY2VfeGZzX21hcF9ibG9ja3NfZm91bmQoaXAsIG9mZnNldCwgY291bnQsIHdoaWNoZm9yaywgXFx1MDAyNmltYXApO1xcbiBcXHRyZXR1cm4gMDtcXG4gYWxsb2NhdGVfYmxvY2tzOlxcbkBAIC01OTAsMTIgKzY0OCwxNiBAQCB4ZnNfem9uZWRfbWFwX2Jsb2NrcyhcXG4gXFx0eGZzX2ZpbGJsa3NfdFxcdFxcdGNvdW50X2ZzYjtcXG4gXFx0c3RydWN0IHhmc19ibWJ0X2lyZWNcXHRpbWFwLCBkZWw7XFxuIFxcdHN0cnVjdCB4ZnNfaWV4dF9jdXJzb3JcXHRpY3VyO1xcbitcXHR1MTZcXHRcXHRcXHRpb21hcF9mbGFncyA9IDA7XFxuIFxcbiBcXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbiBcXHRYRlNfRVJST1JUQUdfREVMQVkobXAsIFhGU19FUlJUQUdfV0JfREVMQVlfTVMpO1xcbiBcXG4rXFx0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxcbitcXHRcXHRpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xcbitcXG4gXFx0LypcXG4gXFx0ICogQWxsIGRpcnR5IGRhdGEgbXVzdCBiZSBjb3ZlcmVkIGJ5IGRlbGFsbG9jIGV4dGVudHMuICBCdXQgdHJ1bmNhdGUgY2FuXFxuIFxcdCAqIHJlbW92ZSBkZWxhbGxvYyBleHRlbnRzIHVuZGVybmVhdGggdXMgb3IgcmVkdWNlIHRoZWlyIHNpemUuXFxuQEAgLTYxOSw3ICs2ODEsNyBAQCB4ZnNfem9uZWRfbWFwX2Jsb2NrcyhcXG4gXFx0XFx0aW1hcC5icl9zdGFydGJsb2NrID0gSE9MRVNUQVJUQkxPQ0s7XFxuIFxcdFxcdGltYXAuYnJfc3RhdGUgPSBYRlNfRVhUX05PUk07XFxuIFxcdFxcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XFxuLVxcdFxcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBcXHUwMDI2d3BjLVxcdTAwM2Vpb21hcCwgXFx1MDAyNmltYXAsIDAsIDAsIDApO1xcbitcXHRcXHR4ZnNfYm1idF90b19pb21hcChpcCwgXFx1MDAyNndwYy1cXHUwMDNlaW9tYXAsIFxcdTAwMjZpbWFwLCAwLCBpb21hcF9mbGFncywgMCk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcdGVuZF9mc2IgPSBtaW4oZW5kX2ZzYiwgaW1hcC5icl9zdGFydG9mZiArIGltYXAuYnJfYmxvY2tjb3VudCk7XFxuQEAgLTYzMiwxMSArNjk0LDEwIEBAIHhmc196b25lZF9tYXBfYmxvY2tzKFxcbiBcXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xcbiBcXG4gXFx0d3BjLVxcdTAwM2Vpb21hcC50eXBlID0gSU9NQVBfTUFQUEVEO1xcbi1cXHR3cGMtXFx1MDAzZWlvbWFwLmZsYWdzID0gSU9NQVBfRl9ESVJUWTtcXG4gXFx0d3BjLVxcdTAwM2Vpb21hcC5iZGV2ID0gbXAtXFx1MDAzZW1fcnRkZXZfdGFyZ3AtXFx1MDAzZWJ0X2JkZXY7XFxuIFxcdHdwYy1cXHUwMDNlaW9tYXAub2Zmc2V0ID0gb2Zmc2V0O1xcbiBcXHR3cGMtXFx1MDAzZWlvbWFwLmxlbmd0aCA9IFhGU19GU0JfVE9fQihtcCwgY291bnRfZnNiKTtcXG4tXFx0d3BjLVxcdTAwM2Vpb21hcC5mbGFncyA9IElPTUFQX0ZfQU5PTl9XUklURTtcXG4rXFx0d3BjLVxcdTAwM2Vpb21hcC5mbGFncyA9IGlvbWFwX2ZsYWdzIHwgSU9NQVBfRl9BTk9OX1dSSVRFO1xcbiBcXG4gXFx0dHJhY2VfeGZzX3pvbmVkX21hcF9ibG9ja3MoaXAsIG9mZnNldCwgd3BjLVxcdTAwM2Vpb21hcC5sZW5ndGgpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNjg0LDYgKzc0NSwyMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgeGZzX3pvbmVkX3dyaXRlYmFja19vcHMgPSB7XFxuIFxcdC53cml0ZWJhY2tfc3VibWl0XFx0PSB4ZnNfem9uZWRfd3JpdGViYWNrX3N1Ym1pdCxcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbnRcXG4reGZzX2lvbWFwX3dyaXRlcGFnZXMoXFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHRcXHQqaXAsXFxuK1xcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4XFx0KmN0eClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBXcml0ZWJhY2sgZG9lcyBub3Qgd29yayBmb3IgZm9saW9zIHBhc3QgRU9GLCBsZXQgaXQga25vdyB0aGF0XFxuK1xcdCAqIEkvTyBoYXBwZW5zIGZvciBmc3Zlcml0eSBtZXRhZGF0YSBhbmQgdGhpcyByZXN0cmljdGlvbiBuZWVkXFxuK1xcdCAqIHRvIGJlIHNraXBwZWRcXG4rXFx0ICovXFxuK1xcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcXG4rXFx0XFx0Y3R4LVxcdTAwM2Vpb21hcC5mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xcbitcXG4rXFx0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoY3R4KTtcXG4rfVxcbitcXG4gU1RBVElDIGludFxcbiB4ZnNfdm1fd3JpdGVwYWdlcyhcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2VcXHQqbWFwcGluZyxcXG5AQCAtNzAzLDcgKzc4MCw3IEBAIHhmc192bV93cml0ZXBhZ2VzKFxcbiBcXHRcXHR9O1xcbiBcXHRcXHRpbnRcXHRcXHRcXHRcXHRlcnJvcjtcXG4gXFxuLVxcdFxcdGVycm9yID0gaW9tYXBfd3JpdGVwYWdlcyhcXHUwMDI2eGMuY3R4KTtcXG4rXFx0XFx0ZXJyb3IgPSB4ZnNfaW9tYXBfd3JpdGVwYWdlcyhpcCwgXFx1MDAyNnhjLmN0eCk7XFxuIFxcdFxcdGlmICh4Yy5vcGVuX3pvbmUpXFxuIFxcdFxcdFxcdHhmc19vcGVuX3pvbmVfcHV0KHhjLm9wZW5fem9uZSk7XFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG5AQCAtNzE2LDcgKzc5Myw3IEBAIHhmc192bV93cml0ZXBhZ2VzKFxcbiBcXHRcXHRcXHR9LFxcbiBcXHRcXHR9O1xcbiBcXG4tXFx0XFx0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXFx1MDAyNndwYy5jdHgpO1xcbitcXHRcXHRyZXR1cm4geGZzX2lvbWFwX3dyaXRlcGFnZXMoaXAsIFxcdTAwMjZ3cGMuY3R4KTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC03NjEsOSArODM4LDEyIEBAIHhmc19iaW9fc3VibWl0X3JlYWQoXFxuIFxcdHN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eFxcdCpjdHgpXFxuIHtcXG4gXFx0c3RydWN0IGJpb1xcdFxcdFxcdCpiaW8gPSBjdHgtXFx1MDAzZXJlYWRfY3R4O1xcbitcXHRzdHJ1Y3QgaW9tYXBfaW9lbmRcXHRcXHQqaW9lbmQ7XFxuIFxcbiBcXHQvKiBkZWZlciByZWFkIGNvbXBsZXRpb25zIHRvIHRoZSBpb2VuZCB3b3JrcXVldWUgKi9cXG4tXFx0aW9tYXBfaW5pdF9pb2VuZChpdGVyLVxcdTAwM2Vpbm9kZSwgYmlvLCBjdHgtXFx1MDAzZXJlYWRfY3R4X2ZpbGVfb2Zmc2V0LCAwKTtcXG4rXFx0aW9lbmQgPSBpb21hcF9pbml0X2lvZW5kKGl0ZXItXFx1MDAzZWlub2RlLCBiaW8sIGN0eC1cXHUwMDNlcmVhZF9jdHhfZmlsZV9vZmZzZXQsXFxuK1xcdFxcdFxcdDApO1xcbitcXHRpb2VuZC1cXHUwMDNlaW9fdmkgPSBjdHgtXFx1MDAzZXZpO1xcbiBcXHRpb21hcF9iaW9fc3VibWl0X3JlYWRfZW5kaW8oaXRlciwgY3R4LCB4ZnNfZW5kX2Jpbyk7XFxuIH1cXG4gXFxuQEAgLTc3NSwxMSArODU1LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfcmVhZF9vcHMgeGZzX2lvbWFwX3JlYWRfb3BzID0ge1xcbiBcXG4gc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfcmVhZF9vcHMgKlxcbiB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKFxcbi1cXHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZVxcdCptYXBwaW5nKVxcbitcXHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZVxcdCptYXBwaW5nLFxcbitcXHRsb2ZmX3RcXHRcXHRcXHRcXHRwb3NpdGlvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0XFx0KmlwID0gWEZTX0kobWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuIFxcbi1cXHRpZiAoYmRldl9oYXNfaW50ZWdyaXR5X2NzdW0oeGZzX2lub2RlX2J1ZnRhcmcoaXApLVxcdTAwM2VidF9iZGV2KSlcXG4rXFx0aWYgKGJkZXZfaGFzX2ludGVncml0eV9jc3VtKHhmc19pbm9kZV9idWZ0YXJnKGlwKS1cXHUwMDNlYnRfYmRldikgfHxcXG4rXFx0XFx0XFx0eGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShpcCwgcG9zaXRpb24pKVxcbiBcXHRcXHRyZXR1cm4gXFx1MDAyNnhmc19pb21hcF9yZWFkX29wcztcXG4gXFx0cmV0dXJuIFxcdTAwMjZpb21hcF9iaW9fcmVhZF9vcHM7XFxuIH1cXG5AQCAtNzkxLDcgKzg3Myw3IEBAIHhmc192bV9yZWFkX2ZvbGlvKFxcbiB7XFxuIFxcdHN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eFxcdGN0eCA9IHsgLmN1cl9mb2xpbyA9IGZvbGlvIH07XFxuIFxcbi1cXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhmb2xpby1cXHUwMDNlbWFwcGluZyk7XFxuK1xcdGN0eC5vcHMgPSB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKGZvbGlvLVxcdTAwM2VtYXBwaW5nLCBmb2xpb19wb3MoZm9saW8pKTtcXG4gXFx0aW9tYXBfcmVhZF9mb2xpbyhcXHUwMDI2eGZzX3JlYWRfaW9tYXBfb3BzLCBcXHUwMDI2Y3R4LCBOVUxMKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtODAyLDcgKzg4NCw3IEBAIHhmc192bV9yZWFkYWhlYWQoXFxuIHtcXG4gXFx0c3RydWN0IGlvbWFwX3JlYWRfZm9saW9fY3R4XFx0Y3R4ID0geyAucmFjID0gcmFjIH07XFxuIFxcbi1cXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhyYWMtXFx1MDAzZW1hcHBpbmcpLFxcbitcXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhyYWMtXFx1MDAzZW1hcHBpbmcsIHJlYWRhaGVhZF9wb3MocmFjKSk7XFxuIFxcdGlvbWFwX3JlYWRhaGVhZChcXHUwMDI2eGZzX3JlYWRfaW9tYXBfb3BzLCBcXHUwMDI2Y3R4LCBOVUxMKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwX3V0aWwuYyBiL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmNcXG5pbmRleCBjODhiOWFkZTczODlkZC4uYjE4NzVkNmU3NDUyOTYgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19ibWFwX3V0aWwuY1xcbisrKyBiL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmNcXG5AQCAtMzEsNiArMzEsNyBAQFxcbiAjaW5jbHVkZSBcXFwieGZzX3J0Yml0bWFwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfcnRncm91cC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGZzX3pvbmVfYWxsb2MuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuIFxcbiAvKiBLZXJuZWwgb25seSBCTUFQIHJlbGF0ZWQgZGVmaW5pdGlvbnMgYW5kIGZ1bmN0aW9ucyAqL1xcbiBcXG5AQCAtNTUzLDYgKzU1NCwxNCBAQCB4ZnNfY2FuX2ZyZWVfZW9mYmxvY2tzKFxcbiBcXHRpZiAobGFzdF9mc2IgXFx1MDAzYz0gZW5kX2ZzYilcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogTm90aGluZyB0byBjbGVhbiBvbiBmc3Zlcml0eSBpbm9kZXMgYXMgdGhleSBkb24ndCB1c2UgcHJlYWxsb2MgYW5kXFxuK1xcdCAqIHRoZXJlIG5vIGRlbGFsbG9jIGFzIG9ubHkgd3JpdHRlbiBkYXRhIGlzIGZzdmVyaXR5IG1ldGFkYXRhXFxuK1xcdCAqL1xcbitcXHRpZiAoSVNfVkVSSVRZKFZGU19JKGlwKSkgfHxcXG4rXFx0ICAgIHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBwb3N0LUVPRiBleHRlbnQgdG8gZnJlZS4gIElmIHRoZXJlIGFyZSBhbnlcXG4gXFx0ICogZGVsYWxsb2MgYmxvY2tzIGF0dGFjaGVkIHRvIHRoZSBpbm9kZSAoZGF0YSBmb3JrIGRlbGFsbG9jXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZmlsZS5jIGIvZnMveGZzL3hmc19maWxlLmNcXG5pbmRleCA4NDVhOTdjOWIwNjMwYi4uY2JhMTk0ZDY3OGZjNzcgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19maWxlLmNcXG4rKysgYi9mcy94ZnMveGZzX2ZpbGUuY1xcbkBAIC0zNyw2ICszNyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mYWR2aXNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb3VudC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsZWxvY2suaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wcztcXG4gXFxuQEAgLTI0NSw2ICsyNDYsMjUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIHhmc19kaW9fcmVhZF9ib3VuY2Vfb3BzID0ge1xcbiBcXHQuYmlvX3NldFxcdD0gXFx1MDAyNmlvbWFwX2lvZW5kX2Jpb3NldCxcXG4gfTtcXG4gXFxuK1NUQVRJQyBzc2l6ZV90XFxuK3hmc19maWxlX2J1ZmZlcmVkX3JlYWQoXFxuK1xcdHN0cnVjdCBraW9jYlxcdFxcdCppb2NiLFxcbitcXHRzdHJ1Y3QgaW92X2l0ZXJcXHRcXHQqdG8pXFxuK3tcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCA9IFhGU19JKGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCkpO1xcbitcXHRzc2l6ZV90XFx0XFx0XFx0cmV0O1xcbitcXG4rXFx0dHJhY2VfeGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7XFxuK1xcbitcXHRyZXQgPSB4ZnNfaWxvY2tfaW9jYihpb2NiLCBYRlNfSU9MT0NLX1NIQVJFRCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoaW9jYiwgdG8pO1xcbitcXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gU1RBVElDIHNzaXplX3RcXG4geGZzX2ZpbGVfZGlvX3JlYWQoXFxuIFxcdHN0cnVjdCBraW9jYlxcdFxcdCppb2NiLFxcbkBAIC0yNjUsNiArMjg1LDE2IEBAIHhmc19maWxlX2Rpb19yZWFkKFxcbiBcXHRyZXQgPSB4ZnNfaWxvY2tfaW9jYihpb2NiLCBYRlNfSU9MT0NLX1NIQVJFRCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qXFxuK1xcdCAqIFJlLWNoZWNrIHZlcml0eSBzdGF0dXMgYWZ0ZXIgYWNxdWlyaW5nIGxvY2suIFRoaXMgcHJldmVudHMgVE9DVE9VIGluXFxuK1xcdCAqIHhmc19maWxlX3JlYWRfaXRlcigpIHdoaWxlIGZhbGxpbmcgYmFjayBmcm9tIERJTyB0byBidWZmZXJlZCBJL08gYXNcXG4rXFx0ICogbm93IHdlIGFyZSBob2xkaW5nIGEgbG9ja1xcbitcXHQgKi9cXG4rXFx0aWYgKGZzdmVyaXR5X2FjdGl2ZShWRlNfSShpcCkpKSB7XFxuK1xcdFxcdHhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7XFxuK1xcdFxcdGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjY9IH5JT0NCX0RJUkVDVDtcXG4rXFx0XFx0cmV0dXJuIHhmc19maWxlX2J1ZmZlcmVkX3JlYWQoaW9jYiwgdG8pO1xcbitcXHR9XFxuIFxcdGlmIChtYXBwaW5nX3N0YWJsZV93cml0ZXMoaW9jYi1cXHUwMDNla2lfZmlscC1cXHUwMDNlZl9tYXBwaW5nKSkge1xcbiBcXHRcXHRkaW9fb3BzID0gXFx1MDAyNnhmc19kaW9fcmVhZF9ib3VuY2Vfb3BzO1xcbiBcXHRcXHRkaW9fZmxhZ3MgfD0gSU9NQVBfRElPX0JPVU5DRTtcXG5AQCAtMjgxLDcgKzMxMSw4IEBAIHhmc19maWxlX2RheF9yZWFkKFxcbiBcXHRzdHJ1Y3Qga2lvY2JcXHRcXHQqaW9jYixcXG4gXFx0c3RydWN0IGlvdl9pdGVyXFx0XFx0KnRvKVxcbiB7XFxuLVxcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShpb2NiLVxcdTAwM2VraV9maWxwLVxcdTAwM2VmX21hcHBpbmctXFx1MDAzZWhvc3QpO1xcbitcXHRzdHJ1Y3QgaW5vZGVcXHRcXHQqaW5vZGUgPSBpb2NiLVxcdTAwM2VraV9maWxwLVxcdTAwM2VmX21hcHBpbmctXFx1MDAzZWhvc3Q7XFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShpbm9kZSk7XFxuIFxcdHNzaXplX3RcXHRcXHRcXHRyZXQgPSAwO1xcbiBcXG4gXFx0dHJhY2VfeGZzX2ZpbGVfZGF4X3JlYWQoaW9jYiwgdG8pO1xcbkBAIC0yOTksMjUgKzMzMCw2IEBAIHhmc19maWxlX2RheF9yZWFkKFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1TVEFUSUMgc3NpemVfdFxcbi14ZnNfZmlsZV9idWZmZXJlZF9yZWFkKFxcbi1cXHRzdHJ1Y3Qga2lvY2JcXHRcXHQqaW9jYixcXG4tXFx0c3RydWN0IGlvdl9pdGVyXFx0XFx0KnRvKVxcbi17XFxuLVxcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShmaWxlX2lub2RlKGlvY2ItXFx1MDAzZWtpX2ZpbHApKTtcXG4tXFx0c3NpemVfdFxcdFxcdFxcdHJldDtcXG4tXFxuLVxcdHRyYWNlX3hmc19maWxlX2J1ZmZlcmVkX3JlYWQoaW9jYiwgdG8pO1xcbi1cXG4tXFx0cmV0ID0geGZzX2lsb2NrX2lvY2IoaW9jYiwgWEZTX0lPTE9DS19TSEFSRUQpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRyZXQgPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKGlvY2IsIHRvKTtcXG4tXFx0eGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTtcXG4tXFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuIFNUQVRJQyBzc2l6ZV90XFxuIHhmc19maWxlX3JlYWRfaXRlcihcXG4gXFx0c3RydWN0IGtpb2NiXFx0XFx0KmlvY2IsXFxuQEAgLTMzMiw2ICszNDQsMTQgQEAgeGZzX2ZpbGVfcmVhZF9pdGVyKFxcbiBcXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbitcXHQvKlxcbitcXHQgKiBJbiBjYXNlIGZzLXZlcml0eSBpcyBlbmFibGVkLCB3ZSBhbHNvIGZhbGxiYWNrIHRvIHRoZSBidWZmZXJlZCByZWFkXFxuK1xcdCAqIGZyb20gdGhlIGRpcmVjdCByZWFkIHBhdGguIFRoZXJlZm9yZSwgSU9DQl9ESVJFQ1QgaXMgc2V0IGFuZCBuZWVkIHRvXFxuK1xcdCAqIGJlIGNsZWFyZWQgKHNlZSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKCkpXFxuK1xcdCAqL1xcbitcXHRpZiAoZnN2ZXJpdHlfYWN0aXZlKGlub2RlKSlcXG4rXFx0XFx0aW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNj0gfklPQ0JfRElSRUNUO1xcbitcXG4gXFx0aWYgKElTX0RBWChpbm9kZSkpXFxuIFxcdFxcdHJldCA9IHhmc19maWxlX2RheF9yZWFkKGlvY2IsIHRvKTtcXG4gXFx0ZWxzZSBpZiAoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0RJUkVDVClcXG5AQCAtMTcwMCwxMSArMTcyMCwxOCBAQCB4ZnNfZmlsZV9vcGVuKFxcbiBcXHRzdHJ1Y3QgaW5vZGVcXHQqaW5vZGUsXFxuIFxcdHN0cnVjdCBmaWxlXFx0KmZpbGUpXFxuIHtcXG4rXFx0aW50XFx0XFx0ZXJyb3I7XFxuK1xcbiBcXHRpZiAoeGZzX2lzX3NodXRkb3duKFhGU19NKGlub2RlLVxcdTAwM2VpX3NiKSkpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRmaWxlLVxcdTAwM2VmX21vZGUgfD0gRk1PREVfTk9XQUlUIHwgRk1PREVfQ0FOX09ESVJFQ1Q7XFxuIFxcdGlmICh4ZnNfZ2V0X2F0b21pY193cml0ZV9taW4oWEZTX0koaW5vZGUpKSBcXHUwMDNlIDApXFxuIFxcdFxcdGZpbGUtXFx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DQU5fQVRPTUlDX1dSSVRFO1xcbitcXG4rXFx0ZXJyb3IgPSBmc3Zlcml0eV9maWxlX29wZW4oaW5vZGUsIGZpbGUpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuIFxcdHJldHVybiBnZW5lcmljX2ZpbGVfb3Blbihpbm9kZSwgZmlsZSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuYyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ2MjIyM2I0NjE5YjA2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuY1xcbkBAIC0wLDAgKzEsNDgwIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBSZWQgSGF0LCBJbmMuXFxuKyAqL1xcbisjaW5jbHVkZSBcXFwieGZzX3BsYXRmb3JtLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfZm9ybWF0LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfc2hhcmVkLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfdHJhbnNfcmVzdi5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX21vdW50LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfZGFfZm9ybWF0LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfZGFfYnRyZWUuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19pbm9kZS5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2xvZ19mb3JtYXQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc190cmFucy5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2RlZmVyLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfdHJhY2UuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19xdW90YS5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2ZzdmVyaXR5LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfaW9tYXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19lcnJvci5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2hlYWx0aC5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2JtYXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19ibWFwX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21hcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZW1hcC5oXFx1MDAzZVxcbitcXG4rbG9mZl90XFxuK3hmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoXFxuK1xcdGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXApXFxuK3tcXG4rXFx0cmV0dXJuIHJvdW5kX3VwKGlfc2l6ZV9yZWFkKFZGU19JQyhpcCkpLCBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR04pO1xcbit9XFxuK1xcbitib29sXFxuK3hmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoXFxuK1xcdGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAsXFxuK1xcdGxvZmZfdFxcdFxcdFxcdG9mZnNldClcXG4re1xcbitcXHRyZXR1cm4gZnN2ZXJpdHlfYWN0aXZlKFZGU19JQyhpcCkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdG9mZnNldCBcXHUwMDNjIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZXRyaWV2ZSB0aGUgdmVyaXR5IGRlc2NyaXB0b3IuXFxuKyAqL1xcbitzdGF0aWMgaW50XFxuK3hmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvcihcXG4rXFx0c3RydWN0IGlub2RlXFx0XFx0Kmlub2RlLFxcbitcXHR2b2lkXFx0XFx0XFx0KmJ1ZixcXG4rXFx0c2l6ZV90XFx0XFx0XFx0YnVmX3NpemUpXFxuK3tcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCA9IFhGU19JKGlub2RlKTtcXG4rXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCA9IGlwLVxcdTAwM2VpX21vdW50O1xcbitcXHRfX2JlMzJcXHRcXHRcXHRkX2Rlc2Nfc2l6ZTtcXG4rXFx0dTMyXFx0XFx0XFx0ZGVzY19zaXplO1xcbitcXHR1NjRcXHRcXHRcXHRkZXNjX3NpemVfcG9zO1xcbitcXHRpbnRcXHRcXHRcXHRlcnJvcjtcXG4rXFx0dTY0XFx0XFx0XFx0ZGVzY19wb3M7XFxuK1xcdHN0cnVjdCB4ZnNfYm1idF9pcmVjXFx0cmVjO1xcbitcXHRpbnRcXHRcXHRcXHRpc19lbXB0eTtcXG4rXFx0dWludDMyX3RcXHRcXHRibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShWRlNfSShpcCkpO1xcbitcXHR4ZnNfZmlsZW9mZl90XFx0XFx0bGFzdF9ibG9ja19vZmZzZXQ7XFxuK1xcbitcXHRBU1NFUlQoaW5vZGUtXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBTX1ZFUklUWSk7XFxuK1xcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7XFxuK1xcdGVycm9yID0geGZzX2JtYXBfbGFzdF9leHRlbnQoTlVMTCwgaXAsIFhGU19EQVRBX0ZPUkssIFxcdTAwMjZyZWMsIFxcdTAwMjZpc19lbXB0eSk7XFxuK1xcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbitcXHRpZiAoaXNfZW1wdHkpXFxuK1xcdFxcdHJldHVybiAtRU5PREFUQTtcXG4rXFxuK1xcdGxhc3RfYmxvY2tfb2Zmc2V0ID1cXG4rXFx0XFx0WEZTX0ZTQl9UT19CKG1wLCByZWMuYnJfc3RhcnRvZmYgKyByZWMuYnJfYmxvY2tjb3VudCk7XFxuK1xcdGlmIChsYXN0X2Jsb2NrX29mZnNldCBcXHUwMDNjPSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9EQVRBO1xcbitcXG4rXFx0ZGVzY19zaXplX3BvcyA9IGxhc3RfYmxvY2tfb2Zmc2V0IC0gc2l6ZW9mKF9fYmUzMik7XFxuK1xcdGVycm9yID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIChjaGFyICopXFx1MDAyNmRfZGVzY19zaXplLFxcbitcXHRcXHRcXHRzaXplb2YoZF9kZXNjX3NpemUpLCBkZXNjX3NpemVfcG9zKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbitcXHRkZXNjX3NpemUgPSBiZTMyX3RvX2NwdShkX2Rlc2Nfc2l6ZSk7XFxuK1xcdGlmIChYRlNfSVNfQ09SUlVQVChtcCwgZGVzY19zaXplIFxcdTAwM2UgRlNfVkVSSVRZX01BWF9ERVNDUklQVE9SX1NJWkUpKSB7XFxuK1xcdFxcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKFhGU19JU19DT1JSVVBUKG1wLCBkZXNjX3NpemUgXFx1MDAzZSBkZXNjX3NpemVfcG9zKSkge1xcbitcXHRcXHR4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTtcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghYnVmX3NpemUpXFxuK1xcdFxcdHJldHVybiBkZXNjX3NpemU7XFxuK1xcbitcXHRpZiAoWEZTX0lTX0NPUlJVUFQobXAsIGRlc2Nfc2l6ZSBcXHUwMDNlIGJ1Zl9zaXplKSkge1xcbitcXHRcXHR4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTtcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdGRlc2NfcG9zID0gcm91bmRfZG93bihkZXNjX3NpemVfcG9zIC0gZGVzY19zaXplLCBibG9ja3NpemUpO1xcbitcXHRpZiAoZGVzY19wb3MgXFx1MDAzYyB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSkge1xcbitcXHRcXHR4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTtcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdGVycm9yID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0cmV0dXJuIGRlc2Nfc2l6ZTtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvcihcXG4rXFx0c3RydWN0IGZpbGVcXHRcXHQqZmlsZSxcXG4rXFx0Y29uc3Qgdm9pZFxcdFxcdCpkZXNjLFxcbitcXHR1MzJcXHRcXHRcXHRkZXNjX3NpemUsXFxuK1xcdHU2NFxcdFxcdFxcdG1lcmtsZV90cmVlX3NpemUpXFxuK3tcXG4rXFx0aW50XFx0XFx0XFx0ZXJyb3I7XFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShpbm9kZSk7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdGJsa3NpemUgPSBpcC1cXHUwMDNlaV9tb3VudC1cXHUwMDNlbV9zYi5zYl9ibG9ja3NpemU7XFxuK1xcdHU2NFxcdFxcdFxcdHRyZWVfbGFzdF9ibG9jayA9XFxuK1xcdFxcdFxcdHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApICsgbWVya2xlX3RyZWVfc2l6ZTtcXG4rXFx0dTY0XFx0XFx0XFx0ZGVzY19wb3MgPVxcbitcXHRcXHRcXHRyb3VuZF91cCh0cmVlX2xhc3RfYmxvY2ssIFhGU19GU1ZFUklUWV9TVEFSVF9BTElHTik7XFxuK1xcdHU2NFxcdFxcdFxcdGRlc2NfZW5kID0gZGVzY19wb3MgKyBkZXNjX3NpemU7XFxuK1xcdF9fYmUzMlxcdFxcdFxcdGRlc2Nfc2l6ZV9kaXNrID0gY3B1X3RvX2JlMzIoZGVzY19zaXplKTtcXG4rXFx0dTY0XFx0XFx0XFx0ZGVzY19zaXplX3BvcyA9XFxuK1xcdFxcdFxcdHJvdW5kX3VwKGRlc2NfZW5kICsgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSwgYmxrc2l6ZSkgLVxcbitcXHRcXHRcXHRzaXplb2YoZGVzY19zaXplX2Rpc2spO1xcbitcXG4rXFx0ZXJyb3IgPSBpb21hcF9mc3Zlcml0eV93cml0ZShmaWxlLCBkZXNjX3NpemVfcG9zLCBzaXplb2YoX19iZTMyKSxcXG4rXFx0XFx0XFx0KGNvbnN0IHZvaWQgKilcXHUwMDI2ZGVzY19zaXplX2Rpc2ssXFxuK1xcdFxcdFxcdFxcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxcbitcXHRcXHRcXHRcXHUwMDI2eGZzX2lvbWFwX3dyaXRlX29wcyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0cmV0dXJuIGlvbWFwX2ZzdmVyaXR5X3dyaXRlKGZpbGUsIGRlc2NfcG9zLCBkZXNjX3NpemUsIGRlc2MsXFxuK1xcdFxcdFxcdFxcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxcbitcXHRcXHRcXHRcXHUwMDI2eGZzX2lvbWFwX3dyaXRlX29wcyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRyeSB0byByZW1vdmUgYWxsIHRoZSBmc3Zlcml0eSBtZXRhZGF0YSBhZnRlciBhIGZhaWxlZCBlbmFibGVtZW50LlxcbisgKi9cXG4rc3RhdGljIGludFxcbit4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKFxcbitcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwKVxcbit7XFxuK1xcdHN0cnVjdCB4ZnNfdHJhbnNcXHQqdHA7XFxuK1xcdHN0cnVjdCB4ZnNfbW91bnRcXHQqbXAgPSBpcC1cXHUwMDNlaV9tb3VudDtcXG4rXFx0aW50XFx0XFx0XFx0ZXJyb3I7XFxuK1xcbitcXHRlcnJvciA9IHhmc190cmFuc19hbGxvYyhtcCwgXFx1MDAyNk1fUkVTKG1wKS1cXHUwMDNldHJfaXRydW5jYXRlLCAwLCAwLCAwLCBcXHUwMDI2dHApO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdHhmc19pbG9jayhpcCwgWEZTX01NQVBMT0NLX0VYQ0wgfCBYRlNfSUxPQ0tfRVhDTCk7XFxuK1xcdHRydW5jYXRlX2lub2RlX3BhZ2VzKFZGU19JKGlwKS1cXHUwMDNlaV9tYXBwaW5nLCBYRlNfSVNJWkUoaXApKTtcXG4rXFx0eGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXZSByZW1vdmUgcG9zdCBFT0YgZGF0YSwgbm8gbmVlZCB0byB1cGRhdGUgaV9zaXplIGFzIGZzdmVyaXR5XFxuK1xcdCAqIGRpZG4ndCBtb3ZlIGlfc2l6ZSBpbiB0aGUgZmlyc3QgcGxhY2VcXG4rXFx0ICovXFxuK1xcdGVycm9yID0geGZzX2l0cnVuY2F0ZV9leHRlbnRzKFxcdTAwMjZ0cCwgaXAsIFhGU19EQVRBX0ZPUkssIFhGU19JU0laRShpcCkpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdGdvdG8gZXJyX2NhbmNlbDtcXG4rXFxuK1xcdGVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCk7XFxuK1xcdHhmc19pdW5sb2NrKGlwLCBYRlNfTU1BUExPQ0tfRVhDTCB8IFhGU19JTE9DS19FWENMKTtcXG4rXFx0cmV0dXJuIGVycm9yO1xcbitlcnJfY2FuY2VsOlxcbitcXHR4ZnNfdHJhbnNfY2FuY2VsKHRwKTtcXG4rXFx0eGZzX2l1bmxvY2soaXAsIFhGU19NTUFQTE9DS19FWENMIHwgWEZTX0lMT0NLX0VYQ0wpO1xcbitcXHRyZXR1cm4gZXJyb3I7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4oXFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAsXFxuK1xcdGxvZmZfdFxcdFxcdFxcdHN0YXJ0LFxcbitcXHRsb2ZmX3RcXHRcXHRcXHRlbmQpXFxuK3tcXG4rXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCA9IGlwLVxcdTAwM2VpX21vdW50O1xcbitcXHRzdHJ1Y3QgeGZzX3RyYW5zXFx0KnRwO1xcbitcXHR4ZnNfZmlsZW9mZl90XFx0XFx0b2Zmc2V0X2ZzYiA9IFhGU19CX1RPX0ZTQlQobXAsIHN0YXJ0KTtcXG4rXFx0eGZzX2ZpbGVvZmZfdFxcdFxcdGVuZF9mc2IgPSBYRlNfQl9UT19GU0IobXAsIGVuZCk7XFxuK1xcdHN0cnVjdCB4ZnNfYm1idF9pcmVjXFx0aW1hcDtcXG4rXFx0aW50XFx0XFx0XFx0bmltYXBzO1xcbitcXHRpbnRcXHRcXHRcXHRlcnJvciA9IDA7XFxuK1xcdGludFxcdFxcdFxcdGRvbmU7XFxuK1xcbitcXHR3aGlsZSAob2Zmc2V0X2ZzYiBcXHUwMDNjIGVuZF9mc2IpIHtcXG4rXFx0XFx0bmltYXBzID0gMTtcXG4rXFxuK1xcdFxcdGVycm9yID0geGZzX3RyYW5zX2FsbG9jKG1wLCBcXHUwMDI2TV9SRVMobXApLVxcdTAwM2V0cl93cml0ZSwgMCwgMCwgMCwgXFx1MDAyNnRwKTtcXG4rXFx0XFx0aWYgKGVycm9yKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbitcXHRcXHR4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFx0XFx0ZXJyb3IgPSB4ZnNfYm1hcGlfcmVhZChpcCwgb2Zmc2V0X2ZzYixcXG4rXFx0XFx0XFx0XFx0ZW5kX2ZzYiAtIG9mZnNldF9mc2IsIFxcdTAwMjZpbWFwLCBcXHUwMDI2bmltYXBzLFxcbitcXHRcXHRcXHRcXHQwKTtcXG4rXFx0XFx0aWYgKGVycm9yKVxcbitcXHRcXHRcXHRnb3RvIG91dF9jYW5jZWw7XFxuK1xcbitcXHRcXHRpZiAobmltYXBzID09IDApXFxuK1xcdFxcdFxcdGdvdG8gb3V0X2NhbmNlbDtcXG4rXFxuK1xcdFxcdGlmIChpbWFwLmJyX3N0YXRlID09IFhGU19FWFRfVU5XUklUVEVOKSB7XFxuK1xcdFxcdFxcdGRvbmUgPSAwO1xcbitcXG4rXFx0XFx0XFx0eGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgMCk7XFxuK1xcbitcXHRcXHRcXHR3aGlsZSAoIWRvbmUpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyb3IgPSB4ZnNfYnVubWFwaSh0cCwgaXAsIGltYXAuYnJfc3RhcnRvZmYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGltYXAuYnJfYmxvY2tjb3VudCwgMCwgMSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmRvbmUpO1xcbitcXHRcXHRcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2NhbmNlbDtcXG4rXFxuK1xcdFxcdFxcdFxcdGVycm9yID0geGZzX2RlZmVyX2ZpbmlzaChcXHUwMDI2dHApO1xcbitcXHRcXHRcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2NhbmNlbDtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0ZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwKTtcXG4rXFx0XFx0XFx0aWYgKGVycm9yKVxcbitcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHhmc190cmFuc19jYW5jZWwodHApO1xcbitcXHRcXHR9XFxuK1xcdFxcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XFxuK1xcbitcXHRcXHRvZmZzZXRfZnNiID0gaW1hcC5icl9zdGFydG9mZiArIGltYXAuYnJfYmxvY2tjb3VudDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGVycm9yO1xcbitvdXRfY2FuY2VsOlxcbitcXHR4ZnNfdHJhbnNfY2FuY2VsKHRwKTtcXG4rb3V0X3VubG9jazpcXG4rXFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFx0cmV0dXJuIGVycm9yO1xcbit9XFxuK1xcbitcXG4rLypcXG4rICogUHJlcGFyZSB0byBlbmFibGUgZnN2ZXJpdHkgYnkgY2xlYXJpbmcgb2xkIG1ldGFkYXRhLlxcbisgKi9cXG4rc3RhdGljIGludFxcbit4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlKFxcbitcXHRzdHJ1Y3QgZmlsZVxcdFxcdCpmaWxwKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShpbm9kZSk7XFxuK1xcdGludFxcdFxcdFxcdGVycm9yO1xcbitcXG4rXFx0eGZzX2Fzc2VydF9pbG9ja2VkKGlwLCBYRlNfSU9MT0NLX0VYQ0wpO1xcbitcXG4rXFx0aWYgKElTX0RBWChpbm9kZSkgfHwgaXAtXFx1MDAzZWlfZGlmbGFnczIgXFx1MDAyNiBYRlNfRElGTEFHMl9EQVgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKGlub2RlLVxcdTAwM2VpX3NpemUgXFx1MDAzZSBYRlNfRlNWRVJJVFlfTEFSR0VTVF9GSUxFKVxcbitcXHRcXHRyZXR1cm4gLUVGQklHO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRmx1c2ggcGFnZWNhY2hlIGJlZm9yZSBidWlsZGluZyBNZXJrbGUgdHJlZS4gSW5vZGUgaXMgbG9ja2VkIGFuZCBub1xcbitcXHQgKiBmdXJ0aGVyIHdyaXRlcyB3aWxsIGhhcHBlbiB0byB0aGUgZmlsZSBleGNlcHQgZnN2ZXJpdHkgbWV0YWRhdGFcXG4rXFx0ICovXFxuK1xcdGVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbitcXHRpZiAoeGZzX2lmbGFnc190ZXN0X2FuZF9zZXQoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdGVycm9yID0geGZzX3FtX2RxYXR0YWNoKGlwKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIG91dF9jbGVhcjtcXG4rXFxuK1xcdGVycm9yID0geGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YShpcCk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0Z290byBvdXRfY2xlYXI7XFxuK1xcdHJldHVybiBlcnJvcjtcXG4rb3V0X2NsZWFyOlxcbitcXHR4ZnNfaWZsYWdzX2NsZWFyKGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTik7XFxuK1xcdHJldHVybiBlcnJvcjtcXG4rfVxcbitcXG4rLypcXG4rICogQ29tcGxldGUgKG9yIGZhaWwpIHRoZSBwcm9jZXNzIG9mIGVuYWJsaW5nIGZzdmVyaXR5LlxcbisgKi9cXG4rc3RhdGljIGludFxcbit4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZShcXG4rXFx0c3RydWN0IGZpbGVcXHRcXHQqZmlsZSxcXG4rXFx0Y29uc3Qgdm9pZFxcdFxcdCpkZXNjLFxcbitcXHRzaXplX3RcXHRcXHRcXHRkZXNjX3NpemUsXFxuK1xcdHU2NFxcdFxcdFxcdG1lcmtsZV90cmVlX3NpemUpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlXFx0XFx0Kmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCA9IFhGU19JKGlub2RlKTtcXG4rXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCA9IGlwLVxcdTAwM2VpX21vdW50O1xcbitcXHRzdHJ1Y3QgeGZzX3RyYW5zXFx0KnRwO1xcbitcXHRpbnRcXHRcXHRcXHRlcnJvciA9IDA7XFxuK1xcdGxvZmZfdFxcdFxcdFxcdHJhbmdlX3N0YXJ0ID0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCk7XFxuK1xcbitcXHR4ZnNfYXNzZXJ0X2lsb2NrZWQoaXAsIFhGU19JT0xPQ0tfRVhDTCk7XFxuK1xcbitcXHQvKiBmcy12ZXJpdHkgZmFpbGVkLCBqdXN0IGNsZWFudXAgKi9cXG4rXFx0aWYgKGRlc2MgPT0gTlVMTCkge1xcbitcXHRcXHRlcnJvciA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvcihmaWxlLCBkZXNjLCBkZXNjX3NpemUsXFxuK1xcdFxcdFxcdG1lcmtsZV90cmVlX3NpemUpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogV2FpdCBmb3IgTWVya2xlIHRyZWUgZ2V0IHdyaXR0ZW4gdG8gZGlzayBiZWZvcmUgc2V0dGluZyBvbi1kaXNrIGlub2RlXFxuK1xcdCAqIGZsYWcgYW5kIGNsZWFyaW5nIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OXFxuK1xcdCAqL1xcbitcXHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtXFx1MDAzZWlfbWFwcGluZywgcmFuZ2Vfc3RhcnQsXFxuK1xcdFxcdFxcdExMT05HX01BWCk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZW1vdmUgdW53cml0dGVuIGV4dGVudHMgbGVmdCBieSBDT1cgcHJlYWxsb2NhdGlvbnMgYW5kIHdyaXRlXFxuK1xcdCAqIHByZWFsbG9jYXRpb24gaW4gdGhlIG1lcmtsZSB0cmVlIGhvbGVzIGFuZCBwYXN0IGRlc2NyaXB0b3JcXG4rXFx0ICovXFxuK1xcdGVycm9yID0geGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4oaXAsIHJhbmdlX3N0YXJ0LCBMTE9OR19NQVgpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogUHJvYWN0aXZlbHkgZHJvcCBhbnkgZGVsYXllZCBhbGxvY2F0aW9ucyBpbiBDT1cgZm9yaywgdGhlIGZzdmVyaXR5XFxuK1xcdCAqIGZpbGVzIGFyZSByZWFkLW9ubHlcXG4rXFx0ICovXFxuK1xcdGlmICh4ZnNfaXNfY293X2lub2RlKGlwKSkge1xcbitcXHRcXHR4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFx0XFx0eGZzX2lmb3JrX2luaXRfY293KGlwKTtcXG4rXFx0XFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFx0XFx0eGZzX2JtYXBfcHVuY2hfZGVsYWxsb2NfcmFuZ2UoaXAsIFhGU19DT1dfRk9SSywgMCwgTExPTkdfTUFYLFxcbitcXHRcXHRcXHRcXHROVUxMKTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogU2V0IGZzdmVyaXR5IGlub2RlIGZsYWdcXG4rXFx0ICovXFxuK1xcdGVycm9yID0geGZzX3RyYW5zX2FsbG9jX2lub2RlKGlwLCBcXHUwMDI2TV9SRVMobXApLVxcdTAwM2V0cl9pY2hhbmdlLFxcbitcXHRcXHRcXHQwLCAwLCBmYWxzZSwgXFx1MDAyNnRwKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEVuc3VyZSB0aGF0IHdlJ3ZlIHBlcnNpc3RlZCB0aGUgdmVyaXR5IGluZm9ybWF0aW9uIGJlZm9yZSB3ZSBlbmFibGVcXG4rXFx0ICogaXQgb24gdGhlIGlub2RlIGFuZCB0ZWxsIHRoZSBjYWxsZXIgd2UgaGF2ZSBzZWFsZWQgdGhlIGlub2RlLlxcbitcXHQgKi9cXG4rXFx0aXAtXFx1MDAzZWlfZGlmbGFnczIgfD0gWEZTX0RJRkxBRzJfVkVSSVRZO1xcbitcXG4rXFx0eGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpO1xcbitcXHR4ZnNfdHJhbnNfc2V0X3N5bmModHApO1xcbitcXG4rXFx0ZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwKTtcXG4rXFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFxuK1xcdGlmICghZXJyb3IpXFxuK1xcdFxcdGlub2RlX3NldF9mbGFncyhpbm9kZSwgU19WRVJJVFksIFNfVkVSSVRZKTtcXG4rXFxuK291dDpcXG4rXFx0aWYgKGVycm9yKSB7XFxuK1xcdFxcdGludFxcdGVycm9yMjtcXG4rXFxuK1xcdFxcdGVycm9yMiA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApO1xcbitcXHRcXHRpZiAoZXJyb3IyKVxcbitcXHRcXHRcXHR4ZnNfYWxlcnQoaXAtXFx1MDAzZWlfbW91bnQsXFxuK1xcXCJpbm8gMHglbGx4IGZhaWxlZCB0byBjbGVhbiB1cCBuZXcgZnN2ZXJpdHkgbWV0YWRhdGEsIGVyciAlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdElfSU5PKGlwKSwgZXJyb3IyKTtcXG4rXFx0fVxcbitcXG4rXFx0eGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pO1xcbitcXHRyZXR1cm4gZXJyb3I7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJldHJpZXZlIGEgbWVya2xlIHRyZWUgYmxvY2suXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IHBhZ2UgKlxcbit4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGUoXFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSxcXG4rXFx0cGdvZmZfdFxcdFxcdFxcdGluZGV4KVxcbit7XFxuK1xcdGluZGV4ICs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoWEZTX0koaW5vZGUpKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXG4rXFx0cmV0dXJuIGdlbmVyaWNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKGlub2RlLCBpbmRleCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJldHJpZXZlIGEgbWVya2xlIHRyZWUgYmxvY2suXFxuKyAqL1xcbitzdGF0aWMgdm9pZFxcbit4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlKFxcbitcXHRzdHJ1Y3QgaW5vZGVcXHRcXHQqaW5vZGUsXFxuK1xcdHBnb2ZmX3RcXHRcXHRcXHRpbmRleCxcXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdG5yX3BhZ2VzKVxcbit7XFxuK1xcdGluZGV4ICs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoWEZTX0koaW5vZGUpKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXG4rXFx0Z2VuZXJpY19yZWFkYWhlYWRfbWVya2xlX3RyZWUoaW5vZGUsIGluZGV4LCBucl9wYWdlcyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFdyaXRlIGEgbWVya2xlIHRyZWUgYmxvY2suXFxuKyAqL1xcbitzdGF0aWMgaW50XFxuK3hmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUoXFxuK1xcdHN0cnVjdCBmaWxlXFx0XFx0KmZpbGUsXFxuK1xcdGNvbnN0IHZvaWRcXHRcXHQqYnVmLFxcbitcXHR1NjRcXHRcXHRcXHRwb3MsXFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdHNpemUsXFxuK1xcdGNvbnN0IHU4XFx0XFx0Knplcm9fZGlnZXN0LFxcbitcXHR1bnNpZ25lZCBpbnRcXHRcXHRkaWdlc3Rfc2l6ZSlcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGVcXHRcXHQqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xcbitcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwID0gWEZTX0koaW5vZGUpO1xcbitcXHRsb2ZmX3RcXHRcXHRcXHRwb3NpdGlvbiA9IHBvcyArXFxuK1xcdFxcdHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApO1xcbitcXG4rXFx0aWYgKHBvc2l0aW9uICsgc2l6ZSBcXHUwMDNlIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX21heGJ5dGVzKVxcbitcXHRcXHRyZXR1cm4gLUVGQklHO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhpcyBpcyBhIGJsb2NrIGZ1bGwgb2YgaGFzaGVzIG9mIHplcm9lZCBibG9ja3MsIGRvbid0IGJvdGhlclxcbitcXHQgKiBzdG9yaW5nIHRoZSBibG9jay4gV2UgY2FuIHN5bnRoZXNpemUgdGhlbSBsYXRlci5cXG4rXFx0ICpcXG4rXFx0ICogSG93ZXZlciwgZG8gdGhpcyBvbmx5IGluIGNhc2UgTWVya2xlIHRyZWUgYmxvY2sgPT0gZnMgYmxvY2sgc2l6ZS5cXG4rXFx0ICogSW9tYXAgc3ludGhlc2l6ZXMgdGhlc2UgYmxvY2tzIGJhc2VkIG9uIGhvbGVzIGluIHRoZSBtZXJrbGUgdHJlZS4gV2VcXG4rXFx0ICogd29uJ3QgYmUgYWJsZSB0byB0ZWxsIGlmIHNvbWV0aGluZyBuZWVkIHRvIGJlIHN5bnRoZXNpemVzIGZvciB0aGVcXG4rXFx0ICogcmFuZ2UgaW4gdGhlIGZzIGJsb2NrLiBGb3IgZXhhbXBsZSwgZm9yIDRrIGZpbGVzeXN0ZW0gYmxvY2tcXG4rXFx0ICpcXG4rXFx0ICpcXHRbIDFrIHwgemVybyBoYXNoZXMgfCB6ZXJvIGhhc2hlcyB8IDFrIF1cXG4rXFx0ICpcXG4rXFx0ICogSW9tYXAgd29uJ3Qga25vdyBhYm91dCB0aGVzZSBlbXB0eSBibG9ja3MuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2l6ZSA9PSBpcC1cXHUwMDNlaV9tb3VudC1cXHUwMDNlbV9zYi5zYl9ibG9ja3NpemUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogRmlyc3QgZGlnZXN0IGlzIHplcm9fZGlnZXN0XFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRtZW1jbXAoYnVmLCB6ZXJvX2RpZ2VzdCwgZGlnZXN0X3NpemUpID09IDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogRXZlcnkgZGlnZXN0IGlzIHNhbWUgYXMgcHJldmlvdXMsIHRodXMgYWxsIGFyZVxcbitcXHRcXHRcXHQgKiB6ZXJvX2RpZ2VzdFxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0bWVtY21wKGJ1ZiArIGRpZ2VzdF9zaXplLCBidWYsIHNpemUgLSBkaWdlc3Rfc2l6ZSkgPT0gMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gaW9tYXBfZnN2ZXJpdHlfd3JpdGUoZmlsZSwgcG9zaXRpb24sIHNpemUsIGJ1ZixcXG4rXFx0XFx0XFx0XFx1MDAyNnhmc19idWZmZXJlZF93cml0ZV9pb21hcF9vcHMsXFxuK1xcdFxcdFxcdFxcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMgeGZzX2ZzdmVyaXR5X29wcyA9IHtcXG4rXFx0LmJlZ2luX2VuYWJsZV92ZXJpdHlcXHRcXHQ9IHhmc19mc3Zlcml0eV9iZWdpbl9lbmFibGUsXFxuK1xcdC5lbmRfZW5hYmxlX3Zlcml0eVxcdFxcdD0geGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUsXFxuK1xcdC5nZXRfdmVyaXR5X2Rlc2NyaXB0b3JcXHRcXHQ9IHhmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvcixcXG4rXFx0LnJlYWRfbWVya2xlX3RyZWVfcGFnZVxcdFxcdD0geGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlLFxcbitcXHQucmVhZGFoZWFkX21lcmtsZV90cmVlXFx0XFx0PSB4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlLFxcbitcXHQud3JpdGVfbWVya2xlX3RyZWVfYmxvY2tcXHQ9IHhmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUsXFxuK307XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaCBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjZhOTgxZTIwYTc1YmI4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaFxcbkBAIC0wLDAgKzEsMjggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IFJlZCBIYXQsIEluYy5cXG4rICovXFxuKyNpZm5kZWYgX19YRlNfRlNWRVJJVFlfSF9fXFxuKyNkZWZpbmUgX19YRlNfRlNWRVJJVFlfSF9fXFxuK1xcbisjaW5jbHVkZSBcXFwieGZzX3BsYXRmb3JtLmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc3Zlcml0eS5oXFx1MDAzZVxcbitcXG4rI2lmZGVmIENPTkZJR19GU19WRVJJVFlcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHhmc19mc3Zlcml0eV9vcHM7XFxuK2xvZmZfdCB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTtcXG4rYm9vbCB4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBsb2ZmX3Qgb2Zmc2V0KTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBsb2ZmX3QgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcClcXG4re1xcbitcXHRXQVJOX09OX09OQ0UoMSk7XFxuK1xcdHJldHVybiBVTExPTkdfTUFYO1xcbit9XFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgbG9mZl90IG9mZnNldClcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rI2VuZGlmXFx0LyogQ09ORklHX0ZTX1ZFUklUWSAqL1xcbitcXG4rI2VuZGlmXFx0LyogX19YRlNfRlNWRVJJVFlfSF9fICovXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaGVhbHRoLmMgYi9mcy94ZnMveGZzX2hlYWx0aC5jXFxuaW5kZXggMjM5Yjg0M2U4M2Q0MmEuLmJlNjY3NjBmYjEyMGY3IDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy94ZnNfaGVhbHRoLmNcXG4rKysgYi9mcy94ZnMveGZzX2hlYWx0aC5jXFxuQEAgLTYyNSw2ICs2MjUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvY3RsX3NpY2tfbWFwIGlub19tYXBbXSA9IHtcXG4gXFx0eyBYRlNfU0lDS19JTk9fRElSX1pBUFBFRCxcXHRYRlNfQlNfU0lDS19ESVIgfSxcXG4gXFx0eyBYRlNfU0lDS19JTk9fU1lNTElOS19aQVBQRUQsXFx0WEZTX0JTX1NJQ0tfU1lNTElOSyB9LFxcbiBcXHR7IFhGU19TSUNLX0lOT19ESVJUUkVFLFxcdFhGU19CU19TSUNLX0RJUlRSRUUgfSxcXG4rXFx0eyBYRlNfU0lDS19JTk9fRlNWRVJJVFksXFx0WEZTX0JTX1NJQ0tfRlNWRVJJVFkgfSxcXG4gfTtcXG4gXFxuIC8qIEZpbGwgb3V0IGJ1bGtzdGF0IGhlYWx0aCBpbmZvLiAqL1xcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmhcXG5pbmRleCAzNGMxMDM4ZWJmY2RlMS4uMTdjZTA4MzU5MWY0MDggMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oXFxuKysrIGIvZnMveGZzL3hmc19pbm9kZS5oXFxuQEAgLTQxOSw2ICs0MTksMTIgQEAgc3RhdGljIGlubGluZSBib29sIHhmc19pbm9kZV9jYW5fc3dfYXRvbWljX3dyaXRlKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKVxcbiAgKi9cXG4gI2RlZmluZSBYRlNfSVJFTUFQUElOR1xcdFxcdCgxVSBcXHUwMDNjXFx1MDAzYyAxNSlcXG4gXFxuKy8qXFxuKyAqIGZzLXZlcml0eSdzIE1lcmtsZSB0cmVlIGlzIHVuZGVyIGNvbnN0cnVjdGlvbi4gVGhlIGZpbGUgaXMgcmVhZC1vbmx5LCB0aGVcXG4rICogb25seSB3cml0ZXMgaGFwcGVuaW5nIGFyZSBmb3IgdGhlIGZzdmVyaXR5IG1ldGFkYXRhLlxcbisgKi9cXG4rI2RlZmluZSBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTlxcdCgxVSBcXHUwMDNjXFx1MDAzYyAxNilcXG4rXFxuIC8qIEFsbCBpbm9kZSBzdGF0ZSBmbGFncyByZWxhdGVkIHRvIGlub2RlIHJlY2xhaW0uICovXFxuICNkZWZpbmUgWEZTX0FMTF9JUkVDTEFJTV9GTEFHU1xcdChYRlNfSVJFQ0xBSU1BQkxFIHwgXFxcXFxcbiBcXHRcXHRcXHRcXHQgWEZTX0lSRUNMQUlNIHwgXFxcXFxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvY3RsLmMgYi9mcy94ZnMveGZzX2lvY3RsLmNcXG5pbmRleCAxYjUzNzAxYmViZWExYS4uZmM3ODYwYThiNWFiYjEgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19pb2N0bC5jXFxuKysrIGIvZnMveGZzL3hmc19pb2N0bC5jXFxuQEAgLTQ5LDYgKzQ5LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb3VudC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsZWF0dHIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuIFxcbiAvKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIHBvc2l0aXZlIGVycm9yICovXFxuIGludFxcbkBAIC0xNDY2LDYgKzE0NjcsMTkgQEAgeGZzX2ZpbGVfaW9jdGwoXFxuIFxcdGNhc2UgWEZTX0lPQ19WRVJJRllfTUVESUE6XFxuIFxcdFxcdHJldHVybiB4ZnNfaW9jX3ZlcmlmeV9tZWRpYShmaWxwLCBhcmcpO1xcbiBcXG4rXFx0Y2FzZSBGU19JT0NfRU5BQkxFX1ZFUklUWTpcXG4rXFx0XFx0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkpXFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0cmV0dXJuIGZzdmVyaXR5X2lvY3RsX2VuYWJsZShmaWxwLCBhcmcpO1xcbitcXHRjYXNlIEZTX0lPQ19NRUFTVVJFX1ZFUklUWTpcXG4rXFx0XFx0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkpXFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0cmV0dXJuIGZzdmVyaXR5X2lvY3RsX21lYXN1cmUoZmlscCwgYXJnKTtcXG4rXFx0Y2FzZSBGU19JT0NfUkVBRF9WRVJJVFlfTUVUQURBVEE6XFxuK1xcdFxcdGlmICgheGZzX2hhc192ZXJpdHkobXApKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdHJldHVybiBmc3Zlcml0eV9pb2N0bF9yZWFkX21ldGFkYXRhKGZpbHAsIGFyZyk7XFxuK1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvbWFwLmMgYi9mcy94ZnMveGZzX2lvbWFwLmNcXG5pbmRleCAyMjVjM2RlODhkMDNiMS4uYTRkNTY1NjYxOTg5MzEgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19pb21hcC5jXFxuKysrIGIvZnMveGZzL3hmc19pb21hcC5jXFxuQEAgLTMyLDYgKzMyLDggQEBcXG4gI2luY2x1ZGUgXFxcInhmc19ydGJpdG1hcC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGZzX2ljYWNoZS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGZzX3pvbmVfYWxsb2MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19mc3Zlcml0eS5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnN2ZXJpdHkuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgWEZTX0FMTE9DX0FMSUdOKG1wLCBvZmYpIFxcXFxcXG4gXFx0KCgob2ZmKSBcXHUwMDNlXFx1MDAzZSBtcC1cXHUwMDNlbV9hbGxvY3NpemVfbG9nKSBcXHUwMDNjXFx1MDAzYyBtcC1cXHUwMDNlbV9hbGxvY3NpemVfbG9nKVxcbkBAIC04ODMsNiArODg1LDkgQEAgeGZzX2RpcmVjdF93cml0ZV9pb21hcF9iZWdpbihcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgSU9NQVBfQVRPTUlDKVxcbiBcXHRcXHRpb21hcF9mbGFncyB8PSBJT01BUF9GX0FUT01JQ19CSU87XFxuIFxcbitcXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXFxuK1xcdFxcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBDT1cgd3JpdGVzIG1heSBhbGxvY2F0ZSBkZWxhbGxvYyBzcGFjZSBvciBjb252ZXJ0IHVud3JpdHRlbiBDT1dcXG4gXFx0ICogZXh0ZW50cywgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gdGFrZSB0aGUgbG9jayBleGNsdXNpdmVseSBoZXJlLlxcbkBAIC0xNTg5LDcgKzE1OTQsOCBAQCB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oXFxuIFxcdGxvZmZfdFxcdFxcdFxcdGNvdW50LFxcbiBcXHR1bnNpZ25lZFxcdFxcdGZsYWdzLFxcbiBcXHRzdHJ1Y3QgaW9tYXBcXHRcXHQqaW9tYXAsXFxuLVxcdHN0cnVjdCBpb21hcFxcdFxcdCpzcmNtYXApXFxuK1xcdHN0cnVjdCBpb21hcFxcdFxcdCpzcmNtYXAsXFxuK1xcdHUxNlxcdFxcdFxcdGlvbWFwX2ZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBpb21hcF9pdGVyXFx0Kml0ZXIgPVxcbiBcXHRcXHRjb250YWluZXJfb2YoaW9tYXAsIHN0cnVjdCBpb21hcF9pdGVyLCBpb21hcCk7XFxuQEAgLTE1OTksNyArMTYwNSw2IEBAIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihcXG4gXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCA9IGlwLVxcdTAwM2VpX21vdW50O1xcbiBcXHR4ZnNfZmlsZW9mZl90XFx0XFx0b2Zmc2V0X2ZzYiA9IFhGU19CX1RPX0ZTQlQobXAsIG9mZnNldCk7XFxuIFxcdHhmc19maWxlb2ZmX3RcXHRcXHRlbmRfZnNiID0geGZzX2lvbWFwX2VuZF9mc2IobXAsIG9mZnNldCwgY291bnQpO1xcbi1cXHR1MTZcXHRcXHRcXHRpb21hcF9mbGFncyA9IElPTUFQX0ZfU0hBUkVEO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRsb2NrbW9kZSA9IFhGU19JTE9DS19FWENMO1xcbiBcXHR4ZnNfZmlsYmxrc190XFx0XFx0Y291bnRfZnNiO1xcbiBcXHR4ZnNfZXh0bGVuX3RcXHRcXHRpbmRsZW47XFxuQEAgLTE2NjIsNyArMTY2Nyw4IEBAIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihcXG4gXFx0XFx0XFx0XFx0c21hcC5icl9zdGFydG9mZiArIHNtYXAuYnJfYmxvY2tjb3VudCk7XFxuIFxcdFxcdFxcdHhmc190cmltX2V4dGVudChcXHUwMDI2c21hcCwgb2Zmc2V0X2ZzYixcXG4gXFx0XFx0XFx0XFx0XFx0ZW5kX2ZzYiAtIG9mZnNldF9mc2IpO1xcbi1cXHRcXHRcXHRlcnJvciA9IHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBzcmNtYXAsIFxcdTAwMjZzbWFwLCBmbGFncywgMCxcXG4rXFx0XFx0XFx0ZXJyb3IgPSB4ZnNfYm1idF90b19pb21hcChpcCwgc3JjbWFwLCBcXHUwMDI2c21hcCwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdGlvbWFwX2ZsYWdzLFxcbiBcXHRcXHRcXHRcXHRcXHR4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIDApKTtcXG4gXFx0XFx0XFx0aWYgKGVycm9yKVxcbiBcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuQEAgLTE2NzIsNiArMTY3OCw4IEBAIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihcXG4gXFx0aWYgKCFpcC1cXHUwMDNlaV9jb3dmcClcXG4gXFx0XFx0eGZzX2lmb3JrX2luaXRfY293KGlwKTtcXG4gXFxuK1xcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfU0hBUkVEO1xcbitcXG4gXFx0aWYgKCF4ZnNfaWV4dF9sb29rdXBfZXh0ZW50KGlwLCBpcC1cXHUwMDNlaV9jb3dmcCwgb2Zmc2V0X2ZzYiwgXFx1MDAyNmljdXIsIFxcdTAwMjZnb3QpKVxcbiBcXHRcXHRnb3QuYnJfc3RhcnRvZmYgPSBlbmRfZnNiO1xcbiBcXHRpZiAoZ290LmJyX3N0YXJ0b2ZmIFxcdTAwM2M9IG9mZnNldF9mc2IpIHtcXG5AQCAtMTgwMyw5ICsxODExLDEyIEBAIHhmc19idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihcXG4gXFx0aWYgKHhmc19pc19zaHV0ZG93bihtcCkpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4rXFx0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxcbitcXHRcXHRpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xcbitcXG4gXFx0aWYgKHhmc19pc196b25lZF9pbm9kZShpcCkpXFxuIFxcdFxcdHJldHVybiB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCxcXG4tXFx0XFx0XFx0XFx0Y291bnQsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcXG4rXFx0XFx0XFx0XFx0Y291bnQsIGZsYWdzLCBpb21hcCwgc3JjbWFwLCBpb21hcF9mbGFncyk7XFxuIFxcbiBcXHQvKiB3ZSBjYW4ndCB1c2UgZGVsYXllZCBhbGxvY2F0aW9ucyB3aGVuIHVzaW5nIGV4dGVudCBzaXplIGhpbnRzICovXFxuIFxcdGlmICh4ZnNfZ2V0X2V4dHN6X2hpbnQoaXApKVxcbkBAIC0yMTkxLDEyICsyMjAyLDE3IEBAIHhmc19yZWFkX2lvbWFwX2JlZ2luKFxcbiBcXHRib29sXFx0XFx0XFx0c2hhcmVkID0gZmFsc2U7XFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdGxvY2ttb2RlID0gWEZTX0lMT0NLX1NIQVJFRDtcXG4gXFx0dTY0XFx0XFx0XFx0c2VxO1xcbitcXHR1bnNpZ25lZCBpbnRcXHRcXHRpb21hcF9mbGFncyA9IDA7XFxuIFxcbiBcXHRBU1NFUlQoIShmbGFncyBcXHUwMDI2IChJT01BUF9XUklURSB8IElPTUFQX1pFUk8pKSk7XFxuIFxcbiBcXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbitcXHRpZiAoZnN2ZXJpdHlfYWN0aXZlKGlub2RlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKG9mZnNldCBcXHUwMDNlPSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSkpXFxuK1xcdFxcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XFxuK1xcbiBcXHRlcnJvciA9IHhmc19pbG9ja19mb3JfaW9tYXAoaXAsIGZsYWdzLCBcXHUwMDI2bG9ja21vZGUpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG5AQCAtMjIxMCw4ICsyMjI2LDkgQEAgeGZzX3JlYWRfaW9tYXBfYmVnaW4oXFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHR0cmFjZV94ZnNfaW9tYXBfZm91bmQoaXAsIG9mZnNldCwgbGVuZ3RoLCBYRlNfREFUQV9GT1JLLCBcXHUwMDI2aW1hcCk7XFxuLVxcdHJldHVybiB4ZnNfYm1idF90b19pb21hcChpcCwgaW9tYXAsIFxcdTAwMjZpbWFwLCBmbGFncyxcXG4tXFx0XFx0XFx0XFx0IHNoYXJlZCA/IElPTUFQX0ZfU0hBUkVEIDogMCwgc2VxKTtcXG4rXFx0aW9tYXBfZmxhZ3MgfD0gc2hhcmVkID8gSU9NQVBfRl9TSEFSRUQgOiAwO1xcbitcXG4rXFx0cmV0dXJuIHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXFx1MDAyNmltYXAsIGZsYWdzLCBpb21hcF9mbGFncywgc2VxKTtcXG4gfVxcbiBcXG4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyB4ZnNfcmVhZF9pb21hcF9vcHMgPSB7XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9wcy5jIGIvZnMveGZzL3hmc19pb3BzLmNcXG5pbmRleCA2MzM5ZjQ5NTZlY2IzOS4uNzA2MzdjZGNjMjk5NzIgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19pb3BzLmNcXG4rKysgYi9mcy94ZnMveGZzX2lvcHMuY1xcbkBAIC0zNSw2ICszNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWN1cml0eS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXZlcnNpb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpZW1hcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnN2ZXJpdHkuaFxcdTAwM2VcXG4gXFxuIC8qXFxuICAqIERpcmVjdG9yaWVzIGhhdmUgZGlmZmVyZW50IGxvY2sgb3JkZXIgdy5yLnQuIG1tYXBfbG9jayBjb21wYXJlZCB0byByZWd1bGFyXFxuQEAgLTU4MCw2ICs1ODEsMTAgQEAgeGZzX3JlcG9ydF9kaW9hbGlnbihcXG4gXFx0c3RydWN0IGJsb2NrX2RldmljZVxcdCpiZGV2ID0gdGFyZ2V0LVxcdTAwM2VidF9iZGV2O1xcbiBcXG4gXFx0c3RhdC1cXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfRElPQUxJR04gfCBTVEFUWF9ESU9fUkVBRF9BTElHTjtcXG4rXFxuK1xcdGlmIChmc3Zlcml0eV9hY3RpdmUoVkZTX0koaXApKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0c3RhdC1cXHUwMDNlZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChiZGV2KSArIDE7XFxuIFxcbiBcXHQvKlxcbkBAIC0xMzcwLDYgKzEzNzUsOCBAQCB4ZnNfaW5vZGVfc2hvdWxkX2VuYWJsZV9kYXgoXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0aWYgKCF4ZnNfaW5vZGVfc3VwcG9ydHNfZGF4KGlwKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoaXAtXFx1MDAzZWlfZGlmbGFnczIgXFx1MDAyNiBYRlNfRElGTEFHMl9WRVJJVFkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0aWYgKHhmc19oYXNfZGF4X2Fsd2F5cyhpcC1cXHUwMDNlaV9tb3VudCkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRpZiAoaXAtXFx1MDAzZWlfZGlmbGFnczIgXFx1MDAyNiBYRlNfRElGTEFHMl9EQVgpXFxuQEAgLTEzOTgsMTIgKzE0MDUsMTUgQEAgeGZzX2RpZmxhZ3NfdG9faWZsYWdzKFxcbiBcXHRcXHRmbGFncyB8PSBTX05PQVRJTUU7XFxuIFxcdGlmIChpbml0IFxcdTAwMjZcXHUwMDI2IHhmc19pbm9kZV9zaG91bGRfZW5hYmxlX2RheChpcCkpXFxuIFxcdFxcdGZsYWdzIHw9IFNfREFYO1xcbitcXHRpZiAoeGZsYWdzIFxcdTAwMjYgRlNfWEZMQUdfVkVSSVRZKVxcbitcXHRcXHRmbGFncyB8PSBTX1ZFUklUWTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFNfREFYIGNhbiBvbmx5IGJlIHNldCBkdXJpbmcgaW5vZGUgaW5pdGlhbGl6YXRpb24gYW5kIGlzIG5ldmVyIHNldCBieVxcbiBcXHQgKiB0aGUgVkZTLCBzbyB3ZSBjYW5ub3QgbWFzayBvZmYgU19EQVggaW4gaV9mbGFncy5cXG4gXFx0ICovXFxuLVxcdGlub2RlLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjY9IH4oU19JTU1VVEFCTEUgfCBTX0FQUEVORCB8IFNfU1lOQyB8IFNfTk9BVElNRSk7XFxuK1xcdGlub2RlLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjY9XFxuK1xcdFxcdH4oU19JTU1VVEFCTEUgfCBTX0FQUEVORCB8IFNfU1lOQyB8IFNfTk9BVElNRSB8IFNfVkVSSVRZKTtcXG4gXFx0aW5vZGUtXFx1MDAzZWlfZmxhZ3MgfD0gZmxhZ3M7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jIGIvZnMveGZzL3hmc19tZXNzYWdlLmNcXG5pbmRleCAwMjQzZTUwOWE0Njg5MS4uNDRiMTNkNDYwNDljNjIgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19tZXNzYWdlLmNcXG4rKysgYi9mcy94ZnMveGZzX21lc3NhZ2UuY1xcbkBAIC0xNDksNiArMTQ5LDEwIEBAIHhmc193YXJuX2V4cGVyaW1lbnRhbChcXG4gXFx0XFx0XFx0Lm9wc3RhdGVcXHQ9IFhGU19PUFNUQVRFX1dBUk5FRF9MQVJQLFxcbiBcXHRcXHRcXHQubmFtZVxcdFxcdD0gXFxcImxvZ2dlZCBleHRlbmRlZCBhdHRyaWJ1dGVzXFxcIixcXG4gXFx0XFx0fSxcXG4rXFx0XFx0W1hGU19FWFBFUklNRU5UQUxfRlNWRVJJVFldID0ge1xcbitcXHRcXHRcXHQub3BzdGF0ZVxcdD0gWEZTX09QU1RBVEVfV0FSTkVEX0ZTVkVSSVRZLFxcbitcXHRcXHRcXHQubmFtZVxcdFxcdD0gXFxcImZzdmVyaXR5XFxcIixcXG4rXFx0XFx0fSxcXG4gXFx0fTtcXG4gXFx0QVNTRVJUKGZlYXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBmZWF0IFxcdTAwM2MgWEZTX0VYUEVSSU1FTlRBTF9NQVgpO1xcbiBcXHRCVUlMRF9CVUdfT04oQVJSQVlfU0laRShmZWF0dXJlcykgIT0gWEZTX0VYUEVSSU1FTlRBTF9NQVgpO1xcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21lc3NhZ2UuaCBiL2ZzL3hmcy94ZnNfbWVzc2FnZS5oXFxuaW5kZXggODExYjg4NWY0MWMzNWEuLjM2NGZjYzdlNDJiMDg0IDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5oXFxuKysrIGIvZnMveGZzL3hmc19tZXNzYWdlLmhcXG5AQCAtOTMsNiArOTMsNyBAQCB2b2lkIHhmc19idWZfYWxlcnRfcmF0ZWxpbWl0ZWQoc3RydWN0IHhmc19idWYgKmJwLCBjb25zdCBjaGFyICpybG1zZyxcXG4gZW51bSB4ZnNfZXhwZXJpbWVudGFsX2ZlYXQge1xcbiBcXHRYRlNfRVhQRVJJTUVOVEFMX1NIUklOSyxcXG4gXFx0WEZTX0VYUEVSSU1FTlRBTF9MQVJQLFxcbitcXHRYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZLFxcbiBcXG4gXFx0WEZTX0VYUEVSSU1FTlRBTF9NQVgsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbW91bnQuaCBiL2ZzL3hmcy94ZnNfbW91bnQuaFxcbmluZGV4IDY2YTAyZDFiOWFkN2ExLi44NzVjOWIwZjhlOTkxZiAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX21vdW50LmhcXG4rKysgYi9mcy94ZnMveGZzX21vdW50LmhcXG5AQCAtMzg4LDYgKzM4OCw3IEBAIHR5cGVkZWYgc3RydWN0IHhmc19tb3VudCB7XFxuICNkZWZpbmUgWEZTX0ZFQVRfRVhDSEFOR0VfUkFOR0VcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAyNylcXHQvKiBleGNoYW5nZSByYW5nZSAqL1xcbiAjZGVmaW5lIFhGU19GRUFUX01FVEFESVJcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAyOClcXHQvKiBtZXRhZGF0YSBkaXJlY3RvcnkgdHJlZSAqL1xcbiAjZGVmaW5lIFhGU19GRUFUX1pPTkVEXFx0XFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgMjkpXFx0Lyogem9uZWQgUlQgZGV2aWNlICovXFxuKyNkZWZpbmUgWEZTX0ZFQVRfVkVSSVRZXFx0XFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgMzApXFx0LyogZnMtdmVyaXR5ICovXFxuIFxcbiAvKiBNb3VudCBmZWF0dXJlcyAqL1xcbiAjZGVmaW5lIFhGU19GRUFUX05PTElGRVRJTUVcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyA0NylcXHQvKiBkaXNhYmxlIGxpZmV0aW1lIGhpbnRzICovXFxuQEAgLTQ0NSw2ICs0NDYsNyBAQCBfX1hGU19IQVNfRkVBVChleGNoYW5nZV9yYW5nZSwgRVhDSEFOR0VfUkFOR0UpXFxuIF9fWEZTX0hBU19GRUFUKG1ldGFkaXIsIE1FVEFESVIpXFxuIF9fWEZTX0hBU19GRUFUKHpvbmVkLCBaT05FRClcXG4gX19YRlNfSEFTX0ZFQVQobm9saWZldGltZSwgTk9MSUZFVElNRSlcXG4rX19YRlNfSEFTX0ZFQVQodmVyaXR5LCBWRVJJVFkpXFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2hhc19ydGdyb3Vwcyhjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcClcXG4ge1xcbkBAIC01ODIsNiArNTg0LDggQEAgX19YRlNfSEFTX0ZFQVQobm91dWlkLCBOT1VVSUQpXFxuICNkZWZpbmUgWEZTX09QU1RBVEVfUkVTVU1JTkdfUVVPVEFPTlxcdDE4XFxuIC8qIChab25lZCkgR0MgaXMgaW4gcHJvZ3Jlc3MgKi9cXG4gI2RlZmluZSBYRlNfT1BTVEFURV9aT05FR0NfUlVOTklOR1xcdDIwXFxuKy8qIEtlcm5lbCBoYXMgbG9nZ2VkIGEgd2FybmluZyBhYm91dCBmc3Zlcml0eSBzdXBwb3J0ICovXFxuKyNkZWZpbmUgWEZTX09QU1RBVEVfV0FSTkVEX0ZTVkVSSVRZXFx0MjFcXG4gXFxuICNkZWZpbmUgX19YRlNfSVNfT1BTVEFURShuYW1lLCBOQU1FKSBcXFxcXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB4ZnNfaXNfICMjIG5hbWUgKHN0cnVjdCB4ZnNfbW91bnQgKm1wKSBcXFxcXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfc3VwZXIuYyBiL2ZzL3hmcy94ZnNfc3VwZXIuY1xcbmluZGV4IDg1MzFkNTI2ZmM0NDA5Li5hNzc3NGQyZDZiMjNmYyAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX3N1cGVyLmNcXG4rKysgYi9mcy94ZnMveGZzX3N1cGVyLmNcXG5AQCAtMzAsNiArMzAsNyBAQFxcbiAjaW5jbHVkZSBcXFwieGZzX2ZpbGVzdHJlYW0uaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhmc19xdW90YS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGZzX3N5c2ZzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfZnN2ZXJpdHkuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhmc19vbmRpc2suaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhmc19ybWFwX2l0ZW0uaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhmc19yZWZjb3VudF9pdGVtLmhcXFwiXFxuQEAgLTE2ODksNiArMTY5MCw5IEBAIHhmc19mc19maWxsX3N1cGVyKFxcbiBcXHRzYi1cXHUwMDNlc19xdW90YV90eXBlcyA9IFFUWVBFX01BU0tfVVNSIHwgUVRZUEVfTUFTS19HUlAgfCBRVFlQRV9NQVNLX1BSSjtcXG4gI2VuZGlmXFxuIFxcdHNiLVxcdTAwM2VzX29wID0gXFx1MDAyNnhmc19zdXBlcl9vcGVyYXRpb25zO1xcbisjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxcbitcXHRzYi1cXHUwMDNlc192b3AgPSBcXHUwMDI2eGZzX2ZzdmVyaXR5X29wcztcXG4rI2VuZGlmXFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBEZWxheSBtb3VudCB3b3JrIGlmIHRoZSBkZWJ1ZyBob29rIGlzIHNldC4gVGhpcyBpcyBkZWJ1Z1xcbkBAIC0xOTQxLDYgKzE5NDUsOSBAQCB4ZnNfZnNfZmlsbF9zdXBlcihcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRnb3RvIG91dF9maWxlc3RyZWFtX3VubW91bnQ7XFxuIFxcbitcXHRpZiAoeGZzX2hhc192ZXJpdHkobXApKVxcbitcXHRcXHR4ZnNfd2Fybl9leHBlcmltZW50YWwobXAsIFhGU19FWFBFUklNRU5UQUxfRlNWRVJJVFkpO1xcbitcXG4gXFx0cm9vdCA9IGlncmFiKFZGU19JKG1wLVxcdTAwM2VtX3Jvb3RpcCkpO1xcbiBcXHRpZiAoIXJvb3QpIHtcXG4gXFx0XFx0ZXJyb3IgPSAtRU5PRU5UO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmggYi9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmhcXG5pbmRleCA2YzQ2N2RlZDk3NTFmYy4uZjk0MzMzMzJjMjc0YmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oXFxuQEAgLTEyNCw2ICsxMjQsOCBAQCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB7XFxuIFxcdCAqIEBidWY6IHRoZSBNZXJrbGUgdHJlZSBibG9jayB0byB3cml0ZVxcbiBcXHQgKiBAcG9zOiB0aGUgcG9zaXRpb24gb2YgdGhlIGJsb2NrIGluIHRoZSBNZXJrbGUgdHJlZSAoaW4gYnl0ZXMpXFxuIFxcdCAqIEBzaXplOiB0aGUgTWVya2xlIHRyZWUgYmxvY2sgc2l6ZSAoaW4gYnl0ZXMpXFxuK1xcdCAqIEB6ZXJvX2RpZ2VzdDogdGhlIGhhc2ggb2YgdGhlIGFsbC16ZXJvZXMgYmxvY2tcXG4rXFx0ICogQGRpZ2VzdF9zaXplOiBzaXplIG9mIHplcm9fZGlnZXN0LCBpbiBieXRlc1xcbiBcXHQgKlxcbiBcXHQgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIGJldHdlZW4gLVxcdTAwM2ViZWdpbl9lbmFibGVfdmVyaXR5KCkgYW5kXFxuIFxcdCAqIC1cXHUwMDNlZW5kX2VuYWJsZV92ZXJpdHkoKS5cXG5AQCAtMTMxLDcgKzEzMyw5IEBAIHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHtcXG4gXFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlXFxuIFxcdCAqL1xcbiBcXHRpbnQgKCp3cml0ZV9tZXJrbGVfdHJlZV9ibG9jaykoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1ZixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgdTggKnplcm9fZGlnZXN0LFxcbitcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKTtcXG4gfTtcXG4gXFxuICNpZmRlZiBDT05GSUdfRlNfVkVSSVRZXFxuQEAgLTMxNywxMCArMzIxLDE0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZzdmVyaXR5X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK2ludCBmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8oc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcbiB2b2lkIGZzdmVyaXR5X2NsZWFudXBfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XFxuIFxcbiBzdHJ1Y3QgcGFnZSAqZ2VuZXJpY19yZWFkX21lcmtsZV90cmVlX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCk7XFxuIHZvaWQgZ2VuZXJpY19yZWFkYWhlYWRfbWVya2xlX3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4gXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuK2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcXG4rXFx0XFx0XFx0ICAgIGxvZmZfdCBwb3MpO1xcbiBcXG4gI2VuZGlmXFx0LyogX0xJTlVYX0ZTVkVSSVRZX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXFxuaW5kZXggNTZiNDNkNTk0ZTZlMjkuLjM2ZmM5MzEzODJhODc2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxcbkBAIC0xMCw2ICsxMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbV90eXBlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYmxrZGV2LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mb2xpb19iYXRjaC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdF9zb3J0LmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgYWRkcmVzc19zcGFjZTtcXG4gc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbztcXG5AQCAtNDg4LDcgKzQ4OSw5IEBAIHN0cnVjdCBpb21hcF9pb2VuZCAqaW9tYXBfc3BsaXRfaW9lbmQoc3RydWN0IGlvbWFwX2lvZW5kICppb2VuZCxcXG4gdm9pZCBpb21hcF9maW5pc2hfaW9lbmRzKHN0cnVjdCBpb21hcF9pb2VuZCAqaW9lbmQsIGludCBlcnJvcik7XFxuIHZvaWQgaW9tYXBfaW9lbmRfdHJ5X21lcmdlKHN0cnVjdCBpb21hcF9pb2VuZCAqaW9lbmQsXFxuIFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKm1vcmVfaW9lbmRzKTtcXG4tdm9pZCBpb21hcF9zb3J0X2lvZW5kcyhzdHJ1Y3QgbGlzdF9oZWFkICppb2VuZF9saXN0KTtcXG4raW50IGlvbWFwX2lvZW5kX2NvbXBhcmUodm9pZCAqcHJpdiwgY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqYSxcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqYik7XFxuK3ZvaWQgaW9tYXBfc29ydF9pb2VuZHMoc3RydWN0IGxpc3RfaGVhZCAqaW9lbmRfbGlzdCwgbGlzdF9jbXBfZnVuY190IGNtcCk7XFxuIHNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdGxvZmZfdCBwb3MsIGxvZmZfdCBlbmRfcG9zLCB1bnNpZ25lZCBpbnQgZGlydHlfbGVuKTtcXG4gaW50IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgaW50IGVycm9yKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTM6NTg6NDMuNzA2NDc1MzI5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTg0NzQ2MzQyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNfVkVSSVRZXCIsXG4gICAgXCJYRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZVwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGVcIixcbiAgICBcInhmc19mc3Zlcml0eV9yZWFkYWhlYWRfbWVya2xlX3RyZWVcIixcbiAgICBcInhmc19mc3Zlcml0eV93cml0ZV9tZXJrbGVcIixcbiAgICBcInhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGFcIixcbiAgICBcInhmc19mc3Zlcml0eV9jYW5jZWxfdW53cml0dGVuXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvclwiLFxuICAgIFwieGNoa19pbm9kZV9zZXR1cF92ZXJpdHlcIixcbiAgICBcInhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlblwiLFxuICAgIFwieHJlcF9pbm9kZV92ZXJpdHlcIixcbiAgICBcInhmc19yZWFkX2lvZW5kX2NvbXBhcmVcIixcbiAgICBcInhmc19lbmRfaW9lbmRfcmVhZFwiLFxuICAgIFwieGZzX2lvbWFwX3dyaXRlcGFnZXNcIixcbiAgICBcImZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mb1wiLFxuICAgIFwiZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGZzLXZlcml0eSBzdXBwb3J0IGZvciB0aGUgWEZTIGZpbGVzeXN0ZW0uIEl0IGludHJvZHVjZXMgYSBuZXcgZmlsZSBgZnMveGZzL3hmc19mc3Zlcml0eS5jYCB3aXRoIHRoZSBjb3JlIGxvZ2ljLCBtb2RpZmllcyBYRlMgSS9PIHBhdGhzLCBhbmQgaW50ZWdyYXRlcyB3aXRoIHRoZSBnZW5lcmljIGZzLXZlcml0eSBsYXllci4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2QxYjNjNWRkOGFhNWQ4MDMyMjNjZGZlZGFjYzAyYjY0YjI2Y2VkNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDEzOjU4OjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYXR0ci5jIGIvZnMvYXR0ci5jXG5pbmRleCA0ZjQzN2ZhYmI3ZjBmNS4uNzE4ODhhYzkwM2MyN2QgMTAwNjQ0XG4tLS0gYS9mcy9hdHRyLmNcbisrKyBiL2ZzL2F0dHIuY1xuQEAgLTE3Niw3ICsxNzYsNyBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRcdCAqIGNvdmVyZWQgYnkgdGhlIG9wZW4tdGltZSBjaGVjayBiZWNhdXNlIHN5c190cnVuY2F0ZSgpIHRha2VzIGFcbiBcdFx0ICogcGF0aCwgbm90IGFuIG9wZW4gZmlsZS5cbiBcdFx0ICovXG4tXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19WRVJJVFkpIFx1MDAyNlx1MDAyNiBJU19WRVJJVFkoaW5vZGUpKVxuK1x0XHRpZiAoSVNfVkVSSVRZKGlub2RlKSlcbiBcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIFxuIFx0XHRlcnJvciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIGF0dHItXHUwMDNlaWFfc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmNcbmluZGV4IDI3MjU5OGY2YWU3N2FmLi5kZTcyOWM0NGQ2ZDI1MSAxMDA2NDRcbi0tLSBhL2ZzL2J0cmZzL2lub2RlLmNcbisrKyBiL2ZzL2J0cmZzL2lub2RlLmNcbkBAIC04MDQwLDcgKzgwNDAsNiBAQCBzdGF0aWMgaW50IGJ0cmZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShwYXRoLVx1MDAzZWRlbnRyeSk7XG4gXHR1MzIgYmxvY2tzaXplID0gYnRyZnNfc2IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc2VjdG9yc2l6ZTtcbiBcdHUzMiBiaV9mbGFncyA9IEJUUkZTX0koaW5vZGUpLVx1MDAzZWZsYWdzO1xuLVx0dTMyIGJpX3JvX2ZsYWdzID0gQlRSRlNfSShpbm9kZSktXHUwMDNlcm9fZmxhZ3M7XG4gXG4gXHRzdGF0LVx1MDAzZXJlc3VsdF9tYXNrIHw9IFNUQVRYX0JUSU1FO1xuIFx0c3RhdC1cdTAwM2VidGltZS50dl9zZWMgPSBCVFJGU19JKGlub2RlKS1cdTAwM2VpX290aW1lX3NlYztcbkBAIC04MDUzLDggKzgwNTIsNiBAQCBzdGF0aWMgaW50IGJ0cmZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0lNTVVUQUJMRTtcbiBcdGlmIChiaV9mbGFncyBcdTAwMjYgQlRSRlNfSU5PREVfTk9EVU1QKVxuIFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9OT0RVTVA7XG4tXHRpZiAoYmlfcm9fZmxhZ3MgXHUwMDI2IEJUUkZTX0lOT0RFX1JPX1ZFUklUWSlcbi1cdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfVkVSSVRZO1xuIFxuIFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzX21hc2sgfD0gKFNUQVRYX0FUVFJfQVBQRU5EIHxcbiBcdFx0XHRcdCAgU1RBVFhfQVRUUl9DT01QUkVTU0VEIHxcbmRpZmYgLS1naXQgYS9mcy9idHJmcy92ZXJpdHkuYyBiL2ZzL2J0cmZzL3Zlcml0eS5jXG5pbmRleCA5ODMzNjVhNzM1NDE2OC4uYmQ3OWUzNDNhZTIzN2YgMTAwNjQ0XG4tLS0gYS9mcy9idHJmcy92ZXJpdHkuY1xuKysrIGIvZnMvYnRyZnMvdmVyaXR5LmNcbkBAIC03NzMsMTEgKzc3MywxNSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmJ0cmZzX3JlYWRfbWVya2xlX3RyZWVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuICAqIEBidWY6XHRNZXJrbGUgdHJlZSBibG9jayB0byB3cml0ZVxuICAqIEBwb3M6XHR0aGUgcG9zaXRpb24gb2YgdGhlIGJsb2NrIGluIHRoZSBNZXJrbGUgdHJlZSAoaW4gYnl0ZXMpXG4gICogQHNpemU6XHR0aGUgTWVya2xlIHRyZWUgYmxvY2sgc2l6ZSAoaW4gYnl0ZXMpXG4rICogQHplcm9fZGlnZXN0Olx0dGhlIGhhc2ggb2YgdGhlIGFsbC16ZXJvZXMgYmxvY2tcbisgKiBAZGlnZXN0X3NpemU6XHRzaXplIG9mIHplcm9fZGlnZXN0LCBpbiBieXRlc1xuICAqXG4gICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlXG4gICovXG4gc3RhdGljIGludCBidHJmc193cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLFxuLVx0XHRcdFx0XHQgdTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUpXG4rXHRcdFx0XHRcdCB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbitcdFx0XHRcdFx0IGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCxcbitcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBkaWdlc3Rfc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbiBcdGxvZmZfdCBtZXJrbGVfcG9zID0gbWVya2xlX2ZpbGVfcG9zKGlub2RlKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi45OWZhN2EyODk1MWY1ZSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtNjI1MCwxNSArNjI1MCwxMiBAQCBpbnQgZXh0NF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbiBcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfSU1NVVRBQkxFO1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X05PRFVNUF9GTClcbiBcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfTk9EVU1QO1xuLVx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X1ZFUklUWV9GTClcbi1cdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfVkVSSVRZO1xuIFxuIFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzX21hc2sgfD0gKFNUQVRYX0FUVFJfQVBQRU5EIHxcbiBcdFx0XHRcdCAgU1RBVFhfQVRUUl9DT01QUkVTU0VEIHxcbiBcdFx0XHRcdCAgU1RBVFhfQVRUUl9FTkNSWVBURUQgfFxuIFx0XHRcdFx0ICBTVEFUWF9BVFRSX0lNTVVUQUJMRSB8XG4tXHRcdFx0XHQgIFNUQVRYX0FUVFJfTk9EVU1QIHxcbi1cdFx0XHRcdCAgU1RBVFhfQVRUUl9WRVJJVFkpO1xuK1x0XHRcdFx0ICBTVEFUWF9BVFRSX05PRFVNUCk7XG4gXG4gXHRnZW5lcmljX2ZpbGxhdHRyKGlkbWFwLCByZXF1ZXN0X21hc2ssIGlub2RlLCBzdGF0KTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvdmVyaXR5LmMgYi9mcy9leHQ0L3Zlcml0eS5jXG5pbmRleCBjYTYxZGE1M2YzMTNmYS4uYWM1YzEzM2Y1NTI5MjUgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3Zlcml0eS5jXG4rKysgYi9mcy9leHQ0L3Zlcml0eS5jXG5AQCAtMzQsMzIgKzM0LDYgQEAgc3RhdGljIGlubGluZSBsb2ZmX3QgZXh0NF92ZXJpdHlfbWV0YWRhdGFfcG9zKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gcm91bmRfdXAoaW5vZGUtXHUwMDNlaV9zaXplLCA2NTUzNik7XG4gfVxuIFxuLS8qXG4tICogUmVhZCBzb21lIHZlcml0eSBtZXRhZGF0YSBmcm9tIHRoZSBpbm9kZS4gIF9fdmZzX3JlYWQoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2Vcbi0gKiB3ZSBuZWVkIHRvIHJlYWQgYmV5b25kIGlfc2l6ZS5cbi0gKi9cbi1zdGF0aWMgaW50IHBhZ2VjYWNoZV9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LFxuLVx0XHRcdCAgbG9mZl90IHBvcylcbi17XG4tXHR3aGlsZSAoY291bnQpIHtcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdFx0c2l6ZV90IG47XG4tXG4tXHRcdGZvbGlvID0gcmVhZF9tYXBwaW5nX2ZvbGlvKGlub2RlLVx1MDAzZWlfbWFwcGluZywgcG9zIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuLVx0XHRcdFx0XHQgTlVMTCk7XG4tXHRcdGlmIChJU19FUlIoZm9saW8pKVxuLVx0XHRcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcbi1cbi1cdFx0biA9IG1lbWNweV9mcm9tX2ZpbGVfZm9saW8oYnVmLCBmb2xpbywgcG9zLCBjb3VudCk7XG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXG4tXHRcdGJ1ZiArPSBuO1xuLVx0XHRwb3MgKz0gbjtcbi1cdFx0Y291bnQgLT0gbjtcbi1cdH1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIFdyaXRlIHNvbWUgdmVyaXR5IG1ldGFkYXRhIHRvIHRoZSBpbm9kZSBmb3IgRlNfSU9DX0VOQUJMRV9WRVJJVFkuXG4gICoga2VybmVsX3dyaXRlKCkgY2FuJ3QgYmUgdXNlZCBiZWNhdXNlIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgcmVhZG9ubHkuXG5AQCAtMzExLDggKzI4NSw4IEBAIHN0YXRpYyBpbnQgZXh0NF9nZXRfdmVyaXR5X2Rlc2NyaXB0b3JfbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0Z290byBiYWQ7XG4gXHRkZXNjX3NpemVfcG9zIC09IHNpemVvZihkZXNjX3NpemVfZGlzayk7XG4gXG4tXHRlcnIgPSBwYWdlY2FjaGVfcmVhZChpbm9kZSwgXHUwMDI2ZGVzY19zaXplX2Rpc2ssIHNpemVvZihkZXNjX3NpemVfZGlzayksXG4tXHRcdFx0ICAgICBkZXNjX3NpemVfcG9zKTtcbitcdGVyciA9IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKGlub2RlLCBcdTAwMjZkZXNjX3NpemVfZGlzayxcbitcdFx0XHRcdCAgICAgIHNpemVvZihkZXNjX3NpemVfZGlzayksIGRlc2Nfc2l6ZV9wb3MpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcdGRlc2Nfc2l6ZSA9IGxlMzJfdG9fY3B1KGRlc2Nfc2l6ZV9kaXNrKTtcbkBAIC0zNTIsNyArMzI2LDcgQEAgc3RhdGljIGludCBleHQ0X2dldF92ZXJpdHlfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsXG4gXHRpZiAoYnVmX3NpemUpIHtcbiBcdFx0aWYgKGRlc2Nfc2l6ZSBcdTAwM2UgYnVmX3NpemUpXG4gXHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4tXHRcdGVyciA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIGRlc2Nfc2l6ZSwgZGVzY19wb3MpO1xuK1x0XHRlcnIgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBkZXNjX3NpemUsIGRlc2NfcG9zKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuQEAgLTM3NCw3ICszNDgsOSBAQCBzdGF0aWMgdm9pZCBleHQ0X3JlYWRhaGVhZF9tZXJrbGVfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIH1cbiBcbiBzdGF0aWMgaW50IGV4dDRfd3JpdGVfbWVya2xlX3RyZWVfYmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1Zixcbi1cdFx0XHRcdFx0dTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUpXG4rXHRcdFx0XHRcdHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxuK1x0XHRcdFx0XHRjb25zdCB1OCAqemVyb19kaWdlc3QsXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCBkaWdlc3Rfc2l6ZSlcbiB7XG4gXHRwb3MgKz0gZXh0NF92ZXJpdHlfbWV0YWRhdGFfcG9zKGZpbGVfaW5vZGUoZmlsZSkpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZmlsZS5jIGIvZnMvZjJmcy9maWxlLmNcbmluZGV4IDRiNTJjNTZkNzFmMDdmLi45YjUzMWEwMTZlZDRkOSAxMDA2NDRcbi0tLSBhL2ZzL2YyZnMvZmlsZS5jXG4rKysgYi9mcy9mMmZzL2ZpbGUuY1xuQEAgLTEwMjQsMTUgKzEwMjQsMTIgQEAgaW50IGYyZnNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXG4gXHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0lNTVVUQUJMRTtcbiBcdGlmIChmbGFncyBcdTAwMjYgRjJGU19OT0RVTVBfRkwpXG4gXHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX05PRFVNUDtcbi1cdGlmIChJU19WRVJJVFkoaW5vZGUpKVxuLVx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9WRVJJVFk7XG4gXG4gXHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXNfbWFzayB8PSAoU1RBVFhfQVRUUl9DT01QUkVTU0VEIHxcbiBcdFx0XHRcdCAgU1RBVFhfQVRUUl9BUFBFTkQgfFxuIFx0XHRcdFx0ICBTVEFUWF9BVFRSX0VOQ1JZUFRFRCB8XG4gXHRcdFx0XHQgIFNUQVRYX0FUVFJfSU1NVVRBQkxFIHxcbi1cdFx0XHRcdCAgU1RBVFhfQVRUUl9OT0RVTVAgfFxuLVx0XHRcdFx0ICBTVEFUWF9BVFRSX1ZFUklUWSk7XG4rXHRcdFx0XHQgIFNUQVRYX0FUVFJfTk9EVU1QKTtcbiBcbiBcdGdlbmVyaWNfZmlsbGF0dHIoaWRtYXAsIHJlcXVlc3RfbWFzaywgaW5vZGUsIHN0YXQpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2YyZnMvdmVyaXR5LmMgYi9mcy9mMmZzL3Zlcml0eS5jXG5pbmRleCAzOWY0ODI1MTU0NDUyYS4uZjNhNDYxNzY1NmRiOWIgMTAwNjQ0XG4tLS0gYS9mcy9mMmZzL3Zlcml0eS5jXG4rKysgYi9mcy9mMmZzL3Zlcml0eS5jXG5AQCAtMzcsMzQgKzM3LDYgQEAgc3RhdGljIGlubGluZSBsb2ZmX3QgZjJmc192ZXJpdHlfbWV0YWRhdGFfcG9zKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gcm91bmRfdXAoaW5vZGUtXHUwMDNlaV9zaXplLCA2NTUzNik7XG4gfVxuIFxuLS8qXG4tICogUmVhZCBzb21lIHZlcml0eSBtZXRhZGF0YSBmcm9tIHRoZSBpbm9kZS4gIF9fdmZzX3JlYWQoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2Vcbi0gKiB3ZSBuZWVkIHRvIHJlYWQgYmV5b25kIGlfc2l6ZS5cbi0gKi9cbi1zdGF0aWMgaW50IHBhZ2VjYWNoZV9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LFxuLVx0XHRcdCAgbG9mZl90IHBvcylcbi17XG4tXHR3aGlsZSAoY291bnQpIHtcbi1cdFx0c2l6ZV90IG4gPSBtaW5fdChzaXplX3QsIGNvdW50LFxuLVx0XHRcdFx0IFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKHBvcykpO1xuLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbi1cbi1cdFx0cGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgcG9zIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuLVx0XHRcdFx0XHQgTlVMTCk7XG4tXHRcdGlmIChJU19FUlIocGFnZSkpXG4tXHRcdFx0cmV0dXJuIFBUUl9FUlIocGFnZSk7XG4tXG4tXHRcdG1lbWNweV9mcm9tX3BhZ2UoYnVmLCBwYWdlLCBvZmZzZXRfaW5fcGFnZShwb3MpLCBuKTtcbi1cbi1cdFx0cHV0X3BhZ2UocGFnZSk7XG4tXG4tXHRcdGJ1ZiArPSBuO1xuLVx0XHRwb3MgKz0gbjtcbi1cdFx0Y291bnQgLT0gbjtcbi1cdH1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIFdyaXRlIHNvbWUgdmVyaXR5IG1ldGFkYXRhIHRvIHRoZSBpbm9kZSBmb3IgRlNfSU9DX0VOQUJMRV9WRVJJVFkuXG4gICoga2VybmVsX3dyaXRlKCkgY2FuJ3QgYmUgdXNlZCBiZWNhdXNlIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgcmVhZG9ubHkuXG5AQCAtMjUwLDcgKzIyMiw3IEBAIHN0YXRpYyBpbnQgZjJmc19nZXRfdmVyaXR5X2Rlc2NyaXB0b3Ioc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLFxuIFx0aWYgKGJ1Zl9zaXplKSB7XG4gXHRcdGlmIChzaXplIFx1MDAzZSBidWZfc2l6ZSlcbiBcdFx0XHRyZXR1cm4gLUVSQU5HRTtcbi1cdFx0cmVzID0gcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1Ziwgc2l6ZSwgcG9zKTtcbitcdFx0cmVzID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1Ziwgc2l6ZSwgcG9zKTtcbiBcdFx0aWYgKHJlcylcbiBcdFx0XHRyZXR1cm4gcmVzO1xuIFx0fVxuQEAgLTI3Miw3ICsyNDQsOSBAQCBzdGF0aWMgdm9pZCBmMmZzX3JlYWRhaGVhZF9tZXJrbGVfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIH1cbiBcbiBzdGF0aWMgaW50IGYyZnNfd3JpdGVfbWVya2xlX3RyZWVfYmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1Zixcbi1cdFx0XHRcdFx0dTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUpXG4rXHRcdFx0XHRcdHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxuK1x0XHRcdFx0XHRjb25zdCB1OCAqemVyb19kaWdlc3QsXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCBkaWdlc3Rfc2l6ZSlcbiB7XG4gXHRwb3MgKz0gZjJmc192ZXJpdHlfbWV0YWRhdGFfcG9zKGZpbGVfaW5vZGUoZmlsZSkpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2ZpbGVfYXR0ci5jIGIvZnMvZmlsZV9hdHRyLmNcbmluZGV4IGJmYjAwZDI1NmRkNTYwLi41NDI0ZWM0ZTM5NDkzZiAxMDA2NDRcbi0tLSBhL2ZzL2ZpbGVfYXR0ci5jXG4rKysgYi9mcy9maWxlX2F0dHIuY1xuQEAgLTI0Niw2ICsyNDYsMTEgQEAgc3RhdGljIGludCBmaWxlYXR0cl9zZXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0aWYgKGZhLVx1MDAzZWZzeF9jb3dleHRzaXplID09IDApXG4gXHRcdGZhLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2PSB+RlNfWEZMQUdfQ09XRVhUU0laRTtcbiBcbitcdC8qIENhbiBub3QgZW5hYmxlIERBWCBvbiBmc3Zlcml0eSBmaWxlICovXG4rXHRpZiAoKG9sZF9tYS1cdTAwM2Vmc3hfeGZsYWdzIFx1MDAyNiBGU19YRkxBR19WRVJJVFkpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdGZhLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX0RBWClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvaW9lbmQuYyBiL2ZzL2lvbWFwL2lvZW5kLmNcbmluZGV4IDA1NjUzMjg3NjRjMTc1Li44ZTQ2YjdmMWFhNmE5NyAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2lvZW5kLmNcbisrKyBiL2ZzL2lvbWFwL2lvZW5kLmNcbkBAIC00LDcgKzQsNiBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby1pbnRlZ3JpdHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X3NvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dyaXRlYmFjay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnNlcnJvci5oXHUwMDNlXG5AQCAtNDI1LDcgKzQyNCw3IEBAIHZvaWQgaW9tYXBfaW9lbmRfdHJ5X21lcmdlKHN0cnVjdCBpb21hcF9pb2VuZCAqaW9lbmQsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2lvZW5kX3RyeV9tZXJnZSk7XG4gXG4tc3RhdGljIGludCBpb21hcF9pb2VuZF9jb21wYXJlKHZvaWQgKnByaXYsIGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmEsXG4raW50IGlvbWFwX2lvZW5kX2NvbXBhcmUodm9pZCAqcHJpdiwgY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqYSxcbiBcdFx0Y29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqYilcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfaW9lbmQgKmlhID0gY29udGFpbmVyX29mKGEsIHN0cnVjdCBpb21hcF9pb2VuZCwgaW9fbGlzdCk7XG5AQCAtNDM3LDEwICs0MzYsMTEgQEAgc3RhdGljIGludCBpb21hcF9pb2VuZF9jb21wYXJlKHZvaWQgKnByaXYsIGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmEsXG4gXHRcdHJldHVybiAxO1xuIFx0cmV0dXJuIDA7XG4gfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2lvZW5kX2NvbXBhcmUpO1xuIFxuLXZvaWQgaW9tYXBfc29ydF9pb2VuZHMoc3RydWN0IGxpc3RfaGVhZCAqaW9lbmRfbGlzdClcbit2b2lkIGlvbWFwX3NvcnRfaW9lbmRzKHN0cnVjdCBsaXN0X2hlYWQgKmlvZW5kX2xpc3QsIGxpc3RfY21wX2Z1bmNfdCBjbXApXG4ge1xuLVx0bGlzdF9zb3J0KE5VTEwsIGlvZW5kX2xpc3QsIGlvbWFwX2lvZW5kX2NvbXBhcmUpO1xuK1x0bGlzdF9zb3J0KE5VTEwsIGlvZW5kX2xpc3QsIGNtcCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3NvcnRfaW9lbmRzKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9zdGF0LmMgYi9mcy9zdGF0LmNcbmluZGV4IDg5OTA5NzQ2YmVkMTllLi5hZTEyOTliZDc0MzY2YyAxMDA2NDRcbi0tLSBhL2ZzL3N0YXQuY1xuKysrIGIvZnMvc3RhdC5jXG5AQCAtMjAzLDggKzIwMywxMiBAQCBpbnQgdmZzX2dldGF0dHJfbm9zZWMoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBrc3RhdCAqc3RhdCxcbiBcdGlmIChJU19EQVgoaW5vZGUpKVxuIFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9EQVg7XG4gXG4rXHRpZiAoSVNfVkVSSVRZKGlub2RlKSlcbitcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfVkVSSVRZO1xuK1xuIFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzX21hc2sgfD0gKFNUQVRYX0FUVFJfQVVUT01PVU5UIHxcbi1cdFx0XHRcdCAgU1RBVFhfQVRUUl9EQVgpO1xuK1x0XHRcdFx0ICBTVEFUWF9BVFRSX0RBWCB8XG4rXHRcdFx0XHQgIFNUQVRYX0FUVFJfVkVSSVRZKTtcbiBcbiBcdGlkbWFwID0gbW50X2lkbWFwKHBhdGgtXHUwMDNlbW50KTtcbiBcdGlmIChpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWdldGF0dHIpIHtcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvZW5hYmxlLmMgYi9mcy92ZXJpdHkvZW5hYmxlLmNcbmluZGV4IDQyZGZlZDFjZTBjZTY2Li5hZDRmZjcxZDdkZDk1YiAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9lbmFibGUuY1xuKysrIGIvZnMvdmVyaXR5L2VuYWJsZS5jXG5AQCAtNTAsNyArNTAsOSBAQCBzdGF0aWMgaW50IHdyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB1OCAqYnVmLFxuIFx0aW50IGVycjtcbiBcbiBcdGVyciA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc192b3AtXHUwMDNld3JpdGVfbWVya2xlX3RyZWVfYmxvY2soZmlsZSwgYnVmLCBwb3MsXG4tXHRcdFx0XHRcdFx0XHQgIHBhcmFtcy1cdTAwM2VibG9ja19zaXplKTtcbitcdFx0XHRcdFx0XHRcdCAgcGFyYW1zLVx1MDAzZWJsb2NrX3NpemUsXG4rXHRcdFx0XHRcdFx0XHQgIHBhcmFtcy1cdTAwM2V6ZXJvX2RpZ2VzdCxcbitcdFx0XHRcdFx0XHRcdCAgcGFyYW1zLVx1MDAzZWRpZ2VzdF9zaXplKTtcbiBcdGlmIChlcnIpXG4gXHRcdGZzdmVyaXR5X2Vycihpbm9kZSwgXCJFcnJvciAlZCB3cml0aW5nIE1lcmtsZSB0cmVlIGJsb2NrICVsdVwiLFxuIFx0XHRcdCAgICAgZXJyLCBpbmRleCk7XG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L29wZW4uYyBiL2ZzL3Zlcml0eS9vcGVuLmNcbmluZGV4IGQwYzU2YTdmYWEzYmIxLi44NzVlODg1MGNjYmFjZSAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9vcGVuLmNcbisrKyBiL2ZzL3Zlcml0eS9vcGVuLmNcbkBAIC0zNDcsNyArMzQ3LDI0IEBAIGludCBmc3Zlcml0eV9nZXRfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4rLyoqXG4rICogZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKCkgLSBjYWNoZSB2ZXJpdHkgaW5mbyBpZiBpdCdzIG5vdCBhbHJlYWR5IGNhY2hlZFxuKyAqIEBpbm9kZTogdGhlIGlub2RlIGZvciB3aGljaCB2ZXJpdHkgaW5mbyBzaG91bGQgYmUgY2FjaGVkXG4rICpcbisgKiBFbnN1cmUgdGhpcyBpbm9kZSBoYXMgdmVyaXR5IGluZm8gYXR0YWNoZWQgdG8gaXQsIGl0J3MgYXNzdW1lZCB0aGUgaW5vZGVcbisgKiBhbHJlYWR5IGhhcyBmc3Zlcml0eSBlbmFibGVkLiBSZWFkIGZzdmVyaXR5IGRlc2NyaXB0b3IgYW5kIGNyZWF0ZXMgdmVyaXR5XG4rICogYmFzZWQgb24gdGhhdC5cbisgKlxuKyAqIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGF0IGxlYXN0IG9uY2UgYmVmb3JlIGFueSBvZiB0aGUgaW5vZGUncyBkYXRhXG4rICogY2FuIGJlIHZlcmlmaWVkIChhbmQgdGh1cyByZWFkIGF0IGFsbCkgb3IgdGhlIGlub2RlJ3MgZnN2ZXJpdHkgZGlnZXN0XG4rICogcmV0cmlldmVkLiAgZnN2ZXJpdHlfZmlsZV9vcGVuKCkgY2FsbHMgdGhpcyBhbHJlYWR5LCB3aGljaCBoYW5kbGVzXG4rICogbm9ybWFsIGZpbGUgYWNjZXNzZXMuICBJZiBhIGZpbGVzeXN0ZW0gZG9lcyBhbnkgaW50ZXJuYWwgKGkuZS4gbm90XG4rICogYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSBkZXNjcmlwdG9yKSByZWFkcyBvZiB0aGUgZmlsZSdzIGRhdGEgb3JcbisgKiBmc3Zlcml0eSBkaWdlc3QsIGl0IG11c3QgY2FsbCB0aGlzIGV4cGxpY2l0bHkgYmVmb3JlIGRvaW5nIHNvLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlXG4rICovXG4raW50IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSA9IGZzdmVyaXR5X2dldF9pbmZvKGlub2RlKSwgKmZvdW5kO1xuIFx0c3RydWN0IGZzdmVyaXR5X2Rlc2NyaXB0b3IgKmRlc2M7XG5AQCAtMzgzLDEyICs0MDAsMTMgQEAgc3RhdGljIGludCBlbnN1cmVfdmVyaXR5X2luZm8oc3RydWN0IGlub2RlICppbm9kZSlcbiBcdGtmcmVlKGRlc2MpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKTtcbiBcbiBpbnQgX19mc3Zlcml0eV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4ge1xuIFx0aWYgKGZpbHAtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbi1cdHJldHVybiBlbnN1cmVfdmVyaXR5X2luZm8oaW5vZGUpO1xuK1x0cmV0dXJuIGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhpbm9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKF9fZnN2ZXJpdHlfZmlsZV9vcGVuKTtcbiBcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvcGFnZWNhY2hlLmMgYi9mcy92ZXJpdHkvcGFnZWNhY2hlLmNcbmluZGV4IDk5ZjVmNTNlZWE5ODVmLi4yNzBhYmQ2NTJlNDhjNiAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9wYWdlY2FjaGUuY1xuKysrIGIvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jXG5AQCAtNjgsMTMgKzY4LDY0IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfcmVhZGFoZWFkX21lcmtsZV90cmVlKTtcbiB2b2lkIGZzdmVyaXR5X2ZpbGxfemVyb2hhc2goc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbixcbiBcdFx0XHQgICAgICBzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmkpXG4ge1xuLVx0c2l6ZV90IG9mZiA9IG9mZnNldDtcbitcdHZvaWQgKnZhZGRyO1xuK1x0dm9pZCAqdG87XG4rXHRzaXplX3QgY2h1bms7XG4gXG4gXHRXQVJOX09OX09OQ0UoIUlTX0FMSUdORUQob2Zmc2V0LCB2aS1cdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSkpO1xuIFx0V0FSTl9PTl9PTkNFKCFJU19BTElHTkVEKGxlbiwgdmktXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpKTtcbitcdFdBUk5fT05fT05DRShvZmZzZXQgKyBsZW4gXHUwMDNlIGZvbGlvX3NpemUoZm9saW8pKTtcbiBcbi1cdGZvciAoOyBvZmYgXHUwMDNjIChvZmZzZXQgKyBsZW4pOyBvZmYgKz0gdmktXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpXG4tXHRcdG1lbWNweV90b19mb2xpbyhmb2xpbywgb2ZmLCB2aS1cdTAwM2V0cmVlX3BhcmFtcy56ZXJvX2RpZ2VzdCxcbitcdGRvIHtcbitcdFx0dmFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBvZmZzZXQpO1xuK1x0XHRjaHVuayA9IGxlbjtcbitcdFx0dG8gPSB2YWRkcjtcbitcbitcdFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbF9rbWFwKGZvbGlvKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGNodW5rIFx1MDAzZSBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpKVxuK1x0XHRcdGNodW5rID0gUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTtcbitcdFx0Zm9yICg7IHRvIFx1MDAzYyAodmFkZHIgKyBjaHVuayk7IHRvICs9IHZpLVx1MDAzZXRyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKVxuK1x0XHRcdG1lbWNweSh0bywgdmktXHUwMDNldHJlZV9wYXJhbXMuemVyb19kaWdlc3QsXG4gXHRcdFx0XHR2aS1cdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSk7XG4rXHRcdGt1bm1hcF9sb2NhbCh2YWRkcik7XG4rXG4rXHRcdG9mZnNldCArPSBjaHVuaztcbitcdFx0bGVuIC09IGNodW5rO1xuK1x0fSB3aGlsZSAobGVuIFx1MDAzZSAwKTtcbitcbitcdGZsdXNoX2RjYWNoZV9mb2xpbyhmb2xpbyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGZzdmVyaXR5X2ZpbGxfemVyb2hhc2gpO1xuK1xuKy8qKlxuKyAqIGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKCkgLSByZWFkIHBhZ2UgYW5kIGNvcHkgZGF0YSB0byBidWZmZXJcbisgKiBAaW5vZGU6XHRjb3B5IGZyb20gdGhpcyBpbm9kZSdzIGFkZHJlc3Mgc3BhY2VcbisgKiBAYnVmOlx0YnVmZmVyIHRvIGNvcHkgdG9cbisgKiBAY291bnQ6XHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuKyAqIEBwb3M6XHRwb3NpdGlvbiBvZiB0aGUgZm9saW8gdG8gY29weSBmcm9tXG4rICpcbisgKiBSZWFkIHNvbWUgdmVyaXR5IG1ldGFkYXRhIGZyb20gdGhlIGlub2RlLiAgX192ZnNfcmVhZCgpIGNhbid0IGJlIHVzZWQgYmVjYXVzZVxuKyAqIHdlIG5lZWQgdG8gcmVhZCBiZXlvbmQgaV9zaXplLlxuKyAqL1xuK2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbitcdFx0XHQgIGxvZmZfdCBwb3MpXG4re1xuK1x0d2hpbGUgKGNvdW50KSB7XG4rXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRcdHNpemVfdCBuO1xuK1xuK1x0XHRmb2xpbyA9IHJlYWRfbWFwcGluZ19mb2xpbyhpbm9kZS1cdTAwM2VpX21hcHBpbmcsIHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbitcdFx0XHRcdFx0IE5VTEwpO1xuK1x0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihmb2xpbyk7XG4rXG4rXHRcdG4gPSBtZW1jcHlfZnJvbV9maWxlX2ZvbGlvKGJ1ZiwgZm9saW8sIHBvcywgY291bnQpO1xuK1x0XHRmb2xpb19wdXQoZm9saW8pO1xuK1xuK1x0XHRidWYgKz0gbjtcbitcdFx0cG9zICs9IG47XG4rXHRcdGNvdW50IC09IG47XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQpO1xuZGlmZiAtLWdpdCBhL2ZzL3Zlcml0eS92ZXJpZnkuYyBiL2ZzL3Zlcml0eS92ZXJpZnkuY1xuaW5kZXggNDAwNGExZDQyODc1MWYuLmRiOGMzNTAyMzRiYjcxIDEwMDY0NFxuLS0tIGEvZnMvdmVyaXR5L3ZlcmlmeS5jXG4rKysgYi9mcy92ZXJpdHkvdmVyaWZ5LmNcbkBAIC05LDYgKzksNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc2Vycm9yLmhcdTAwM2VcbiBcbiAjZGVmaW5lIEZTX1ZFUklUWV9NQVhfUEVORElOR19CTE9DS1MgMlxuIFxuQEAgLTIwNSw2ICsyMDYsOCBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlfZGF0YV9ibG9jayhzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmksXG4gXHRcdGlmIChtZW1jaHJfaW52KGRibG9jay1cdTAwM2VkYXRhLCAwLCBwYXJhbXMtXHUwMDNlYmxvY2tfc2l6ZSkpIHtcbiBcdFx0XHRmc3Zlcml0eV9lcnIoaW5vZGUsXG4gXHRcdFx0XHQgICAgIFwiRklMRSBDT1JSVVBURUQhICBEYXRhIHBhc3QgRU9GIGlzIG5vdCB6ZXJvZWRcIik7XG4rXHRcdFx0ZnNlcnJvcl9yZXBvcnRfZGF0YV9sb3N0KGlub2RlLCBkYXRhX3BvcyxcbitcdFx0XHRcdFx0XHQgcGFyYW1zLVx1MDAzZWJsb2NrX3NpemUsIEdGUF9OT0ZTKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtMzEyLDYgKzMxNSw3IEBAIHN0YXRpYyBib29sIHZlcmlmeV9kYXRhX2Jsb2NrKHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSxcbiBcdFx0ZGF0YV9wb3MsIGxldmVsIC0gMSwgcGFyYW1zLVx1MDAzZWhhc2hfYWxnLVx1MDAzZW5hbWUsIGhzaXplLCB3YW50X2hhc2gsXG4gXHRcdHBhcmFtcy1cdTAwM2VoYXNoX2FsZy1cdTAwM2VuYW1lLCBoc2l6ZSxcbiBcdFx0bGV2ZWwgPT0gMCA/IGRibG9jay1cdTAwM2VyZWFsX2hhc2ggOiByZWFsX2hhc2gpO1xuK1x0ZnNlcnJvcl9yZXBvcnRfZGF0YV9sb3N0KGlub2RlLCBkYXRhX3BvcywgcGFyYW1zLVx1MDAzZWJsb2NrX3NpemUsIEdGUF9OT0ZTKTtcbiBlcnJvcjpcbiBcdGZvciAoOyBsZXZlbCBcdTAwM2UgMDsgbGV2ZWwtLSkge1xuIFx0XHRrdW5tYXBfbG9jYWwoaGJsb2Nrc1tsZXZlbCAtIDFdLmFkZHIpO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9NYWtlZmlsZSBiL2ZzL3hmcy9NYWtlZmlsZVxuaW5kZXggOWY3MTMzZTAyNTc2OGQuLjM4YjdmNTFlNWQ4NDA1IDEwMDY0NFxuLS0tIGEvZnMveGZzL01ha2VmaWxlXG4rKysgYi9mcy94ZnMvTWFrZWZpbGVcbkBAIC0xNDksNiArMTQ5LDcgQEAgeGZzLSQoQ09ORklHX1hGU19QT1NJWF9BQ0wpXHQrPSB4ZnNfYWNsLm9cbiB4ZnMtJChDT05GSUdfU1lTQ1RMKVx0XHQrPSB4ZnNfc3lzY3RsLm9cbiB4ZnMtJChDT05GSUdfQ09NUEFUKVx0XHQrPSB4ZnNfaW9jdGwzMi5vXG4geGZzLSQoQ09ORklHX0VYUE9SVEZTX0JMT0NLX09QUylcdCs9IHhmc19wbmZzLm9cbit4ZnMtJChDT05GSUdfRlNfVkVSSVRZKVx0XHQrPSB4ZnNfZnN2ZXJpdHkub1xuIFxuICMgbm90aWZ5IGZhaWx1cmVcbiBpZmVxICgkKENPTkZJR19NRU1PUllfRkFJTFVSRSkseSlcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmNcbmluZGV4IGQ2NGRlZmVkYTY0NWVkLi5jYzQ4ZjZlMjBlODAwMCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuY1xuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXG5AQCAtNDEsNiArNDEsOCBAQFxuICNpbmNsdWRlIFwieGZzX2lub2RlX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfcnRncm91cC5oXCJcbiAjaW5jbHVkZSBcInhmc196b25lX2FsbG9jLmhcIlxuKyNpbmNsdWRlIFwieGZzX2ZzdmVyaXR5LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiBzdHJ1Y3Qga21lbV9jYWNoZVx0XHQqeGZzX2JtYXBfaW50ZW50X2NhY2hlO1xuIFxuQEAgLTQ0MDIsNiArNDQwNCwxMCBAQCB4ZnNfYm1hcGlfY29udmVydF9vbmVfZGVsYWxsb2MoXG4gXHQgKiB0aGUgZXh0ZW50LiAgSnVzdCByZXR1cm4gdGhlIHJlYWwgZXh0ZW50IGF0IHRoaXMgb2Zmc2V0LlxuIFx0ICovXG4gXHRpZiAoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSkge1xuK1x0XHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBYRlNfRlNCX1RPX0IobXAsIGJtYS5nb3QuYnJfc3RhcnRvZmYpIFx1MDAzZT1cbitcdFx0XHQgICAgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXG4rXHRcdFx0ZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiBcdFx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIGlvbWFwLCBcdTAwMjZibWEuZ290LCAwLCBmbGFncyxcbiBcdFx0XHRcdHhmc19pb21hcF9pbm9kZV9zZXF1ZW5jZShpcCwgZmxhZ3MpKTtcbiBcdFx0aWYgKHNlcSlcbkBAIC00NDQ5LDYgKzQ0NTUsMTEgQEAgeGZzX2JtYXBpX2NvbnZlcnRfb25lX2RlbGFsbG9jKFxuIFx0WEZTX1NUQVRTX0FERChtcCwgeHNfeHN0cmF0X2J5dGVzLCBYRlNfRlNCX1RPX0IobXAsIGJtYS5sZW5ndGgpKTtcbiBcdFhGU19TVEFUU19JTkMobXAsIHhzX3hzdHJhdF9xdWljayk7XG4gXG4rXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikgXHUwMDI2XHUwMDI2XG4rXHQgICAgWEZTX0ZTQl9UT19CKG1wLCBibWEuZ290LmJyX3N0YXJ0b2ZmKSBcdTAwM2U9XG4rXHRcdCAgICB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSlcbitcdFx0ZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbitcbiBcdEFTU0VSVCghaXNudWxsc3RhcnRibG9jayhibWEuZ290LmJyX3N0YXJ0YmxvY2spKTtcbiBcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2Ym1hLmdvdCwgMCwgZmxhZ3MsXG4gXHRcdFx0XHR4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIGZsYWdzKSk7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmggYi9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaFxuaW5kZXggZGQwZWQwNDZmYmU5YzkuLjhiZTFiMTAxYjE5Njk5IDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmhcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oXG5AQCAtMzc0LDExICszNzQsMTMgQEAgeGZzX3NiX2hhc19jb21wYXRfZmVhdHVyZShcbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9STUFQQlQgICAoMSBcdTAwM2NcdTAwM2MgMSlcdFx0LyogcmV2ZXJzZSBtYXAgYnRyZWUgKi9cbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9SRUZMSU5LICAoMSBcdTAwM2NcdTAwM2MgMilcdFx0LyogcmVmbGlua2VkIGZpbGVzICovXG4gI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfSU5PQlRDTlQgKDEgXHUwMDNjXHUwMDNjIDMpXHRcdC8qIGlub2J0IGJsb2NrIGNvdW50cyAqL1xuKyNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSAgICgxIFx1MDAzY1x1MDAzYyA0KVx0XHQvKiBmcy12ZXJpdHkgKi9cbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9BTEwgXFxcbiBcdFx0KFhGU19TQl9GRUFUX1JPX0NPTVBBVF9GSU5PQlQgfCBcXFxuIFx0XHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JNQVBCVCB8IFxcXG4tXHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOS3wgXFxcbi1cdFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVClcbitcdFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9SRUZMSU5LIHwgXFxcbitcdFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVCB8IFxcXG4rXHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZKVxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1VOS05PV05cdH5YRlNfU0JfRkVBVF9ST19DT01QQVRfQUxMXG4gc3RhdGljIGlubGluZSBib29sXG4geGZzX3NiX2hhc19yb19jb21wYXRfZmVhdHVyZShcbkBAIC0xMjMwLDE2ICsxMjMyLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnNfZGlub2RlX3B1dF9yZGV2KHN0cnVjdCB4ZnNfZGlub2RlICpkaXAsIHhmc19kZXZfdCByZGV2KVxuICAqL1xuICNkZWZpbmUgWEZTX0RJRkxBRzJfTUVUQURBVEFfQklUXHQ1XG4gXG4rLyogaW5vZGVzIHNlYWxlZCB3aXRoIGZzLXZlcml0eSAqL1xuKyNkZWZpbmUgWEZTX0RJRkxBRzJfVkVSSVRZX0JJVFx0XHQ2XG4rXG4gI2RlZmluZSBYRlNfRElGTEFHMl9EQVhcdFx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX0RBWF9CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9SRUZMSU5LXHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfUkVGTElOS19CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9DT1dFWFRTSVpFXHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfQ09XRVhUU0laRV9CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9CSUdUSU1FXHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfQklHVElNRV9CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9OUkVYVDY0XHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfTlJFWFQ2NF9CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9NRVRBREFUQVx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX01FVEFEQVRBX0JJVClcbisjZGVmaW5lIFhGU19ESUZMQUcyX1ZFUklUWVx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX1ZFUklUWV9CSVQpXG4gXG4gI2RlZmluZSBYRlNfRElGTEFHMl9BTlkgXFxcbiBcdChYRlNfRElGTEFHMl9EQVggfCBYRlNfRElGTEFHMl9SRUZMSU5LIHwgWEZTX0RJRkxBRzJfQ09XRVhUU0laRSB8IFxcXG4tXHQgWEZTX0RJRkxBRzJfQklHVElNRSB8IFhGU19ESUZMQUcyX05SRVhUNjQgfCBYRlNfRElGTEFHMl9NRVRBREFUQSlcbitcdCBYRlNfRElGTEFHMl9CSUdUSU1FIHwgWEZTX0RJRkxBRzJfTlJFWFQ2NCB8IFhGU19ESUZMQUcyX01FVEFEQVRBIHwgXFxcbitcdCBYRlNfRElGTEFHMl9WRVJJVFkpXG4gXG4gc3RhdGljIGlubGluZSBib29sIHhmc19kaW5vZGVfaGFzX2JpZ3RpbWUoY29uc3Qgc3RydWN0IHhmc19kaW5vZGUgKmRpcClcbiB7XG5AQCAtMjAyNyw0ICsyMDM0LDI2IEBAIHN0cnVjdCB4ZnNfYWNsIHtcbiAjZGVmaW5lIFNHSV9BQ0xfRklMRV9TSVpFXHQoc2l6ZW9mKFNHSV9BQ0xfRklMRSktMSlcbiAjZGVmaW5lIFNHSV9BQ0xfREVGQVVMVF9TSVpFXHQoc2l6ZW9mKFNHSV9BQ0xfREVGQVVMVCktMSlcbiBcbisvKlxuKyAqIEF0IG1heGltdW0gb2YgOCBsZXZlbHMgd2l0aCAxMjggaGFzaGVzIHBlciBibG9jayAoMzIgYnl0ZXMgU0hBLTI1NikgbWF4aW11bVxuKyAqIHRyZWUgc2l6ZSBpcyAoKDEyOF44IOKIkiAxKS8oMTI4IOKIkiAxKSkgPSA1NjcqMTBeMTIgYmxvY2tzLiBUaGlzIHNob3VsZCBmaXQgaW5cbisgKiA1MyBiaXRzIGFkZHJlc3Mgc3BhY2UuXG4rICpcbisgKiBBdCB0aGlzIE1lcmtsZSB0cmVlIHNpemUgd2UgY2FuIGNvdmVyIDI5NUVCIGxhcmdlIGZpbGUuIFRoaXMgaXMgbXVjaCBsYXJnZXJcbisgKiB0aGFuIHRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIGZpbGUgc2l6ZS5cbisgKlxuKyAqIEZvciBzaGE1MTIgdGhlIGxhcmdlc3QgZmlsZSB3ZSBjYW4gY292ZXIgZW5kcyBhdCAxIFx1MDAzY1x1MDAzYyA1MCBvZmZzZXQsIHRoaXMgaXMgYWxzb1xuKyAqIGdvb2QuXG4rICovXG4rI2RlZmluZSBYRlNfRlNWRVJJVFlfTEFSR0VTVF9GSUxFXHQoKGxvZmZfdCkxVUxMIFx1MDAzY1x1MDAzYyA1MylcbitcbisvKlxuKyAqIEFsaWdubWVudCBvZiB0aGUgZnN2ZXJpdHkgbWV0YWRhdGEgcGxhY2VtZW50LiBUaGlzIGlzIGxhcmdlc3Qgc3VwcG9ydGVkIFBBR0VcbisgKiBTSVpFIGZvciBmc3Zlcml0eS4gVGhpcyBpcyB1c2VkIHRvIHNwYWNlIG91dCBkYXRhIGFuZCBtZXRhZGF0YSBpbiBwYWdlIGNhY2hlLlxuKyAqIFRoZSBzcGFjaW5nIGlzIG5lY2Vzc2FyeSBmb3Igbm9uLWV4cG9zdXJlIG9mIG1ldGFkYXRhIHRvIHVzZXJzcGFjZSBhbmRcbisgKiBjb3JyZWN0IG1lcmtsZSB0cmVlIHN5bnRoZXNpcyBpbiB0aGUgaW9tYXAuXG4rICovXG4rI2RlZmluZSBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR05cdCg2NTUzNilcbitcbitcbiAjZW5kaWYgLyogX19YRlNfRk9STUFUX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2ZzLmggYi9mcy94ZnMvbGlieGZzL3hmc19mcy5oXG5pbmRleCAxODVmMDlmMzI3YzAwYy4uODRkNjJiNzUwNmE5YWQgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19mcy5oXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19mcy5oXG5AQCAtMjUwLDYgKzI1MCw3IEBAIHR5cGVkZWYgc3RydWN0IHhmc19mc29wX3Jlc2Jsa3Mge1xuICNkZWZpbmUgWEZTX0ZTT1BfR0VPTV9GTEFHU19QQVJFTlRcdCgxIFx1MDAzY1x1MDAzYyAyNSkgLyogbGludXggcGFyZW50IHBvaW50ZXJzICovXG4gI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX01FVEFESVJcdCgxIFx1MDAzY1x1MDAzYyAyNikgLyogbWV0YWRhdGEgZGlyZWN0b3JpZXMgKi9cbiAjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfWk9ORURcdCgxIFx1MDAzY1x1MDAzYyAyNykgLyogem9uZWQgcnQgZGV2aWNlICovXG4rI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1ZFUklUWVx0KDEgXHUwMDNjXHUwMDNjIDI4KSAvKiBmcy12ZXJpdHkgKi9cbiBcbiAvKlxuICAqIE1pbmltdW0gYW5kIG1heGltdW0gc2l6ZXMgbmVlZCBmb3IgZ3Jvd3RoIGNoZWNrcy5cbkBAIC00MjEsNiArNDIyLDcgQEAgc3RydWN0IHhmc19idWxrc3RhdCB7XG4gI2RlZmluZSBYRlNfQlNfU0lDS19TWU1MSU5LXHQoMSBcdTAwM2NcdTAwM2MgNikgIC8qIHN5bWJvbGljIGxpbmsgcmVtb3RlIHRhcmdldCAqL1xuICNkZWZpbmUgWEZTX0JTX1NJQ0tfUEFSRU5UXHQoMSBcdTAwM2NcdTAwM2MgNykgIC8qIHBhcmVudCBwb2ludGVycyAqL1xuICNkZWZpbmUgWEZTX0JTX1NJQ0tfRElSVFJFRVx0KDEgXHUwMDNjXHUwMDNjIDgpICAvKiBkaXJlY3RvcnkgdHJlZSBzdHJ1Y3R1cmUgKi9cbisjZGVmaW5lIFhGU19CU19TSUNLX0ZTVkVSSVRZXHQoMSBcdTAwM2NcdTAwM2MgOSkgIC8qIGZzdmVyaXR5IG1ldGFkYXRhICovXG4gXG4gLypcbiAgKiBQcm9qZWN0IHF1b3RhIGlkIGhlbHBlcnMgKHByZXZpb3VzbHkgcHJvamlkIHdhcyAxNmJpdCBvbmx5XG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmggYi9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaFxuaW5kZXggMWQ0NWNmNTc4OWU4NjQuLjkzMmI0NDcxOTBkYTc2IDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmhcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oXG5AQCAtMTA0LDYgKzEwNCw3IEBAIHN0cnVjdCB4ZnNfcnRncm91cDtcbiAvKiBEb24ndCBwcm9wYWdhdGUgc2ljayBzdGF0dXMgdG8gYWcgaGVhbHRoIHN1bW1hcnkgZHVyaW5nIGluYWN0aXZhdGlvbiAqL1xuICNkZWZpbmUgWEZTX1NJQ0tfSU5PX0ZPUkdFVFx0KDEgXHUwMDNjXHUwMDNjIDEyKVxuICNkZWZpbmUgWEZTX1NJQ0tfSU5PX0RJUlRSRUVcdCgxIFx1MDAzY1x1MDAzYyAxMykgIC8qIGRpcmVjdG9yeSB0cmVlIHN0cnVjdHVyZSAqL1xuKyNkZWZpbmUgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZXHQoMSBcdTAwM2NcdTAwM2MgMTQpICAvKiBmc3Zlcml0eSBtZXRhZGF0YSAqL1xuIFxuIC8qIFByaW1hcnkgZXZpZGVuY2Ugb2YgaGVhbHRoIHByb2JsZW1zIGluIGEgZ2l2ZW4gZ3JvdXAuICovXG4gI2RlZmluZSBYRlNfU0lDS19GU19QUklNQVJZXHQoWEZTX1NJQ0tfRlNfQ09VTlRFUlMgfCBcXFxuQEAgLTE0MCw3ICsxNDEsOCBAQCBzdHJ1Y3QgeGZzX3J0Z3JvdXA7XG4gXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX1hBVFRSIHwgXFxcbiBcdFx0XHRcdCBYRlNfU0lDS19JTk9fU1lNTElOSyB8IFxcXG4gXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX1BBUkVOVCB8IFxcXG4tXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX0RJUlRSRUUpXG4rXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX0RJUlRSRUUgfCBcXFxuK1x0XHRcdFx0IFhGU19TSUNLX0lOT19GU1ZFUklUWSlcbiBcbiAjZGVmaW5lIFhGU19TSUNLX0lOT19aQVBQRURcdChYRlNfU0lDS19JTk9fQk1CVERfWkFQUEVEIHwgXFxcbiBcdFx0XHRcdCBYRlNfU0lDS19JTk9fQk1CVEFfWkFQUEVEIHwgXFxcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX2J1Zi5jXG5pbmRleCAzMzZlZjg0M2YyZmU0Zi4uYmQ4MGExOWYyZTA5MjkgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuY1xuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmNcbkBAIC03NjAsNiArNzYwLDE0IEBAIHhmc19kaW5vZGVfdmVyaWZ5KFxuIFx0ICAgICF4ZnNfaGFzX3J0cmVmbGluayhtcCkpXG4gXHRcdHJldHVybiBfX3RoaXNfYWRkcmVzcztcbiBcbitcdC8qIG9ubHkgcmVndWxhciBmaWxlcyBjYW4gaGF2ZSBmc3Zlcml0eSAqL1xuK1x0aWYgKGZsYWdzMiBcdTAwMjYgWEZTX0RJRkxBRzJfVkVSSVRZKSB7XG4rXHRcdGlmICgheGZzX2hhc192ZXJpdHkobXApKVxuK1x0XHRcdHJldHVybiBfX3RoaXNfYWRkcmVzcztcbitcdFx0aWYgKCFTX0lTUkVHKG1vZGUpKVxuK1x0XHRcdHJldHVybiBfX3RoaXNfYWRkcmVzcztcbitcdH1cbitcbiBcdGlmICh4ZnNfaGFzX3pvbmVkKG1wKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBkaXAtXHUwMDNlZGlfbWV0YXR5cGUgPT0gY3B1X3RvX2JlMTYoWEZTX01FVEFGSUxFX1JUUk1BUCkpIHtcbiBcdFx0aWYgKGJlMzJfdG9fY3B1KGRpcC1cdTAwM2VkaV91c2VkX2Jsb2NrcykgXHUwMDNlIG1wLVx1MDAzZW1fc2Iuc2JfcmdleHRlbnRzKVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuY1xuaW5kZXggMjU4YWMzZDBkNDg2ZTYuLjVhNTE2YmQzMWMzMTc1IDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfdXRpbC5jXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmNcbkBAIC03NCw3ICs3NCw4IEBAIHhmc19mbGFnczJkaWZsYWdzMihcbiBcdHVpbnQ2NF90XHRcdGRpX2ZsYWdzMiA9XG4gXHRcdChpcC1cdTAwM2VpX2RpZmxhZ3MyIFx1MDAyNiAoWEZTX0RJRkxBRzJfUkVGTElOSyB8XG4gXHRcdFx0XHQgICBYRlNfRElGTEFHMl9CSUdUSU1FIHxcbi1cdFx0XHRcdCAgIFhGU19ESUZMQUcyX05SRVhUNjQpKTtcbitcdFx0XHRcdCAgIFhGU19ESUZMQUcyX05SRVhUNjQgfFxuK1x0XHRcdFx0ICAgWEZTX0RJRkxBRzJfVkVSSVRZKSk7XG4gXG4gXHRpZiAoeGZsYWdzIFx1MDAyNiBGU19YRkxBR19EQVgpXG4gXHRcdGRpX2ZsYWdzMiB8PSBYRlNfRElGTEFHMl9EQVg7XG5AQCAtMTI2LDYgKzEyNyw4IEBAIHhmc19pcDJ4ZmxhZ3MoXG4gXHRcdFx0ZmxhZ3MgfD0gRlNfWEZMQUdfREFYO1xuIFx0XHRpZiAoaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjYgWEZTX0RJRkxBRzJfQ09XRVhUU0laRSlcbiBcdFx0XHRmbGFncyB8PSBGU19YRkxBR19DT1dFWFRTSVpFO1xuK1x0XHRpZiAoaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjYgWEZTX0RJRkxBRzJfVkVSSVRZKVxuK1x0XHRcdGZsYWdzIHw9IEZTX1hGTEFHX1ZFUklUWTtcbiBcdH1cbiBcbiBcdGlmICh4ZnNfaW5vZGVfaGFzX2F0dHJfZm9yayhpcCkpXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfc2IuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmNcbmluZGV4IDQ3MzIyYWRiNzY5MDU5Li4yMjJiYmU1NTU5ZGY0NyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmNcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmNcbkBAIC0xNjUsNiArMTY1LDggQEAgeGZzX3NiX3ZlcnNpb25fdG9fZmVhdHVyZXMoXG4gXHRcdGZlYXR1cmVzIHw9IFhGU19GRUFUX1JFRkxJTks7XG4gXHRpZiAoc2JwLVx1MDAzZXNiX2ZlYXR1cmVzX3JvX2NvbXBhdCBcdTAwMjYgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0lOT0JUQ05UKVxuIFx0XHRmZWF0dXJlcyB8PSBYRlNfRkVBVF9JTk9CVENOVDtcbitcdGlmIChzYnAtXHUwMDNlc2JfZmVhdHVyZXNfcm9fY29tcGF0IFx1MDAyNiBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZKVxuK1x0XHRmZWF0dXJlcyB8PSBYRlNfRkVBVF9WRVJJVFk7XG4gXHRpZiAoc2JwLVx1MDAzZXNiX2ZlYXR1cmVzX2luY29tcGF0IFx1MDAyNiBYRlNfU0JfRkVBVF9JTkNPTVBBVF9GVFlQRSlcbiBcdFx0ZmVhdHVyZXMgfD0gWEZTX0ZFQVRfRlRZUEU7XG4gXHRpZiAoc2JwLVx1MDAzZXNiX2ZlYXR1cmVzX2luY29tcGF0IFx1MDAyNiBYRlNfU0JfRkVBVF9JTkNPTVBBVF9TUElOT0RFUylcbkBAIC0xNTg4LDYgKzE1OTAsOCBAQCB4ZnNfZnNfZ2VvbWV0cnkoXG4gXHRcdGdlby1cdTAwM2VmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX01FVEFESVI7XG4gXHRpZiAoeGZzX2hhc196b25lZChtcCkpXG4gXHRcdGdlby1cdTAwM2VmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1pPTkVEO1xuK1x0aWYgKHhmc19oYXNfdmVyaXR5KG1wKSlcbitcdFx0Z2VvLVx1MDAzZWZsYWdzIHw9IFhGU19GU09QX0dFT01fRkxBR1NfVkVSSVRZO1xuIFx0Z2VvLVx1MDAzZXJ0c2VjdHNpemUgPSBzYnAtXHUwMDNlc2JfYmxvY2tzaXplO1xuIFx0Z2VvLVx1MDAzZWRpcmJsb2Nrc2l6ZSA9IHhmc19kaXIyX2RpcmJsb2NrX2J5dGVzKHNicCk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2NvbW1vbi5jIGIvZnMveGZzL3NjcnViL2NvbW1vbi5jXG5pbmRleCBlNTIzM2UzMWFiYjc1MC4uMDJiNjhiZjRjNTEyNzAgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvc2NydWIvY29tbW9uLmNcbisrKyBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uY1xuQEAgLTQ1LDYgKzQ1LDggQEBcbiAjaW5jbHVkZSBcInNjcnViL2hlYWx0aC5oXCJcbiAjaW5jbHVkZSBcInNjcnViL3RlbXBmaWxlLmhcIlxuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbitcbiAvKiBDb21tb24gY29kZSBmb3IgdGhlIG1ldGFkYXRhIHNjcnViYmVycy4gKi9cbiBcbiAvKlxuQEAgLTE3NTQsMyArMTc1Niw1NiBAQCB4Y2hrX2lub2RlX2NvdW50X2Jsb2NrcyhcbiBcdHJldHVybiB4ZnNfYm1hcF9jb3VudF9ibG9ja3Moc2MtXHUwMDNldHAsIHNjLVx1MDAzZWlwLCB3aGljaGZvcmssIG5leHRlbnRzLFxuIFx0XHRcdGNvdW50KTtcbiB9XG4rXG4rLypcbisgKiBJZiB0aGlzIGlub2RlIGhhcyBTX1ZFUklUWSBzZXQgb24gaXQsIHJlYWQgdGhlIHZlcml0eSBpbmZvLiBJZiB0aGUgcmVhZGluZ1xuKyAqIGZhaWxzIHdpdGggYW55dGhpbmcgb3RoZXIgdGhhbiBFTk9NRU0sIHRoZSBmaWxlIGlzIGNvcnJ1cHQsIHdoaWNoIHdlIGNhblxuKyAqIGRldGVjdCBsYXRlciB3aXRoIGZzdmVyaXR5X2FjdGl2ZS5cbisgKlxuKyAqIENhbGxlcnMgbXVzdCBob2xkIHRoZSBJT0xPQ0sgYW5kIG11c3Qgbm90IGhvbGQgdGhlIElMT0NLIG9mIHNjLVx1MDAzZWlwIGJlY2F1c2VcbisgKiBhY3RpdmF0aW9uIHJlYWRzIGlub2RlIGRhdGEuXG4rICovXG4raW50XG4reGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoXG4rXHRzdHJ1Y3QgeGZzX3NjcnViXHQqc2MpXG4re1xuK1x0aW50XHRcdFx0ZXJyb3I7XG4rXG4rXHRpZiAoIWZzdmVyaXR5X2FjdGl2ZShWRlNfSShzYy1cdTAwM2VpcCkpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGVycm9yID0gZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKFZGU19JKHNjLVx1MDAzZWlwKSk7XG4rXHRzd2l0Y2ggKGVycm9yKSB7XG4rXHRjYXNlIDA6XG4rXHRcdC8qIGZzdmVyaXR5IGlzIGFjdGl2ZSAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgLUVOT0RBVEE6XG4rXHRjYXNlIC1FTVNHU0laRTpcbitcdGNhc2UgLUVJTlZBTDpcbitcdGNhc2UgLUVGU0NPUlJVUFRFRDpcbitcdGNhc2UgLUVGQklHOlxuK1x0Y2FzZSAtRVJBTkdFOlxuK1x0Y2FzZSAtRUJBRE1TRzpcbitcdFx0LypcbitcdFx0ICogVGhlIG5vbnplcm8gZXJybm8gY29kZXMgYWJvdmUgYXJlIHRoZSBlcnJvciBjb2RlcyB0aGF0IGNhblxuK1x0XHQgKiBiZSByZXR1cm5lZCBmcm9tIGZzdmVyaXR5IG9uIG1ldGFkYXRhIHZhbGlkYXRpb24gZXJyb3JzLlxuK1x0XHQgKi9cbitcdFx0cmV0dXJuIDA7XG4rXHRkZWZhdWx0OlxuK1x0XHQvKiBydW50aW1lIGVycm9ycyAqL1xuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBJcyB0aGlzIGEgdmVyaXR5IGZpbGUgdGhhdCBmYWlsZWQgdG8gYWN0aXZhdGU/ICBDYWxsZXJzIG11c3QgaGF2ZSB0cmllZCB0b1xuKyAqIGFjdGl2YXRlIGZzdmVyaXR5IHZpYSB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eS5cbisgKi9cbitib29sXG4reGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKFxuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwKVxuK3tcbitcdHJldHVybiBmc3Zlcml0eV9hY3RpdmUoVkZTX0koaXApKSBcdTAwMjZcdTAwMjYgIWZzdmVyaXR5X2dldF9pbmZvKFZGU19JKGlwKSk7XG4rfVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uaCBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uaFxuaW5kZXggOWQ2MjdmZDUwNjg3ZTQuLjNkZTJiNjAwOWE5OTQxIDEwMDY0NFxuLS0tIGEvZnMveGZzL3NjcnViL2NvbW1vbi5oXG4rKysgYi9mcy94ZnMvc2NydWIvY29tbW9uLmhcbkBAIC0yNjgsNiArMjY4LDggQEAgaW50IHhjaGtfaW5vZGVfaXNfYWxsb2NhdGVkKHN0cnVjdCB4ZnNfc2NydWIgKnNjLCB4ZnNfYWdpbm9fdCBhZ2lubyxcbiBcdFx0Ym9vbCAqaW51c2UpO1xuIGludCB4Y2hrX2lub2RlX2NvdW50X2Jsb2NrcyhzdHJ1Y3QgeGZzX3NjcnViICpzYywgaW50IHdoaWNoZm9yayxcbiBcdFx0eGZzX2V4dG51bV90ICpuZXh0ZW50cywgeGZzX2ZpbGJsa3NfdCAqY291bnQpO1xuK2ludCB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzdHJ1Y3QgeGZzX3NjcnViICpzYyk7XG4rYm9vbCB4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oc3RydWN0IHhmc19pbm9kZSAqaXApO1xuIFxuIGJvb2wgeGNoa19pbm9kZV9pc19kaXJ0cmVlX3Jvb3QoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xuIGJvb2wgeGNoa19pbm9kZV9pc19zYl9yb290ZWQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jIGIvZnMveGZzL3NjcnViL2lub2RlLmNcbmluZGV4IDY1YjEzZTMxMTkxNjgxLi5kMWNkZDZiNDQ1ZDAxNyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jXG4rKysgYi9mcy94ZnMvc2NydWIvaW5vZGUuY1xuQEAgLTM2LDYgKzM2LDEwIEBAIHhjaGtfcHJlcGFyZV9pc2NydWIoXG4gXG4gXHR4Y2hrX2lsb2NrKHNjLCBYRlNfSU9MT0NLX0VYQ0wpO1xuIFxuK1x0ZXJyb3IgPSB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzYyk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdHJldHVybiBlcnJvcjtcbitcbiBcdGVycm9yID0geGNoa190cmFuc19hbGxvYyhzYywgMCk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbkBAIC04MzMsNiArODM3LDkgQEAgeGNoa19pbm9kZShcbiBcdGlmIChTX0lTUkVHKFZGU19JKHNjLVx1MDAzZWlwKS1cdTAwM2VpX21vZGUpKVxuIFx0XHR4Y2hrX2lub2RlX2NoZWNrX3JlZmxpbmtfaWZsYWcoc2MsIElfSU5PKHNjLVx1MDAzZWlwKSk7XG4gXG4rXHRpZiAoeGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKHNjLVx1MDAzZWlwKSlcbitcdFx0eGNoa19pbm9fc2V0X2NvcnJ1cHQoc2MsIHNjLVx1MDAzZXNtLVx1MDAzZXNtX2lubyk7XG4rXG4gXHR4Y2hrX2lub2RlX2NoZWNrX3VubGlua2VkKHNjKTtcbiBcbiBcdHhjaGtfaW5vZGVfeHJlZihzYywgSV9JTk8oc2MtXHUwMDNlaXApLCBcdTAwMjZkaSk7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2lub2RlX3JlcGFpci5jIGIvZnMveGZzL3NjcnViL2lub2RlX3JlcGFpci5jXG5pbmRleCAzZWM0MWMxOTgzNTExNi4uMzVlOTNhNGI1MGNkOWYgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNcbisrKyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZV9yZXBhaXIuY1xuQEAgLTU3Myw2ICs1NzMsOCBAQCB4cmVwX2Rpbm9kZV9mbGFncyhcbiBcdFx0ZGlwLVx1MDAzZWRpX25yZXh0NjRfcGFkID0gMDtcbiBcdGVsc2UgaWYgKGRpcC1cdTAwM2VkaV92ZXJzaW9uIFx1MDAzZT0gMylcbiBcdFx0ZGlwLVx1MDAzZWRpX3YzX3BhZCA9IDA7XG4rXHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSB8fCAhU19JU1JFRyhtb2RlKSlcbitcdFx0ZmxhZ3MyIFx1MDAyNj0gflhGU19ESUZMQUcyX1ZFUklUWTtcbiBcbiBcdGlmIChmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX01FVEFEQVRBKSB7XG4gXHRcdHhmc19mYWlsYWRkcl90XHRmYTtcbkBAIC0xNjE3LDYgKzE2MTksMTAgQEAgeHJlcF9kaW5vZGVfY29yZShcbiBcdGlmIChpZ2V0X2Vycm9yKVxuIFx0XHRyZXR1cm4gaWdldF9lcnJvcjtcbiBcbitcdGVycm9yID0geGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoc2MpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4gXHRlcnJvciA9IHhjaGtfdHJhbnNfYWxsb2Moc2MsIDApO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG5AQCAtMjAzNSw2ICsyMDQxLDI3IEBAIHhyZXBfaW5vZGVfdW5saW5rZWQoXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBJZiB0aGlzIGZpbGUgaXMgYSBmc3Zlcml0eSBmaWxlLCB4Y2hrX3ByZXBhcmVfaXNjcnViIG9yIHhyZXBfZGlub2RlX2NvcmVcbisgKiBzaG91bGQgaGF2ZSBhY3RpdmF0ZWQgaXQuICBJZiBpdCdzIHN0aWxsIG5vdCBhY3RpdmUsIHRoZW4gdGhlcmUncyBzb21ldGhpbmdcbisgKiB3cm9uZyB3aXRoIHRoZSB2ZXJpdHkgZGVzY3JpcHRvciBhbmQgd2Ugc2hvdWxkIHR1cm4gaXQgb2ZmLlxuKyAqL1xuK1NUQVRJQyBpbnRcbit4cmVwX2lub2RlX3Zlcml0eShcbitcdHN0cnVjdCB4ZnNfc2NydWJcdCpzYylcbit7XG4rXHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlID0gVkZTX0koc2MtXHUwMDNlaXApO1xuK1xuK1x0aWYgKHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbihzYy1cdTAwM2VpcCkpIHtcbitcdFx0c2MtXHUwMDNlaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjY9IH5YRlNfRElGTEFHMl9WRVJJVFk7XG4rXHRcdGlub2RlX3NldF9mbGFncyhpbm9kZSwgMCwgU19WRVJJVFkpO1xuK1xuK1x0XHR4ZnNfdHJhbnNfbG9nX2lub2RlKHNjLVx1MDAzZXRwLCBzYy1cdTAwM2VpcCwgWEZTX0lMT0dfQ09SRSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogUmVwYWlyIGFuIGlub2RlJ3MgZmllbGRzLiAqL1xuIGludFxuIHhyZXBfaW5vZGUoXG5AQCAtMjA4NCw2ICsyMTExLDE1IEBAIHhyZXBfaW5vZGUoXG4gXHRcdFx0cmV0dXJuIGVycm9yO1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIERpc2FibGUgZnN2ZXJpdHkgaWYgaXQgY2Fubm90IGJlIGFjdGl2YXRlZC4gIEFjdGl2YXRpb24gZmFpbHVyZVxuK1x0ICogcHJvaGliaXRzIHRoZSBmaWxlIGZyb20gYmVpbmcgb3BlbmVkLCBzbyB0aGVyZSBjYW5ub3QgYmUgYW5vdGhlclxuK1x0ICogcHJvZ3JhbSB3aXRoIGFuIG9wZW4gZmQgdG8gd2hhdCBpdCB0aGlua3MgaXMgYSB2ZXJpdHkgZmlsZS5cbitcdCAqL1xuK1x0ZXJyb3IgPSB4cmVwX2lub2RlX3Zlcml0eShzYyk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdHJldHVybiBlcnJvcjtcbitcbiBcdC8qIFJlY29ubmVjdCBpbmNvcmUgdW5saW5rZWQgbGlzdCAqL1xuIFx0ZXJyb3IgPSB4cmVwX2lub2RlX3VubGlua2VkKHNjKTtcbiBcdGlmIChlcnJvcilcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FvcHMuYyBiL2ZzL3hmcy94ZnNfYW9wcy5jXG5pbmRleCA1MTI5M2I2ZjMzMWYwYi4uMTM1YmU3MTFmOWE0MDkgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2FvcHMuY1xuKysrIGIvZnMveGZzL3hmc19hb3BzLmNcbkBAIC0yMiw3ICsyMiw5IEBAXG4gI2luY2x1ZGUgXCJ4ZnNfaWNhY2hlLmhcIlxuICNpbmNsdWRlIFwieGZzX3pvbmVfYWxsb2MuaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfcnRncm91cC5oXCJcbisjaW5jbHVkZSBcInhmc19mc3Zlcml0eS5oXCJcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaW8taW50ZWdyaXR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4gXG4gc3RydWN0IHhmc193cml0ZXBhZ2VfY3R4IHtcbiBcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IGN0eDtcbkBAIC0xODEsNiArMTgzLDQ5IEBAIHhmc19lbmRfaW9lbmRfd3JpdGUoXG4gXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUobm9mc19mbGFnKTtcbiB9XG4gXG4rLypcbisgKiBQcmlvcml0aXplIGZzdmVyaXR5IG1ldGFkYXRhIG92ZXIgZmlsZSBkYXRhLiBTb3J0IGJhc2VkIG9uIGlfc2l6ZSBhcyBmc3Zlcml0eVxuKyAqIG1ldGFkYXRhIGlzIGFsd2F5cyBiZXlvbmQgRU9GXG4rICovXG4rc3RhdGljIGludFxuK3hmc19yZWFkX2lvZW5kX2NvbXBhcmUoXG4rXHR2b2lkXHRcdFx0KnByaXYsXG4rXHRjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkXHQqYSxcbitcdGNvbnN0IHN0cnVjdCBsaXN0X2hlYWRcdCpiKVxuK3tcbitcdHN0cnVjdCBpb21hcF9pb2VuZFx0KmlhID0gY29udGFpbmVyX29mKGEsIHN0cnVjdCBpb21hcF9pb2VuZCxcbitcdFx0XHRpb19saXN0KTtcbitcdHN0cnVjdCBpb21hcF9pb2VuZFx0KmliID0gY29udGFpbmVyX29mKGIsIHN0cnVjdCBpb21hcF9pb2VuZCxcbitcdFx0XHRpb19saXN0KTtcbitcdGxvZmZfdFx0XHRcdGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlhLVx1MDAzZWlvX2lub2RlKTtcbitcbitcdGlmICghSVNfVkVSSVRZKGlhLVx1MDAzZWlvX2lub2RlKSlcbitcdFx0cmV0dXJuIGlvbWFwX2lvZW5kX2NvbXBhcmUocHJpdiwgYSwgYik7XG4rXG4rXHRpZiAoaWEtXHUwMDNlaW9fb2Zmc2V0IFx1MDAzZSBpX3NpemUgXHUwMDI2XHUwMDI2IGliLVx1MDAzZWlvX29mZnNldCBcdTAwM2MgaV9zaXplKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAoaWEtXHUwMDNlaW9fb2Zmc2V0IFx1MDAzYyBpX3NpemUgXHUwMDI2XHUwMDI2IGliLVx1MDAzZWlvX29mZnNldCBcdTAwM2UgaV9zaXplKVxuK1x0XHRyZXR1cm4gMTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIElPIHJlYWQgY29tcGxldGlvbi5cbisgKi9cbitzdGF0aWMgdm9pZFxuK3hmc19lbmRfaW9lbmRfcmVhZChcbitcdHN0cnVjdCBpb21hcF9pb2VuZFx0KmlvZW5kKVxuK3tcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlvZW5kLVx1MDAzZWlvX2lub2RlKTtcbitcbitcdGlmICghaW9lbmQtXHUwMDNlaW9fYmlvLmJpX3N0YXR1cyBcdTAwMjZcdTAwMjZcbitcdFx0XHR4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGlwLCBpb2VuZC1cdTAwM2Vpb19vZmZzZXQpKVxuK1x0XHRmc3Zlcml0eV92ZXJpZnlfYmlvKGlvZW5kLVx1MDAzZWlvX3ZpLFxuK1x0XHRcdFx0ICAgIFx1MDAyNmlvZW5kLVx1MDAzZWlvX2Jpbyk7XG4rXHRpb21hcF9maW5pc2hfaW9lbmRzKGlvZW5kLFxuK1x0XHRibGtfc3RhdHVzX3RvX2Vycm5vKGlvZW5kLVx1MDAzZWlvX2Jpby5iaV9zdGF0dXMpKTtcbit9XG4rXG4gLypcbiAgKiBGaW5pc2ggYWxsIHBlbmRpbmcgSU8gY29tcGxldGlvbnMgdGhhdCByZXF1aXJlIHRyYW5zYWN0aW9uYWwgbW9kaWZpY2F0aW9ucy5cbiAgKlxuQEAgLTIwOSwxNCArMjU0LDE3IEBAIHhmc19lbmRfaW8oXG4gXHRsaXN0X3JlcGxhY2VfaW5pdChcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX2xpc3QsIFx1MDAyNnRtcCk7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfbG9jaywgZmxhZ3MpO1xuIFxuLVx0aW9tYXBfc29ydF9pb2VuZHMoXHUwMDI2dG1wKTtcbitcdGlvZW5kID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNnRtcCwgc3RydWN0IGlvbWFwX2lvZW5kLCBpb19saXN0KTtcbitcdGlmIChiaW9fb3AoXHUwMDI2aW9lbmQtXHUwMDNlaW9fYmlvKSA9PSBSRVFfT1BfUkVBRClcbitcdFx0aW9tYXBfc29ydF9pb2VuZHMoXHUwMDI2dG1wLCB4ZnNfcmVhZF9pb2VuZF9jb21wYXJlKTtcbitcdGVsc2VcbitcdFx0aW9tYXBfc29ydF9pb2VuZHMoXHUwMDI2dG1wLCBpb21hcF9pb2VuZF9jb21wYXJlKTtcbiBcdHdoaWxlICgoaW9lbmQgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoXHUwMDI2dG1wLCBzdHJ1Y3QgaW9tYXBfaW9lbmQsXG4gXHRcdFx0aW9fbGlzdCkpKSB7XG4gXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW9lbmQtXHUwMDNlaW9fbGlzdCk7XG4gXHRcdGlvbWFwX2lvZW5kX3RyeV9tZXJnZShpb2VuZCwgXHUwMDI2dG1wKTtcbiBcdFx0aWYgKGJpb19vcChcdTAwMjZpb2VuZC1cdTAwM2Vpb19iaW8pID09IFJFUV9PUF9SRUFEKVxuLVx0XHRcdGlvbWFwX2ZpbmlzaF9pb2VuZHMoaW9lbmQsXG4tXHRcdFx0XHRibGtfc3RhdHVzX3RvX2Vycm5vKGlvZW5kLVx1MDAzZWlvX2Jpby5iaV9zdGF0dXMpKTtcbitcdFx0XHR4ZnNfZW5kX2lvZW5kX3JlYWQoaW9lbmQpO1xuIFx0XHRlbHNlXG4gXHRcdFx0eGZzX2VuZF9pb2VuZF93cml0ZShpb2VuZCk7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuQEAgLTI0Miw5ICsyOTAsMTQgQEAgeGZzX2VuZF9iaW8oXG4gXHR9XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX2xvY2ssIGZsYWdzKTtcbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfbGlzdCkpXG4tXHRcdFdBUk5fT05fT05DRSghcXVldWVfd29yayhtcC1cdTAwM2VtX3Vud3JpdHRlbl93b3JrcXVldWUsXG4rXHRpZiAobGlzdF9lbXB0eShcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX2xpc3QpKSB7XG4rXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19WRVJJVFkpIFx1MDAyNlx1MDAyNiBpb2VuZC1cdTAwM2Vpb192aSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGlvZW5kLVx1MDAzZWlvX29mZnNldCBcdTAwM2MgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXG4rXHRcdFx0ZnN2ZXJpdHlfZW5xdWV1ZV92ZXJpZnlfd29yayhcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX3dvcmspO1xuK1x0XHRlbHNlXG4rXHRcdFx0V0FSTl9PTl9PTkNFKCFxdWV1ZV93b3JrKG1wLVx1MDAzZW1fdW53cml0dGVuX3dvcmtxdWV1ZSxcbiBcdFx0XHRcdFx0IFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfd29yaykpO1xuK1x0fVxuIFx0bGlzdF9hZGRfdGFpbChcdTAwMjZpb2VuZC1cdTAwM2Vpb19saXN0LCBcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX2xpc3QpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX2xvY2ssIGZsYWdzKTtcbiB9XG5AQCAtMzUwLDEyICs0MDMsMTYgQEAgeGZzX21hcF9ibG9ja3MoXG4gXHRpbnRcdFx0XHRyZXRyaWVzID0gMDtcbiBcdGludFx0XHRcdGVycm9yID0gMDtcbiBcdHVuc2lnbmVkIGludFx0XHQqc2VxO1xuK1x0dW5zaWduZWQgaW50XHRcdGlvbWFwX2ZsYWdzID0gMDtcbiBcbiBcdGlmICh4ZnNfaXNfc2h1dGRvd24obXApKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdFhGU19FUlJPUlRBR19ERUxBWShtcCwgWEZTX0VSUlRBR19XQl9ERUxBWV9NUyk7XG4gXG4rXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXG4rXHRcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XG4rXG4gXHQvKlxuIFx0ICogQ09XIGZvcmsgYmxvY2tzIGNhbiBvdmVybGFwIGRhdGEgZm9yayBibG9ja3MgZXZlbiBpZiB0aGUgYmxvY2tzXG4gXHQgKiBhcmVuJ3Qgc2hhcmVkLiAgQ09XIEkvTyBhbHdheXMgdGFrZXMgcHJlY2VkZW50LCBzbyB3ZSBtdXN0IGFsd2F5c1xuQEAgLTQ0Myw3ICs1MDAsOCBAQCB4ZnNfbWFwX2Jsb2NrcyhcbiBcdCAgICBpc251bGxzdGFydGJsb2NrKGltYXAuYnJfc3RhcnRibG9jaykpXG4gXHRcdGdvdG8gYWxsb2NhdGVfYmxvY2tzO1xuIFxuLVx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgXHUwMDI2aW1hcCwgMCwgMCwgWEZTX1dQQyh3cGMpLVx1MDAzZWRhdGFfc2VxKTtcbitcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIFx1MDAyNmltYXAsIDAsIGlvbWFwX2ZsYWdzLFxuK1x0XHRcdCAgWEZTX1dQQyh3cGMpLVx1MDAzZWRhdGFfc2VxKTtcbiBcdHRyYWNlX3hmc19tYXBfYmxvY2tzX2ZvdW5kKGlwLCBvZmZzZXQsIGNvdW50LCB3aGljaGZvcmssIFx1MDAyNmltYXApO1xuIFx0cmV0dXJuIDA7XG4gYWxsb2NhdGVfYmxvY2tzOlxuQEAgLTU5MCwxMiArNjQ4LDE2IEBAIHhmc196b25lZF9tYXBfYmxvY2tzKFxuIFx0eGZzX2ZpbGJsa3NfdFx0XHRjb3VudF9mc2I7XG4gXHRzdHJ1Y3QgeGZzX2JtYnRfaXJlY1x0aW1hcCwgZGVsO1xuIFx0c3RydWN0IHhmc19pZXh0X2N1cnNvclx0aWN1cjtcbitcdHUxNlx0XHRcdGlvbWFwX2ZsYWdzID0gMDtcbiBcbiBcdGlmICh4ZnNfaXNfc2h1dGRvd24obXApKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdFhGU19FUlJPUlRBR19ERUxBWShtcCwgWEZTX0VSUlRBR19XQl9ERUxBWV9NUyk7XG4gXG4rXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXG4rXHRcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XG4rXG4gXHQvKlxuIFx0ICogQWxsIGRpcnR5IGRhdGEgbXVzdCBiZSBjb3ZlcmVkIGJ5IGRlbGFsbG9jIGV4dGVudHMuICBCdXQgdHJ1bmNhdGUgY2FuXG4gXHQgKiByZW1vdmUgZGVsYWxsb2MgZXh0ZW50cyB1bmRlcm5lYXRoIHVzIG9yIHJlZHVjZSB0aGVpciBzaXplLlxuQEAgLTYxOSw3ICs2ODEsNyBAQCB4ZnNfem9uZWRfbWFwX2Jsb2NrcyhcbiBcdFx0aW1hcC5icl9zdGFydGJsb2NrID0gSE9MRVNUQVJUQkxPQ0s7XG4gXHRcdGltYXAuYnJfc3RhdGUgPSBYRlNfRVhUX05PUk07XG4gXHRcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4tXHRcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIFx1MDAyNmltYXAsIDAsIDAsIDApO1xuK1x0XHR4ZnNfYm1idF90b19pb21hcChpcCwgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBcdTAwMjZpbWFwLCAwLCBpb21hcF9mbGFncywgMCk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0ZW5kX2ZzYiA9IG1pbihlbmRfZnNiLCBpbWFwLmJyX3N0YXJ0b2ZmICsgaW1hcC5icl9ibG9ja2NvdW50KTtcbkBAIC02MzIsMTEgKzY5NCwxMCBAQCB4ZnNfem9uZWRfbWFwX2Jsb2NrcyhcbiBcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4gXG4gXHR3cGMtXHUwMDNlaW9tYXAudHlwZSA9IElPTUFQX01BUFBFRDtcbi1cdHdwYy1cdTAwM2Vpb21hcC5mbGFncyA9IElPTUFQX0ZfRElSVFk7XG4gXHR3cGMtXHUwMDNlaW9tYXAuYmRldiA9IG1wLVx1MDAzZW1fcnRkZXZfdGFyZ3AtXHUwMDNlYnRfYmRldjtcbiBcdHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgPSBvZmZzZXQ7XG4gXHR3cGMtXHUwMDNlaW9tYXAubGVuZ3RoID0gWEZTX0ZTQl9UT19CKG1wLCBjb3VudF9mc2IpO1xuLVx0d3BjLVx1MDAzZWlvbWFwLmZsYWdzID0gSU9NQVBfRl9BTk9OX1dSSVRFO1xuK1x0d3BjLVx1MDAzZWlvbWFwLmZsYWdzID0gaW9tYXBfZmxhZ3MgfCBJT01BUF9GX0FOT05fV1JJVEU7XG4gXG4gXHR0cmFjZV94ZnNfem9uZWRfbWFwX2Jsb2NrcyhpcCwgb2Zmc2V0LCB3cGMtXHUwMDNlaW9tYXAubGVuZ3RoKTtcbiBcdHJldHVybiAwO1xuQEAgLTY4NCw2ICs3NDUsMjIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIHhmc196b25lZF93cml0ZWJhY2tfb3BzID0ge1xuIFx0LndyaXRlYmFja19zdWJtaXRcdD0geGZzX3pvbmVkX3dyaXRlYmFja19zdWJtaXQsXG4gfTtcbiBcbitzdGF0aWMgaW50XG4reGZzX2lvbWFwX3dyaXRlcGFnZXMoXG4rXHRzdHJ1Y3QgeGZzX2lub2RlXHRcdCppcCxcbitcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4XHQqY3R4KVxuK3tcbitcdC8qXG4rXHQgKiBXcml0ZWJhY2sgZG9lcyBub3Qgd29yayBmb3IgZm9saW9zIHBhc3QgRU9GLCBsZXQgaXQga25vdyB0aGF0XG4rXHQgKiBJL08gaGFwcGVucyBmb3IgZnN2ZXJpdHkgbWV0YWRhdGEgYW5kIHRoaXMgcmVzdHJpY3Rpb24gbmVlZFxuK1x0ICogdG8gYmUgc2tpcHBlZFxuK1x0ICovXG4rXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXG4rXHRcdGN0eC1cdTAwM2Vpb21hcC5mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xuK1xuK1x0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoY3R4KTtcbit9XG4rXG4gU1RBVElDIGludFxuIHhmc192bV93cml0ZXBhZ2VzKFxuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2VcdCptYXBwaW5nLFxuQEAgLTcwMyw3ICs3ODAsNyBAQCB4ZnNfdm1fd3JpdGVwYWdlcyhcbiBcdFx0fTtcbiBcdFx0aW50XHRcdFx0XHRlcnJvcjtcbiBcbi1cdFx0ZXJyb3IgPSBpb21hcF93cml0ZXBhZ2VzKFx1MDAyNnhjLmN0eCk7XG4rXHRcdGVycm9yID0geGZzX2lvbWFwX3dyaXRlcGFnZXMoaXAsIFx1MDAyNnhjLmN0eCk7XG4gXHRcdGlmICh4Yy5vcGVuX3pvbmUpXG4gXHRcdFx0eGZzX29wZW5fem9uZV9wdXQoeGMub3Blbl96b25lKTtcbiBcdFx0cmV0dXJuIGVycm9yO1xuQEAgLTcxNiw3ICs3OTMsNyBAQCB4ZnNfdm1fd3JpdGVwYWdlcyhcbiBcdFx0XHR9LFxuIFx0XHR9O1xuIFxuLVx0XHRyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcyhcdTAwMjZ3cGMuY3R4KTtcbitcdFx0cmV0dXJuIHhmc19pb21hcF93cml0ZXBhZ2VzKGlwLCBcdTAwMjZ3cGMuY3R4KTtcbiBcdH1cbiB9XG4gXG5AQCAtNzYxLDkgKzgzOCwxMiBAQCB4ZnNfYmlvX3N1Ym1pdF9yZWFkKFxuIFx0c3RydWN0IGlvbWFwX3JlYWRfZm9saW9fY3R4XHQqY3R4KVxuIHtcbiBcdHN0cnVjdCBiaW9cdFx0XHQqYmlvID0gY3R4LVx1MDAzZXJlYWRfY3R4O1xuK1x0c3RydWN0IGlvbWFwX2lvZW5kXHRcdCppb2VuZDtcbiBcbiBcdC8qIGRlZmVyIHJlYWQgY29tcGxldGlvbnMgdG8gdGhlIGlvZW5kIHdvcmtxdWV1ZSAqL1xuLVx0aW9tYXBfaW5pdF9pb2VuZChpdGVyLVx1MDAzZWlub2RlLCBiaW8sIGN0eC1cdTAwM2VyZWFkX2N0eF9maWxlX29mZnNldCwgMCk7XG4rXHRpb2VuZCA9IGlvbWFwX2luaXRfaW9lbmQoaXRlci1cdTAwM2Vpbm9kZSwgYmlvLCBjdHgtXHUwMDNlcmVhZF9jdHhfZmlsZV9vZmZzZXQsXG4rXHRcdFx0MCk7XG4rXHRpb2VuZC1cdTAwM2Vpb192aSA9IGN0eC1cdTAwM2V2aTtcbiBcdGlvbWFwX2Jpb19zdWJtaXRfcmVhZF9lbmRpbyhpdGVyLCBjdHgsIHhmc19lbmRfYmlvKTtcbiB9XG4gXG5AQCAtNzc1LDExICs4NTUsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9yZWFkX29wcyB4ZnNfaW9tYXBfcmVhZF9vcHMgPSB7XG4gXG4gc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfcmVhZF9vcHMgKlxuIHhmc19nZXRfaW9tYXBfcmVhZF9vcHMoXG4tXHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZVx0Km1hcHBpbmcpXG4rXHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZVx0Km1hcHBpbmcsXG4rXHRsb2ZmX3RcdFx0XHRcdHBvc2l0aW9uKVxuIHtcbiBcdHN0cnVjdCB4ZnNfaW5vZGVcdFx0KmlwID0gWEZTX0kobWFwcGluZy1cdTAwM2Vob3N0KTtcbiBcbi1cdGlmIChiZGV2X2hhc19pbnRlZ3JpdHlfY3N1bSh4ZnNfaW5vZGVfYnVmdGFyZyhpcCktXHUwMDNlYnRfYmRldikpXG4rXHRpZiAoYmRldl9oYXNfaW50ZWdyaXR5X2NzdW0oeGZzX2lub2RlX2J1ZnRhcmcoaXApLVx1MDAzZWJ0X2JkZXYpIHx8XG4rXHRcdFx0eGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShpcCwgcG9zaXRpb24pKVxuIFx0XHRyZXR1cm4gXHUwMDI2eGZzX2lvbWFwX3JlYWRfb3BzO1xuIFx0cmV0dXJuIFx1MDAyNmlvbWFwX2Jpb19yZWFkX29wcztcbiB9XG5AQCAtNzkxLDcgKzg3Myw3IEBAIHhmc192bV9yZWFkX2ZvbGlvKFxuIHtcbiBcdHN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eFx0Y3R4ID0geyAuY3VyX2ZvbGlvID0gZm9saW8gfTtcbiBcbi1cdGN0eC5vcHMgPSB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKGZvbGlvLVx1MDAzZW1hcHBpbmcpO1xuK1x0Y3R4Lm9wcyA9IHhmc19nZXRfaW9tYXBfcmVhZF9vcHMoZm9saW8tXHUwMDNlbWFwcGluZywgZm9saW9fcG9zKGZvbGlvKSk7XG4gXHRpb21hcF9yZWFkX2ZvbGlvKFx1MDAyNnhmc19yZWFkX2lvbWFwX29wcywgXHUwMDI2Y3R4LCBOVUxMKTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC04MDIsNyArODg0LDcgQEAgeGZzX3ZtX3JlYWRhaGVhZChcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfcmVhZF9mb2xpb19jdHhcdGN0eCA9IHsgLnJhYyA9IHJhYyB9O1xuIFxuLVx0Y3R4Lm9wcyA9IHhmc19nZXRfaW9tYXBfcmVhZF9vcHMocmFjLVx1MDAzZW1hcHBpbmcpLFxuK1x0Y3R4Lm9wcyA9IHhmc19nZXRfaW9tYXBfcmVhZF9vcHMocmFjLVx1MDAzZW1hcHBpbmcsIHJlYWRhaGVhZF9wb3MocmFjKSk7XG4gXHRpb21hcF9yZWFkYWhlYWQoXHUwMDI2eGZzX3JlYWRfaW9tYXBfb3BzLCBcdTAwMjZjdHgsIE5VTEwpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXBfdXRpbC5jIGIvZnMveGZzL3hmc19ibWFwX3V0aWwuY1xuaW5kZXggYzg4YjlhZGU3Mzg5ZGQuLmIxODc1ZDZlNzQ1Mjk2IDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19ibWFwX3V0aWwuY1xuKysrIGIvZnMveGZzL3hmc19ibWFwX3V0aWwuY1xuQEAgLTMxLDYgKzMxLDcgQEBcbiAjaW5jbHVkZSBcInhmc19ydGJpdG1hcC5oXCJcbiAjaW5jbHVkZSBcInhmc19ydGdyb3VwLmhcIlxuICNpbmNsdWRlIFwieGZzX3pvbmVfYWxsb2MuaFwiXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuIC8qIEtlcm5lbCBvbmx5IEJNQVAgcmVsYXRlZCBkZWZpbml0aW9ucyBhbmQgZnVuY3Rpb25zICovXG4gXG5AQCAtNTUzLDYgKzU1NCwxNCBAQCB4ZnNfY2FuX2ZyZWVfZW9mYmxvY2tzKFxuIFx0aWYgKGxhc3RfZnNiIFx1MDAzYz0gZW5kX2ZzYilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuK1x0LypcbitcdCAqIE5vdGhpbmcgdG8gY2xlYW4gb24gZnN2ZXJpdHkgaW5vZGVzIGFzIHRoZXkgZG9uJ3QgdXNlIHByZWFsbG9jIGFuZFxuK1x0ICogdGhlcmUgbm8gZGVsYWxsb2MgYXMgb25seSB3cml0dGVuIGRhdGEgaXMgZnN2ZXJpdHkgbWV0YWRhdGFcbitcdCAqL1xuK1x0aWYgKElTX1ZFUklUWShWRlNfSShpcCkpIHx8XG4rXHQgICAgeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdC8qXG4gXHQgKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBwb3N0LUVPRiBleHRlbnQgdG8gZnJlZS4gIElmIHRoZXJlIGFyZSBhbnlcbiBcdCAqIGRlbGFsbG9jIGJsb2NrcyBhdHRhY2hlZCB0byB0aGUgaW5vZGUgKGRhdGEgZm9yayBkZWxhbGxvY1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZmlsZS5jIGIvZnMveGZzL3hmc19maWxlLmNcbmluZGV4IDg0NWE5N2M5YjA2MzBiLi5jYmExOTRkNjc4ZmM3NyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfZmlsZS5jXG4rKysgYi9mcy94ZnMveGZzX2ZpbGUuY1xuQEAgLTM3LDYgKzM3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mYWR2aXNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb3VudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZWxvY2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wcztcbiBcbkBAIC0yNDUsNiArMjQ2LDI1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyB4ZnNfZGlvX3JlYWRfYm91bmNlX29wcyA9IHtcbiBcdC5iaW9fc2V0XHQ9IFx1MDAyNmlvbWFwX2lvZW5kX2Jpb3NldCxcbiB9O1xuIFxuK1NUQVRJQyBzc2l6ZV90XG4reGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChcbitcdHN0cnVjdCBraW9jYlx0XHQqaW9jYixcbitcdHN0cnVjdCBpb3ZfaXRlclx0XHQqdG8pXG4re1xuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApKTtcbitcdHNzaXplX3RcdFx0XHRyZXQ7XG4rXG4rXHR0cmFjZV94ZnNfZmlsZV9idWZmZXJlZF9yZWFkKGlvY2IsIHRvKTtcbitcbitcdHJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKGlvY2IsIHRvKTtcbitcdHhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBTVEFUSUMgc3NpemVfdFxuIHhmc19maWxlX2Rpb19yZWFkKFxuIFx0c3RydWN0IGtpb2NiXHRcdCppb2NiLFxuQEAgLTI2NSw2ICsyODUsMTYgQEAgeGZzX2ZpbGVfZGlvX3JlYWQoXG4gXHRyZXQgPSB4ZnNfaWxvY2tfaW9jYihpb2NiLCBYRlNfSU9MT0NLX1NIQVJFRCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuK1x0LypcbitcdCAqIFJlLWNoZWNrIHZlcml0eSBzdGF0dXMgYWZ0ZXIgYWNxdWlyaW5nIGxvY2suIFRoaXMgcHJldmVudHMgVE9DVE9VIGluXG4rXHQgKiB4ZnNfZmlsZV9yZWFkX2l0ZXIoKSB3aGlsZSBmYWxsaW5nIGJhY2sgZnJvbSBESU8gdG8gYnVmZmVyZWQgSS9PIGFzXG4rXHQgKiBub3cgd2UgYXJlIGhvbGRpbmcgYSBsb2NrXG4rXHQgKi9cbitcdGlmIChmc3Zlcml0eV9hY3RpdmUoVkZTX0koaXApKSkge1xuK1x0XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpO1xuK1x0XHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNj0gfklPQ0JfRElSRUNUO1xuK1x0XHRyZXR1cm4geGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7XG4rXHR9XG4gXHRpZiAobWFwcGluZ19zdGFibGVfd3JpdGVzKGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmcpKSB7XG4gXHRcdGRpb19vcHMgPSBcdTAwMjZ4ZnNfZGlvX3JlYWRfYm91bmNlX29wcztcbiBcdFx0ZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19CT1VOQ0U7XG5AQCAtMjgxLDcgKzMxMSw4IEBAIHhmc19maWxlX2RheF9yZWFkKFxuIFx0c3RydWN0IGtpb2NiXHRcdCppb2NiLFxuIFx0c3RydWN0IGlvdl9pdGVyXHRcdCp0bylcbiB7XG4tXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWhvc3QpO1xuK1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlub2RlKTtcbiBcdHNzaXplX3RcdFx0XHRyZXQgPSAwO1xuIFxuIFx0dHJhY2VfeGZzX2ZpbGVfZGF4X3JlYWQoaW9jYiwgdG8pO1xuQEAgLTI5OSwyNSArMzMwLDYgQEAgeGZzX2ZpbGVfZGF4X3JlYWQoXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1TVEFUSUMgc3NpemVfdFxuLXhmc19maWxlX2J1ZmZlcmVkX3JlYWQoXG4tXHRzdHJ1Y3Qga2lvY2JcdFx0KmlvY2IsXG4tXHRzdHJ1Y3QgaW92X2l0ZXJcdFx0KnRvKVxuLXtcbi1cdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKSk7XG4tXHRzc2l6ZV90XHRcdFx0cmV0O1xuLVxuLVx0dHJhY2VfeGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7XG4tXG4tXHRyZXQgPSB4ZnNfaWxvY2tfaW9jYihpb2NiLCBYRlNfSU9MT0NLX1NIQVJFRCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVx0cmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7XG4tXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4gU1RBVElDIHNzaXplX3RcbiB4ZnNfZmlsZV9yZWFkX2l0ZXIoXG4gXHRzdHJ1Y3Qga2lvY2JcdFx0KmlvY2IsXG5AQCAtMzMyLDYgKzM0NCwxNCBAQCB4ZnNfZmlsZV9yZWFkX2l0ZXIoXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4rXHQvKlxuK1x0ICogSW4gY2FzZSBmcy12ZXJpdHkgaXMgZW5hYmxlZCwgd2UgYWxzbyBmYWxsYmFjayB0byB0aGUgYnVmZmVyZWQgcmVhZFxuK1x0ICogZnJvbSB0aGUgZGlyZWN0IHJlYWQgcGF0aC4gVGhlcmVmb3JlLCBJT0NCX0RJUkVDVCBpcyBzZXQgYW5kIG5lZWQgdG9cbitcdCAqIGJlIGNsZWFyZWQgKHNlZSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKCkpXG4rXHQgKi9cbitcdGlmIChmc3Zlcml0eV9hY3RpdmUoaW5vZGUpKVxuK1x0XHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNj0gfklPQ0JfRElSRUNUO1xuK1xuIFx0aWYgKElTX0RBWChpbm9kZSkpXG4gXHRcdHJldCA9IHhmc19maWxlX2RheF9yZWFkKGlvY2IsIHRvKTtcbiBcdGVsc2UgaWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKVxuQEAgLTE3MDAsMTEgKzE3MjAsMTggQEAgeGZzX2ZpbGVfb3BlbihcbiBcdHN0cnVjdCBpbm9kZVx0Kmlub2RlLFxuIFx0c3RydWN0IGZpbGVcdCpmaWxlKVxuIHtcbitcdGludFx0XHRlcnJvcjtcbitcbiBcdGlmICh4ZnNfaXNfc2h1dGRvd24oWEZTX00oaW5vZGUtXHUwMDNlaV9zYikpKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX05PV0FJVCB8IEZNT0RFX0NBTl9PRElSRUNUO1xuIFx0aWYgKHhmc19nZXRfYXRvbWljX3dyaXRlX21pbihYRlNfSShpbm9kZSkpIFx1MDAzZSAwKVxuIFx0XHRmaWxlLVx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DQU5fQVRPTUlDX1dSSVRFO1xuK1xuK1x0ZXJyb3IgPSBmc3Zlcml0eV9maWxlX29wZW4oaW5vZGUsIGZpbGUpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4gXHRyZXR1cm4gZ2VuZXJpY19maWxlX29wZW4oaW5vZGUsIGZpbGUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZzdmVyaXR5LmMgYi9mcy94ZnMveGZzX2ZzdmVyaXR5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNDYyMjIzYjQ2MTliMDZcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuY1xuQEAgLTAsMCArMSw0ODAgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IFJlZCBIYXQsIEluYy5cbisgKi9cbisjaW5jbHVkZSBcInhmc19wbGF0Zm9ybS5oXCJcbisjaW5jbHVkZSBcInhmc19mb3JtYXQuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfc2hhcmVkLmhcIlxuKyNpbmNsdWRlIFwieGZzX3RyYW5zX3Jlc3YuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfbW91bnQuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfZGFfZm9ybWF0LmhcIlxuKyNpbmNsdWRlIFwieGZzX2RhX2J0cmVlLmhcIlxuKyNpbmNsdWRlIFwieGZzX2lub2RlLmhcIlxuKyNpbmNsdWRlIFwieGZzX2xvZ19mb3JtYXQuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfdHJhbnMuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfZGVmZXIuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfdHJhY2UuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfcXVvdGEuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfZnN2ZXJpdHkuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfaW9tYXAuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfZXJyb3IuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfaGVhbHRoLmhcIlxuKyNpbmNsdWRlIFwieGZzX2JtYXAuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfYm1hcF91dGlsLmhcIlxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4rXG4rbG9mZl90XG4reGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChcbitcdGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGVcdCppcClcbit7XG4rXHRyZXR1cm4gcm91bmRfdXAoaV9zaXplX3JlYWQoVkZTX0lDKGlwKSksIFhGU19GU1ZFUklUWV9TVEFSVF9BTElHTik7XG4rfVxuK1xuK2Jvb2xcbit4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKFxuK1x0Y29uc3Qgc3RydWN0IHhmc19pbm9kZVx0KmlwLFxuK1x0bG9mZl90XHRcdFx0b2Zmc2V0KVxuK3tcbitcdHJldHVybiBmc3Zlcml0eV9hY3RpdmUoVkZTX0lDKGlwKSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0b2Zmc2V0IFx1MDAzYyB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKTtcbit9XG4rXG4rLypcbisgKiBSZXRyaWV2ZSB0aGUgdmVyaXR5IGRlc2NyaXB0b3IuXG4rICovXG4rc3RhdGljIGludFxuK3hmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvcihcbitcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUsXG4rXHR2b2lkXHRcdFx0KmJ1ZixcbitcdHNpemVfdFx0XHRcdGJ1Zl9zaXplKVxuK3tcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlub2RlKTtcbitcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4rXHRfX2JlMzJcdFx0XHRkX2Rlc2Nfc2l6ZTtcbitcdHUzMlx0XHRcdGRlc2Nfc2l6ZTtcbitcdHU2NFx0XHRcdGRlc2Nfc2l6ZV9wb3M7XG4rXHRpbnRcdFx0XHRlcnJvcjtcbitcdHU2NFx0XHRcdGRlc2NfcG9zO1xuK1x0c3RydWN0IHhmc19ibWJ0X2lyZWNcdHJlYztcbitcdGludFx0XHRcdGlzX2VtcHR5O1xuK1x0dWludDMyX3RcdFx0YmxvY2tzaXplID0gaV9ibG9ja3NpemUoVkZTX0koaXApKTtcbitcdHhmc19maWxlb2ZmX3RcdFx0bGFzdF9ibG9ja19vZmZzZXQ7XG4rXG4rXHRBU1NFUlQoaW5vZGUtXHUwMDNlaV9mbGFncyBcdTAwMjYgU19WRVJJVFkpO1xuK1x0eGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTtcbitcdGVycm9yID0geGZzX2JtYXBfbGFzdF9leHRlbnQoTlVMTCwgaXAsIFhGU19EQVRBX0ZPUkssIFx1MDAyNnJlYywgXHUwMDI2aXNfZW1wdHkpO1xuK1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRpZiAoaXNfZW1wdHkpXG4rXHRcdHJldHVybiAtRU5PREFUQTtcbitcbitcdGxhc3RfYmxvY2tfb2Zmc2V0ID1cbitcdFx0WEZTX0ZTQl9UT19CKG1wLCByZWMuYnJfc3RhcnRvZmYgKyByZWMuYnJfYmxvY2tjb3VudCk7XG4rXHRpZiAobGFzdF9ibG9ja19vZmZzZXQgXHUwMDNjPSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSlcbitcdFx0cmV0dXJuIC1FTk9EQVRBO1xuK1xuK1x0ZGVzY19zaXplX3BvcyA9IGxhc3RfYmxvY2tfb2Zmc2V0IC0gc2l6ZW9mKF9fYmUzMik7XG4rXHRlcnJvciA9IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKGlub2RlLCAoY2hhciAqKVx1MDAyNmRfZGVzY19zaXplLFxuK1x0XHRcdHNpemVvZihkX2Rlc2Nfc2l6ZSksIGRlc2Nfc2l6ZV9wb3MpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRkZXNjX3NpemUgPSBiZTMyX3RvX2NwdShkX2Rlc2Nfc2l6ZSk7XG4rXHRpZiAoWEZTX0lTX0NPUlJVUFQobXAsIGRlc2Nfc2l6ZSBcdTAwM2UgRlNfVkVSSVRZX01BWF9ERVNDUklQVE9SX1NJWkUpKSB7XG4rXHRcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdGlmIChYRlNfSVNfQ09SUlVQVChtcCwgZGVzY19zaXplIFx1MDAzZSBkZXNjX3NpemVfcG9zKSkge1xuK1x0XHR4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTtcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXHR9XG4rXG4rXHRpZiAoIWJ1Zl9zaXplKVxuK1x0XHRyZXR1cm4gZGVzY19zaXplO1xuK1xuK1x0aWYgKFhGU19JU19DT1JSVVBUKG1wLCBkZXNjX3NpemUgXHUwMDNlIGJ1Zl9zaXplKSkge1xuK1x0XHR4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTtcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXHR9XG4rXG4rXHRkZXNjX3BvcyA9IHJvdW5kX2Rvd24oZGVzY19zaXplX3BvcyAtIGRlc2Nfc2l6ZSwgYmxvY2tzaXplKTtcbitcdGlmIChkZXNjX3BvcyBcdTAwM2MgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpIHtcbitcdFx0eGZzX2lub2RlX21hcmtfc2ljayhYRlNfSShpbm9kZSksIFhGU19TSUNLX0lOT19GU1ZFUklUWSk7XG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1x0fVxuK1xuK1x0ZXJyb3IgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBkZXNjX3NpemUsIGRlc2NfcG9zKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0cmV0dXJuIGRlc2Nfc2l6ZTtcbit9XG4rXG4rc3RhdGljIGludFxuK3hmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yKFxuK1x0c3RydWN0IGZpbGVcdFx0KmZpbGUsXG4rXHRjb25zdCB2b2lkXHRcdCpkZXNjLFxuK1x0dTMyXHRcdFx0ZGVzY19zaXplLFxuK1x0dTY0XHRcdFx0bWVya2xlX3RyZWVfc2l6ZSlcbit7XG4rXHRpbnRcdFx0XHRlcnJvcjtcbitcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koaW5vZGUpO1xuK1x0dW5zaWduZWQgaW50XHRcdGJsa3NpemUgPSBpcC1cdTAwM2VpX21vdW50LVx1MDAzZW1fc2Iuc2JfYmxvY2tzaXplO1xuK1x0dTY0XHRcdFx0dHJlZV9sYXN0X2Jsb2NrID1cbitcdFx0XHR4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSArIG1lcmtsZV90cmVlX3NpemU7XG4rXHR1NjRcdFx0XHRkZXNjX3BvcyA9XG4rXHRcdFx0cm91bmRfdXAodHJlZV9sYXN0X2Jsb2NrLCBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR04pO1xuK1x0dTY0XHRcdFx0ZGVzY19lbmQgPSBkZXNjX3BvcyArIGRlc2Nfc2l6ZTtcbitcdF9fYmUzMlx0XHRcdGRlc2Nfc2l6ZV9kaXNrID0gY3B1X3RvX2JlMzIoZGVzY19zaXplKTtcbitcdHU2NFx0XHRcdGRlc2Nfc2l6ZV9wb3MgPVxuK1x0XHRcdHJvdW5kX3VwKGRlc2NfZW5kICsgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSwgYmxrc2l6ZSkgLVxuK1x0XHRcdHNpemVvZihkZXNjX3NpemVfZGlzayk7XG4rXG4rXHRlcnJvciA9IGlvbWFwX2ZzdmVyaXR5X3dyaXRlKGZpbGUsIGRlc2Nfc2l6ZV9wb3MsIHNpemVvZihfX2JlMzIpLFxuK1x0XHRcdChjb25zdCB2b2lkICopXHUwMDI2ZGVzY19zaXplX2Rpc2ssXG4rXHRcdFx0XHUwMDI2eGZzX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX29wcyxcbitcdFx0XHRcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0cmV0dXJuIGlvbWFwX2ZzdmVyaXR5X3dyaXRlKGZpbGUsIGRlc2NfcG9zLCBkZXNjX3NpemUsIGRlc2MsXG4rXHRcdFx0XHUwMDI2eGZzX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX29wcyxcbitcdFx0XHRcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzKTtcbit9XG4rXG4rLypcbisgKiBUcnkgdG8gcmVtb3ZlIGFsbCB0aGUgZnN2ZXJpdHkgbWV0YWRhdGEgYWZ0ZXIgYSBmYWlsZWQgZW5hYmxlbWVudC5cbisgKi9cbitzdGF0aWMgaW50XG4reGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YShcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcClcbit7XG4rXHRzdHJ1Y3QgeGZzX3RyYW5zXHQqdHA7XG4rXHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuK1x0aW50XHRcdFx0ZXJyb3I7XG4rXG4rXHRlcnJvciA9IHhmc190cmFuc19hbGxvYyhtcCwgXHUwMDI2TV9SRVMobXApLVx1MDAzZXRyX2l0cnVuY2F0ZSwgMCwgMCwgMCwgXHUwMDI2dHApO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHR4ZnNfaWxvY2soaXAsIFhGU19NTUFQTE9DS19FWENMIHwgWEZTX0lMT0NLX0VYQ0wpO1xuK1x0dHJ1bmNhdGVfaW5vZGVfcGFnZXMoVkZTX0koaXApLVx1MDAzZWlfbWFwcGluZywgWEZTX0lTSVpFKGlwKSk7XG4rXHR4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCAwKTtcbitcbitcdC8qXG4rXHQgKiBXZSByZW1vdmUgcG9zdCBFT0YgZGF0YSwgbm8gbmVlZCB0byB1cGRhdGUgaV9zaXplIGFzIGZzdmVyaXR5XG4rXHQgKiBkaWRuJ3QgbW92ZSBpX3NpemUgaW4gdGhlIGZpcnN0IHBsYWNlXG4rXHQgKi9cbitcdGVycm9yID0geGZzX2l0cnVuY2F0ZV9leHRlbnRzKFx1MDAyNnRwLCBpcCwgWEZTX0RBVEFfRk9SSywgWEZTX0lTSVpFKGlwKSk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gZXJyX2NhbmNlbDtcbitcbitcdGVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCk7XG4rXHR4ZnNfaXVubG9jayhpcCwgWEZTX01NQVBMT0NLX0VYQ0wgfCBYRlNfSUxPQ0tfRVhDTCk7XG4rXHRyZXR1cm4gZXJyb3I7XG4rZXJyX2NhbmNlbDpcbitcdHhmc190cmFuc19jYW5jZWwodHApO1xuK1x0eGZzX2l1bmxvY2soaXAsIFhGU19NTUFQTE9DS19FWENMIHwgWEZTX0lMT0NLX0VYQ0wpO1xuK1x0cmV0dXJuIGVycm9yO1xuK31cbitcbitzdGF0aWMgaW50XG4reGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4oXG4rXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAsXG4rXHRsb2ZmX3RcdFx0XHRzdGFydCxcbitcdGxvZmZfdFx0XHRcdGVuZClcbit7XG4rXHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuK1x0c3RydWN0IHhmc190cmFuc1x0KnRwO1xuK1x0eGZzX2ZpbGVvZmZfdFx0XHRvZmZzZXRfZnNiID0gWEZTX0JfVE9fRlNCVChtcCwgc3RhcnQpO1xuK1x0eGZzX2ZpbGVvZmZfdFx0XHRlbmRfZnNiID0gWEZTX0JfVE9fRlNCKG1wLCBlbmQpO1xuK1x0c3RydWN0IHhmc19ibWJ0X2lyZWNcdGltYXA7XG4rXHRpbnRcdFx0XHRuaW1hcHM7XG4rXHRpbnRcdFx0XHRlcnJvciA9IDA7XG4rXHRpbnRcdFx0XHRkb25lO1xuK1xuK1x0d2hpbGUgKG9mZnNldF9mc2IgXHUwMDNjIGVuZF9mc2IpIHtcbitcdFx0bmltYXBzID0gMTtcbitcbitcdFx0ZXJyb3IgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFx1MDAyNk1fUkVTKG1wKS1cdTAwM2V0cl93cml0ZSwgMCwgMCwgMCwgXHUwMDI2dHApO1xuK1x0XHRpZiAoZXJyb3IpXG4rXHRcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0XHR4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbitcdFx0ZXJyb3IgPSB4ZnNfYm1hcGlfcmVhZChpcCwgb2Zmc2V0X2ZzYixcbitcdFx0XHRcdGVuZF9mc2IgLSBvZmZzZXRfZnNiLCBcdTAwMjZpbWFwLCBcdTAwMjZuaW1hcHMsXG4rXHRcdFx0XHQwKTtcbitcdFx0aWYgKGVycm9yKVxuK1x0XHRcdGdvdG8gb3V0X2NhbmNlbDtcbitcbitcdFx0aWYgKG5pbWFwcyA9PSAwKVxuK1x0XHRcdGdvdG8gb3V0X2NhbmNlbDtcbitcbitcdFx0aWYgKGltYXAuYnJfc3RhdGUgPT0gWEZTX0VYVF9VTldSSVRURU4pIHtcbitcdFx0XHRkb25lID0gMDtcbitcbitcdFx0XHR4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCAwKTtcbitcbitcdFx0XHR3aGlsZSAoIWRvbmUpIHtcbitcdFx0XHRcdGVycm9yID0geGZzX2J1bm1hcGkodHAsIGlwLCBpbWFwLmJyX3N0YXJ0b2ZmLFxuK1x0XHRcdFx0XHRcdGltYXAuYnJfYmxvY2tjb3VudCwgMCwgMSxcbitcdFx0XHRcdFx0XHRcdTAwMjZkb25lKTtcbitcdFx0XHRcdGlmIChlcnJvcilcbitcdFx0XHRcdFx0Z290byBvdXRfY2FuY2VsO1xuK1xuK1x0XHRcdFx0ZXJyb3IgPSB4ZnNfZGVmZXJfZmluaXNoKFx1MDAyNnRwKTtcbitcdFx0XHRcdGlmIChlcnJvcilcbitcdFx0XHRcdFx0Z290byBvdXRfY2FuY2VsO1xuK1x0XHRcdH1cbitcbitcdFx0XHRlcnJvciA9IHhmc190cmFuc19jb21taXQodHApO1xuK1x0XHRcdGlmIChlcnJvcilcbitcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0fSBlbHNlIHtcbitcdFx0XHR4ZnNfdHJhbnNfY2FuY2VsKHRwKTtcbitcdFx0fVxuK1x0XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuK1xuK1x0XHRvZmZzZXRfZnNiID0gaW1hcC5icl9zdGFydG9mZiArIGltYXAuYnJfYmxvY2tjb3VudDtcbitcdH1cbitcbitcdHJldHVybiBlcnJvcjtcbitvdXRfY2FuY2VsOlxuK1x0eGZzX3RyYW5zX2NhbmNlbCh0cCk7XG4rb3V0X3VubG9jazpcbitcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4rXHRyZXR1cm4gZXJyb3I7XG4rfVxuK1xuK1xuKy8qXG4rICogUHJlcGFyZSB0byBlbmFibGUgZnN2ZXJpdHkgYnkgY2xlYXJpbmcgb2xkIG1ldGFkYXRhLlxuKyAqL1xuK3N0YXRpYyBpbnRcbit4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlKFxuK1x0c3RydWN0IGZpbGVcdFx0KmZpbHApXG4re1xuK1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XG4rXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpbm9kZSk7XG4rXHRpbnRcdFx0XHRlcnJvcjtcbitcbitcdHhmc19hc3NlcnRfaWxvY2tlZChpcCwgWEZTX0lPTE9DS19FWENMKTtcbitcbitcdGlmIChJU19EQVgoaW5vZGUpIHx8IGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX0RBWClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoaW5vZGUtXHUwMDNlaV9zaXplIFx1MDAzZSBYRlNfRlNWRVJJVFlfTEFSR0VTVF9GSUxFKVxuK1x0XHRyZXR1cm4gLUVGQklHO1xuK1xuK1x0LypcbitcdCAqIEZsdXNoIHBhZ2VjYWNoZSBiZWZvcmUgYnVpbGRpbmcgTWVya2xlIHRyZWUuIElub2RlIGlzIGxvY2tlZCBhbmQgbm9cbitcdCAqIGZ1cnRoZXIgd3JpdGVzIHdpbGwgaGFwcGVuIHRvIHRoZSBmaWxlIGV4Y2VwdCBmc3Zlcml0eSBtZXRhZGF0YVxuK1x0ICovXG4rXHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0aWYgKHhmc19pZmxhZ3NfdGVzdF9hbmRfc2V0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRlcnJvciA9IHhmc19xbV9kcWF0dGFjaChpcCk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gb3V0X2NsZWFyO1xuK1xuK1x0ZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBvdXRfY2xlYXI7XG4rXHRyZXR1cm4gZXJyb3I7XG4rb3V0X2NsZWFyOlxuK1x0eGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pO1xuK1x0cmV0dXJuIGVycm9yO1xuK31cbitcbisvKlxuKyAqIENvbXBsZXRlIChvciBmYWlsKSB0aGUgcHJvY2VzcyBvZiBlbmFibGluZyBmc3Zlcml0eS5cbisgKi9cbitzdGF0aWMgaW50XG4reGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUoXG4rXHRzdHJ1Y3QgZmlsZVx0XHQqZmlsZSxcbitcdGNvbnN0IHZvaWRcdFx0KmRlc2MsXG4rXHRzaXplX3RcdFx0XHRkZXNjX3NpemUsXG4rXHR1NjRcdFx0XHRtZXJrbGVfdHJlZV9zaXplKVxuK3tcbitcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koaW5vZGUpO1xuK1x0c3RydWN0IHhmc19tb3VudFx0Km1wID0gaXAtXHUwMDNlaV9tb3VudDtcbitcdHN0cnVjdCB4ZnNfdHJhbnNcdCp0cDtcbitcdGludFx0XHRcdGVycm9yID0gMDtcbitcdGxvZmZfdFx0XHRcdHJhbmdlX3N0YXJ0ID0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCk7XG4rXG4rXHR4ZnNfYXNzZXJ0X2lsb2NrZWQoaXAsIFhGU19JT0xPQ0tfRVhDTCk7XG4rXG4rXHQvKiBmcy12ZXJpdHkgZmFpbGVkLCBqdXN0IGNsZWFudXAgKi9cbitcdGlmIChkZXNjID09IE5VTEwpIHtcbitcdFx0ZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRlcnJvciA9IHhmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yKGZpbGUsIGRlc2MsIGRlc2Nfc2l6ZSxcbitcdFx0XHRtZXJrbGVfdHJlZV9zaXplKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKlxuK1x0ICogV2FpdCBmb3IgTWVya2xlIHRyZWUgZ2V0IHdyaXR0ZW4gdG8gZGlzayBiZWZvcmUgc2V0dGluZyBvbi1kaXNrIGlub2RlXG4rXHQgKiBmbGFnIGFuZCBjbGVhcmluZyBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTlxuK1x0ICovXG4rXHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCByYW5nZV9zdGFydCxcbitcdFx0XHRMTE9OR19NQVgpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qXG4rXHQgKiBSZW1vdmUgdW53cml0dGVuIGV4dGVudHMgbGVmdCBieSBDT1cgcHJlYWxsb2NhdGlvbnMgYW5kIHdyaXRlXG4rXHQgKiBwcmVhbGxvY2F0aW9uIGluIHRoZSBtZXJrbGUgdHJlZSBob2xlcyBhbmQgcGFzdCBkZXNjcmlwdG9yXG4rXHQgKi9cbitcdGVycm9yID0geGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4oaXAsIHJhbmdlX3N0YXJ0LCBMTE9OR19NQVgpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qXG4rXHQgKiBQcm9hY3RpdmVseSBkcm9wIGFueSBkZWxheWVkIGFsbG9jYXRpb25zIGluIENPVyBmb3JrLCB0aGUgZnN2ZXJpdHlcbitcdCAqIGZpbGVzIGFyZSByZWFkLW9ubHlcbitcdCAqL1xuK1x0aWYgKHhmc19pc19jb3dfaW5vZGUoaXApKSB7XG4rXHRcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuK1x0XHR4ZnNfaWZvcmtfaW5pdF9jb3coaXApO1xuK1x0XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuK1x0XHR4ZnNfYm1hcF9wdW5jaF9kZWxhbGxvY19yYW5nZShpcCwgWEZTX0NPV19GT1JLLCAwLCBMTE9OR19NQVgsXG4rXHRcdFx0XHROVUxMKTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBTZXQgZnN2ZXJpdHkgaW5vZGUgZmxhZ1xuK1x0ICovXG4rXHRlcnJvciA9IHhmc190cmFuc19hbGxvY19pbm9kZShpcCwgXHUwMDI2TV9SRVMobXApLVx1MDAzZXRyX2ljaGFuZ2UsXG4rXHRcdFx0MCwgMCwgZmFsc2UsIFx1MDAyNnRwKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKlxuK1x0ICogRW5zdXJlIHRoYXQgd2UndmUgcGVyc2lzdGVkIHRoZSB2ZXJpdHkgaW5mb3JtYXRpb24gYmVmb3JlIHdlIGVuYWJsZVxuK1x0ICogaXQgb24gdGhlIGlub2RlIGFuZCB0ZWxsIHRoZSBjYWxsZXIgd2UgaGF2ZSBzZWFsZWQgdGhlIGlub2RlLlxuK1x0ICovXG4rXHRpcC1cdTAwM2VpX2RpZmxhZ3MyIHw9IFhGU19ESUZMQUcyX1ZFUklUWTtcbitcbitcdHhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTtcbitcdHhmc190cmFuc19zZXRfc3luYyh0cCk7XG4rXG4rXHRlcnJvciA9IHhmc190cmFuc19jb21taXQodHApO1xuK1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbitcbitcdGlmICghZXJyb3IpXG4rXHRcdGlub2RlX3NldF9mbGFncyhpbm9kZSwgU19WRVJJVFksIFNfVkVSSVRZKTtcbitcbitvdXQ6XG4rXHRpZiAoZXJyb3IpIHtcbitcdFx0aW50XHRlcnJvcjI7XG4rXG4rXHRcdGVycm9yMiA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApO1xuK1x0XHRpZiAoZXJyb3IyKVxuK1x0XHRcdHhmc19hbGVydChpcC1cdTAwM2VpX21vdW50LFxuK1wiaW5vIDB4JWxseCBmYWlsZWQgdG8gY2xlYW4gdXAgbmV3IGZzdmVyaXR5IG1ldGFkYXRhLCBlcnIgJWRcIixcbitcdFx0XHRcdFx0SV9JTk8oaXApLCBlcnJvcjIpO1xuK1x0fVxuK1xuK1x0eGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pO1xuK1x0cmV0dXJuIGVycm9yO1xuK31cbitcbisvKlxuKyAqIFJldHJpZXZlIGEgbWVya2xlIHRyZWUgYmxvY2suXG4rICovXG4rc3RhdGljIHN0cnVjdCBwYWdlICpcbit4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGUoXG4rXHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlLFxuK1x0cGdvZmZfdFx0XHRcdGluZGV4KVxuK3tcbitcdGluZGV4ICs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoWEZTX0koaW5vZGUpKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcbitcdHJldHVybiBnZW5lcmljX3JlYWRfbWVya2xlX3RyZWVfcGFnZShpbm9kZSwgaW5kZXgpO1xuK31cbitcbisvKlxuKyAqIFJldHJpZXZlIGEgbWVya2xlIHRyZWUgYmxvY2suXG4rICovXG4rc3RhdGljIHZvaWRcbit4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlKFxuK1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSxcbitcdHBnb2ZmX3RcdFx0XHRpbmRleCxcbitcdHVuc2lnbmVkIGxvbmdcdFx0bnJfcGFnZXMpXG4re1xuK1x0aW5kZXggKz0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChYRlNfSShpbm9kZSkpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1xuK1x0Z2VuZXJpY19yZWFkYWhlYWRfbWVya2xlX3RyZWUoaW5vZGUsIGluZGV4LCBucl9wYWdlcyk7XG4rfVxuK1xuKy8qXG4rICogV3JpdGUgYSBtZXJrbGUgdHJlZSBibG9jay5cbisgKi9cbitzdGF0aWMgaW50XG4reGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZShcbitcdHN0cnVjdCBmaWxlXHRcdCpmaWxlLFxuK1x0Y29uc3Qgdm9pZFx0XHQqYnVmLFxuK1x0dTY0XHRcdFx0cG9zLFxuK1x0dW5zaWduZWQgaW50XHRcdHNpemUsXG4rXHRjb25zdCB1OFx0XHQqemVyb19kaWdlc3QsXG4rXHR1bnNpZ25lZCBpbnRcdFx0ZGlnZXN0X3NpemUpXG4re1xuK1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4rXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpbm9kZSk7XG4rXHRsb2ZmX3RcdFx0XHRwb3NpdGlvbiA9IHBvcyArXG4rXHRcdHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApO1xuK1xuK1x0aWYgKHBvc2l0aW9uICsgc2l6ZSBcdTAwM2UgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX21heGJ5dGVzKVxuK1x0XHRyZXR1cm4gLUVGQklHO1xuK1xuK1x0LypcbitcdCAqIElmIHRoaXMgaXMgYSBibG9jayBmdWxsIG9mIGhhc2hlcyBvZiB6ZXJvZWQgYmxvY2tzLCBkb24ndCBib3RoZXJcbitcdCAqIHN0b3JpbmcgdGhlIGJsb2NrLiBXZSBjYW4gc3ludGhlc2l6ZSB0aGVtIGxhdGVyLlxuK1x0ICpcbitcdCAqIEhvd2V2ZXIsIGRvIHRoaXMgb25seSBpbiBjYXNlIE1lcmtsZSB0cmVlIGJsb2NrID09IGZzIGJsb2NrIHNpemUuXG4rXHQgKiBJb21hcCBzeW50aGVzaXplcyB0aGVzZSBibG9ja3MgYmFzZWQgb24gaG9sZXMgaW4gdGhlIG1lcmtsZSB0cmVlLiBXZVxuK1x0ICogd29uJ3QgYmUgYWJsZSB0byB0ZWxsIGlmIHNvbWV0aGluZyBuZWVkIHRvIGJlIHN5bnRoZXNpemVzIGZvciB0aGVcbitcdCAqIHJhbmdlIGluIHRoZSBmcyBibG9jay4gRm9yIGV4YW1wbGUsIGZvciA0ayBmaWxlc3lzdGVtIGJsb2NrXG4rXHQgKlxuK1x0ICpcdFsgMWsgfCB6ZXJvIGhhc2hlcyB8IHplcm8gaGFzaGVzIHwgMWsgXVxuK1x0ICpcbitcdCAqIElvbWFwIHdvbid0IGtub3cgYWJvdXQgdGhlc2UgZW1wdHkgYmxvY2tzLlxuK1x0ICovXG4rXHRpZiAoc2l6ZSA9PSBpcC1cdTAwM2VpX21vdW50LVx1MDAzZW1fc2Iuc2JfYmxvY2tzaXplIFx1MDAyNlx1MDAyNlxuK1x0XHRcdC8qXG4rXHRcdFx0ICogRmlyc3QgZGlnZXN0IGlzIHplcm9fZGlnZXN0XG4rXHRcdFx0ICovXG4rXHRcdFx0bWVtY21wKGJ1ZiwgemVyb19kaWdlc3QsIGRpZ2VzdF9zaXplKSA9PSAwIFx1MDAyNlx1MDAyNlxuK1x0XHRcdC8qXG4rXHRcdFx0ICogRXZlcnkgZGlnZXN0IGlzIHNhbWUgYXMgcHJldmlvdXMsIHRodXMgYWxsIGFyZVxuK1x0XHRcdCAqIHplcm9fZGlnZXN0XG4rXHRcdFx0ICovXG4rXHRcdFx0bWVtY21wKGJ1ZiArIGRpZ2VzdF9zaXplLCBidWYsIHNpemUgLSBkaWdlc3Rfc2l6ZSkgPT0gMClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gaW9tYXBfZnN2ZXJpdHlfd3JpdGUoZmlsZSwgcG9zaXRpb24sIHNpemUsIGJ1ZixcbitcdFx0XHRcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxuK1x0XHRcdFx1MDAyNnhmc19pb21hcF93cml0ZV9vcHMpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB4ZnNfZnN2ZXJpdHlfb3BzID0ge1xuK1x0LmJlZ2luX2VuYWJsZV92ZXJpdHlcdFx0PSB4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlLFxuK1x0LmVuZF9lbmFibGVfdmVyaXR5XHRcdD0geGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUsXG4rXHQuZ2V0X3Zlcml0eV9kZXNjcmlwdG9yXHRcdD0geGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yLFxuK1x0LnJlYWRfbWVya2xlX3RyZWVfcGFnZVx0XHQ9IHhmc19mc3Zlcml0eV9yZWFkX21lcmtsZSxcbitcdC5yZWFkYWhlYWRfbWVya2xlX3RyZWVcdFx0PSB4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlLFxuK1x0LndyaXRlX21lcmtsZV90cmVlX2Jsb2NrXHQ9IHhmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUsXG4rfTtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZzdmVyaXR5LmggYi9mcy94ZnMveGZzX2ZzdmVyaXR5Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNmE5ODFlMjBhNzViYjhcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaFxuQEAgLTAsMCArMSwyOCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLypcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgUmVkIEhhdCwgSW5jLlxuKyAqL1xuKyNpZm5kZWYgX19YRlNfRlNWRVJJVFlfSF9fXG4rI2RlZmluZSBfX1hGU19GU1ZFUklUWV9IX19cbitcbisjaW5jbHVkZSBcInhmc19wbGF0Zm9ybS5oXCJcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4rXG4rI2lmZGVmIENPTkZJR19GU19WRVJJVFlcbitleHRlcm4gY29uc3Qgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMgeGZzX2ZzdmVyaXR5X29wcztcbitsb2ZmX3QgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCk7XG4rYm9vbCB4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBsb2ZmX3Qgb2Zmc2V0KTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgbG9mZl90IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApXG4re1xuK1x0V0FSTl9PTl9PTkNFKDEpO1xuK1x0cmV0dXJuIFVMTE9OR19NQVg7XG4rfVxuK3N0YXRpYyBpbmxpbmUgYm9vbCB4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwLFxuK1x0XHRcdFx0XHQgICAgbG9mZl90IG9mZnNldClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuKyNlbmRpZlx0LyogQ09ORklHX0ZTX1ZFUklUWSAqL1xuK1xuKyNlbmRpZlx0LyogX19YRlNfRlNWRVJJVFlfSF9fICovXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19oZWFsdGguYyBiL2ZzL3hmcy94ZnNfaGVhbHRoLmNcbmluZGV4IDIzOWI4NDNlODNkNDJhLi5iZTY2NzYwZmIxMjBmNyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfaGVhbHRoLmNcbisrKyBiL2ZzL3hmcy94ZnNfaGVhbHRoLmNcbkBAIC02MjUsNiArNjI1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb2N0bF9zaWNrX21hcCBpbm9fbWFwW10gPSB7XG4gXHR7IFhGU19TSUNLX0lOT19ESVJfWkFQUEVELFx0WEZTX0JTX1NJQ0tfRElSIH0sXG4gXHR7IFhGU19TSUNLX0lOT19TWU1MSU5LX1pBUFBFRCxcdFhGU19CU19TSUNLX1NZTUxJTksgfSxcbiBcdHsgWEZTX1NJQ0tfSU5PX0RJUlRSRUUsXHRYRlNfQlNfU0lDS19ESVJUUkVFIH0sXG4rXHR7IFhGU19TSUNLX0lOT19GU1ZFUklUWSxcdFhGU19CU19TSUNLX0ZTVkVSSVRZIH0sXG4gfTtcbiBcbiAvKiBGaWxsIG91dCBidWxrc3RhdCBoZWFsdGggaW5mby4gKi9cbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmhcbmluZGV4IDM0YzEwMzhlYmZjZGUxLi4xN2NlMDgzNTkxZjQwOCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuaFxuKysrIGIvZnMveGZzL3hmc19pbm9kZS5oXG5AQCAtNDE5LDYgKzQxOSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lub2RlX2Nhbl9zd19hdG9taWNfd3JpdGUoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApXG4gICovXG4gI2RlZmluZSBYRlNfSVJFTUFQUElOR1x0XHQoMVUgXHUwMDNjXHUwMDNjIDE1KVxuIFxuKy8qXG4rICogZnMtdmVyaXR5J3MgTWVya2xlIHRyZWUgaXMgdW5kZXIgY29uc3RydWN0aW9uLiBUaGUgZmlsZSBpcyByZWFkLW9ubHksIHRoZVxuKyAqIG9ubHkgd3JpdGVzIGhhcHBlbmluZyBhcmUgZm9yIHRoZSBmc3Zlcml0eSBtZXRhZGF0YS5cbisgKi9cbisjZGVmaW5lIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OXHQoMVUgXHUwMDNjXHUwMDNjIDE2KVxuK1xuIC8qIEFsbCBpbm9kZSBzdGF0ZSBmbGFncyByZWxhdGVkIHRvIGlub2RlIHJlY2xhaW0uICovXG4gI2RlZmluZSBYRlNfQUxMX0lSRUNMQUlNX0ZMQUdTXHQoWEZTX0lSRUNMQUlNQUJMRSB8IFxcXG4gXHRcdFx0XHQgWEZTX0lSRUNMQUlNIHwgXFxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvY3RsLmMgYi9mcy94ZnMveGZzX2lvY3RsLmNcbmluZGV4IDFiNTM3MDFiZWJlYTFhLi5mYzc4NjBhOGI1YWJiMSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfaW9jdGwuY1xuKysrIGIvZnMveGZzL3hmc19pb2N0bC5jXG5AQCAtNDksNiArNDksNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlYXR0ci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuIC8qIFJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgcG9zaXRpdmUgZXJyb3IgKi9cbiBpbnRcbkBAIC0xNDY2LDYgKzE0NjcsMTkgQEAgeGZzX2ZpbGVfaW9jdGwoXG4gXHRjYXNlIFhGU19JT0NfVkVSSUZZX01FRElBOlxuIFx0XHRyZXR1cm4geGZzX2lvY192ZXJpZnlfbWVkaWEoZmlscCwgYXJnKTtcbiBcbitcdGNhc2UgRlNfSU9DX0VOQUJMRV9WRVJJVFk6XG4rXHRcdGlmICgheGZzX2hhc192ZXJpdHkobXApKVxuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0cmV0dXJuIGZzdmVyaXR5X2lvY3RsX2VuYWJsZShmaWxwLCBhcmcpO1xuK1x0Y2FzZSBGU19JT0NfTUVBU1VSRV9WRVJJVFk6XG4rXHRcdGlmICgheGZzX2hhc192ZXJpdHkobXApKVxuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0cmV0dXJuIGZzdmVyaXR5X2lvY3RsX21lYXN1cmUoZmlscCwgYXJnKTtcbitcdGNhc2UgRlNfSU9DX1JFQURfVkVSSVRZX01FVEFEQVRBOlxuK1x0XHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdHJldHVybiBmc3Zlcml0eV9pb2N0bF9yZWFkX21ldGFkYXRhKGZpbHAsIGFyZyk7XG4rXG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVOT1RUWTtcbiBcdH1cbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvbWFwLmMgYi9mcy94ZnMveGZzX2lvbWFwLmNcbmluZGV4IDIyNWMzZGU4OGQwM2IxLi5hNGQ1NjU2NjE5ODkzMSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuY1xuKysrIGIvZnMveGZzL3hmc19pb21hcC5jXG5AQCAtMzIsNiArMzIsOCBAQFxuICNpbmNsdWRlIFwieGZzX3J0Yml0bWFwLmhcIlxuICNpbmNsdWRlIFwieGZzX2ljYWNoZS5oXCJcbiAjaW5jbHVkZSBcInhmc196b25lX2FsbG9jLmhcIlxuKyNpbmNsdWRlIFwieGZzX2ZzdmVyaXR5LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiAjZGVmaW5lIFhGU19BTExPQ19BTElHTihtcCwgb2ZmKSBcXFxuIFx0KCgob2ZmKSBcdTAwM2VcdTAwM2UgbXAtXHUwMDNlbV9hbGxvY3NpemVfbG9nKSBcdTAwM2NcdTAwM2MgbXAtXHUwMDNlbV9hbGxvY3NpemVfbG9nKVxuQEAgLTg4Myw2ICs4ODUsOSBAQCB4ZnNfZGlyZWN0X3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBJT01BUF9BVE9NSUMpXG4gXHRcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfQVRPTUlDX0JJTztcbiBcbitcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcbitcdFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbitcbiBcdC8qXG4gXHQgKiBDT1cgd3JpdGVzIG1heSBhbGxvY2F0ZSBkZWxhbGxvYyBzcGFjZSBvciBjb252ZXJ0IHVud3JpdHRlbiBDT1dcbiBcdCAqIGV4dGVudHMsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHRha2UgdGhlIGxvY2sgZXhjbHVzaXZlbHkgaGVyZS5cbkBAIC0xNTg5LDcgKzE1OTQsOCBAQCB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oXG4gXHRsb2ZmX3RcdFx0XHRjb3VudCxcbiBcdHVuc2lnbmVkXHRcdGZsYWdzLFxuIFx0c3RydWN0IGlvbWFwXHRcdCppb21hcCxcbi1cdHN0cnVjdCBpb21hcFx0XHQqc3JjbWFwKVxuK1x0c3RydWN0IGlvbWFwXHRcdCpzcmNtYXAsXG4rXHR1MTZcdFx0XHRpb21hcF9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfaXRlclx0Kml0ZXIgPVxuIFx0XHRjb250YWluZXJfb2YoaW9tYXAsIHN0cnVjdCBpb21hcF9pdGVyLCBpb21hcCk7XG5AQCAtMTU5OSw3ICsxNjA1LDYgQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0c3RydWN0IHhmc19tb3VudFx0Km1wID0gaXAtXHUwMDNlaV9tb3VudDtcbiBcdHhmc19maWxlb2ZmX3RcdFx0b2Zmc2V0X2ZzYiA9IFhGU19CX1RPX0ZTQlQobXAsIG9mZnNldCk7XG4gXHR4ZnNfZmlsZW9mZl90XHRcdGVuZF9mc2IgPSB4ZnNfaW9tYXBfZW5kX2ZzYihtcCwgb2Zmc2V0LCBjb3VudCk7XG4tXHR1MTZcdFx0XHRpb21hcF9mbGFncyA9IElPTUFQX0ZfU0hBUkVEO1xuIFx0dW5zaWduZWQgaW50XHRcdGxvY2ttb2RlID0gWEZTX0lMT0NLX0VYQ0w7XG4gXHR4ZnNfZmlsYmxrc190XHRcdGNvdW50X2ZzYjtcbiBcdHhmc19leHRsZW5fdFx0XHRpbmRsZW47XG5AQCAtMTY2Miw3ICsxNjY3LDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0XHRcdFx0c21hcC5icl9zdGFydG9mZiArIHNtYXAuYnJfYmxvY2tjb3VudCk7XG4gXHRcdFx0eGZzX3RyaW1fZXh0ZW50KFx1MDAyNnNtYXAsIG9mZnNldF9mc2IsXG4gXHRcdFx0XHRcdGVuZF9mc2IgLSBvZmZzZXRfZnNiKTtcbi1cdFx0XHRlcnJvciA9IHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBzcmNtYXAsIFx1MDAyNnNtYXAsIGZsYWdzLCAwLFxuK1x0XHRcdGVycm9yID0geGZzX2JtYnRfdG9faW9tYXAoaXAsIHNyY21hcCwgXHUwMDI2c21hcCwgZmxhZ3MsXG4rXHRcdFx0XHRcdGlvbWFwX2ZsYWdzLFxuIFx0XHRcdFx0XHR4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIDApKTtcbiBcdFx0XHRpZiAoZXJyb3IpXG4gXHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtMTY3Miw2ICsxNjc4LDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0aWYgKCFpcC1cdTAwM2VpX2Nvd2ZwKVxuIFx0XHR4ZnNfaWZvcmtfaW5pdF9jb3coaXApO1xuIFxuK1x0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9TSEFSRUQ7XG4rXG4gXHRpZiAoIXhmc19pZXh0X2xvb2t1cF9leHRlbnQoaXAsIGlwLVx1MDAzZWlfY293ZnAsIG9mZnNldF9mc2IsIFx1MDAyNmljdXIsIFx1MDAyNmdvdCkpXG4gXHRcdGdvdC5icl9zdGFydG9mZiA9IGVuZF9mc2I7XG4gXHRpZiAoZ290LmJyX3N0YXJ0b2ZmIFx1MDAzYz0gb2Zmc2V0X2ZzYikge1xuQEAgLTE4MDMsOSArMTgxMSwxMiBAQCB4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4rXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXG4rXHRcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XG4rXG4gXHRpZiAoeGZzX2lzX3pvbmVkX2lub2RlKGlwKSlcbiBcdFx0cmV0dXJuIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LFxuLVx0XHRcdFx0Y291bnQsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcbitcdFx0XHRcdGNvdW50LCBmbGFncywgaW9tYXAsIHNyY21hcCwgaW9tYXBfZmxhZ3MpO1xuIFxuIFx0Lyogd2UgY2FuJ3QgdXNlIGRlbGF5ZWQgYWxsb2NhdGlvbnMgd2hlbiB1c2luZyBleHRlbnQgc2l6ZSBoaW50cyAqL1xuIFx0aWYgKHhmc19nZXRfZXh0c3pfaGludChpcCkpXG5AQCAtMjE5MSwxMiArMjIwMiwxNyBAQCB4ZnNfcmVhZF9pb21hcF9iZWdpbihcbiBcdGJvb2xcdFx0XHRzaGFyZWQgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGludFx0XHRsb2NrbW9kZSA9IFhGU19JTE9DS19TSEFSRUQ7XG4gXHR1NjRcdFx0XHRzZXE7XG4rXHR1bnNpZ25lZCBpbnRcdFx0aW9tYXBfZmxhZ3MgPSAwO1xuIFxuIFx0QVNTRVJUKCEoZmxhZ3MgXHUwMDI2IChJT01BUF9XUklURSB8IElPTUFQX1pFUk8pKSk7XG4gXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4rXHRpZiAoZnN2ZXJpdHlfYWN0aXZlKGlub2RlKSBcdTAwMjZcdTAwMjZcbitcdCAgICAob2Zmc2V0IFx1MDAzZT0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpKVxuK1x0XHRpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xuK1xuIFx0ZXJyb3IgPSB4ZnNfaWxvY2tfZm9yX2lvbWFwKGlwLCBmbGFncywgXHUwMDI2bG9ja21vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG5AQCAtMjIxMCw4ICsyMjI2LDkgQEAgeGZzX3JlYWRfaW9tYXBfYmVnaW4oXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdHRyYWNlX3hmc19pb21hcF9mb3VuZChpcCwgb2Zmc2V0LCBsZW5ndGgsIFhGU19EQVRBX0ZPUkssIFx1MDAyNmltYXApO1xuLVx0cmV0dXJuIHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2aW1hcCwgZmxhZ3MsXG4tXHRcdFx0XHQgc2hhcmVkID8gSU9NQVBfRl9TSEFSRUQgOiAwLCBzZXEpO1xuK1x0aW9tYXBfZmxhZ3MgfD0gc2hhcmVkID8gSU9NQVBfRl9TSEFSRUQgOiAwO1xuK1xuK1x0cmV0dXJuIHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2aW1hcCwgZmxhZ3MsIGlvbWFwX2ZsYWdzLCBzZXEpO1xuIH1cbiBcbiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIHhmc19yZWFkX2lvbWFwX29wcyA9IHtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvcHMuYyBiL2ZzL3hmcy94ZnNfaW9wcy5jXG5pbmRleCA2MzM5ZjQ5NTZlY2IzOS4uNzA2MzdjZGNjMjk5NzIgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lvcHMuY1xuKysrIGIvZnMveGZzL3hmc19pb3BzLmNcbkBAIC0zNSw2ICszNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2l2ZXJzaW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWVtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiAvKlxuICAqIERpcmVjdG9yaWVzIGhhdmUgZGlmZmVyZW50IGxvY2sgb3JkZXIgdy5yLnQuIG1tYXBfbG9jayBjb21wYXJlZCB0byByZWd1bGFyXG5AQCAtNTgwLDYgKzU4MSwxMCBAQCB4ZnNfcmVwb3J0X2Rpb2FsaWduKFxuIFx0c3RydWN0IGJsb2NrX2RldmljZVx0KmJkZXYgPSB0YXJnZXQtXHUwMDNlYnRfYmRldjtcbiBcbiBcdHN0YXQtXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfRElPQUxJR04gfCBTVEFUWF9ESU9fUkVBRF9BTElHTjtcbitcbitcdGlmIChmc3Zlcml0eV9hY3RpdmUoVkZTX0koaXApKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0c3RhdC1cdTAwM2VkaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KGJkZXYpICsgMTtcbiBcbiBcdC8qXG5AQCAtMTM3MCw2ICsxMzc1LDggQEAgeGZzX2lub2RlX3Nob3VsZF9lbmFibGVfZGF4KFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAoIXhmc19pbm9kZV9zdXBwb3J0c19kYXgoaXApKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjYgWEZTX0RJRkxBRzJfVkVSSVRZKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAoeGZzX2hhc19kYXhfYWx3YXlzKGlwLVx1MDAzZWlfbW91bnQpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGlmIChpcC1cdTAwM2VpX2RpZmxhZ3MyIFx1MDAyNiBYRlNfRElGTEFHMl9EQVgpXG5AQCAtMTM5OCwxMiArMTQwNSwxNSBAQCB4ZnNfZGlmbGFnc190b19pZmxhZ3MoXG4gXHRcdGZsYWdzIHw9IFNfTk9BVElNRTtcbiBcdGlmIChpbml0IFx1MDAyNlx1MDAyNiB4ZnNfaW5vZGVfc2hvdWxkX2VuYWJsZV9kYXgoaXApKVxuIFx0XHRmbGFncyB8PSBTX0RBWDtcbitcdGlmICh4ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX1ZFUklUWSlcbitcdFx0ZmxhZ3MgfD0gU19WRVJJVFk7XG4gXG4gXHQvKlxuIFx0ICogU19EQVggY2FuIG9ubHkgYmUgc2V0IGR1cmluZyBpbm9kZSBpbml0aWFsaXphdGlvbiBhbmQgaXMgbmV2ZXIgc2V0IGJ5XG4gXHQgKiB0aGUgVkZTLCBzbyB3ZSBjYW5ub3QgbWFzayBvZmYgU19EQVggaW4gaV9mbGFncy5cbiBcdCAqL1xuLVx0aW5vZGUtXHUwMDNlaV9mbGFncyBcdTAwMjY9IH4oU19JTU1VVEFCTEUgfCBTX0FQUEVORCB8IFNfU1lOQyB8IFNfTk9BVElNRSk7XG4rXHRpbm9kZS1cdTAwM2VpX2ZsYWdzIFx1MDAyNj1cbitcdFx0fihTX0lNTVVUQUJMRSB8IFNfQVBQRU5EIHwgU19TWU5DIHwgU19OT0FUSU1FIHwgU19WRVJJVFkpO1xuIFx0aW5vZGUtXHUwMDNlaV9mbGFncyB8PSBmbGFncztcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tZXNzYWdlLmMgYi9mcy94ZnMveGZzX21lc3NhZ2UuY1xuaW5kZXggMDI0M2U1MDlhNDY4OTEuLjQ0YjEzZDQ2MDQ5YzYyIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19tZXNzYWdlLmNcbisrKyBiL2ZzL3hmcy94ZnNfbWVzc2FnZS5jXG5AQCAtMTQ5LDYgKzE0OSwxMCBAQCB4ZnNfd2Fybl9leHBlcmltZW50YWwoXG4gXHRcdFx0Lm9wc3RhdGVcdD0gWEZTX09QU1RBVEVfV0FSTkVEX0xBUlAsXG4gXHRcdFx0Lm5hbWVcdFx0PSBcImxvZ2dlZCBleHRlbmRlZCBhdHRyaWJ1dGVzXCIsXG4gXHRcdH0sXG4rXHRcdFtYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZXSA9IHtcbitcdFx0XHQub3BzdGF0ZVx0PSBYRlNfT1BTVEFURV9XQVJORURfRlNWRVJJVFksXG4rXHRcdFx0Lm5hbWVcdFx0PSBcImZzdmVyaXR5XCIsXG4rXHRcdH0sXG4gXHR9O1xuIFx0QVNTRVJUKGZlYXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBmZWF0IFx1MDAzYyBYRlNfRVhQRVJJTUVOVEFMX01BWCk7XG4gXHRCVUlMRF9CVUdfT04oQVJSQVlfU0laRShmZWF0dXJlcykgIT0gWEZTX0VYUEVSSU1FTlRBTF9NQVgpO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5oIGIvZnMveGZzL3hmc19tZXNzYWdlLmhcbmluZGV4IDgxMWI4ODVmNDFjMzVhLi4zNjRmY2M3ZTQyYjA4NCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5oXG4rKysgYi9mcy94ZnMveGZzX21lc3NhZ2UuaFxuQEAgLTkzLDYgKzkzLDcgQEAgdm9pZCB4ZnNfYnVmX2FsZXJ0X3JhdGVsaW1pdGVkKHN0cnVjdCB4ZnNfYnVmICpicCwgY29uc3QgY2hhciAqcmxtc2csXG4gZW51bSB4ZnNfZXhwZXJpbWVudGFsX2ZlYXQge1xuIFx0WEZTX0VYUEVSSU1FTlRBTF9TSFJJTkssXG4gXHRYRlNfRVhQRVJJTUVOVEFMX0xBUlAsXG4rXHRYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZLFxuIFxuIFx0WEZTX0VYUEVSSU1FTlRBTF9NQVgsXG4gfTtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmhcbmluZGV4IDY2YTAyZDFiOWFkN2ExLi44NzVjOWIwZjhlOTkxZiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaFxuKysrIGIvZnMveGZzL3hmc19tb3VudC5oXG5AQCAtMzg4LDYgKzM4OCw3IEBAIHR5cGVkZWYgc3RydWN0IHhmc19tb3VudCB7XG4gI2RlZmluZSBYRlNfRkVBVF9FWENIQU5HRV9SQU5HRVx0KDFVTEwgXHUwMDNjXHUwMDNjIDI3KVx0LyogZXhjaGFuZ2UgcmFuZ2UgKi9cbiAjZGVmaW5lIFhGU19GRUFUX01FVEFESVJcdCgxVUxMIFx1MDAzY1x1MDAzYyAyOClcdC8qIG1ldGFkYXRhIGRpcmVjdG9yeSB0cmVlICovXG4gI2RlZmluZSBYRlNfRkVBVF9aT05FRFx0XHQoMVVMTCBcdTAwM2NcdTAwM2MgMjkpXHQvKiB6b25lZCBSVCBkZXZpY2UgKi9cbisjZGVmaW5lIFhGU19GRUFUX1ZFUklUWVx0XHQoMVVMTCBcdTAwM2NcdTAwM2MgMzApXHQvKiBmcy12ZXJpdHkgKi9cbiBcbiAvKiBNb3VudCBmZWF0dXJlcyAqL1xuICNkZWZpbmUgWEZTX0ZFQVRfTk9MSUZFVElNRVx0KDFVTEwgXHUwMDNjXHUwMDNjIDQ3KVx0LyogZGlzYWJsZSBsaWZldGltZSBoaW50cyAqL1xuQEAgLTQ0NSw2ICs0NDYsNyBAQCBfX1hGU19IQVNfRkVBVChleGNoYW5nZV9yYW5nZSwgRVhDSEFOR0VfUkFOR0UpXG4gX19YRlNfSEFTX0ZFQVQobWV0YWRpciwgTUVUQURJUilcbiBfX1hGU19IQVNfRkVBVCh6b25lZCwgWk9ORUQpXG4gX19YRlNfSEFTX0ZFQVQobm9saWZldGltZSwgTk9MSUZFVElNRSlcbitfX1hGU19IQVNfRkVBVCh2ZXJpdHksIFZFUklUWSlcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2hhc19ydGdyb3Vwcyhjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcClcbiB7XG5AQCAtNTgyLDYgKzU4NCw4IEBAIF9fWEZTX0hBU19GRUFUKG5vdXVpZCwgTk9VVUlEKVxuICNkZWZpbmUgWEZTX09QU1RBVEVfUkVTVU1JTkdfUVVPVEFPTlx0MThcbiAvKiAoWm9uZWQpIEdDIGlzIGluIHByb2dyZXNzICovXG4gI2RlZmluZSBYRlNfT1BTVEFURV9aT05FR0NfUlVOTklOR1x0MjBcbisvKiBLZXJuZWwgaGFzIGxvZ2dlZCBhIHdhcm5pbmcgYWJvdXQgZnN2ZXJpdHkgc3VwcG9ydCAqL1xuKyNkZWZpbmUgWEZTX09QU1RBVEVfV0FSTkVEX0ZTVkVSSVRZXHQyMVxuIFxuICNkZWZpbmUgX19YRlNfSVNfT1BTVEFURShuYW1lLCBOQU1FKSBcXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB4ZnNfaXNfICMjIG5hbWUgKHN0cnVjdCB4ZnNfbW91bnQgKm1wKSBcXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfc3VwZXIuYyBiL2ZzL3hmcy94ZnNfc3VwZXIuY1xuaW5kZXggODUzMWQ1MjZmYzQ0MDkuLmE3Nzc0ZDJkNmIyM2ZjIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19zdXBlci5jXG4rKysgYi9mcy94ZnMveGZzX3N1cGVyLmNcbkBAIC0zMCw2ICszMCw3IEBAXG4gI2luY2x1ZGUgXCJ4ZnNfZmlsZXN0cmVhbS5oXCJcbiAjaW5jbHVkZSBcInhmc19xdW90YS5oXCJcbiAjaW5jbHVkZSBcInhmc19zeXNmcy5oXCJcbisjaW5jbHVkZSBcInhmc19mc3Zlcml0eS5oXCJcbiAjaW5jbHVkZSBcInhmc19vbmRpc2suaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfcm1hcF9pdGVtLmhcIlxuICNpbmNsdWRlIFwieGZzX3JlZmNvdW50X2l0ZW0uaFwiXG5AQCAtMTY4OSw2ICsxNjkwLDkgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoXG4gXHRzYi1cdTAwM2VzX3F1b3RhX3R5cGVzID0gUVRZUEVfTUFTS19VU1IgfCBRVFlQRV9NQVNLX0dSUCB8IFFUWVBFX01BU0tfUFJKO1xuICNlbmRpZlxuIFx0c2ItXHUwMDNlc19vcCA9IFx1MDAyNnhmc19zdXBlcl9vcGVyYXRpb25zO1xuKyNpZmRlZiBDT05GSUdfRlNfVkVSSVRZXG4rXHRzYi1cdTAwM2VzX3ZvcCA9IFx1MDAyNnhmc19mc3Zlcml0eV9vcHM7XG4rI2VuZGlmXG4gXG4gXHQvKlxuIFx0ICogRGVsYXkgbW91bnQgd29yayBpZiB0aGUgZGVidWcgaG9vayBpcyBzZXQuIFRoaXMgaXMgZGVidWdcbkBAIC0xOTQxLDYgKzE5NDUsOSBAQCB4ZnNfZnNfZmlsbF9zdXBlcihcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBvdXRfZmlsZXN0cmVhbV91bm1vdW50O1xuIFxuK1x0aWYgKHhmc19oYXNfdmVyaXR5KG1wKSlcbitcdFx0eGZzX3dhcm5fZXhwZXJpbWVudGFsKG1wLCBYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZKTtcbitcbiBcdHJvb3QgPSBpZ3JhYihWRlNfSShtcC1cdTAwM2VtX3Jvb3RpcCkpO1xuIFx0aWYgKCFyb290KSB7XG4gXHRcdGVycm9yID0gLUVOT0VOVDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmggYi9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmhcbmluZGV4IDZjNDY3ZGVkOTc1MWZjLi5mOTQzMzMzMmMyNzRiYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnN2ZXJpdHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oXG5AQCAtMTI0LDYgKzEyNCw4IEBAIHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHtcbiBcdCAqIEBidWY6IHRoZSBNZXJrbGUgdHJlZSBibG9jayB0byB3cml0ZVxuIFx0ICogQHBvczogdGhlIHBvc2l0aW9uIG9mIHRoZSBibG9jayBpbiB0aGUgTWVya2xlIHRyZWUgKGluIGJ5dGVzKVxuIFx0ICogQHNpemU6IHRoZSBNZXJrbGUgdHJlZSBibG9jayBzaXplIChpbiBieXRlcylcbitcdCAqIEB6ZXJvX2RpZ2VzdDogdGhlIGhhc2ggb2YgdGhlIGFsbC16ZXJvZXMgYmxvY2tcbitcdCAqIEBkaWdlc3Rfc2l6ZTogc2l6ZSBvZiB6ZXJvX2RpZ2VzdCwgaW4gYnl0ZXNcbiBcdCAqXG4gXHQgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIGJldHdlZW4gLVx1MDAzZWJlZ2luX2VuYWJsZV92ZXJpdHkoKSBhbmRcbiBcdCAqIC1cdTAwM2VlbmRfZW5hYmxlX3Zlcml0eSgpLlxuQEAgLTEzMSw3ICsxMzMsOSBAQCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB7XG4gXHQgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmVcbiBcdCAqL1xuIFx0aW50ICgqd3JpdGVfbWVya2xlX3RyZWVfYmxvY2spKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsXG4tXHRcdFx0XHQgICAgICAgdTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUpO1xuK1x0XHRcdFx0ICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpO1xuIH07XG4gXG4gI2lmZGVmIENPTkZJR19GU19WRVJJVFlcbkBAIC0zMTcsMTAgKzMyMSwxNCBAQCBzdGF0aWMgaW5saW5lIGludCBmc3Zlcml0eV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4raW50IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitcbiB2b2lkIGZzdmVyaXR5X2NsZWFudXBfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4gXG4gc3RydWN0IHBhZ2UgKmdlbmVyaWNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgpO1xuIHZvaWQgZ2VuZXJpY19yZWFkYWhlYWRfbWVya2xlX3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuK2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbitcdFx0XHQgICAgbG9mZl90IHBvcyk7XG4gXG4gI2VuZGlmXHQvKiBfTElOVVhfRlNWRVJJVFlfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuaW5kZXggNTZiNDNkNTk0ZTZlMjkuLjM2ZmM5MzEzODJhODc2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbkBAIC0xMCw2ICsxMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1fdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa2Rldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZm9saW9fYmF0Y2guaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3Rfc29ydC5oXHUwMDNlXG4gXG4gc3RydWN0IGFkZHJlc3Nfc3BhY2U7XG4gc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbztcbkBAIC00ODgsNyArNDg5LDkgQEAgc3RydWN0IGlvbWFwX2lvZW5kICppb21hcF9zcGxpdF9pb2VuZChzdHJ1Y3QgaW9tYXBfaW9lbmQgKmlvZW5kLFxuIHZvaWQgaW9tYXBfZmluaXNoX2lvZW5kcyhzdHJ1Y3QgaW9tYXBfaW9lbmQgKmlvZW5kLCBpbnQgZXJyb3IpO1xuIHZvaWQgaW9tYXBfaW9lbmRfdHJ5X21lcmdlKHN0cnVjdCBpb21hcF9pb2VuZCAqaW9lbmQsXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKm1vcmVfaW9lbmRzKTtcbi12b2lkIGlvbWFwX3NvcnRfaW9lbmRzKHN0cnVjdCBsaXN0X2hlYWQgKmlvZW5kX2xpc3QpO1xuK2ludCBpb21hcF9pb2VuZF9jb21wYXJlKHZvaWQgKnByaXYsIGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmEsXG4rXHRcdGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmIpO1xuK3ZvaWQgaW9tYXBfc29ydF9pb2VuZHMoc3RydWN0IGxpc3RfaGVhZCAqaW9lbmRfbGlzdCwgbGlzdF9jbXBfZnVuY190IGNtcCk7XG4gc3NpemVfdCBpb21hcF9hZGRfdG9faW9lbmQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0bG9mZl90IHBvcywgbG9mZl90IGVuZF9wb3MsIHVuc2lnbmVkIGludCBkaXJ0eV9sZW4pO1xuIGludCBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0KHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIGludCBlcnJvcik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMzo1ODo0My43MDY0Nzc1NjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODI5NzI4Njg3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipYRlMgZnMtdmVyaXR5IFBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gd2UndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgYWRkaW5nIGZzLXZlcml0eSBzdXBwb3J0IHRvIFhGUy4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGFkZGl0aW9uLCBzbyBsZXQncyBicmVhayBpdCBkb3duLiBSaWdodCBhd2F5LCBJJ20gbm90aWNpbmcgbW9kaWZpY2F0aW9ucyBhY3Jvc3MgbXVsdGlwbGUgZmlsZSBzeXN0ZW1zIOKAkyBgZnMveGZzL2AsIGBmcy92ZXJpdHkvYCwgYW5kIGV2ZW4gdG91Y2hlcyBpbiBgZnMvZXh0NC9gLCBgZnMvYnRyZnMvYCwgYW5kIGBmcy9mMmZzL2AuIFRoZSBmYWN0IHRoYXQgYGZzL3Zlcml0eS9gIGlzIGJlaW5nIHRvdWNoZWQgaXMgaW50ZXJlc3RpbmcsIGFsb25nIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBgZnMveGZzL3hmc19mc3Zlcml0eS5jYC4gQWRkaXRpb25hbGx5LCB3ZSBzZWUgY2hhbmdlcyBpbiBgZnMvYXR0ci5jYCwgYGZzL3N0YXQuY2AsIGBmcy9maWxlX2F0dHIuY2AsIGFuZCBgZnMvaW9tYXAvaW9lbmQuY2Ag4oCTIHRoaXMgdGhpbmcncyBnb3QgaXRzIGZpbmdlcnMgaW4gYSBsb3Qgb2YgcGllcy5cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgZW5hYmxpbmcgZnMtdmVyaXR5IGFzIGEgbmV3IGZlYXR1cmUgZm9yIFhGUywgd2hpY2ggbWVhbnMgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlIGFuZCwgdGhlcmVmb3JlLCBmdXp6YWJsZS4gTXkgaW5pdGlhbCBzdHJhdGVneSBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBgQ09ORklHX0ZTX1ZFUklUWWAgaXMgYW4gb2J2aW91cyBwcmVyZXF1aXNpdGUuIEFuZCwgb2YgY291cnNlLCBgQ09ORklHX1hGU19GU2AgaXMgcmVxdWlyZWQuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGNvcmUgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb24uIEknbSBzZWVpbmcgYSBoYW5kZnVsIHRoYXQgbG9vayBwYXJ0aWN1bGFybHkgcmVsZXZhbnQ6IGB4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3JgLCBgeGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3JgLCBgeGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YWAsIGB4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbmAsIGB4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlYCwgYHhmc19mc3Zlcml0eV9lbmRfZW5hYmxlYCwgYHhmc19mc3Zlcml0eV9yZWFkX21lcmtsZWAsIGB4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlYCwgYHhmc19mc3Zlcml0eV93cml0ZV9tZXJrbGVgLCBhcyB3ZWxsIGFzIHN0YW5kYXJkIHJlYWQvd3JpdGUvb3BlbiByb3V0aW5lcyBsaWtlIGB4ZnNfZmlsZV9idWZmZXJlZF9yZWFkYCwgYHhmc19maWxlX2Rpb19yZWFkYCwgYHhmc19maWxlX3JlYWRfaXRlcmAsIGB4ZnNfZmlsZV9vcGVuYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldGAgYW5kIGB4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhYC5cblxuSSB3YW50IHRvIGNvbmZpcm0gd2hldGhlciBgQ09ORklHX0ZTX1ZFUklUWWAgaXMgdGhlIG9ubHkgY29uZmlnIHRoYXQncyByZXF1aXJlZC4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgWEZTIEtjb25maWcgb3IgTWFrZWZpbGUuIFRoZSBwYXRjaCBhZGRzIGB4ZnMtJChDT05GSUdfRlNfVkVSSVRZKSArPSB4ZnNfZnN2ZXJpdHkub2AsIHNvIHRoYXQgY29uZmlybXMgaXQuXG5cbk5vdywgSSdtIGxvb2tpbmcgZm9yIGFueSBub3RhYmxlIGNoYW5nZXMgaW4gdGhlIGV4aXN0aW5nIGBmcy92ZXJpdHkvYCBjb2RlLiBgZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvYCwgYGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkYCwgYW5kIGBmc3Zlcml0eV9maWxsX3plcm9oYXNoYCBsb29rIGxpa2UgdGhleSBjb3VsZCBiZSB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBpbnRlcmFjdGlvbnMuXG5cbkknbSBhbHNvIHNlZWluZyBzb21lIGZzLXZlcml0eS1yZWxhdGVkIGFkZGl0aW9ucyBvciBtb2RpZmljYXRpb25zIGluIG90aGVyIFhGUyBzdWItc3lzdGVtcy4gSW4gYGZzL3hmcy9zY3J1Yi9jb21tb24uY2AsIHRoZXJlJ3MgYHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5YCBhbmQgYHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbmAuIEluIGBmcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNgLCB0aGVyZSBpcyBgeHJlcF9pbm9kZV92ZXJpdHlgLiBJbiBgZnMveGZzL3hmc19hb3BzLmNgLCBJIHNlZSBgeGZzX3JlYWRfaW9lbmRfY29tcGFyZWAsIGB4ZnNfZW5kX2lvZW5kX3JlYWRgLCBhbmQgYHhmc19pb21hcF93cml0ZXBhZ2VzYCBiZWluZyB0b3VjaGVkLiBBbmQgZmluYWxseSwgSSBzZWUgYHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbmAgaW4gYGZzL3hmcy94ZnNfaW9tYXAuY2AsIGFsb25nIHdpdGggYHhmc19maWxlX2J1ZmZlcmVkX3JlYWRgIGluIGBmcy94ZnMveGZzX2ZpbGUuY2AuXG5cbk9rYXksIGJhc2VkIG9uIHRoaXMgaW5pdGlhbCBzd2VlcCwgSSdsbCBjb21waWxlIGEgYEZvY3VzU3ltYm9sc2AgbGlzdCBmb3IgdGhlIGZ1enppbmcgY2FtcGFpZ24uIEknbSBnb2luZyB0byBpbmNsdWRlOlxuXG4tIGB4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlYFxuLSBgeGZzX2ZzdmVyaXR5X2VuZF9lbmFibGVgXG4tIGB4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3JgXG4tIGB4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGVgXG4tIGB4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlYFxuLSBgeGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZWBcbi0gYHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGFgXG4tIGB4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbmBcbi0gYHhmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yYFxuLSBgeGNoa19pbm9kZV9zZXR1cF92ZXJpdHlgXG4tXG5cbiIsIklucHV0VG9rZW5zIjozMTU2OSwiT3V0cHV0VG9rZW5zIjozMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTM6NTk6MDIuMDAzNzY3Mjc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzczMzcyMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTX1ZFUklUWVwiLFxuICAgIFwiWEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZVwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X2VuZF9lbmFibGVcIixcbiAgICBcInhmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvclwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlblwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3JcIixcbiAgICBcInhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5XCIsXG4gICAgXCJ4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW5cIixcbiAgICBcInhyZXBfaW5vZGVfdmVyaXR5XCIsXG4gICAgXCJ4ZnNfcmVhZF9pb2VuZF9jb21wYXJlXCIsXG4gICAgXCJ4ZnNfZW5kX2lvZW5kX3JlYWRcIixcbiAgICBcInhmc19pb21hcF93cml0ZXBhZ2VzXCIsXG4gICAgXCJmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm9cIixcbiAgICBcImZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBmcy12ZXJpdHkgc3VwcG9ydCBmb3IgdGhlIFhGUyBmaWxlc3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZpbGUgYGZzL3hmcy94ZnNfZnN2ZXJpdHkuY2Agd2l0aCB0aGUgY29yZSBsb2dpYywgbW9kaWZpZXMgWEZTIEkvTyBwYXRocywgYW5kIGludGVncmF0ZXMgd2l0aCB0aGUgZ2VuZXJpYyBmcy12ZXJpdHkgbGF5ZXIuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTX1ZFUklUWVwiLFxuICAgIFwiWEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZVwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X2VuZF9lbmFibGVcIixcbiAgICBcInhmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvclwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlblwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3JcIixcbiAgICBcInhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5XCIsXG4gICAgXCJ4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW5cIixcbiAgICBcInhyZXBfaW5vZGVfdmVyaXR5XCIsXG4gICAgXCJ4ZnNfcmVhZF9pb2VuZF9jb21wYXJlXCIsXG4gICAgXCJ4ZnNfZW5kX2lvZW5kX3JlYWRcIixcbiAgICBcInhmc19pb21hcF93cml0ZXBhZ2VzXCIsXG4gICAgXCJmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm9cIixcbiAgICBcImZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBmcy12ZXJpdHkgc3VwcG9ydCBmb3IgdGhlIFhGUyBmaWxlc3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZpbGUgYGZzL3hmcy94ZnNfZnN2ZXJpdHkuY2Agd2l0aCB0aGUgY29yZSBsb2dpYywgbW9kaWZpZXMgWEZTIEkvTyBwYXRocywgYW5kIGludGVncmF0ZXMgd2l0aCB0aGUgZ2VuZXJpYyBmcy12ZXJpdHkgbGF5ZXIuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowtbg6t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-22 13:37:41 +0000 UTC FinishedAt: 2026-07-22 13:59:04 +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": "e61e6fd4f139f2342a6bc86da602df7456ef87f6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_VERITY", "XFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "e61e6fd4f139f2342a6bc86da602df7456ef87f6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FS_VERITY", "XFS_FS" ], "series_id": "f9af06ff-2752-4dc6-89f9-dbc566fd8f0d" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "xfs_fsverity_begin_enable", "xfs_fsverity_end_enable", "xfs_fsverity_get_descriptor", "xfs_fsverity_read_merkle", "xfs_fsverity_readahead_merkle_tree", "xfs_fsverity_write_merkle", "xfs_fsverity_delete_metadata", "xfs_fsverity_cancel_unwritten", "xfs_fsverity_write_descriptor", "xchk_inode_setup_verity", "xchk_inode_verity_broken", "xrep_inode_verity", "xfs_read_ioend_compare", "xfs_end_ioend_read", "xfs_iomap_writepages", "fsverity_ensure_verity_info", "fsverity_pagecache_read" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDEzOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZTX1ZFUklUWSYjMzQ7LAogICAgJiMzNDtYRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9lbmRfZW5hYmxlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvciYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X3JlYWRhaGVhZF9tZXJrbGVfdHJlZSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4mIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3ImIzM0OywKICAgICYjMzQ7eGNoa19pbm9kZV9zZXR1cF92ZXJpdHkmIzM0OywKICAgICYjMzQ7eGNoa19pbm9kZV92ZXJpdHlfYnJva2VuJiMzNDssCiAgICAmIzM0O3hyZXBfaW5vZGVfdmVyaXR5JiMzNDssCiAgICAmIzM0O3hmc19yZWFkX2lvZW5kX2NvbXBhcmUmIzM0OywKICAgICYjMzQ7eGZzX2VuZF9pb2VuZF9yZWFkJiMzNDssCiAgICAmIzM0O3hmc19pb21hcF93cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O2ZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyYjMzQ7LAogICAgJiMzNDtmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGZzLXZlcml0eSBzdXBwb3J0IGZvciB0aGUgWEZTIGZpbGVzeXN0ZW0uIEl0IGludHJvZHVjZXMgYSBuZXcgZmlsZSBgZnMveGZzL3hmc19mc3Zlcml0eS5jYCB3aXRoIHRoZSBjb3JlIGxvZ2ljLCBtb2RpZmllcyBYRlMgSS9PIHBhdGhzLCBhbmQgaW50ZWdyYXRlcyB3aXRoIHRoZSBnZW5lcmljIGZzLXZlcml0eSBsYXllci4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTM6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjZDFiM2M1ZGQ4YWE1ZDgwMzIyM2NkZmVkYWNjMDJiNjRiMjZjZWQ2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTM6NTg6NDAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYXR0ci5jIGIvZnMvYXR0ci5jXG5pbmRleCA0ZjQzN2ZhYmI3ZjBmNS4uNzE4ODhhYzkwM2MyN2QgMTAwNjQ0XG4tLS0gYS9mcy9hdHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2F0dHIuY1xuQEAgLTE3Niw3ICYjNDM7MTc2LDcgQEAgaW50IHNldGF0dHJfcHJlcGFyZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0XHQgKiBjb3ZlcmVkIGJ5IHRoZSBvcGVuLXRpbWUgY2hlY2sgYmVjYXVzZSBzeXNfdHJ1bmNhdGUoKSB0YWtlcyBhXG4gXHRcdCAqIHBhdGgsIG5vdCBhbiBvcGVuIGZpbGUuXG4gXHRcdCAqL1xuLVx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfRlNfVkVSSVRZKSBcdTAwMjZcdTAwMjYgSVNfVkVSSVRZKGlub2RlKSlcbiYjNDM7XHRcdGlmIChJU19WRVJJVFkoaW5vZGUpKVxuIFx0XHRcdHJldHVybiAtRVBFUk07XG4gXG4gXHRcdGVycm9yID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgYXR0ci1cdTAwM2VpYV9zaXplKTtcbmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuY1xuaW5kZXggMjcyNTk4ZjZhZTc3YWYuLmRlNzI5YzQ0ZDZkMjUxIDEwMDY0NFxuLS0tIGEvZnMvYnRyZnMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnRyZnMvaW5vZGUuY1xuQEAgLTgwNDAsNyAmIzQzOzgwNDAsNiBAQCBzdGF0aWMgaW50IGJ0cmZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShwYXRoLVx1MDAzZWRlbnRyeSk7XG4gXHR1MzIgYmxvY2tzaXplID0gYnRyZnNfc2IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc2VjdG9yc2l6ZTtcbiBcdHUzMiBiaV9mbGFncyA9IEJUUkZTX0koaW5vZGUpLVx1MDAzZWZsYWdzO1xuLVx0dTMyIGJpX3JvX2ZsYWdzID0gQlRSRlNfSShpbm9kZSktXHUwMDNlcm9fZmxhZ3M7XG4gXG4gXHRzdGF0LVx1MDAzZXJlc3VsdF9tYXNrIHw9IFNUQVRYX0JUSU1FO1xuIFx0c3RhdC1cdTAwM2VidGltZS50dl9zZWMgPSBCVFJGU19JKGlub2RlKS1cdTAwM2VpX290aW1lX3NlYztcbkBAIC04MDUzLDggJiM0Mzs4MDUyLDYgQEAgc3RhdGljIGludCBidHJmc19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9JTU1VVEFCTEU7XG4gXHRpZiAoYmlfZmxhZ3MgXHUwMDI2IEJUUkZTX0lOT0RFX05PRFVNUClcbiBcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfTk9EVU1QO1xuLVx0aWYgKGJpX3JvX2ZsYWdzIFx1MDAyNiBCVFJGU19JTk9ERV9ST19WRVJJVFkpXG4tXHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX1ZFUklUWTtcbiBcbiBcdHN0YXQtXHUwMDNlYXR0cmlidXRlc19tYXNrIHw9IChTVEFUWF9BVFRSX0FQUEVORCB8XG4gXHRcdFx0XHQgIFNUQVRYX0FUVFJfQ09NUFJFU1NFRCB8XG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdmVyaXR5LmMgYi9mcy9idHJmcy92ZXJpdHkuY1xuaW5kZXggOTgzMzY1YTczNTQxNjguLmJkNzllMzQzYWUyMzdmIDEwMDY0NFxuLS0tIGEvZnMvYnRyZnMvdmVyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2J0cmZzL3Zlcml0eS5jXG5AQCAtNzczLDExICYjNDM7NzczLDE1IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqYnRyZnNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gICogQGJ1ZjpcdE1lcmtsZSB0cmVlIGJsb2NrIHRvIHdyaXRlXG4gICogQHBvczpcdHRoZSBwb3NpdGlvbiBvZiB0aGUgYmxvY2sgaW4gdGhlIE1lcmtsZSB0cmVlIChpbiBieXRlcylcbiAgKiBAc2l6ZTpcdHRoZSBNZXJrbGUgdHJlZSBibG9jayBzaXplIChpbiBieXRlcylcbiYjNDM7ICogQHplcm9fZGlnZXN0Olx0dGhlIGhhc2ggb2YgdGhlIGFsbC16ZXJvZXMgYmxvY2tcbiYjNDM7ICogQGRpZ2VzdF9zaXplOlx0c2l6ZSBvZiB6ZXJvX2RpZ2VzdCwgaW4gYnl0ZXNcbiAgKlxuICAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZVxuICAqL1xuIHN0YXRpYyBpbnQgYnRyZnNfd3JpdGVfbWVya2xlX3RyZWVfYmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1Zixcbi1cdFx0XHRcdFx0IHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKVxuJiM0MztcdFx0XHRcdFx0IHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxuJiM0MztcdFx0XHRcdFx0IGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCxcbiYjNDM7XHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4gXHRsb2ZmX3QgbWVya2xlX3BvcyA9IG1lcmtsZV9maWxlX3Bvcyhpbm9kZSk7XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXG5pbmRleCBjZTk5ODA3YzVmNWIyYy4uOTlmYTdhMjg5NTFmNWUgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTYyNTAsMTUgJiM0Mzs2MjUwLDEyIEBAIGludCBleHQ0X2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuIFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9JTU1VVEFCTEU7XG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEVYVDRfTk9EVU1QX0ZMKVxuIFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9OT0RVTVA7XG4tXHRpZiAoZmxhZ3MgXHUwMDI2IEVYVDRfVkVSSVRZX0ZMKVxuLVx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9WRVJJVFk7XG4gXG4gXHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXNfbWFzayB8PSAoU1RBVFhfQVRUUl9BUFBFTkQgfFxuIFx0XHRcdFx0ICBTVEFUWF9BVFRSX0NPTVBSRVNTRUQgfFxuIFx0XHRcdFx0ICBTVEFUWF9BVFRSX0VOQ1JZUFRFRCB8XG4gXHRcdFx0XHQgIFNUQVRYX0FUVFJfSU1NVVRBQkxFIHxcbi1cdFx0XHRcdCAgU1RBVFhfQVRUUl9OT0RVTVAgfFxuLVx0XHRcdFx0ICBTVEFUWF9BVFRSX1ZFUklUWSk7XG4mIzQzO1x0XHRcdFx0ICBTVEFUWF9BVFRSX05PRFVNUCk7XG4gXG4gXHRnZW5lcmljX2ZpbGxhdHRyKGlkbWFwLCByZXF1ZXN0X21hc2ssIGlub2RlLCBzdGF0KTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvdmVyaXR5LmMgYi9mcy9leHQ0L3Zlcml0eS5jXG5pbmRleCBjYTYxZGE1M2YzMTNmYS4uYWM1YzEzM2Y1NTI5MjUgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3Zlcml0eS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3Zlcml0eS5jXG5AQCAtMzQsMzIgJiM0MzszNCw2IEBAIHN0YXRpYyBpbmxpbmUgbG9mZl90IGV4dDRfdmVyaXR5X21ldGFkYXRhX3Bvcyhjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0cmV0dXJuIHJvdW5kX3VwKGlub2RlLVx1MDAzZWlfc2l6ZSwgNjU1MzYpO1xuIH1cbiBcbi0vKlxuLSAqIFJlYWQgc29tZSB2ZXJpdHkgbWV0YWRhdGEgZnJvbSB0aGUgaW5vZGUuICBfX3Zmc19yZWFkKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZVxuLSAqIHdlIG5lZWQgdG8gcmVhZCBiZXlvbmQgaV9zaXplLlxuLSAqL1xuLXN0YXRpYyBpbnQgcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsXG4tXHRcdFx0ICBsb2ZmX3QgcG9zKVxuLXtcbi1cdHdoaWxlIChjb3VudCkge1xuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0XHRzaXplX3Qgbjtcbi1cbi1cdFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8oaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4tXHRcdFx0XHRcdCBOVUxMKTtcbi1cdFx0aWYgKElTX0VSUihmb2xpbykpXG4tXHRcdFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xuLVxuLVx0XHRuID0gbWVtY3B5X2Zyb21fZmlsZV9mb2xpbyhidWYsIGZvbGlvLCBwb3MsIGNvdW50KTtcbi1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cbi1cdFx0YnVmICYjNDM7PSBuO1xuLVx0XHRwb3MgJiM0Mzs9IG47XG4tXHRcdGNvdW50IC09IG47XG4tXHR9XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gLypcbiAgKiBXcml0ZSBzb21lIHZlcml0eSBtZXRhZGF0YSB0byB0aGUgaW5vZGUgZm9yIEZTX0lPQ19FTkFCTEVfVkVSSVRZLlxuICAqIGtlcm5lbF93cml0ZSgpIGNhbiYjMzk7dCBiZSB1c2VkIGJlY2F1c2UgdGhlIGZpbGUgZGVzY3JpcHRvciBpcyByZWFkb25seS5cbkBAIC0zMTEsOCAmIzQzOzI4NSw4IEBAIHN0YXRpYyBpbnQgZXh0NF9nZXRfdmVyaXR5X2Rlc2NyaXB0b3JfbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0Z290byBiYWQ7XG4gXHRkZXNjX3NpemVfcG9zIC09IHNpemVvZihkZXNjX3NpemVfZGlzayk7XG4gXG4tXHRlcnIgPSBwYWdlY2FjaGVfcmVhZChpbm9kZSwgXHUwMDI2ZGVzY19zaXplX2Rpc2ssIHNpemVvZihkZXNjX3NpemVfZGlzayksXG4tXHRcdFx0ICAgICBkZXNjX3NpemVfcG9zKTtcbiYjNDM7XHRlcnIgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgXHUwMDI2ZGVzY19zaXplX2Rpc2ssXG4mIzQzO1x0XHRcdFx0ICAgICAgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSwgZGVzY19zaXplX3Bvcyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFx0ZGVzY19zaXplID0gbGUzMl90b19jcHUoZGVzY19zaXplX2Rpc2spO1xuQEAgLTM1Miw3ICYjNDM7MzI2LDcgQEAgc3RhdGljIGludCBleHQ0X2dldF92ZXJpdHlfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsXG4gXHRpZiAoYnVmX3NpemUpIHtcbiBcdFx0aWYgKGRlc2Nfc2l6ZSBcdTAwM2UgYnVmX3NpemUpXG4gXHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4tXHRcdGVyciA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIGRlc2Nfc2l6ZSwgZGVzY19wb3MpO1xuJiM0MztcdFx0ZXJyID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0zNzQsNyAmIzQzOzM0OCw5IEBAIHN0YXRpYyB2b2lkIGV4dDRfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gfVxuIFxuIHN0YXRpYyBpbnQgZXh0NF93cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLFxuLVx0XHRcdFx0XHR1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbiYjNDM7XHRcdFx0XHRcdHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxuJiM0MztcdFx0XHRcdFx0Y29uc3QgdTggKnplcm9fZGlnZXN0LFxuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKVxuIHtcbiBcdHBvcyAmIzQzOz0gZXh0NF92ZXJpdHlfbWV0YWRhdGFfcG9zKGZpbGVfaW5vZGUoZmlsZSkpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZmlsZS5jIGIvZnMvZjJmcy9maWxlLmNcbmluZGV4IDRiNTJjNTZkNzFmMDdmLi45YjUzMWEwMTZlZDRkOSAxMDA2NDRcbi0tLSBhL2ZzL2YyZnMvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9mMmZzL2ZpbGUuY1xuQEAgLTEwMjQsMTUgJiM0MzsxMDI0LDEyIEBAIGludCBmMmZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuIFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9JTU1VVEFCTEU7XG4gXHRpZiAoZmxhZ3MgXHUwMDI2IEYyRlNfTk9EVU1QX0ZMKVxuIFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9OT0RVTVA7XG4tXHRpZiAoSVNfVkVSSVRZKGlub2RlKSlcbi1cdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfVkVSSVRZO1xuIFxuIFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzX21hc2sgfD0gKFNUQVRYX0FUVFJfQ09NUFJFU1NFRCB8XG4gXHRcdFx0XHQgIFNUQVRYX0FUVFJfQVBQRU5EIHxcbiBcdFx0XHRcdCAgU1RBVFhfQVRUUl9FTkNSWVBURUQgfFxuIFx0XHRcdFx0ICBTVEFUWF9BVFRSX0lNTVVUQUJMRSB8XG4tXHRcdFx0XHQgIFNUQVRYX0FUVFJfTk9EVU1QIHxcbi1cdFx0XHRcdCAgU1RBVFhfQVRUUl9WRVJJVFkpO1xuJiM0MztcdFx0XHRcdCAgU1RBVFhfQVRUUl9OT0RVTVApO1xuIFxuIFx0Z2VuZXJpY19maWxsYXR0cihpZG1hcCwgcmVxdWVzdF9tYXNrLCBpbm9kZSwgc3RhdCk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZjJmcy92ZXJpdHkuYyBiL2ZzL2YyZnMvdmVyaXR5LmNcbmluZGV4IDM5ZjQ4MjUxNTQ0NTJhLi5mM2E0NjE3NjU2ZGI5YiAxMDA2NDRcbi0tLSBhL2ZzL2YyZnMvdmVyaXR5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2YyZnMvdmVyaXR5LmNcbkBAIC0zNywzNCAmIzQzOzM3LDYgQEAgc3RhdGljIGlubGluZSBsb2ZmX3QgZjJmc192ZXJpdHlfbWV0YWRhdGFfcG9zKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gcm91bmRfdXAoaW5vZGUtXHUwMDNlaV9zaXplLCA2NTUzNik7XG4gfVxuIFxuLS8qXG4tICogUmVhZCBzb21lIHZlcml0eSBtZXRhZGF0YSBmcm9tIHRoZSBpbm9kZS4gIF9fdmZzX3JlYWQoKSBjYW4mIzM5O3QgYmUgdXNlZCBiZWNhdXNlXG4tICogd2UgbmVlZCB0byByZWFkIGJleW9uZCBpX3NpemUuXG4tICovXG4tc3RhdGljIGludCBwYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbi1cdFx0XHQgIGxvZmZfdCBwb3MpXG4te1xuLVx0d2hpbGUgKGNvdW50KSB7XG4tXHRcdHNpemVfdCBuID0gbWluX3Qoc2l6ZV90LCBjb3VudCxcbi1cdFx0XHRcdCBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShwb3MpKTtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4tXG4tXHRcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShpbm9kZS1cdTAwM2VpX21hcHBpbmcsIHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbi1cdFx0XHRcdFx0IE5VTEwpO1xuLVx0XHRpZiAoSVNfRVJSKHBhZ2UpKVxuLVx0XHRcdHJldHVybiBQVFJfRVJSKHBhZ2UpO1xuLVxuLVx0XHRtZW1jcHlfZnJvbV9wYWdlKGJ1ZiwgcGFnZSwgb2Zmc2V0X2luX3BhZ2UocG9zKSwgbik7XG4tXG4tXHRcdHB1dF9wYWdlKHBhZ2UpO1xuLVxuLVx0XHRidWYgJiM0Mzs9IG47XG4tXHRcdHBvcyAmIzQzOz0gbjtcbi1cdFx0Y291bnQgLT0gbjtcbi1cdH1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIFdyaXRlIHNvbWUgdmVyaXR5IG1ldGFkYXRhIHRvIHRoZSBpbm9kZSBmb3IgRlNfSU9DX0VOQUJMRV9WRVJJVFkuXG4gICoga2VybmVsX3dyaXRlKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIHJlYWRvbmx5LlxuQEAgLTI1MCw3ICYjNDM7MjIyLDcgQEAgc3RhdGljIGludCBmMmZzX2dldF92ZXJpdHlfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsXG4gXHRpZiAoYnVmX3NpemUpIHtcbiBcdFx0aWYgKHNpemUgXHUwMDNlIGJ1Zl9zaXplKVxuIFx0XHRcdHJldHVybiAtRVJBTkdFO1xuLVx0XHRyZXMgPSBwYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBzaXplLCBwb3MpO1xuJiM0MztcdFx0cmVzID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1Ziwgc2l6ZSwgcG9zKTtcbiBcdFx0aWYgKHJlcylcbiBcdFx0XHRyZXR1cm4gcmVzO1xuIFx0fVxuQEAgLTI3Miw3ICYjNDM7MjQ0LDkgQEAgc3RhdGljIHZvaWQgZjJmc19yZWFkYWhlYWRfbWVya2xlX3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiB9XG4gXG4gc3RhdGljIGludCBmMmZzX3dyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsXG4tXHRcdFx0XHRcdHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKVxuJiM0MztcdFx0XHRcdFx0dTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUsXG4mIzQzO1x0XHRcdFx0XHRjb25zdCB1OCAqemVyb19kaWdlc3QsXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpXG4ge1xuIFx0cG9zICYjNDM7PSBmMmZzX3Zlcml0eV9tZXRhZGF0YV9wb3MoZmlsZV9pbm9kZShmaWxlKSk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMvZmlsZV9hdHRyLmMgYi9mcy9maWxlX2F0dHIuY1xuaW5kZXggYmZiMDBkMjU2ZGQ1NjAuLjU0MjRlYzRlMzk0OTNmIDEwMDY0NFxuLS0tIGEvZnMvZmlsZV9hdHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZpbGVfYXR0ci5jXG5AQCAtMjQ2LDYgJiM0MzsyNDYsMTEgQEAgc3RhdGljIGludCBmaWxlYXR0cl9zZXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0aWYgKGZhLVx1MDAzZWZzeF9jb3dleHRzaXplID09IDApXG4gXHRcdGZhLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2PSB+RlNfWEZMQUdfQ09XRVhUU0laRTtcbiBcbiYjNDM7XHQvKiBDYW4gbm90IGVuYWJsZSBEQVggb24gZnN2ZXJpdHkgZmlsZSAqL1xuJiM0MztcdGlmICgob2xkX21hLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX1ZFUklUWSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdGZhLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX0RBWClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy9pb21hcC9pb2VuZC5jIGIvZnMvaW9tYXAvaW9lbmQuY1xuaW5kZXggMDU2NTMyODc2NGMxNzUuLjhlNDZiN2YxYWE2YTk3IDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvaW9lbmQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaW9tYXAvaW9lbmQuY1xuQEAgLTQsNyAmIzQzOzQsNiBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby1pbnRlZ3JpdHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X3NvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dyaXRlYmFjay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnNlcnJvci5oXHUwMDNlXG5AQCAtNDI1LDcgJiM0Mzs0MjQsNyBAQCB2b2lkIGlvbWFwX2lvZW5kX3RyeV9tZXJnZShzdHJ1Y3QgaW9tYXBfaW9lbmQgKmlvZW5kLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pb2VuZF90cnlfbWVyZ2UpO1xuIFxuLXN0YXRpYyBpbnQgaW9tYXBfaW9lbmRfY29tcGFyZSh2b2lkICpwcml2LCBjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICphLFxuJiM0MztpbnQgaW9tYXBfaW9lbmRfY29tcGFyZSh2b2lkICpwcml2LCBjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICphLFxuIFx0XHRjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpiKVxuIHtcbiBcdHN0cnVjdCBpb21hcF9pb2VuZCAqaWEgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IGlvbWFwX2lvZW5kLCBpb19saXN0KTtcbkBAIC00MzcsMTAgJiM0Mzs0MzYsMTEgQEAgc3RhdGljIGludCBpb21hcF9pb2VuZF9jb21wYXJlKHZvaWQgKnByaXYsIGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmEsXG4gXHRcdHJldHVybiAxO1xuIFx0cmV0dXJuIDA7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pb2VuZF9jb21wYXJlKTtcbiBcbi12b2lkIGlvbWFwX3NvcnRfaW9lbmRzKHN0cnVjdCBsaXN0X2hlYWQgKmlvZW5kX2xpc3QpXG4mIzQzO3ZvaWQgaW9tYXBfc29ydF9pb2VuZHMoc3RydWN0IGxpc3RfaGVhZCAqaW9lbmRfbGlzdCwgbGlzdF9jbXBfZnVuY190IGNtcClcbiB7XG4tXHRsaXN0X3NvcnQoTlVMTCwgaW9lbmRfbGlzdCwgaW9tYXBfaW9lbmRfY29tcGFyZSk7XG4mIzQzO1x0bGlzdF9zb3J0KE5VTEwsIGlvZW5kX2xpc3QsIGNtcCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3NvcnRfaW9lbmRzKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9zdGF0LmMgYi9mcy9zdGF0LmNcbmluZGV4IDg5OTA5NzQ2YmVkMTllLi5hZTEyOTliZDc0MzY2YyAxMDA2NDRcbi0tLSBhL2ZzL3N0YXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3RhdC5jXG5AQCAtMjAzLDggJiM0MzsyMDMsMTIgQEAgaW50IHZmc19nZXRhdHRyX25vc2VjKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQsXG4gXHRpZiAoSVNfREFYKGlub2RlKSlcbiBcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfREFYO1xuIFxuJiM0MztcdGlmIChJU19WRVJJVFkoaW5vZGUpKVxuJiM0MztcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfVkVSSVRZO1xuJiM0MztcbiBcdHN0YXQtXHUwMDNlYXR0cmlidXRlc19tYXNrIHw9IChTVEFUWF9BVFRSX0FVVE9NT1VOVCB8XG4tXHRcdFx0XHQgIFNUQVRYX0FUVFJfREFYKTtcbiYjNDM7XHRcdFx0XHQgIFNUQVRYX0FUVFJfREFYIHxcbiYjNDM7XHRcdFx0XHQgIFNUQVRYX0FUVFJfVkVSSVRZKTtcbiBcbiBcdGlkbWFwID0gbW50X2lkbWFwKHBhdGgtXHUwMDNlbW50KTtcbiBcdGlmIChpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWdldGF0dHIpIHtcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvZW5hYmxlLmMgYi9mcy92ZXJpdHkvZW5hYmxlLmNcbmluZGV4IDQyZGZlZDFjZTBjZTY2Li5hZDRmZjcxZDdkZDk1YiAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9lbmFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmVyaXR5L2VuYWJsZS5jXG5AQCAtNTAsNyAmIzQzOzUwLDkgQEAgc3RhdGljIGludCB3cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgdTggKmJ1ZixcbiBcdGludCBlcnI7XG4gXG4gXHRlcnIgPSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfdm9wLVx1MDAzZXdyaXRlX21lcmtsZV90cmVlX2Jsb2NrKGZpbGUsIGJ1ZiwgcG9zLFxuLVx0XHRcdFx0XHRcdFx0ICBwYXJhbXMtXHUwMDNlYmxvY2tfc2l6ZSk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBwYXJhbXMtXHUwMDNlYmxvY2tfc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIHBhcmFtcy1cdTAwM2V6ZXJvX2RpZ2VzdCxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgIHBhcmFtcy1cdTAwM2VkaWdlc3Rfc2l6ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRmc3Zlcml0eV9lcnIoaW5vZGUsIFwmIzM0O0Vycm9yICVkIHdyaXRpbmcgTWVya2xlIHRyZWUgYmxvY2sgJWx1XCYjMzQ7LFxuIFx0XHRcdCAgICAgZXJyLCBpbmRleCk7XG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L29wZW4uYyBiL2ZzL3Zlcml0eS9vcGVuLmNcbmluZGV4IGQwYzU2YTdmYWEzYmIxLi44NzVlODg1MGNjYmFjZSAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9vcGVuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zlcml0eS9vcGVuLmNcbkBAIC0zNDcsNyAmIzQzOzM0NywyNCBAQCBpbnQgZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3Ioc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGVuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0MzsvKipcbiYjNDM7ICogZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKCkgLSBjYWNoZSB2ZXJpdHkgaW5mbyBpZiBpdCYjMzk7cyBub3QgYWxyZWFkeSBjYWNoZWRcbiYjNDM7ICogQGlub2RlOiB0aGUgaW5vZGUgZm9yIHdoaWNoIHZlcml0eSBpbmZvIHNob3VsZCBiZSBjYWNoZWRcbiYjNDM7ICpcbiYjNDM7ICogRW5zdXJlIHRoaXMgaW5vZGUgaGFzIHZlcml0eSBpbmZvIGF0dGFjaGVkIHRvIGl0LCBpdCYjMzk7cyBhc3N1bWVkIHRoZSBpbm9kZVxuJiM0MzsgKiBhbHJlYWR5IGhhcyBmc3Zlcml0eSBlbmFibGVkLiBSZWFkIGZzdmVyaXR5IGRlc2NyaXB0b3IgYW5kIGNyZWF0ZXMgdmVyaXR5XG4mIzQzOyAqIGJhc2VkIG9uIHRoYXQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGF0IGxlYXN0IG9uY2UgYmVmb3JlIGFueSBvZiB0aGUgaW5vZGUmIzM5O3MgZGF0YVxuJiM0MzsgKiBjYW4gYmUgdmVyaWZpZWQgKGFuZCB0aHVzIHJlYWQgYXQgYWxsKSBvciB0aGUgaW5vZGUmIzM5O3MgZnN2ZXJpdHkgZGlnZXN0XG4mIzQzOyAqIHJldHJpZXZlZC4gIGZzdmVyaXR5X2ZpbGVfb3BlbigpIGNhbGxzIHRoaXMgYWxyZWFkeSwgd2hpY2ggaGFuZGxlc1xuJiM0MzsgKiBub3JtYWwgZmlsZSBhY2Nlc3Nlcy4gIElmIGEgZmlsZXN5c3RlbSBkb2VzIGFueSBpbnRlcm5hbCAoaS5lLiBub3RcbiYjNDM7ICogYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSBkZXNjcmlwdG9yKSByZWFkcyBvZiB0aGUgZmlsZSYjMzk7cyBkYXRhIG9yXG4mIzQzOyAqIGZzdmVyaXR5IGRpZ2VzdCwgaXQgbXVzdCBjYWxsIHRoaXMgZXhwbGljaXRseSBiZWZvcmUgZG9pbmcgc28uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZVxuJiM0MzsgKi9cbiYjNDM7aW50IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSA9IGZzdmVyaXR5X2dldF9pbmZvKGlub2RlKSwgKmZvdW5kO1xuIFx0c3RydWN0IGZzdmVyaXR5X2Rlc2NyaXB0b3IgKmRlc2M7XG5AQCAtMzgzLDEyICYjNDM7NDAwLDEzIEBAIHN0YXRpYyBpbnQgZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRrZnJlZShkZXNjKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8pO1xuIFxuIGludCBfX2ZzdmVyaXR5X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcbiB7XG4gXHRpZiAoZmlscC1cdTAwM2VmX21vZGUgXHUwMDI2IEZNT0RFX1dSSVRFKVxuIFx0XHRyZXR1cm4gLUVQRVJNO1xuLVx0cmV0dXJuIGVuc3VyZV92ZXJpdHlfaW5mbyhpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhpbm9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKF9fZnN2ZXJpdHlfZmlsZV9vcGVuKTtcbiBcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvcGFnZWNhY2hlLmMgYi9mcy92ZXJpdHkvcGFnZWNhY2hlLmNcbmluZGV4IDk5ZjVmNTNlZWE5ODVmLi4yNzBhYmQ2NTJlNDhjNiAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9wYWdlY2FjaGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jXG5AQCAtNjgsMTMgJiM0Mzs2OCw2NCBAQCBFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZSk7XG4gdm9pZCBmc3Zlcml0eV9maWxsX3plcm9oYXNoKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4sXG4gXHRcdFx0ICAgICAgc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpKVxuIHtcbi1cdHNpemVfdCBvZmYgPSBvZmZzZXQ7XG4mIzQzO1x0dm9pZCAqdmFkZHI7XG4mIzQzO1x0dm9pZCAqdG87XG4mIzQzO1x0c2l6ZV90IGNodW5rO1xuIFxuIFx0V0FSTl9PTl9PTkNFKCFJU19BTElHTkVEKG9mZnNldCwgdmktXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpKTtcbiBcdFdBUk5fT05fT05DRSghSVNfQUxJR05FRChsZW4sIHZpLVx1MDAzZXRyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKSk7XG4mIzQzO1x0V0FSTl9PTl9PTkNFKG9mZnNldCAmIzQzOyBsZW4gXHUwMDNlIGZvbGlvX3NpemUoZm9saW8pKTtcbiBcbi1cdGZvciAoOyBvZmYgXHUwMDNjIChvZmZzZXQgJiM0MzsgbGVuKTsgb2ZmICYjNDM7PSB2aS1cdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSlcbi1cdFx0bWVtY3B5X3RvX2ZvbGlvKGZvbGlvLCBvZmYsIHZpLVx1MDAzZXRyZWVfcGFyYW1zLnplcm9fZGlnZXN0LFxuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHZhZGRyID0ga21hcF9sb2NhbF9mb2xpbyhmb2xpbywgb2Zmc2V0KTtcbiYjNDM7XHRcdGNodW5rID0gbGVuO1xuJiM0MztcdFx0dG8gPSB2YWRkcjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZm9saW9fdGVzdF9wYXJ0aWFsX2ttYXAoZm9saW8pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGNodW5rIFx1MDAzZSBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpKVxuJiM0MztcdFx0XHRjaHVuayA9IFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKG9mZnNldCk7XG4mIzQzO1x0XHRmb3IgKDsgdG8gXHUwMDNjICh2YWRkciAmIzQzOyBjaHVuayk7IHRvICYjNDM7PSB2aS1cdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSlcbiYjNDM7XHRcdFx0bWVtY3B5KHRvLCB2aS1cdTAwM2V0cmVlX3BhcmFtcy56ZXJvX2RpZ2VzdCxcbiBcdFx0XHRcdHZpLVx1MDAzZXRyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKTtcbiYjNDM7XHRcdGt1bm1hcF9sb2NhbCh2YWRkcik7XG4mIzQzO1xuJiM0MztcdFx0b2Zmc2V0ICYjNDM7PSBjaHVuaztcbiYjNDM7XHRcdGxlbiAtPSBjaHVuaztcbiYjNDM7XHR9IHdoaWxlIChsZW4gXHUwMDNlIDApO1xuJiM0MztcbiYjNDM7XHRmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9maWxsX3plcm9oYXNoKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZCgpIC0gcmVhZCBwYWdlIGFuZCBjb3B5IGRhdGEgdG8gYnVmZmVyXG4mIzQzOyAqIEBpbm9kZTpcdGNvcHkgZnJvbSB0aGlzIGlub2RlJiMzOTtzIGFkZHJlc3Mgc3BhY2VcbiYjNDM7ICogQGJ1ZjpcdGJ1ZmZlciB0byBjb3B5IHRvXG4mIzQzOyAqIEBjb3VudDpcdG51bWJlciBvZiBieXRlcyB0byBjb3B5XG4mIzQzOyAqIEBwb3M6XHRwb3NpdGlvbiBvZiB0aGUgZm9saW8gdG8gY29weSBmcm9tXG4mIzQzOyAqXG4mIzQzOyAqIFJlYWQgc29tZSB2ZXJpdHkgbWV0YWRhdGEgZnJvbSB0aGUgaW5vZGUuICBfX3Zmc19yZWFkKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZVxuJiM0MzsgKiB3ZSBuZWVkIHRvIHJlYWQgYmV5b25kIGlfc2l6ZS5cbiYjNDM7ICovXG4mIzQzO2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbiYjNDM7XHRcdFx0ICBsb2ZmX3QgcG9zKVxuJiM0Mzt7XG4mIzQzO1x0d2hpbGUgKGNvdW50KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdFx0c2l6ZV90IG47XG4mIzQzO1xuJiM0MztcdFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8oaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBwb3MgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4mIzQzO1x0XHRcdFx0XHQgTlVMTCk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbiYjNDM7XHRcdFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xuJiM0MztcbiYjNDM7XHRcdG4gPSBtZW1jcHlfZnJvbV9maWxlX2ZvbGlvKGJ1ZiwgZm9saW8sIHBvcywgY291bnQpO1xuJiM0MztcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0XHRidWYgJiM0Mzs9IG47XG4mIzQzO1x0XHRwb3MgJiM0Mzs9IG47XG4mIzQzO1x0XHRjb3VudCAtPSBuO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZCk7XG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L3ZlcmlmeS5jIGIvZnMvdmVyaXR5L3ZlcmlmeS5jXG5pbmRleCA0MDA0YTFkNDI4NzUxZi4uZGI4YzM1MDIzNGJiNzEgMTAwNjQ0XG4tLS0gYS9mcy92ZXJpdHkvdmVyaWZ5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zlcml0eS92ZXJpZnkuY1xuQEAgLTksNiAmIzQzOzksNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnNlcnJvci5oXHUwMDNlXG4gXG4gI2RlZmluZSBGU19WRVJJVFlfTUFYX1BFTkRJTkdfQkxPQ0tTIDJcbiBcbkBAIC0yMDUsNiAmIzQzOzIwNiw4IEBAIHN0YXRpYyBib29sIHZlcmlmeV9kYXRhX2Jsb2NrKHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSxcbiBcdFx0aWYgKG1lbWNocl9pbnYoZGJsb2NrLVx1MDAzZWRhdGEsIDAsIHBhcmFtcy1cdTAwM2VibG9ja19zaXplKSkge1xuIFx0XHRcdGZzdmVyaXR5X2Vycihpbm9kZSxcbiBcdFx0XHRcdCAgICAgXCYjMzQ7RklMRSBDT1JSVVBURUQhICBEYXRhIHBhc3QgRU9GIGlzIG5vdCB6ZXJvZWRcJiMzNDspO1xuJiM0MztcdFx0XHRmc2Vycm9yX3JlcG9ydF9kYXRhX2xvc3QoaW5vZGUsIGRhdGFfcG9zLFxuJiM0MztcdFx0XHRcdFx0XHQgcGFyYW1zLVx1MDAzZWJsb2NrX3NpemUsIEdGUF9OT0ZTKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtMzEyLDYgJiM0MzszMTUsNyBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlfZGF0YV9ibG9jayhzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmksXG4gXHRcdGRhdGFfcG9zLCBsZXZlbCAtIDEsIHBhcmFtcy1cdTAwM2VoYXNoX2FsZy1cdTAwM2VuYW1lLCBoc2l6ZSwgd2FudF9oYXNoLFxuIFx0XHRwYXJhbXMtXHUwMDNlaGFzaF9hbGctXHUwMDNlbmFtZSwgaHNpemUsXG4gXHRcdGxldmVsID09IDAgPyBkYmxvY2stXHUwMDNlcmVhbF9oYXNoIDogcmVhbF9oYXNoKTtcbiYjNDM7XHRmc2Vycm9yX3JlcG9ydF9kYXRhX2xvc3QoaW5vZGUsIGRhdGFfcG9zLCBwYXJhbXMtXHUwMDNlYmxvY2tfc2l6ZSwgR0ZQX05PRlMpO1xuIGVycm9yOlxuIFx0Zm9yICg7IGxldmVsIFx1MDAzZSAwOyBsZXZlbC0tKSB7XG4gXHRcdGt1bm1hcF9sb2NhbChoYmxvY2tzW2xldmVsIC0gMV0uYWRkcik7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL01ha2VmaWxlIGIvZnMveGZzL01ha2VmaWxlXG5pbmRleCA5ZjcxMzNlMDI1NzY4ZC4uMzhiN2Y1MWU1ZDg0MDUgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9NYWtlZmlsZVxuQEAgLTE0OSw2ICYjNDM7MTQ5LDcgQEAgeGZzLSQoQ09ORklHX1hGU19QT1NJWF9BQ0wpXHQmIzQzOz0geGZzX2FjbC5vXG4geGZzLSQoQ09ORklHX1NZU0NUTClcdFx0JiM0Mzs9IHhmc19zeXNjdGwub1xuIHhmcy0kKENPTkZJR19DT01QQVQpXHRcdCYjNDM7PSB4ZnNfaW9jdGwzMi5vXG4geGZzLSQoQ09ORklHX0VYUE9SVEZTX0JMT0NLX09QUylcdCYjNDM7PSB4ZnNfcG5mcy5vXG4mIzQzO3hmcy0kKENPTkZJR19GU19WRVJJVFkpXHRcdCYjNDM7PSB4ZnNfZnN2ZXJpdHkub1xuIFxuICMgbm90aWZ5IGZhaWx1cmVcbiBpZmVxICgkKENPTkZJR19NRU1PUllfRkFJTFVSRSkseSlcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmNcbmluZGV4IGQ2NGRlZmVkYTY0NWVkLi5jYzQ4ZjZlMjBlODAwMCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXG5AQCAtNDEsNiAmIzQzOzQxLDggQEBcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfaW5vZGVfdXRpbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGZzX3J0Z3JvdXAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc196b25lX2FsbG9jLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eGZzX2ZzdmVyaXR5LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuIHN0cnVjdCBrbWVtX2NhY2hlXHRcdCp4ZnNfYm1hcF9pbnRlbnRfY2FjaGU7XG4gXG5AQCAtNDQwMiw2ICYjNDM7NDQwNCwxMCBAQCB4ZnNfYm1hcGlfY29udmVydF9vbmVfZGVsYWxsb2MoXG4gXHQgKiB0aGUgZXh0ZW50LiAgSnVzdCByZXR1cm4gdGhlIHJlYWwgZXh0ZW50IGF0IHRoaXMgb2Zmc2V0LlxuIFx0ICovXG4gXHRpZiAoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSkge1xuJiM0MztcdFx0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIFhGU19GU0JfVE9fQihtcCwgYm1hLmdvdC5icl9zdGFydG9mZikgXHUwMDNlPVxuJiM0MztcdFx0XHQgICAgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXG4mIzQzO1x0XHRcdGZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XG4gXHRcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2Ym1hLmdvdCwgMCwgZmxhZ3MsXG4gXHRcdFx0XHR4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIGZsYWdzKSk7XG4gXHRcdGlmIChzZXEpXG5AQCAtNDQ0OSw2ICYjNDM7NDQ1NSwxMSBAQCB4ZnNfYm1hcGlfY29udmVydF9vbmVfZGVsYWxsb2MoXG4gXHRYRlNfU1RBVFNfQUREKG1wLCB4c194c3RyYXRfYnl0ZXMsIFhGU19GU0JfVE9fQihtcCwgYm1hLmxlbmd0aCkpO1xuIFx0WEZTX1NUQVRTX0lOQyhtcCwgeHNfeHN0cmF0X3F1aWNrKTtcbiBcbiYjNDM7XHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIFhGU19GU0JfVE9fQihtcCwgYm1hLmdvdC5icl9zdGFydG9mZikgXHUwMDNlPVxuJiM0MztcdFx0ICAgIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKVxuJiM0MztcdFx0ZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiYjNDM7XG4gXHRBU1NFUlQoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSk7XG4gXHR4ZnNfYm1idF90b19pb21hcChpcCwgaW9tYXAsIFx1MDAyNmJtYS5nb3QsIDAsIGZsYWdzLFxuIFx0XHRcdFx0eGZzX2lvbWFwX2lub2RlX3NlcXVlbmNlKGlwLCBmbGFncykpO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oIGIvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmhcbmluZGV4IGRkMGVkMDQ2ZmJlOWM5Li44YmUxYjEwMWIxOTY5OSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaFxuQEAgLTM3NCwxMSAmIzQzOzM3NCwxMyBAQCB4ZnNfc2JfaGFzX2NvbXBhdF9mZWF0dXJlKFxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JNQVBCVCAgICgxIFx1MDAzY1x1MDAzYyAxKVx0XHQvKiByZXZlcnNlIG1hcCBidHJlZSAqL1xuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JFRkxJTksgICgxIFx1MDAzY1x1MDAzYyAyKVx0XHQvKiByZWZsaW5rZWQgZmlsZXMgKi9cbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVCAoMSBcdTAwM2NcdTAwM2MgMylcdFx0LyogaW5vYnQgYmxvY2sgY291bnRzICovXG4mIzQzOyNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSAgICgxIFx1MDAzY1x1MDAzYyA0KVx0XHQvKiBmcy12ZXJpdHkgKi9cbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9BTEwgXFxcbiBcdFx0KFhGU19TQl9GRUFUX1JPX0NPTVBBVF9GSU5PQlQgfCBcXFxuIFx0XHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JNQVBCVCB8IFxcXG4tXHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOS3wgXFxcbi1cdFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVClcbiYjNDM7XHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOSyB8IFxcXG4mIzQzO1x0XHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0lOT0JUQ05UIHwgXFxcbiYjNDM7XHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZKVxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1VOS05PV05cdH5YRlNfU0JfRkVBVF9ST19DT01QQVRfQUxMXG4gc3RhdGljIGlubGluZSBib29sXG4geGZzX3NiX2hhc19yb19jb21wYXRfZmVhdHVyZShcbkBAIC0xMjMwLDE2ICYjNDM7MTIzMiwyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgeGZzX2Rpbm9kZV9wdXRfcmRldihzdHJ1Y3QgeGZzX2Rpbm9kZSAqZGlwLCB4ZnNfZGV2X3QgcmRldilcbiAgKi9cbiAjZGVmaW5lIFhGU19ESUZMQUcyX01FVEFEQVRBX0JJVFx0NVxuIFxuJiM0MzsvKiBpbm9kZXMgc2VhbGVkIHdpdGggZnMtdmVyaXR5ICovXG4mIzQzOyNkZWZpbmUgWEZTX0RJRkxBRzJfVkVSSVRZX0JJVFx0XHQ2XG4mIzQzO1xuICNkZWZpbmUgWEZTX0RJRkxBRzJfREFYXHRcdCgxVUxMIFx1MDAzY1x1MDAzYyBYRlNfRElGTEFHMl9EQVhfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfUkVGTElOS1x0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX1JFRkxJTktfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfQ09XRVhUU0laRVx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX0NPV0VYVFNJWkVfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfQklHVElNRVx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX0JJR1RJTUVfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfTlJFWFQ2NFx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX05SRVhUNjRfQklUKVxuICNkZWZpbmUgWEZTX0RJRkxBRzJfTUVUQURBVEFcdCgxVUxMIFx1MDAzY1x1MDAzYyBYRlNfRElGTEFHMl9NRVRBREFUQV9CSVQpXG4mIzQzOyNkZWZpbmUgWEZTX0RJRkxBRzJfVkVSSVRZXHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfVkVSSVRZX0JJVClcbiBcbiAjZGVmaW5lIFhGU19ESUZMQUcyX0FOWSBcXFxuIFx0KFhGU19ESUZMQUcyX0RBWCB8IFhGU19ESUZMQUcyX1JFRkxJTksgfCBYRlNfRElGTEFHMl9DT1dFWFRTSVpFIHwgXFxcbi1cdCBYRlNfRElGTEFHMl9CSUdUSU1FIHwgWEZTX0RJRkxBRzJfTlJFWFQ2NCB8IFhGU19ESUZMQUcyX01FVEFEQVRBKVxuJiM0MztcdCBYRlNfRElGTEFHMl9CSUdUSU1FIHwgWEZTX0RJRkxBRzJfTlJFWFQ2NCB8IFhGU19ESUZMQUcyX01FVEFEQVRBIHwgXFxcbiYjNDM7XHQgWEZTX0RJRkxBRzJfVkVSSVRZKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB4ZnNfZGlub2RlX2hhc19iaWd0aW1lKGNvbnN0IHN0cnVjdCB4ZnNfZGlub2RlICpkaXApXG4ge1xuQEAgLTIwMjcsNCAmIzQzOzIwMzQsMjYgQEAgc3RydWN0IHhmc19hY2wge1xuICNkZWZpbmUgU0dJX0FDTF9GSUxFX1NJWkVcdChzaXplb2YoU0dJX0FDTF9GSUxFKS0xKVxuICNkZWZpbmUgU0dJX0FDTF9ERUZBVUxUX1NJWkVcdChzaXplb2YoU0dJX0FDTF9ERUZBVUxUKS0xKVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBBdCBtYXhpbXVtIG9mIDggbGV2ZWxzIHdpdGggMTI4IGhhc2hlcyBwZXIgYmxvY2sgKDMyIGJ5dGVzIFNIQS0yNTYpIG1heGltdW1cbiYjNDM7ICogdHJlZSBzaXplIGlzICgoMTI4Xjgg4oiSIDEpLygxMjgg4oiSIDEpKSA9IDU2NyoxMF4xMiBibG9ja3MuIFRoaXMgc2hvdWxkIGZpdCBpblxuJiM0MzsgKiA1MyBiaXRzIGFkZHJlc3Mgc3BhY2UuXG4mIzQzOyAqXG4mIzQzOyAqIEF0IHRoaXMgTWVya2xlIHRyZWUgc2l6ZSB3ZSBjYW4gY292ZXIgMjk1RUIgbGFyZ2UgZmlsZS4gVGhpcyBpcyBtdWNoIGxhcmdlclxuJiM0MzsgKiB0aGFuIHRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIGZpbGUgc2l6ZS5cbiYjNDM7ICpcbiYjNDM7ICogRm9yIHNoYTUxMiB0aGUgbGFyZ2VzdCBmaWxlIHdlIGNhbiBjb3ZlciBlbmRzIGF0IDEgXHUwMDNjXHUwMDNjIDUwIG9mZnNldCwgdGhpcyBpcyBhbHNvXG4mIzQzOyAqIGdvb2QuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFhGU19GU1ZFUklUWV9MQVJHRVNUX0ZJTEVcdCgobG9mZl90KTFVTEwgXHUwMDNjXHUwMDNjIDUzKVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQWxpZ25tZW50IG9mIHRoZSBmc3Zlcml0eSBtZXRhZGF0YSBwbGFjZW1lbnQuIFRoaXMgaXMgbGFyZ2VzdCBzdXBwb3J0ZWQgUEFHRVxuJiM0MzsgKiBTSVpFIGZvciBmc3Zlcml0eS4gVGhpcyBpcyB1c2VkIHRvIHNwYWNlIG91dCBkYXRhIGFuZCBtZXRhZGF0YSBpbiBwYWdlIGNhY2hlLlxuJiM0MzsgKiBUaGUgc3BhY2luZyBpcyBuZWNlc3NhcnkgZm9yIG5vbi1leHBvc3VyZSBvZiBtZXRhZGF0YSB0byB1c2Vyc3BhY2UgYW5kXG4mIzQzOyAqIGNvcnJlY3QgbWVya2xlIHRyZWUgc3ludGhlc2lzIGluIHRoZSBpb21hcC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgWEZTX0ZTVkVSSVRZX1NUQVJUX0FMSUdOXHQoNjU1MzYpXG4mIzQzO1xuJiM0MztcbiAjZW5kaWYgLyogX19YRlNfRk9STUFUX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2ZzLmggYi9mcy94ZnMvbGlieGZzL3hmc19mcy5oXG5pbmRleCAxODVmMDlmMzI3YzAwYy4uODRkNjJiNzUwNmE5YWQgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19mcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19mcy5oXG5AQCAtMjUwLDYgJiM0MzsyNTAsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfZnNvcF9yZXNibGtzIHtcbiAjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfUEFSRU5UXHQoMSBcdTAwM2NcdTAwM2MgMjUpIC8qIGxpbnV4IHBhcmVudCBwb2ludGVycyAqL1xuICNkZWZpbmUgWEZTX0ZTT1BfR0VPTV9GTEFHU19NRVRBRElSXHQoMSBcdTAwM2NcdTAwM2MgMjYpIC8qIG1ldGFkYXRhIGRpcmVjdG9yaWVzICovXG4gI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1pPTkVEXHQoMSBcdTAwM2NcdTAwM2MgMjcpIC8qIHpvbmVkIHJ0IGRldmljZSAqL1xuJiM0MzsjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfVkVSSVRZXHQoMSBcdTAwM2NcdTAwM2MgMjgpIC8qIGZzLXZlcml0eSAqL1xuIFxuIC8qXG4gICogTWluaW11bSBhbmQgbWF4aW11bSBzaXplcyBuZWVkIGZvciBncm93dGggY2hlY2tzLlxuQEAgLTQyMSw2ICYjNDM7NDIyLDcgQEAgc3RydWN0IHhmc19idWxrc3RhdCB7XG4gI2RlZmluZSBYRlNfQlNfU0lDS19TWU1MSU5LXHQoMSBcdTAwM2NcdTAwM2MgNikgIC8qIHN5bWJvbGljIGxpbmsgcmVtb3RlIHRhcmdldCAqL1xuICNkZWZpbmUgWEZTX0JTX1NJQ0tfUEFSRU5UXHQoMSBcdTAwM2NcdTAwM2MgNykgIC8qIHBhcmVudCBwb2ludGVycyAqL1xuICNkZWZpbmUgWEZTX0JTX1NJQ0tfRElSVFJFRVx0KDEgXHUwMDNjXHUwMDNjIDgpICAvKiBkaXJlY3RvcnkgdHJlZSBzdHJ1Y3R1cmUgKi9cbiYjNDM7I2RlZmluZSBYRlNfQlNfU0lDS19GU1ZFUklUWVx0KDEgXHUwMDNjXHUwMDNjIDkpICAvKiBmc3Zlcml0eSBtZXRhZGF0YSAqL1xuIFxuIC8qXG4gICogUHJvamVjdCBxdW90YSBpZCBoZWxwZXJzIChwcmV2aW91c2x5IHByb2ppZCB3YXMgMTZiaXQgb25seVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oIGIvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmhcbmluZGV4IDFkNDVjZjU3ODllODY0Li45MzJiNDQ3MTkwZGE3NiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaFxuQEAgLTEwNCw2ICYjNDM7MTA0LDcgQEAgc3RydWN0IHhmc19ydGdyb3VwO1xuIC8qIERvbiYjMzk7dCBwcm9wYWdhdGUgc2ljayBzdGF0dXMgdG8gYWcgaGVhbHRoIHN1bW1hcnkgZHVyaW5nIGluYWN0aXZhdGlvbiAqL1xuICNkZWZpbmUgWEZTX1NJQ0tfSU5PX0ZPUkdFVFx0KDEgXHUwMDNjXHUwMDNjIDEyKVxuICNkZWZpbmUgWEZTX1NJQ0tfSU5PX0RJUlRSRUVcdCgxIFx1MDAzY1x1MDAzYyAxMykgIC8qIGRpcmVjdG9yeSB0cmVlIHN0cnVjdHVyZSAqL1xuJiM0MzsjZGVmaW5lIFhGU19TSUNLX0lOT19GU1ZFUklUWVx0KDEgXHUwMDNjXHUwMDNjIDE0KSAgLyogZnN2ZXJpdHkgbWV0YWRhdGEgKi9cbiBcbiAvKiBQcmltYXJ5IGV2aWRlbmNlIG9mIGhlYWx0aCBwcm9ibGVtcyBpbiBhIGdpdmVuIGdyb3VwLiAqL1xuICNkZWZpbmUgWEZTX1NJQ0tfRlNfUFJJTUFSWVx0KFhGU19TSUNLX0ZTX0NPVU5URVJTIHwgXFxcbkBAIC0xNDAsNyAmIzQzOzE0MSw4IEBAIHN0cnVjdCB4ZnNfcnRncm91cDtcbiBcdFx0XHRcdCBYRlNfU0lDS19JTk9fWEFUVFIgfCBcXFxuIFx0XHRcdFx0IFhGU19TSUNLX0lOT19TWU1MSU5LIHwgXFxcbiBcdFx0XHRcdCBYRlNfU0lDS19JTk9fUEFSRU5UIHwgXFxcbi1cdFx0XHRcdCBYRlNfU0lDS19JTk9fRElSVFJFRSlcbiYjNDM7XHRcdFx0XHQgWEZTX1NJQ0tfSU5PX0RJUlRSRUUgfCBcXFxuJiM0MztcdFx0XHRcdCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpXG4gXG4gI2RlZmluZSBYRlNfU0lDS19JTk9fWkFQUEVEXHQoWEZTX1NJQ0tfSU5PX0JNQlREX1pBUFBFRCB8IFxcXG4gXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX0JNQlRBX1pBUFBFRCB8IFxcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmMgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuY1xuaW5kZXggMzM2ZWY4NDNmMmZlNGYuLmJkODBhMTlmMmUwOTI5IDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX2J1Zi5jXG5AQCAtNzYwLDYgJiM0Mzs3NjAsMTQgQEAgeGZzX2Rpbm9kZV92ZXJpZnkoXG4gXHQgICAgIXhmc19oYXNfcnRyZWZsaW5rKG1wKSlcbiBcdFx0cmV0dXJuIF9fdGhpc19hZGRyZXNzO1xuIFxuJiM0MztcdC8qIG9ubHkgcmVndWxhciBmaWxlcyBjYW4gaGF2ZSBmc3Zlcml0eSAqL1xuJiM0MztcdGlmIChmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX1ZFUklUWSkge1xuJiM0MztcdFx0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkpXG4mIzQzO1x0XHRcdHJldHVybiBfX3RoaXNfYWRkcmVzcztcbiYjNDM7XHRcdGlmICghU19JU1JFRyhtb2RlKSlcbiYjNDM7XHRcdFx0cmV0dXJuIF9fdGhpc19hZGRyZXNzO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoeGZzX2hhc196b25lZChtcCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgZGlwLVx1MDAzZWRpX21ldGF0eXBlID09IGNwdV90b19iZTE2KFhGU19NRVRBRklMRV9SVFJNQVApKSB7XG4gXHRcdGlmIChiZTMyX3RvX2NwdShkaXAtXHUwMDNlZGlfdXNlZF9ibG9ja3MpIFx1MDAzZSBtcC1cdTAwM2VtX3NiLnNiX3JnZXh0ZW50cylcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmMgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmNcbmluZGV4IDI1OGFjM2QwZDQ4NmU2Li41YTUxNmJkMzFjMzE3NSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfdXRpbC5jXG5AQCAtNzQsNyAmIzQzOzc0LDggQEAgeGZzX2ZsYWdzMmRpZmxhZ3MyKFxuIFx0dWludDY0X3RcdFx0ZGlfZmxhZ3MyID1cbiBcdFx0KGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IChYRlNfRElGTEFHMl9SRUZMSU5LIHxcbiBcdFx0XHRcdCAgIFhGU19ESUZMQUcyX0JJR1RJTUUgfFxuLVx0XHRcdFx0ICAgWEZTX0RJRkxBRzJfTlJFWFQ2NCkpO1xuJiM0MztcdFx0XHRcdCAgIFhGU19ESUZMQUcyX05SRVhUNjQgfFxuJiM0MztcdFx0XHRcdCAgIFhGU19ESUZMQUcyX1ZFUklUWSkpO1xuIFxuIFx0aWYgKHhmbGFncyBcdTAwMjYgRlNfWEZMQUdfREFYKVxuIFx0XHRkaV9mbGFnczIgfD0gWEZTX0RJRkxBRzJfREFYO1xuQEAgLTEyNiw2ICYjNDM7MTI3LDggQEAgeGZzX2lwMnhmbGFncyhcbiBcdFx0XHRmbGFncyB8PSBGU19YRkxBR19EQVg7XG4gXHRcdGlmIChpcC1cdTAwM2VpX2RpZmxhZ3MyIFx1MDAyNiBYRlNfRElGTEFHMl9DT1dFWFRTSVpFKVxuIFx0XHRcdGZsYWdzIHw9IEZTX1hGTEFHX0NPV0VYVFNJWkU7XG4mIzQzO1x0XHRpZiAoaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjYgWEZTX0RJRkxBRzJfVkVSSVRZKVxuJiM0MztcdFx0XHRmbGFncyB8PSBGU19YRkxBR19WRVJJVFk7XG4gXHR9XG4gXG4gXHRpZiAoeGZzX2lub2RlX2hhc19hdHRyX2ZvcmsoaXApKVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmMgYi9mcy94ZnMvbGlieGZzL3hmc19zYi5jXG5pbmRleCA0NzMyMmFkYjc2OTA1OS4uMjIyYmJlNTU1OWRmNDcgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19zYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19zYi5jXG5AQCAtMTY1LDYgJiM0MzsxNjUsOCBAQCB4ZnNfc2JfdmVyc2lvbl90b19mZWF0dXJlcyhcbiBcdFx0ZmVhdHVyZXMgfD0gWEZTX0ZFQVRfUkVGTElOSztcbiBcdGlmIChzYnAtXHUwMDNlc2JfZmVhdHVyZXNfcm9fY29tcGF0IFx1MDAyNiBYRlNfU0JfRkVBVF9ST19DT01QQVRfSU5PQlRDTlQpXG4gXHRcdGZlYXR1cmVzIHw9IFhGU19GRUFUX0lOT0JUQ05UO1xuJiM0MztcdGlmIChzYnAtXHUwMDNlc2JfZmVhdHVyZXNfcm9fY29tcGF0IFx1MDAyNiBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZKVxuJiM0MztcdFx0ZmVhdHVyZXMgfD0gWEZTX0ZFQVRfVkVSSVRZO1xuIFx0aWYgKHNicC1cdTAwM2VzYl9mZWF0dXJlc19pbmNvbXBhdCBcdTAwMjYgWEZTX1NCX0ZFQVRfSU5DT01QQVRfRlRZUEUpXG4gXHRcdGZlYXR1cmVzIHw9IFhGU19GRUFUX0ZUWVBFO1xuIFx0aWYgKHNicC1cdTAwM2VzYl9mZWF0dXJlc19pbmNvbXBhdCBcdTAwMjYgWEZTX1NCX0ZFQVRfSU5DT01QQVRfU1BJTk9ERVMpXG5AQCAtMTU4OCw2ICYjNDM7MTU5MCw4IEBAIHhmc19mc19nZW9tZXRyeShcbiBcdFx0Z2VvLVx1MDAzZWZsYWdzIHw9IFhGU19GU09QX0dFT01fRkxBR1NfTUVUQURJUjtcbiBcdGlmICh4ZnNfaGFzX3pvbmVkKG1wKSlcbiBcdFx0Z2VvLVx1MDAzZWZsYWdzIHw9IFhGU19GU09QX0dFT01fRkxBR1NfWk9ORUQ7XG4mIzQzO1x0aWYgKHhmc19oYXNfdmVyaXR5KG1wKSlcbiYjNDM7XHRcdGdlby1cdTAwM2VmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1ZFUklUWTtcbiBcdGdlby1cdTAwM2VydHNlY3RzaXplID0gc2JwLVx1MDAzZXNiX2Jsb2Nrc2l6ZTtcbiBcdGdlby1cdTAwM2VkaXJibG9ja3NpemUgPSB4ZnNfZGlyMl9kaXJibG9ja19ieXRlcyhzYnApO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uYyBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uY1xuaW5kZXggZTUyMzNlMzFhYmI3NTAuLjAyYjY4YmY0YzUxMjcwIDEwMDY0NFxuLS0tIGEvZnMveGZzL3NjcnViL2NvbW1vbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvc2NydWIvY29tbW9uLmNcbkBAIC00NSw2ICYjNDM7NDUsOCBAQFxuICNpbmNsdWRlIFwmIzM0O3NjcnViL2hlYWx0aC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c2NydWIvdGVtcGZpbGUuaFwmIzM0O1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4mIzQzO1xuIC8qIENvbW1vbiBjb2RlIGZvciB0aGUgbWV0YWRhdGEgc2NydWJiZXJzLiAqL1xuIFxuIC8qXG5AQCAtMTc1NCwzICYjNDM7MTc1Niw1NiBAQCB4Y2hrX2lub2RlX2NvdW50X2Jsb2NrcyhcbiBcdHJldHVybiB4ZnNfYm1hcF9jb3VudF9ibG9ja3Moc2MtXHUwMDNldHAsIHNjLVx1MDAzZWlwLCB3aGljaGZvcmssIG5leHRlbnRzLFxuIFx0XHRcdGNvdW50KTtcbiB9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBJZiB0aGlzIGlub2RlIGhhcyBTX1ZFUklUWSBzZXQgb24gaXQsIHJlYWQgdGhlIHZlcml0eSBpbmZvLiBJZiB0aGUgcmVhZGluZ1xuJiM0MzsgKiBmYWlscyB3aXRoIGFueXRoaW5nIG90aGVyIHRoYW4gRU5PTUVNLCB0aGUgZmlsZSBpcyBjb3JydXB0LCB3aGljaCB3ZSBjYW5cbiYjNDM7ICogZGV0ZWN0IGxhdGVyIHdpdGggZnN2ZXJpdHlfYWN0aXZlLlxuJiM0MzsgKlxuJiM0MzsgKiBDYWxsZXJzIG11c3QgaG9sZCB0aGUgSU9MT0NLIGFuZCBtdXN0IG5vdCBob2xkIHRoZSBJTE9DSyBvZiBzYy1cdTAwM2VpcCBiZWNhdXNlXG4mIzQzOyAqIGFjdGl2YXRpb24gcmVhZHMgaW5vZGUgZGF0YS5cbiYjNDM7ICovXG4mIzQzO2ludFxuJiM0Mzt4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShcbiYjNDM7XHRzdHJ1Y3QgeGZzX3NjcnViXHQqc2MpXG4mIzQzO3tcbiYjNDM7XHRpbnRcdFx0XHRlcnJvcjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFmc3Zlcml0eV9hY3RpdmUoVkZTX0koc2MtXHUwMDNlaXApKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhWRlNfSShzYy1cdTAwM2VpcCkpO1xuJiM0MztcdHN3aXRjaCAoZXJyb3IpIHtcbiYjNDM7XHRjYXNlIDA6XG4mIzQzO1x0XHQvKiBmc3Zlcml0eSBpcyBhY3RpdmUgKi9cbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgLUVOT0RBVEE6XG4mIzQzO1x0Y2FzZSAtRU1TR1NJWkU6XG4mIzQzO1x0Y2FzZSAtRUlOVkFMOlxuJiM0MztcdGNhc2UgLUVGU0NPUlJVUFRFRDpcbiYjNDM7XHRjYXNlIC1FRkJJRzpcbiYjNDM7XHRjYXNlIC1FUkFOR0U6XG4mIzQzO1x0Y2FzZSAtRUJBRE1TRzpcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgbm9uemVybyBlcnJubyBjb2RlcyBhYm92ZSBhcmUgdGhlIGVycm9yIGNvZGVzIHRoYXQgY2FuXG4mIzQzO1x0XHQgKiBiZSByZXR1cm5lZCBmcm9tIGZzdmVyaXR5IG9uIG1ldGFkYXRhIHZhbGlkYXRpb24gZXJyb3JzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0LyogcnVudGltZSBlcnJvcnMgKi9cbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBJcyB0aGlzIGEgdmVyaXR5IGZpbGUgdGhhdCBmYWlsZWQgdG8gYWN0aXZhdGU/ICBDYWxsZXJzIG11c3QgaGF2ZSB0cmllZCB0b1xuJiM0MzsgKiBhY3RpdmF0ZSBmc3Zlcml0eSB2aWEgeGNoa19pbm9kZV9zZXR1cF92ZXJpdHkuXG4mIzQzOyAqL1xuJiM0Mztib29sXG4mIzQzO3hjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbihcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZnN2ZXJpdHlfYWN0aXZlKFZGU19JKGlwKSkgXHUwMDI2XHUwMDI2ICFmc3Zlcml0eV9nZXRfaW5mbyhWRlNfSShpcCkpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2NvbW1vbi5oIGIvZnMveGZzL3NjcnViL2NvbW1vbi5oXG5pbmRleCA5ZDYyN2ZkNTA2ODdlNC4uM2RlMmI2MDA5YTk5NDEgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvc2NydWIvY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uaFxuQEAgLTI2OCw2ICYjNDM7MjY4LDggQEAgaW50IHhjaGtfaW5vZGVfaXNfYWxsb2NhdGVkKHN0cnVjdCB4ZnNfc2NydWIgKnNjLCB4ZnNfYWdpbm9fdCBhZ2lubyxcbiBcdFx0Ym9vbCAqaW51c2UpO1xuIGludCB4Y2hrX2lub2RlX2NvdW50X2Jsb2NrcyhzdHJ1Y3QgeGZzX3NjcnViICpzYywgaW50IHdoaWNoZm9yayxcbiBcdFx0eGZzX2V4dG51bV90ICpuZXh0ZW50cywgeGZzX2ZpbGJsa3NfdCAqY291bnQpO1xuJiM0MztpbnQgeGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoc3RydWN0IHhmc19zY3J1YiAqc2MpO1xuJiM0Mztib29sIHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbihzdHJ1Y3QgeGZzX2lub2RlICppcCk7XG4gXG4gYm9vbCB4Y2hrX2lub2RlX2lzX2RpcnRyZWVfcm9vdChjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCk7XG4gYm9vbCB4Y2hrX2lub2RlX2lzX3NiX3Jvb3RlZChjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCk7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2lub2RlLmMgYi9mcy94ZnMvc2NydWIvaW5vZGUuY1xuaW5kZXggNjViMTNlMzExOTE2ODEuLmQxY2RkNmI0NDVkMDE3IDEwMDY0NFxuLS0tIGEvZnMveGZzL3NjcnViL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jXG5AQCAtMzYsNiAmIzQzOzM2LDEwIEBAIHhjaGtfcHJlcGFyZV9pc2NydWIoXG4gXG4gXHR4Y2hrX2lsb2NrKHNjLCBYRlNfSU9MT0NLX0VYQ0wpO1xuIFxuJiM0MztcdGVycm9yID0geGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoc2MpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4gXHRlcnJvciA9IHhjaGtfdHJhbnNfYWxsb2Moc2MsIDApO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG5AQCAtODMzLDYgJiM0Mzs4MzcsOSBAQCB4Y2hrX2lub2RlKFxuIFx0aWYgKFNfSVNSRUcoVkZTX0koc2MtXHUwMDNlaXApLVx1MDAzZWlfbW9kZSkpXG4gXHRcdHhjaGtfaW5vZGVfY2hlY2tfcmVmbGlua19pZmxhZyhzYywgSV9JTk8oc2MtXHUwMDNlaXApKTtcbiBcbiYjNDM7XHRpZiAoeGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKHNjLVx1MDAzZWlwKSlcbiYjNDM7XHRcdHhjaGtfaW5vX3NldF9jb3JydXB0KHNjLCBzYy1cdTAwM2VzbS1cdTAwM2VzbV9pbm8pO1xuJiM0MztcbiBcdHhjaGtfaW5vZGVfY2hlY2tfdW5saW5rZWQoc2MpO1xuIFxuIFx0eGNoa19pbm9kZV94cmVmKHNjLCBJX0lOTyhzYy1cdTAwM2VpcCksIFx1MDAyNmRpKTtcbmRpZmYgLS1naXQgYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmMgYi9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNcbmluZGV4IDNlYzQxYzE5ODM1MTE2Li4zNWU5M2E0YjUwY2Q5ZiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9zY3J1Yi9pbm9kZV9yZXBhaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3NjcnViL2lub2RlX3JlcGFpci5jXG5AQCAtNTczLDYgJiM0Mzs1NzMsOCBAQCB4cmVwX2Rpbm9kZV9mbGFncyhcbiBcdFx0ZGlwLVx1MDAzZWRpX25yZXh0NjRfcGFkID0gMDtcbiBcdGVsc2UgaWYgKGRpcC1cdTAwM2VkaV92ZXJzaW9uIFx1MDAzZT0gMylcbiBcdFx0ZGlwLVx1MDAzZWRpX3YzX3BhZCA9IDA7XG4mIzQzO1x0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkgfHwgIVNfSVNSRUcobW9kZSkpXG4mIzQzO1x0XHRmbGFnczIgXHUwMDI2PSB+WEZTX0RJRkxBRzJfVkVSSVRZO1xuIFxuIFx0aWYgKGZsYWdzMiBcdTAwMjYgWEZTX0RJRkxBRzJfTUVUQURBVEEpIHtcbiBcdFx0eGZzX2ZhaWxhZGRyX3RcdGZhO1xuQEAgLTE2MTcsNiAmIzQzOzE2MTksMTAgQEAgeHJlcF9kaW5vZGVfY29yZShcbiBcdGlmIChpZ2V0X2Vycm9yKVxuIFx0XHRyZXR1cm4gaWdldF9lcnJvcjtcbiBcbiYjNDM7XHRlcnJvciA9IHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5KHNjKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuIFx0ZXJyb3IgPSB4Y2hrX3RyYW5zX2FsbG9jKHNjLCAwKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuQEAgLTIwMzUsNiAmIzQzOzIwNDEsMjcgQEAgeHJlcF9pbm9kZV91bmxpbmtlZChcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogSWYgdGhpcyBmaWxlIGlzIGEgZnN2ZXJpdHkgZmlsZSwgeGNoa19wcmVwYXJlX2lzY3J1YiBvciB4cmVwX2Rpbm9kZV9jb3JlXG4mIzQzOyAqIHNob3VsZCBoYXZlIGFjdGl2YXRlZCBpdC4gIElmIGl0JiMzOTtzIHN0aWxsIG5vdCBhY3RpdmUsIHRoZW4gdGhlcmUmIzM5O3Mgc29tZXRoaW5nXG4mIzQzOyAqIHdyb25nIHdpdGggdGhlIHZlcml0eSBkZXNjcmlwdG9yIGFuZCB3ZSBzaG91bGQgdHVybiBpdCBvZmYuXG4mIzQzOyAqL1xuJiM0MztTVEFUSUMgaW50XG4mIzQzO3hyZXBfaW5vZGVfdmVyaXR5KFxuJiM0MztcdHN0cnVjdCB4ZnNfc2NydWJcdCpzYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUgPSBWRlNfSShzYy1cdTAwM2VpcCk7XG4mIzQzO1xuJiM0MztcdGlmICh4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oc2MtXHUwMDNlaXApKSB7XG4mIzQzO1x0XHRzYy1cdTAwM2VpcC1cdTAwM2VpX2RpZmxhZ3MyIFx1MDAyNj0gflhGU19ESUZMQUcyX1ZFUklUWTtcbiYjNDM7XHRcdGlub2RlX3NldF9mbGFncyhpbm9kZSwgMCwgU19WRVJJVFkpO1xuJiM0MztcbiYjNDM7XHRcdHhmc190cmFuc19sb2dfaW5vZGUoc2MtXHUwMDNldHAsIHNjLVx1MDAzZWlwLCBYRlNfSUxPR19DT1JFKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIFJlcGFpciBhbiBpbm9kZSYjMzk7cyBmaWVsZHMuICovXG4gaW50XG4geHJlcF9pbm9kZShcbkBAIC0yMDg0LDYgJiM0MzsyMTExLDE1IEBAIHhyZXBfaW5vZGUoXG4gXHRcdFx0cmV0dXJuIGVycm9yO1xuIFx0fVxuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogRGlzYWJsZSBmc3Zlcml0eSBpZiBpdCBjYW5ub3QgYmUgYWN0aXZhdGVkLiAgQWN0aXZhdGlvbiBmYWlsdXJlXG4mIzQzO1x0ICogcHJvaGliaXRzIHRoZSBmaWxlIGZyb20gYmVpbmcgb3BlbmVkLCBzbyB0aGVyZSBjYW5ub3QgYmUgYW5vdGhlclxuJiM0MztcdCAqIHByb2dyYW0gd2l0aCBhbiBvcGVuIGZkIHRvIHdoYXQgaXQgdGhpbmtzIGlzIGEgdmVyaXR5IGZpbGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyb3IgPSB4cmVwX2lub2RlX3Zlcml0eShzYyk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiBcdC8qIFJlY29ubmVjdCBpbmNvcmUgdW5saW5rZWQgbGlzdCAqL1xuIFx0ZXJyb3IgPSB4cmVwX2lub2RlX3VubGlua2VkKHNjKTtcbiBcdGlmIChlcnJvcilcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FvcHMuYyBiL2ZzL3hmcy94ZnNfYW9wcy5jXG5pbmRleCA1MTI5M2I2ZjMzMWYwYi4uMTM1YmU3MTFmOWE0MDkgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2FvcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19hb3BzLmNcbkBAIC0yMiw3ICYjNDM7MjIsOSBAQFxuICNpbmNsdWRlIFwmIzM0O3hmc19pY2FjaGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc196b25lX2FsbG9jLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfcnRncm91cC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19mc3Zlcml0eS5oXCYjMzQ7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmlvLWludGVncml0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiBzdHJ1Y3QgeGZzX3dyaXRlcGFnZV9jdHgge1xuIFx0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggY3R4O1xuQEAgLTE4MSw2ICYjNDM7MTgzLDQ5IEBAIHhmc19lbmRfaW9lbmRfd3JpdGUoXG4gXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUobm9mc19mbGFnKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFByaW9yaXRpemUgZnN2ZXJpdHkgbWV0YWRhdGEgb3ZlciBmaWxlIGRhdGEuIFNvcnQgYmFzZWQgb24gaV9zaXplIGFzIGZzdmVyaXR5XG4mIzQzOyAqIG1ldGFkYXRhIGlzIGFsd2F5cyBiZXlvbmQgRU9GXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3hmc19yZWFkX2lvZW5kX2NvbXBhcmUoXG4mIzQzO1x0dm9pZFx0XHRcdCpwcml2LFxuJiM0MztcdGNvbnN0IHN0cnVjdCBsaXN0X2hlYWRcdCphLFxuJiM0MztcdGNvbnN0IHN0cnVjdCBsaXN0X2hlYWRcdCpiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvbWFwX2lvZW5kXHQqaWEgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IGlvbWFwX2lvZW5kLFxuJiM0MztcdFx0XHRpb19saXN0KTtcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfaW9lbmRcdCppYiA9IGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3QgaW9tYXBfaW9lbmQsXG4mIzQzO1x0XHRcdGlvX2xpc3QpO1xuJiM0MztcdGxvZmZfdFx0XHRcdGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlhLVx1MDAzZWlvX2lub2RlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFJU19WRVJJVFkoaWEtXHUwMDNlaW9faW5vZGUpKVxuJiM0MztcdFx0cmV0dXJuIGlvbWFwX2lvZW5kX2NvbXBhcmUocHJpdiwgYSwgYik7XG4mIzQzO1xuJiM0MztcdGlmIChpYS1cdTAwM2Vpb19vZmZzZXQgXHUwMDNlIGlfc2l6ZSBcdTAwMjZcdTAwMjYgaWItXHUwMDNlaW9fb2Zmc2V0IFx1MDAzYyBpX3NpemUpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0aWYgKGlhLVx1MDAzZWlvX29mZnNldCBcdTAwM2MgaV9zaXplIFx1MDAyNlx1MDAyNiBpYi1cdTAwM2Vpb19vZmZzZXQgXHUwMDNlIGlfc2l6ZSlcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBJTyByZWFkIGNvbXBsZXRpb24uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0Mzt4ZnNfZW5kX2lvZW5kX3JlYWQoXG4mIzQzO1x0c3RydWN0IGlvbWFwX2lvZW5kXHQqaW9lbmQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpb2VuZC1cdTAwM2Vpb19pbm9kZSk7XG4mIzQzO1xuJiM0MztcdGlmICghaW9lbmQtXHUwMDNlaW9fYmlvLmJpX3N0YXR1cyBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0eGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShpcCwgaW9lbmQtXHUwMDNlaW9fb2Zmc2V0KSlcbiYjNDM7XHRcdGZzdmVyaXR5X3ZlcmlmeV9iaW8oaW9lbmQtXHUwMDNlaW9fdmksXG4mIzQzO1x0XHRcdFx0ICAgIFx1MDAyNmlvZW5kLVx1MDAzZWlvX2Jpbyk7XG4mIzQzO1x0aW9tYXBfZmluaXNoX2lvZW5kcyhpb2VuZCxcbiYjNDM7XHRcdGJsa19zdGF0dXNfdG9fZXJybm8oaW9lbmQtXHUwMDNlaW9fYmlvLmJpX3N0YXR1cykpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogRmluaXNoIGFsbCBwZW5kaW5nIElPIGNvbXBsZXRpb25zIHRoYXQgcmVxdWlyZSB0cmFuc2FjdGlvbmFsIG1vZGlmaWNhdGlvbnMuXG4gICpcbkBAIC0yMDksMTQgJiM0MzsyNTQsMTcgQEAgeGZzX2VuZF9pbyhcbiBcdGxpc3RfcmVwbGFjZV9pbml0KFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfbGlzdCwgXHUwMDI2dG1wKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9sb2NrLCBmbGFncyk7XG4gXG4tXHRpb21hcF9zb3J0X2lvZW5kcyhcdTAwMjZ0bXApO1xuJiM0MztcdGlvZW5kID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNnRtcCwgc3RydWN0IGlvbWFwX2lvZW5kLCBpb19saXN0KTtcbiYjNDM7XHRpZiAoYmlvX29wKFx1MDAyNmlvZW5kLVx1MDAzZWlvX2JpbykgPT0gUkVRX09QX1JFQUQpXG4mIzQzO1x0XHRpb21hcF9zb3J0X2lvZW5kcyhcdTAwMjZ0bXAsIHhmc19yZWFkX2lvZW5kX2NvbXBhcmUpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGlvbWFwX3NvcnRfaW9lbmRzKFx1MDAyNnRtcCwgaW9tYXBfaW9lbmRfY29tcGFyZSk7XG4gXHR3aGlsZSAoKGlvZW5kID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNnRtcCwgc3RydWN0IGlvbWFwX2lvZW5kLFxuIFx0XHRcdGlvX2xpc3QpKSkge1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmlvZW5kLVx1MDAzZWlvX2xpc3QpO1xuIFx0XHRpb21hcF9pb2VuZF90cnlfbWVyZ2UoaW9lbmQsIFx1MDAyNnRtcCk7XG4gXHRcdGlmIChiaW9fb3AoXHUwMDI2aW9lbmQtXHUwMDNlaW9fYmlvKSA9PSBSRVFfT1BfUkVBRClcbi1cdFx0XHRpb21hcF9maW5pc2hfaW9lbmRzKGlvZW5kLFxuLVx0XHRcdFx0YmxrX3N0YXR1c190b19lcnJubyhpb2VuZC1cdTAwM2Vpb19iaW8uYmlfc3RhdHVzKSk7XG4mIzQzO1x0XHRcdHhmc19lbmRfaW9lbmRfcmVhZChpb2VuZCk7XG4gXHRcdGVsc2VcbiBcdFx0XHR4ZnNfZW5kX2lvZW5kX3dyaXRlKGlvZW5kKTtcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG5AQCAtMjQyLDkgJiM0MzsyOTAsMTQgQEAgeGZzX2VuZF9iaW8oXG4gXHR9XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX2xvY2ssIGZsYWdzKTtcbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfbGlzdCkpXG4tXHRcdFdBUk5fT05fT05DRSghcXVldWVfd29yayhtcC1cdTAwM2VtX3Vud3JpdHRlbl93b3JrcXVldWUsXG4mIzQzO1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9saXN0KSkge1xuJiM0MztcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX1ZFUklUWSkgXHUwMDI2XHUwMDI2IGlvZW5kLVx1MDAzZWlvX3ZpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGlvZW5kLVx1MDAzZWlvX29mZnNldCBcdTAwM2MgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXG4mIzQzO1x0XHRcdGZzdmVyaXR5X2VucXVldWVfdmVyaWZ5X3dvcmsoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF93b3JrKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0V0FSTl9PTl9PTkNFKCFxdWV1ZV93b3JrKG1wLVx1MDAzZW1fdW53cml0dGVuX3dvcmtxdWV1ZSxcbiBcdFx0XHRcdFx0IFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfd29yaykpO1xuJiM0MztcdH1cbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2aW9lbmQtXHUwMDNlaW9fbGlzdCwgXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9saXN0KTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aXAtXHUwMDNlaV9pb2VuZF9sb2NrLCBmbGFncyk7XG4gfVxuQEAgLTM1MCwxMiAmIzQzOzQwMywxNiBAQCB4ZnNfbWFwX2Jsb2NrcyhcbiBcdGludFx0XHRcdHJldHJpZXMgPSAwO1xuIFx0aW50XHRcdFx0ZXJyb3IgPSAwO1xuIFx0dW5zaWduZWQgaW50XHRcdCpzZXE7XG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdGlvbWFwX2ZsYWdzID0gMDtcbiBcbiBcdGlmICh4ZnNfaXNfc2h1dGRvd24obXApKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdFhGU19FUlJPUlRBR19ERUxBWShtcCwgWEZTX0VSUlRBR19XQl9ERUxBWV9NUyk7XG4gXG4mIzQzO1x0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxuJiM0MztcdFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogQ09XIGZvcmsgYmxvY2tzIGNhbiBvdmVybGFwIGRhdGEgZm9yayBibG9ja3MgZXZlbiBpZiB0aGUgYmxvY2tzXG4gXHQgKiBhcmVuJiMzOTt0IHNoYXJlZC4gIENPVyBJL08gYWx3YXlzIHRha2VzIHByZWNlZGVudCwgc28gd2UgbXVzdCBhbHdheXNcbkBAIC00NDMsNyAmIzQzOzUwMCw4IEBAIHhmc19tYXBfYmxvY2tzKFxuIFx0ICAgIGlzbnVsbHN0YXJ0YmxvY2soaW1hcC5icl9zdGFydGJsb2NrKSlcbiBcdFx0Z290byBhbGxvY2F0ZV9ibG9ja3M7XG4gXG4tXHR4ZnNfYm1idF90b19pb21hcChpcCwgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBcdTAwMjZpbWFwLCAwLCAwLCBYRlNfV1BDKHdwYyktXHUwMDNlZGF0YV9zZXEpO1xuJiM0MztcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIFx1MDAyNmltYXAsIDAsIGlvbWFwX2ZsYWdzLFxuJiM0MztcdFx0XHQgIFhGU19XUEMod3BjKS1cdTAwM2VkYXRhX3NlcSk7XG4gXHR0cmFjZV94ZnNfbWFwX2Jsb2Nrc19mb3VuZChpcCwgb2Zmc2V0LCBjb3VudCwgd2hpY2hmb3JrLCBcdTAwMjZpbWFwKTtcbiBcdHJldHVybiAwO1xuIGFsbG9jYXRlX2Jsb2NrczpcbkBAIC01OTAsMTIgJiM0Mzs2NDgsMTYgQEAgeGZzX3pvbmVkX21hcF9ibG9ja3MoXG4gXHR4ZnNfZmlsYmxrc190XHRcdGNvdW50X2ZzYjtcbiBcdHN0cnVjdCB4ZnNfYm1idF9pcmVjXHRpbWFwLCBkZWw7XG4gXHRzdHJ1Y3QgeGZzX2lleHRfY3Vyc29yXHRpY3VyO1xuJiM0MztcdHUxNlx0XHRcdGlvbWFwX2ZsYWdzID0gMDtcbiBcbiBcdGlmICh4ZnNfaXNfc2h1dGRvd24obXApKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdFhGU19FUlJPUlRBR19ERUxBWShtcCwgWEZTX0VSUlRBR19XQl9ERUxBWV9NUyk7XG4gXG4mIzQzO1x0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxuJiM0MztcdFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogQWxsIGRpcnR5IGRhdGEgbXVzdCBiZSBjb3ZlcmVkIGJ5IGRlbGFsbG9jIGV4dGVudHMuICBCdXQgdHJ1bmNhdGUgY2FuXG4gXHQgKiByZW1vdmUgZGVsYWxsb2MgZXh0ZW50cyB1bmRlcm5lYXRoIHVzIG9yIHJlZHVjZSB0aGVpciBzaXplLlxuQEAgLTYxOSw3ICYjNDM7NjgxLDcgQEAgeGZzX3pvbmVkX21hcF9ibG9ja3MoXG4gXHRcdGltYXAuYnJfc3RhcnRibG9jayA9IEhPTEVTVEFSVEJMT0NLO1xuIFx0XHRpbWFwLmJyX3N0YXRlID0gWEZTX0VYVF9OT1JNO1xuIFx0XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuLVx0XHR4ZnNfYm1idF90b19pb21hcChpcCwgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBcdTAwMjZpbWFwLCAwLCAwLCAwKTtcbiYjNDM7XHRcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIFx1MDAyNmltYXAsIDAsIGlvbWFwX2ZsYWdzLCAwKTtcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXHRlbmRfZnNiID0gbWluKGVuZF9mc2IsIGltYXAuYnJfc3RhcnRvZmYgJiM0MzsgaW1hcC5icl9ibG9ja2NvdW50KTtcbkBAIC02MzIsMTEgJiM0Mzs2OTQsMTAgQEAgeGZzX3pvbmVkX21hcF9ibG9ja3MoXG4gXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuIFxuIFx0d3BjLVx1MDAzZWlvbWFwLnR5cGUgPSBJT01BUF9NQVBQRUQ7XG4tXHR3cGMtXHUwMDNlaW9tYXAuZmxhZ3MgPSBJT01BUF9GX0RJUlRZO1xuIFx0d3BjLVx1MDAzZWlvbWFwLmJkZXYgPSBtcC1cdTAwM2VtX3J0ZGV2X3RhcmdwLVx1MDAzZWJ0X2JkZXY7XG4gXHR3cGMtXHUwMDNlaW9tYXAub2Zmc2V0ID0gb2Zmc2V0O1xuIFx0d3BjLVx1MDAzZWlvbWFwLmxlbmd0aCA9IFhGU19GU0JfVE9fQihtcCwgY291bnRfZnNiKTtcbi1cdHdwYy1cdTAwM2Vpb21hcC5mbGFncyA9IElPTUFQX0ZfQU5PTl9XUklURTtcbiYjNDM7XHR3cGMtXHUwMDNlaW9tYXAuZmxhZ3MgPSBpb21hcF9mbGFncyB8IElPTUFQX0ZfQU5PTl9XUklURTtcbiBcbiBcdHRyYWNlX3hmc196b25lZF9tYXBfYmxvY2tzKGlwLCBvZmZzZXQsIHdwYy1cdTAwM2Vpb21hcC5sZW5ndGgpO1xuIFx0cmV0dXJuIDA7XG5AQCAtNjg0LDYgJiM0Mzs3NDUsMjIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIHhmc196b25lZF93cml0ZWJhY2tfb3BzID0ge1xuIFx0LndyaXRlYmFja19zdWJtaXRcdD0geGZzX3pvbmVkX3dyaXRlYmFja19zdWJtaXQsXG4gfTtcbiBcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt4ZnNfaW9tYXBfd3JpdGVwYWdlcyhcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHRcdCppcCxcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eFx0KmN0eClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV3JpdGViYWNrIGRvZXMgbm90IHdvcmsgZm9yIGZvbGlvcyBwYXN0IEVPRiwgbGV0IGl0IGtub3cgdGhhdFxuJiM0MztcdCAqIEkvTyBoYXBwZW5zIGZvciBmc3Zlcml0eSBtZXRhZGF0YSBhbmQgdGhpcyByZXN0cmljdGlvbiBuZWVkXG4mIzQzO1x0ICogdG8gYmUgc2tpcHBlZFxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcbiYjNDM7XHRcdGN0eC1cdTAwM2Vpb21hcC5mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcyhjdHgpO1xuJiM0Mzt9XG4mIzQzO1xuIFNUQVRJQyBpbnRcbiB4ZnNfdm1fd3JpdGVwYWdlcyhcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlXHQqbWFwcGluZyxcbkBAIC03MDMsNyAmIzQzOzc4MCw3IEBAIHhmc192bV93cml0ZXBhZ2VzKFxuIFx0XHR9O1xuIFx0XHRpbnRcdFx0XHRcdGVycm9yO1xuIFxuLVx0XHRlcnJvciA9IGlvbWFwX3dyaXRlcGFnZXMoXHUwMDI2eGMuY3R4KTtcbiYjNDM7XHRcdGVycm9yID0geGZzX2lvbWFwX3dyaXRlcGFnZXMoaXAsIFx1MDAyNnhjLmN0eCk7XG4gXHRcdGlmICh4Yy5vcGVuX3pvbmUpXG4gXHRcdFx0eGZzX29wZW5fem9uZV9wdXQoeGMub3Blbl96b25lKTtcbiBcdFx0cmV0dXJuIGVycm9yO1xuQEAgLTcxNiw3ICYjNDM7NzkzLDcgQEAgeGZzX3ZtX3dyaXRlcGFnZXMoXG4gXHRcdFx0fSxcbiBcdFx0fTtcbiBcbi1cdFx0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXHUwMDI2d3BjLmN0eCk7XG4mIzQzO1x0XHRyZXR1cm4geGZzX2lvbWFwX3dyaXRlcGFnZXMoaXAsIFx1MDAyNndwYy5jdHgpO1xuIFx0fVxuIH1cbiBcbkBAIC03NjEsOSAmIzQzOzgzOCwxMiBAQCB4ZnNfYmlvX3N1Ym1pdF9yZWFkKFxuIFx0c3RydWN0IGlvbWFwX3JlYWRfZm9saW9fY3R4XHQqY3R4KVxuIHtcbiBcdHN0cnVjdCBiaW9cdFx0XHQqYmlvID0gY3R4LVx1MDAzZXJlYWRfY3R4O1xuJiM0MztcdHN0cnVjdCBpb21hcF9pb2VuZFx0XHQqaW9lbmQ7XG4gXG4gXHQvKiBkZWZlciByZWFkIGNvbXBsZXRpb25zIHRvIHRoZSBpb2VuZCB3b3JrcXVldWUgKi9cbi1cdGlvbWFwX2luaXRfaW9lbmQoaXRlci1cdTAwM2Vpbm9kZSwgYmlvLCBjdHgtXHUwMDNlcmVhZF9jdHhfZmlsZV9vZmZzZXQsIDApO1xuJiM0MztcdGlvZW5kID0gaW9tYXBfaW5pdF9pb2VuZChpdGVyLVx1MDAzZWlub2RlLCBiaW8sIGN0eC1cdTAwM2VyZWFkX2N0eF9maWxlX29mZnNldCxcbiYjNDM7XHRcdFx0MCk7XG4mIzQzO1x0aW9lbmQtXHUwMDNlaW9fdmkgPSBjdHgtXHUwMDNldmk7XG4gXHRpb21hcF9iaW9fc3VibWl0X3JlYWRfZW5kaW8oaXRlciwgY3R4LCB4ZnNfZW5kX2Jpbyk7XG4gfVxuIFxuQEAgLTc3NSwxMSAmIzQzOzg1NSwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3JlYWRfb3BzIHhmc19pb21hcF9yZWFkX29wcyA9IHtcbiBcbiBzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBpb21hcF9yZWFkX29wcyAqXG4geGZzX2dldF9pb21hcF9yZWFkX29wcyhcbi1cdGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlXHQqbWFwcGluZylcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZVx0Km1hcHBpbmcsXG4mIzQzO1x0bG9mZl90XHRcdFx0XHRwb3NpdGlvbilcbiB7XG4gXHRzdHJ1Y3QgeGZzX2lub2RlXHRcdCppcCA9IFhGU19JKG1hcHBpbmctXHUwMDNlaG9zdCk7XG4gXG4tXHRpZiAoYmRldl9oYXNfaW50ZWdyaXR5X2NzdW0oeGZzX2lub2RlX2J1ZnRhcmcoaXApLVx1MDAzZWJ0X2JkZXYpKVxuJiM0MztcdGlmIChiZGV2X2hhc19pbnRlZ3JpdHlfY3N1bSh4ZnNfaW5vZGVfYnVmdGFyZyhpcCktXHUwMDNlYnRfYmRldikgfHxcbiYjNDM7XHRcdFx0eGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShpcCwgcG9zaXRpb24pKVxuIFx0XHRyZXR1cm4gXHUwMDI2eGZzX2lvbWFwX3JlYWRfb3BzO1xuIFx0cmV0dXJuIFx1MDAyNmlvbWFwX2Jpb19yZWFkX29wcztcbiB9XG5AQCAtNzkxLDcgJiM0Mzs4NzMsNyBAQCB4ZnNfdm1fcmVhZF9mb2xpbyhcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfcmVhZF9mb2xpb19jdHhcdGN0eCA9IHsgLmN1cl9mb2xpbyA9IGZvbGlvIH07XG4gXG4tXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhmb2xpby1cdTAwM2VtYXBwaW5nKTtcbiYjNDM7XHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhmb2xpby1cdTAwM2VtYXBwaW5nLCBmb2xpb19wb3MoZm9saW8pKTtcbiBcdGlvbWFwX3JlYWRfZm9saW8oXHUwMDI2eGZzX3JlYWRfaW9tYXBfb3BzLCBcdTAwMjZjdHgsIE5VTEwpO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTgwMiw3ICYjNDM7ODg0LDcgQEAgeGZzX3ZtX3JlYWRhaGVhZChcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfcmVhZF9mb2xpb19jdHhcdGN0eCA9IHsgLnJhYyA9IHJhYyB9O1xuIFxuLVx0Y3R4Lm9wcyA9IHhmc19nZXRfaW9tYXBfcmVhZF9vcHMocmFjLVx1MDAzZW1hcHBpbmcpLFxuJiM0MztcdGN0eC5vcHMgPSB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKHJhYy1cdTAwM2VtYXBwaW5nLCByZWFkYWhlYWRfcG9zKHJhYykpO1xuIFx0aW9tYXBfcmVhZGFoZWFkKFx1MDAyNnhmc19yZWFkX2lvbWFwX29wcywgXHUwMDI2Y3R4LCBOVUxMKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwX3V0aWwuYyBiL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmNcbmluZGV4IGM4OGI5YWRlNzM4OWRkLi5iMTg3NWQ2ZTc0NTI5NiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmNcbkBAIC0zMSw2ICYjNDM7MzEsNyBAQFxuICNpbmNsdWRlIFwmIzM0O3hmc19ydGJpdG1hcC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGZzX3J0Z3JvdXAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc196b25lX2FsbG9jLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuIC8qIEtlcm5lbCBvbmx5IEJNQVAgcmVsYXRlZCBkZWZpbml0aW9ucyBhbmQgZnVuY3Rpb25zICovXG4gXG5AQCAtNTUzLDYgJiM0Mzs1NTQsMTQgQEAgeGZzX2Nhbl9mcmVlX2VvZmJsb2NrcyhcbiBcdGlmIChsYXN0X2ZzYiBcdTAwM2M9IGVuZF9mc2IpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE5vdGhpbmcgdG8gY2xlYW4gb24gZnN2ZXJpdHkgaW5vZGVzIGFzIHRoZXkgZG9uJiMzOTt0IHVzZSBwcmVhbGxvYyBhbmRcbiYjNDM7XHQgKiB0aGVyZSBubyBkZWxhbGxvYyBhcyBvbmx5IHdyaXR0ZW4gZGF0YSBpcyBmc3Zlcml0eSBtZXRhZGF0YVxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChJU19WRVJJVFkoVkZTX0koaXApKSB8fFxuJiM0MztcdCAgICB4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4gXHQvKlxuIFx0ICogQ2hlY2sgaWYgdGhlcmUgaXMgYW4gcG9zdC1FT0YgZXh0ZW50IHRvIGZyZWUuICBJZiB0aGVyZSBhcmUgYW55XG4gXHQgKiBkZWxhbGxvYyBibG9ja3MgYXR0YWNoZWQgdG8gdGhlIGlub2RlIChkYXRhIGZvcmsgZGVsYWxsb2NcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZpbGUuYyBiL2ZzL3hmcy94ZnNfZmlsZS5jXG5pbmRleCA4NDVhOTdjOWIwNjMwYi4uY2JhMTk0ZDY3OGZjNzcgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2ZpbGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19maWxlLmNcbkBAIC0zNyw2ICYjNDM7MzcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZhZHZpc2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlbG9jay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wcztcbiBcbkBAIC0yNDUsNiAmIzQzOzI0NiwyNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgeGZzX2Rpb19yZWFkX2JvdW5jZV9vcHMgPSB7XG4gXHQuYmlvX3NldFx0PSBcdTAwMjZpb21hcF9pb2VuZF9iaW9zZXQsXG4gfTtcbiBcbiYjNDM7U1RBVElDIHNzaXplX3RcbiYjNDM7eGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChcbiYjNDM7XHRzdHJ1Y3Qga2lvY2JcdFx0KmlvY2IsXG4mIzQzO1x0c3RydWN0IGlvdl9pdGVyXHRcdCp0bylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKSk7XG4mIzQzO1x0c3NpemVfdFx0XHRcdHJldDtcbiYjNDM7XG4mIzQzO1x0dHJhY2VfeGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKGlvY2IsIHRvKTtcbiYjNDM7XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIFNUQVRJQyBzc2l6ZV90XG4geGZzX2ZpbGVfZGlvX3JlYWQoXG4gXHRzdHJ1Y3Qga2lvY2JcdFx0KmlvY2IsXG5AQCAtMjY1LDYgJiM0MzsyODUsMTYgQEAgeGZzX2ZpbGVfZGlvX3JlYWQoXG4gXHRyZXQgPSB4ZnNfaWxvY2tfaW9jYihpb2NiLCBYRlNfSU9MT0NLX1NIQVJFRCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmUtY2hlY2sgdmVyaXR5IHN0YXR1cyBhZnRlciBhY3F1aXJpbmcgbG9jay4gVGhpcyBwcmV2ZW50cyBUT0NUT1UgaW5cbiYjNDM7XHQgKiB4ZnNfZmlsZV9yZWFkX2l0ZXIoKSB3aGlsZSBmYWxsaW5nIGJhY2sgZnJvbSBESU8gdG8gYnVmZmVyZWQgSS9PIGFzXG4mIzQzO1x0ICogbm93IHdlIGFyZSBob2xkaW5nIGEgbG9ja1xuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmc3Zlcml0eV9hY3RpdmUoVkZTX0koaXApKSkge1xuJiM0MztcdFx0eGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTtcbiYjNDM7XHRcdGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2PSB+SU9DQl9ESVJFQ1Q7XG4mIzQzO1x0XHRyZXR1cm4geGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7XG4mIzQzO1x0fVxuIFx0aWYgKG1hcHBpbmdfc3RhYmxlX3dyaXRlcyhpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nKSkge1xuIFx0XHRkaW9fb3BzID0gXHUwMDI2eGZzX2Rpb19yZWFkX2JvdW5jZV9vcHM7XG4gXHRcdGRpb19mbGFncyB8PSBJT01BUF9ESU9fQk9VTkNFO1xuQEAgLTI4MSw3ICYjNDM7MzExLDggQEAgeGZzX2ZpbGVfZGF4X3JlYWQoXG4gXHRzdHJ1Y3Qga2lvY2JcdFx0KmlvY2IsXG4gXHRzdHJ1Y3QgaW92X2l0ZXJcdFx0KnRvKVxuIHtcbi1cdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdCk7XG4mIzQzO1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpbm9kZSk7XG4gXHRzc2l6ZV90XHRcdFx0cmV0ID0gMDtcbiBcbiBcdHRyYWNlX3hmc19maWxlX2RheF9yZWFkKGlvY2IsIHRvKTtcbkBAIC0yOTksMjUgJiM0MzszMzAsNiBAQCB4ZnNfZmlsZV9kYXhfcmVhZChcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLVNUQVRJQyBzc2l6ZV90XG4teGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChcbi1cdHN0cnVjdCBraW9jYlx0XHQqaW9jYixcbi1cdHN0cnVjdCBpb3ZfaXRlclx0XHQqdG8pXG4te1xuLVx0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApKTtcbi1cdHNzaXplX3RcdFx0XHRyZXQ7XG4tXG4tXHR0cmFjZV94ZnNfZmlsZV9idWZmZXJlZF9yZWFkKGlvY2IsIHRvKTtcbi1cbi1cdHJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4tXHRyZXQgPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKGlvY2IsIHRvKTtcbi1cdHhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbiBTVEFUSUMgc3NpemVfdFxuIHhmc19maWxlX3JlYWRfaXRlcihcbiBcdHN0cnVjdCBraW9jYlx0XHQqaW9jYixcbkBAIC0zMzIsNiAmIzQzOzM0NCwxNCBAQCB4ZnNfZmlsZV9yZWFkX2l0ZXIoXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJbiBjYXNlIGZzLXZlcml0eSBpcyBlbmFibGVkLCB3ZSBhbHNvIGZhbGxiYWNrIHRvIHRoZSBidWZmZXJlZCByZWFkXG4mIzQzO1x0ICogZnJvbSB0aGUgZGlyZWN0IHJlYWQgcGF0aC4gVGhlcmVmb3JlLCBJT0NCX0RJUkVDVCBpcyBzZXQgYW5kIG5lZWQgdG9cbiYjNDM7XHQgKiBiZSBjbGVhcmVkIChzZWUgZ2VuZXJpY19maWxlX3JlYWRfaXRlcigpKVxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmc3Zlcml0eV9hY3RpdmUoaW5vZGUpKVxuJiM0MztcdFx0aW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjY9IH5JT0NCX0RJUkVDVDtcbiYjNDM7XG4gXHRpZiAoSVNfREFYKGlub2RlKSlcbiBcdFx0cmV0ID0geGZzX2ZpbGVfZGF4X3JlYWQoaW9jYiwgdG8pO1xuIFx0ZWxzZSBpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ESVJFQ1QpXG5AQCAtMTcwMCwxMSAmIzQzOzE3MjAsMTggQEAgeGZzX2ZpbGVfb3BlbihcbiBcdHN0cnVjdCBpbm9kZVx0Kmlub2RlLFxuIFx0c3RydWN0IGZpbGVcdCpmaWxlKVxuIHtcbiYjNDM7XHRpbnRcdFx0ZXJyb3I7XG4mIzQzO1xuIFx0aWYgKHhmc19pc19zaHV0ZG93bihYRlNfTShpbm9kZS1cdTAwM2VpX3NiKSkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFx0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfTk9XQUlUIHwgRk1PREVfQ0FOX09ESVJFQ1Q7XG4gXHRpZiAoeGZzX2dldF9hdG9taWNfd3JpdGVfbWluKFhGU19JKGlub2RlKSkgXHUwMDNlIDApXG4gXHRcdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9BVE9NSUNfV1JJVEU7XG4mIzQzO1xuJiM0MztcdGVycm9yID0gZnN2ZXJpdHlfZmlsZV9vcGVuKGlub2RlLCBmaWxlKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuIFx0cmV0dXJuIGdlbmVyaWNfZmlsZV9vcGVuKGlub2RlLCBmaWxlKTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc3Zlcml0eS5jIGIvZnMveGZzL3hmc19mc3Zlcml0eS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ2MjIyM2I0NjE5YjA2XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2ZzdmVyaXR5LmNcbkBAIC0wLDAgJiM0MzsxLDQ4MCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsvKlxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgUmVkIEhhdCwgSW5jLlxuJiM0MzsgKi9cbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eGZzX3BsYXRmb3JtLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eGZzX2Zvcm1hdC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19zaGFyZWQuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfdHJhbnNfcmVzdi5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19tb3VudC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19kYV9mb3JtYXQuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfZGFfYnRyZWUuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfaW5vZGUuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfbG9nX2Zvcm1hdC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc190cmFucy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19kZWZlci5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc190cmFjZS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19xdW90YS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19mc3Zlcml0eS5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19pb21hcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19lcnJvci5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19oZWFsdGguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfYm1hcC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3hmc19ibWFwX3V0aWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4mIzQzO1xuJiM0Mztsb2ZmX3RcbiYjNDM7eGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgeGZzX2lub2RlXHQqaXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcm91bmRfdXAoaV9zaXplX3JlYWQoVkZTX0lDKGlwKSksIFhGU19GU1ZFUklUWV9TVEFSVF9BTElHTik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2xcbiYjNDM7eGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgeGZzX2lub2RlXHQqaXAsXG4mIzQzO1x0bG9mZl90XHRcdFx0b2Zmc2V0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZzdmVyaXR5X2FjdGl2ZShWRlNfSUMoaXApKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0b2Zmc2V0IFx1MDAzYyB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmV0cmlldmUgdGhlIHZlcml0eSBkZXNjcmlwdG9yLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludFxuJiM0Mzt4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3IoXG4mIzQzO1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSxcbiYjNDM7XHR2b2lkXHRcdFx0KmJ1ZixcbiYjNDM7XHRzaXplX3RcdFx0XHRidWZfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlub2RlKTtcbiYjNDM7XHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuJiM0MztcdF9fYmUzMlx0XHRcdGRfZGVzY19zaXplO1xuJiM0MztcdHUzMlx0XHRcdGRlc2Nfc2l6ZTtcbiYjNDM7XHR1NjRcdFx0XHRkZXNjX3NpemVfcG9zO1xuJiM0MztcdGludFx0XHRcdGVycm9yO1xuJiM0MztcdHU2NFx0XHRcdGRlc2NfcG9zO1xuJiM0MztcdHN0cnVjdCB4ZnNfYm1idF9pcmVjXHRyZWM7XG4mIzQzO1x0aW50XHRcdFx0aXNfZW1wdHk7XG4mIzQzO1x0dWludDMyX3RcdFx0YmxvY2tzaXplID0gaV9ibG9ja3NpemUoVkZTX0koaXApKTtcbiYjNDM7XHR4ZnNfZmlsZW9mZl90XHRcdGxhc3RfYmxvY2tfb2Zmc2V0O1xuJiM0MztcbiYjNDM7XHRBU1NFUlQoaW5vZGUtXHUwMDNlaV9mbGFncyBcdTAwMjYgU19WRVJJVFkpO1xuJiM0MztcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7XG4mIzQzO1x0ZXJyb3IgPSB4ZnNfYm1hcF9sYXN0X2V4dGVudChOVUxMLCBpcCwgWEZTX0RBVEFfRk9SSywgXHUwMDI2cmVjLCBcdTAwMjZpc19lbXB0eSk7XG4mIzQzO1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX2VtcHR5KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9EQVRBO1xuJiM0MztcbiYjNDM7XHRsYXN0X2Jsb2NrX29mZnNldCA9XG4mIzQzO1x0XHRYRlNfRlNCX1RPX0IobXAsIHJlYy5icl9zdGFydG9mZiAmIzQzOyByZWMuYnJfYmxvY2tjb3VudCk7XG4mIzQzO1x0aWYgKGxhc3RfYmxvY2tfb2Zmc2V0IFx1MDAzYz0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4mIzQzO1xuJiM0MztcdGRlc2Nfc2l6ZV9wb3MgPSBsYXN0X2Jsb2NrX29mZnNldCAtIHNpemVvZihfX2JlMzIpO1xuJiM0MztcdGVycm9yID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIChjaGFyICopXHUwMDI2ZF9kZXNjX3NpemUsXG4mIzQzO1x0XHRcdHNpemVvZihkX2Rlc2Nfc2l6ZSksIGRlc2Nfc2l6ZV9wb3MpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0ZGVzY19zaXplID0gYmUzMl90b19jcHUoZF9kZXNjX3NpemUpO1xuJiM0MztcdGlmIChYRlNfSVNfQ09SUlVQVChtcCwgZGVzY19zaXplIFx1MDAzZSBGU19WRVJJVFlfTUFYX0RFU0NSSVBUT1JfU0laRSkpIHtcbiYjNDM7XHRcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoWEZTX0lTX0NPUlJVUFQobXAsIGRlc2Nfc2l6ZSBcdTAwM2UgZGVzY19zaXplX3BvcykpIHtcbiYjNDM7XHRcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIWJ1Zl9zaXplKVxuJiM0MztcdFx0cmV0dXJuIGRlc2Nfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKFhGU19JU19DT1JSVVBUKG1wLCBkZXNjX3NpemUgXHUwMDNlIGJ1Zl9zaXplKSkge1xuJiM0MztcdFx0eGZzX2lub2RlX21hcmtfc2ljayhYRlNfSShpbm9kZSksIFhGU19TSUNLX0lOT19GU1ZFUklUWSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGRlc2NfcG9zID0gcm91bmRfZG93bihkZXNjX3NpemVfcG9zIC0gZGVzY19zaXplLCBibG9ja3NpemUpO1xuJiM0MztcdGlmIChkZXNjX3BvcyBcdTAwM2MgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpIHtcbiYjNDM7XHRcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnJvciA9IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIGRlc2Nfc2l6ZSwgZGVzY19wb3MpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRlc2Nfc2l6ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvcihcbiYjNDM7XHRzdHJ1Y3QgZmlsZVx0XHQqZmlsZSxcbiYjNDM7XHRjb25zdCB2b2lkXHRcdCpkZXNjLFxuJiM0MztcdHUzMlx0XHRcdGRlc2Nfc2l6ZSxcbiYjNDM7XHR1NjRcdFx0XHRtZXJrbGVfdHJlZV9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0aW50XHRcdFx0ZXJyb3I7XG4mIzQzO1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koaW5vZGUpO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRibGtzaXplID0gaXAtXHUwMDNlaV9tb3VudC1cdTAwM2VtX3NiLnNiX2Jsb2Nrc2l6ZTtcbiYjNDM7XHR1NjRcdFx0XHR0cmVlX2xhc3RfYmxvY2sgPVxuJiM0MztcdFx0XHR4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSAmIzQzOyBtZXJrbGVfdHJlZV9zaXplO1xuJiM0MztcdHU2NFx0XHRcdGRlc2NfcG9zID1cbiYjNDM7XHRcdFx0cm91bmRfdXAodHJlZV9sYXN0X2Jsb2NrLCBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR04pO1xuJiM0MztcdHU2NFx0XHRcdGRlc2NfZW5kID0gZGVzY19wb3MgJiM0MzsgZGVzY19zaXplO1xuJiM0MztcdF9fYmUzMlx0XHRcdGRlc2Nfc2l6ZV9kaXNrID0gY3B1X3RvX2JlMzIoZGVzY19zaXplKTtcbiYjNDM7XHR1NjRcdFx0XHRkZXNjX3NpemVfcG9zID1cbiYjNDM7XHRcdFx0cm91bmRfdXAoZGVzY19lbmQgJiM0Mzsgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSwgYmxrc2l6ZSkgLVxuJiM0MztcdFx0XHRzaXplb2YoZGVzY19zaXplX2Rpc2spO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IGlvbWFwX2ZzdmVyaXR5X3dyaXRlKGZpbGUsIGRlc2Nfc2l6ZV9wb3MsIHNpemVvZihfX2JlMzIpLFxuJiM0MztcdFx0XHQoY29uc3Qgdm9pZCAqKVx1MDAyNmRlc2Nfc2l6ZV9kaXNrLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb21hcF9mc3Zlcml0eV93cml0ZShmaWxlLCBkZXNjX3BvcywgZGVzY19zaXplLCBkZXNjLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxuJiM0MztcdFx0XHRcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVHJ5IHRvIHJlbW92ZSBhbGwgdGhlIGZzdmVyaXR5IG1ldGFkYXRhIGFmdGVyIGEgZmFpbGVkIGVuYWJsZW1lbnQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3hmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoXG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmc190cmFuc1x0KnRwO1xuJiM0MztcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4mIzQzO1x0aW50XHRcdFx0ZXJyb3I7XG4mIzQzO1xuJiM0MztcdGVycm9yID0geGZzX3RyYW5zX2FsbG9jKG1wLCBcdTAwMjZNX1JFUyhtcCktXHUwMDNldHJfaXRydW5jYXRlLCAwLCAwLCAwLCBcdTAwMjZ0cCk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHR4ZnNfaWxvY2soaXAsIFhGU19NTUFQTE9DS19FWENMIHwgWEZTX0lMT0NLX0VYQ0wpO1xuJiM0MztcdHRydW5jYXRlX2lub2RlX3BhZ2VzKFZGU19JKGlwKS1cdTAwM2VpX21hcHBpbmcsIFhGU19JU0laRShpcCkpO1xuJiM0MztcdHhmc190cmFuc19pam9pbih0cCwgaXAsIDApO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIHJlbW92ZSBwb3N0IEVPRiBkYXRhLCBubyBuZWVkIHRvIHVwZGF0ZSBpX3NpemUgYXMgZnN2ZXJpdHlcbiYjNDM7XHQgKiBkaWRuJiMzOTt0IG1vdmUgaV9zaXplIGluIHRoZSBmaXJzdCBwbGFjZVxuJiM0MztcdCAqL1xuJiM0MztcdGVycm9yID0geGZzX2l0cnVuY2F0ZV9leHRlbnRzKFx1MDAyNnRwLCBpcCwgWEZTX0RBVEFfRk9SSywgWEZTX0lTSVpFKGlwKSk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBlcnJfY2FuY2VsO1xuJiM0MztcbiYjNDM7XHRlcnJvciA9IHhmc190cmFuc19jb21taXQodHApO1xuJiM0MztcdHhmc19pdW5sb2NrKGlwLCBYRlNfTU1BUExPQ0tfRVhDTCB8IFhGU19JTE9DS19FWENMKTtcbiYjNDM7XHRyZXR1cm4gZXJyb3I7XG4mIzQzO2Vycl9jYW5jZWw6XG4mIzQzO1x0eGZzX3RyYW5zX2NhbmNlbCh0cCk7XG4mIzQzO1x0eGZzX2l1bmxvY2soaXAsIFhGU19NTUFQTE9DS19FWENMIHwgWEZTX0lMT0NLX0VYQ0wpO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbihcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAsXG4mIzQzO1x0bG9mZl90XHRcdFx0c3RhcnQsXG4mIzQzO1x0bG9mZl90XHRcdFx0ZW5kKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHhmc19tb3VudFx0Km1wID0gaXAtXHUwMDNlaV9tb3VudDtcbiYjNDM7XHRzdHJ1Y3QgeGZzX3RyYW5zXHQqdHA7XG4mIzQzO1x0eGZzX2ZpbGVvZmZfdFx0XHRvZmZzZXRfZnNiID0gWEZTX0JfVE9fRlNCVChtcCwgc3RhcnQpO1xuJiM0MztcdHhmc19maWxlb2ZmX3RcdFx0ZW5kX2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgZW5kKTtcbiYjNDM7XHRzdHJ1Y3QgeGZzX2JtYnRfaXJlY1x0aW1hcDtcbiYjNDM7XHRpbnRcdFx0XHRuaW1hcHM7XG4mIzQzO1x0aW50XHRcdFx0ZXJyb3IgPSAwO1xuJiM0MztcdGludFx0XHRcdGRvbmU7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChvZmZzZXRfZnNiIFx1MDAzYyBlbmRfZnNiKSB7XG4mIzQzO1x0XHRuaW1hcHMgPSAxO1xuJiM0MztcbiYjNDM7XHRcdGVycm9yID0geGZzX3RyYW5zX2FsbG9jKG1wLCBcdTAwMjZNX1JFUyhtcCktXHUwMDNldHJfd3JpdGUsIDAsIDAsIDAsIFx1MDAyNnRwKTtcbiYjNDM7XHRcdGlmIChlcnJvcilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHRcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuJiM0MztcdFx0ZXJyb3IgPSB4ZnNfYm1hcGlfcmVhZChpcCwgb2Zmc2V0X2ZzYixcbiYjNDM7XHRcdFx0XHRlbmRfZnNiIC0gb2Zmc2V0X2ZzYiwgXHUwMDI2aW1hcCwgXHUwMDI2bmltYXBzLFxuJiM0MztcdFx0XHRcdDApO1xuJiM0MztcdFx0aWYgKGVycm9yKVxuJiM0MztcdFx0XHRnb3RvIG91dF9jYW5jZWw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5pbWFwcyA9PSAwKVxuJiM0MztcdFx0XHRnb3RvIG91dF9jYW5jZWw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGltYXAuYnJfc3RhdGUgPT0gWEZTX0VYVF9VTldSSVRURU4pIHtcbiYjNDM7XHRcdFx0ZG9uZSA9IDA7XG4mIzQzO1xuJiM0MztcdFx0XHR4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHdoaWxlICghZG9uZSkge1xuJiM0MztcdFx0XHRcdGVycm9yID0geGZzX2J1bm1hcGkodHAsIGlwLCBpbWFwLmJyX3N0YXJ0b2ZmLFxuJiM0MztcdFx0XHRcdFx0XHRpbWFwLmJyX2Jsb2NrY291bnQsIDAsIDEsXG4mIzQzO1x0XHRcdFx0XHRcdFx1MDAyNmRvbmUpO1xuJiM0MztcdFx0XHRcdGlmIChlcnJvcilcbiYjNDM7XHRcdFx0XHRcdGdvdG8gb3V0X2NhbmNlbDtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0ZXJyb3IgPSB4ZnNfZGVmZXJfZmluaXNoKFx1MDAyNnRwKTtcbiYjNDM7XHRcdFx0XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRcdFx0XHRnb3RvIG91dF9jYW5jZWw7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdGVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCk7XG4mIzQzO1x0XHRcdGlmIChlcnJvcilcbiYjNDM7XHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHR4ZnNfdHJhbnNfY2FuY2VsKHRwKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4mIzQzO1xuJiM0MztcdFx0b2Zmc2V0X2ZzYiA9IGltYXAuYnJfc3RhcnRvZmYgJiM0MzsgaW1hcC5icl9ibG9ja2NvdW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycm9yO1xuJiM0MztvdXRfY2FuY2VsOlxuJiM0MztcdHhmc190cmFuc19jYW5jZWwodHApO1xuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4mIzQzO1x0cmV0dXJuIGVycm9yO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUHJlcGFyZSB0byBlbmFibGUgZnN2ZXJpdHkgYnkgY2xlYXJpbmcgb2xkIG1ldGFkYXRhLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludFxuJiM0Mzt4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlKFxuJiM0MztcdHN0cnVjdCBmaWxlXHRcdCpmaWxwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koaW5vZGUpO1xuJiM0MztcdGludFx0XHRcdGVycm9yO1xuJiM0MztcbiYjNDM7XHR4ZnNfYXNzZXJ0X2lsb2NrZWQoaXAsIFhGU19JT0xPQ0tfRVhDTCk7XG4mIzQzO1xuJiM0MztcdGlmIChJU19EQVgoaW5vZGUpIHx8IGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX0RBWClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoaW5vZGUtXHUwMDNlaV9zaXplIFx1MDAzZSBYRlNfRlNWRVJJVFlfTEFSR0VTVF9GSUxFKVxuJiM0MztcdFx0cmV0dXJuIC1FRkJJRztcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGbHVzaCBwYWdlY2FjaGUgYmVmb3JlIGJ1aWxkaW5nIE1lcmtsZSB0cmVlLiBJbm9kZSBpcyBsb2NrZWQgYW5kIG5vXG4mIzQzO1x0ICogZnVydGhlciB3cml0ZXMgd2lsbCBoYXBwZW4gdG8gdGhlIGZpbGUgZXhjZXB0IGZzdmVyaXR5IG1ldGFkYXRhXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyb3IgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0cmV0dXJuIGVycm9yO1xuJiM0MztcbiYjNDM7XHRpZiAoeGZzX2lmbGFnc190ZXN0X2FuZF9zZXQoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdGVycm9yID0geGZzX3FtX2RxYXR0YWNoKGlwKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRnb3RvIG91dF9jbGVhcjtcbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRnb3RvIG91dF9jbGVhcjtcbiYjNDM7XHRyZXR1cm4gZXJyb3I7XG4mIzQzO291dF9jbGVhcjpcbiYjNDM7XHR4ZnNfaWZsYWdzX2NsZWFyKGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTik7XG4mIzQzO1x0cmV0dXJuIGVycm9yO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDb21wbGV0ZSAob3IgZmFpbCkgdGhlIHByb2Nlc3Mgb2YgZW5hYmxpbmcgZnN2ZXJpdHkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3hmc19mc3Zlcml0eV9lbmRfZW5hYmxlKFxuJiM0MztcdHN0cnVjdCBmaWxlXHRcdCpmaWxlLFxuJiM0MztcdGNvbnN0IHZvaWRcdFx0KmRlc2MsXG4mIzQzO1x0c2l6ZV90XHRcdFx0ZGVzY19zaXplLFxuJiM0MztcdHU2NFx0XHRcdG1lcmtsZV90cmVlX3NpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbiYjNDM7XHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpbm9kZSk7XG4mIzQzO1x0c3RydWN0IHhmc19tb3VudFx0Km1wID0gaXAtXHUwMDNlaV9tb3VudDtcbiYjNDM7XHRzdHJ1Y3QgeGZzX3RyYW5zXHQqdHA7XG4mIzQzO1x0aW50XHRcdFx0ZXJyb3IgPSAwO1xuJiM0MztcdGxvZmZfdFx0XHRcdHJhbmdlX3N0YXJ0ID0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCk7XG4mIzQzO1xuJiM0MztcdHhmc19hc3NlcnRfaWxvY2tlZChpcCwgWEZTX0lPTE9DS19FWENMKTtcbiYjNDM7XG4mIzQzO1x0LyogZnMtdmVyaXR5IGZhaWxlZCwganVzdCBjbGVhbnVwICovXG4mIzQzO1x0aWYgKGRlc2MgPT0gTlVMTCkge1xuJiM0MztcdFx0ZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvcihmaWxlLCBkZXNjLCBkZXNjX3NpemUsXG4mIzQzO1x0XHRcdG1lcmtsZV90cmVlX3NpemUpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdhaXQgZm9yIE1lcmtsZSB0cmVlIGdldCB3cml0dGVuIHRvIGRpc2sgYmVmb3JlIHNldHRpbmcgb24tZGlzayBpbm9kZVxuJiM0MztcdCAqIGZsYWcgYW5kIGNsZWFyaW5nIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyb3IgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgcmFuZ2Vfc3RhcnQsXG4mIzQzO1x0XHRcdExMT05HX01BWCk7XG4mIzQzO1x0aWYgKGVycm9yKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVtb3ZlIHVud3JpdHRlbiBleHRlbnRzIGxlZnQgYnkgQ09XIHByZWFsbG9jYXRpb25zIGFuZCB3cml0ZVxuJiM0MztcdCAqIHByZWFsbG9jYXRpb24gaW4gdGhlIG1lcmtsZSB0cmVlIGhvbGVzIGFuZCBwYXN0IGRlc2NyaXB0b3JcbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnJvciA9IHhmc19mc3Zlcml0eV9jYW5jZWxfdW53cml0dGVuKGlwLCByYW5nZV9zdGFydCwgTExPTkdfTUFYKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcm9hY3RpdmVseSBkcm9wIGFueSBkZWxheWVkIGFsbG9jYXRpb25zIGluIENPVyBmb3JrLCB0aGUgZnN2ZXJpdHlcbiYjNDM7XHQgKiBmaWxlcyBhcmUgcmVhZC1vbmx5XG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHhmc19pc19jb3dfaW5vZGUoaXApKSB7XG4mIzQzO1x0XHR4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbiYjNDM7XHRcdHhmc19pZm9ya19pbml0X2NvdyhpcCk7XG4mIzQzO1x0XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuJiM0MztcdFx0eGZzX2JtYXBfcHVuY2hfZGVsYWxsb2NfcmFuZ2UoaXAsIFhGU19DT1dfRk9SSywgMCwgTExPTkdfTUFYLFxuJiM0MztcdFx0XHRcdE5VTEwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZXQgZnN2ZXJpdHkgaW5vZGUgZmxhZ1xuJiM0MztcdCAqL1xuJiM0MztcdGVycm9yID0geGZzX3RyYW5zX2FsbG9jX2lub2RlKGlwLCBcdTAwMjZNX1JFUyhtcCktXHUwMDNldHJfaWNoYW5nZSxcbiYjNDM7XHRcdFx0MCwgMCwgZmFsc2UsIFx1MDAyNnRwKTtcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbnN1cmUgdGhhdCB3ZSYjMzk7dmUgcGVyc2lzdGVkIHRoZSB2ZXJpdHkgaW5mb3JtYXRpb24gYmVmb3JlIHdlIGVuYWJsZVxuJiM0MztcdCAqIGl0IG9uIHRoZSBpbm9kZSBhbmQgdGVsbCB0aGUgY2FsbGVyIHdlIGhhdmUgc2VhbGVkIHRoZSBpbm9kZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpcC1cdTAwM2VpX2RpZmxhZ3MyIHw9IFhGU19ESUZMQUcyX1ZFUklUWTtcbiYjNDM7XG4mIzQzO1x0eGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpO1xuJiM0MztcdHhmc190cmFuc19zZXRfc3luYyh0cCk7XG4mIzQzO1xuJiM0MztcdGVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCk7XG4mIzQzO1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFlcnJvcilcbiYjNDM7XHRcdGlub2RlX3NldF9mbGFncyhpbm9kZSwgU19WRVJJVFksIFNfVkVSSVRZKTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAoZXJyb3IpIHtcbiYjNDM7XHRcdGludFx0ZXJyb3IyO1xuJiM0MztcbiYjNDM7XHRcdGVycm9yMiA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApO1xuJiM0MztcdFx0aWYgKGVycm9yMilcbiYjNDM7XHRcdFx0eGZzX2FsZXJ0KGlwLVx1MDAzZWlfbW91bnQsXG4mIzQzO1wmIzM0O2lubyAweCVsbHggZmFpbGVkIHRvIGNsZWFuIHVwIG5ldyBmc3Zlcml0eSBtZXRhZGF0YSwgZXJyICVkXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0SV9JTk8oaXApLCBlcnJvcjIpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0eGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmV0cmlldmUgYSBtZXJrbGUgdHJlZSBibG9jay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqXG4mIzQzO3hmc19mc3Zlcml0eV9yZWFkX21lcmtsZShcbiYjNDM7XHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlLFxuJiM0MztcdHBnb2ZmX3RcdFx0XHRpbmRleClcbiYjNDM7e1xuJiM0MztcdGluZGV4ICYjNDM7PSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KFhGU19JKGlub2RlKSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBnZW5lcmljX3JlYWRfbWVya2xlX3RyZWVfcGFnZShpbm9kZSwgaW5kZXgpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZXRyaWV2ZSBhIG1lcmtsZSB0cmVlIGJsb2NrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7eGZzX2ZzdmVyaXR5X3JlYWRhaGVhZF9tZXJrbGVfdHJlZShcbiYjNDM7XHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlLFxuJiM0MztcdHBnb2ZmX3RcdFx0XHRpbmRleCxcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdG5yX3BhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0aW5kZXggJiM0Mzs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoWEZTX0koaW5vZGUpKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiYjNDM7XG4mIzQzO1x0Z2VuZXJpY19yZWFkYWhlYWRfbWVya2xlX3RyZWUoaW5vZGUsIGluZGV4LCBucl9wYWdlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFdyaXRlIGEgbWVya2xlIHRyZWUgYmxvY2suXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3hmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUoXG4mIzQzO1x0c3RydWN0IGZpbGVcdFx0KmZpbGUsXG4mIzQzO1x0Y29uc3Qgdm9pZFx0XHQqYnVmLFxuJiM0MztcdHU2NFx0XHRcdHBvcyxcbiYjNDM7XHR1bnNpZ25lZCBpbnRcdFx0c2l6ZSxcbiYjNDM7XHRjb25zdCB1OFx0XHQqemVyb19kaWdlc3QsXG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdGRpZ2VzdF9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4mIzQzO1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koaW5vZGUpO1xuJiM0MztcdGxvZmZfdFx0XHRcdHBvc2l0aW9uID0gcG9zICYjNDM7XG4mIzQzO1x0XHR4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvc2l0aW9uICYjNDM7IHNpemUgXHUwMDNlIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19tYXhieXRlcylcbiYjNDM7XHRcdHJldHVybiAtRUZCSUc7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhpcyBpcyBhIGJsb2NrIGZ1bGwgb2YgaGFzaGVzIG9mIHplcm9lZCBibG9ja3MsIGRvbiYjMzk7dCBib3RoZXJcbiYjNDM7XHQgKiBzdG9yaW5nIHRoZSBibG9jay4gV2UgY2FuIHN5bnRoZXNpemUgdGhlbSBsYXRlci5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEhvd2V2ZXIsIGRvIHRoaXMgb25seSBpbiBjYXNlIE1lcmtsZSB0cmVlIGJsb2NrID09IGZzIGJsb2NrIHNpemUuXG4mIzQzO1x0ICogSW9tYXAgc3ludGhlc2l6ZXMgdGhlc2UgYmxvY2tzIGJhc2VkIG9uIGhvbGVzIGluIHRoZSBtZXJrbGUgdHJlZS4gV2VcbiYjNDM7XHQgKiB3b24mIzM5O3QgYmUgYWJsZSB0byB0ZWxsIGlmIHNvbWV0aGluZyBuZWVkIHRvIGJlIHN5bnRoZXNpemVzIGZvciB0aGVcbiYjNDM7XHQgKiByYW5nZSBpbiB0aGUgZnMgYmxvY2suIEZvciBleGFtcGxlLCBmb3IgNGsgZmlsZXN5c3RlbSBibG9ja1xuJiM0MztcdCAqXG4mIzQzO1x0ICpcdFsgMWsgfCB6ZXJvIGhhc2hlcyB8IHplcm8gaGFzaGVzIHwgMWsgXVxuJiM0MztcdCAqXG4mIzQzO1x0ICogSW9tYXAgd29uJiMzOTt0IGtub3cgYWJvdXQgdGhlc2UgZW1wdHkgYmxvY2tzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzaXplID09IGlwLVx1MDAzZWlfbW91bnQtXHUwMDNlbV9zYi5zYl9ibG9ja3NpemUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIEZpcnN0IGRpZ2VzdCBpcyB6ZXJvX2RpZ2VzdFxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0bWVtY21wKGJ1ZiwgemVyb19kaWdlc3QsIGRpZ2VzdF9zaXplKSA9PSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBFdmVyeSBkaWdlc3QgaXMgc2FtZSBhcyBwcmV2aW91cywgdGh1cyBhbGwgYXJlXG4mIzQzO1x0XHRcdCAqIHplcm9fZGlnZXN0XG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRtZW1jbXAoYnVmICYjNDM7IGRpZ2VzdF9zaXplLCBidWYsIHNpemUgLSBkaWdlc3Rfc2l6ZSkgPT0gMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9tYXBfZnN2ZXJpdHlfd3JpdGUoZmlsZSwgcG9zaXRpb24sIHNpemUsIGJ1ZixcbiYjNDM7XHRcdFx0XHUwMDI2eGZzX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX29wcyxcbiYjNDM7XHRcdFx0XHUwMDI2eGZzX2lvbWFwX3dyaXRlX29wcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHhmc19mc3Zlcml0eV9vcHMgPSB7XG4mIzQzO1x0LmJlZ2luX2VuYWJsZV92ZXJpdHlcdFx0PSB4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlLFxuJiM0MztcdC5lbmRfZW5hYmxlX3Zlcml0eVx0XHQ9IHhmc19mc3Zlcml0eV9lbmRfZW5hYmxlLFxuJiM0MztcdC5nZXRfdmVyaXR5X2Rlc2NyaXB0b3JcdFx0PSB4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3IsXG4mIzQzO1x0LnJlYWRfbWVya2xlX3RyZWVfcGFnZVx0XHQ9IHhmc19mc3Zlcml0eV9yZWFkX21lcmtsZSxcbiYjNDM7XHQucmVhZGFoZWFkX21lcmtsZV90cmVlXHRcdD0geGZzX2ZzdmVyaXR5X3JlYWRhaGVhZF9tZXJrbGVfdHJlZSxcbiYjNDM7XHQud3JpdGVfbWVya2xlX3RyZWVfYmxvY2tcdD0geGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZSxcbiYjNDM7fTtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZzdmVyaXR5LmggYi9mcy94ZnMveGZzX2ZzdmVyaXR5Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNmE5ODFlMjBhNzViYjhcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaFxuQEAgLTAsMCAmIzQzOzEsMjggQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IChDKSAyMDI2IFJlZCBIYXQsIEluYy5cbiYjNDM7ICovXG4mIzQzOyNpZm5kZWYgX19YRlNfRlNWRVJJVFlfSF9fXG4mIzQzOyNkZWZpbmUgX19YRlNfRlNWRVJJVFlfSF9fXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfcGxhdGZvcm0uaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMgeGZzX2ZzdmVyaXR5X29wcztcbiYjNDM7bG9mZl90IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xuJiM0Mztib29sIHhmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXAsIGxvZmZfdCBvZmZzZXQpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGxvZmZfdCB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKVxuJiM0Mzt7XG4mIzQzO1x0V0FSTl9PTl9PTkNFKDEpO1xuJiM0MztcdHJldHVybiBVTExPTkdfTUFYO1xuJiM0Mzt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwLFxuJiM0MztcdFx0XHRcdFx0ICAgIGxvZmZfdCBvZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7I2VuZGlmXHQvKiBDT05GSUdfRlNfVkVSSVRZICovXG4mIzQzO1xuJiM0MzsjZW5kaWZcdC8qIF9fWEZTX0ZTVkVSSVRZX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaGVhbHRoLmMgYi9mcy94ZnMveGZzX2hlYWx0aC5jXG5pbmRleCAyMzliODQzZTgzZDQyYS4uYmU2Njc2MGZiMTIwZjcgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2hlYWx0aC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2hlYWx0aC5jXG5AQCAtNjI1LDYgJiM0Mzs2MjUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvY3RsX3NpY2tfbWFwIGlub19tYXBbXSA9IHtcbiBcdHsgWEZTX1NJQ0tfSU5PX0RJUl9aQVBQRUQsXHRYRlNfQlNfU0lDS19ESVIgfSxcbiBcdHsgWEZTX1NJQ0tfSU5PX1NZTUxJTktfWkFQUEVELFx0WEZTX0JTX1NJQ0tfU1lNTElOSyB9LFxuIFx0eyBYRlNfU0lDS19JTk9fRElSVFJFRSxcdFhGU19CU19TSUNLX0RJUlRSRUUgfSxcbiYjNDM7XHR7IFhGU19TSUNLX0lOT19GU1ZFUklUWSxcdFhGU19CU19TSUNLX0ZTVkVSSVRZIH0sXG4gfTtcbiBcbiAvKiBGaWxsIG91dCBidWxrc3RhdCBoZWFsdGggaW5mby4gKi9cbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmhcbmluZGV4IDM0YzEwMzhlYmZjZGUxLi4xN2NlMDgzNTkxZjQwOCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19pbm9kZS5oXG5AQCAtNDE5LDYgJiM0Mzs0MTksMTIgQEAgc3RhdGljIGlubGluZSBib29sIHhmc19pbm9kZV9jYW5fc3dfYXRvbWljX3dyaXRlKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKVxuICAqL1xuICNkZWZpbmUgWEZTX0lSRU1BUFBJTkdcdFx0KDFVIFx1MDAzY1x1MDAzYyAxNSlcbiBcbiYjNDM7LypcbiYjNDM7ICogZnMtdmVyaXR5JiMzOTtzIE1lcmtsZSB0cmVlIGlzIHVuZGVyIGNvbnN0cnVjdGlvbi4gVGhlIGZpbGUgaXMgcmVhZC1vbmx5LCB0aGVcbiYjNDM7ICogb25seSB3cml0ZXMgaGFwcGVuaW5nIGFyZSBmb3IgdGhlIGZzdmVyaXR5IG1ldGFkYXRhLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTlx0KDFVIFx1MDAzY1x1MDAzYyAxNilcbiYjNDM7XG4gLyogQWxsIGlub2RlIHN0YXRlIGZsYWdzIHJlbGF0ZWQgdG8gaW5vZGUgcmVjbGFpbS4gKi9cbiAjZGVmaW5lIFhGU19BTExfSVJFQ0xBSU1fRkxBR1NcdChYRlNfSVJFQ0xBSU1BQkxFIHwgXFxcbiBcdFx0XHRcdCBYRlNfSVJFQ0xBSU0gfCBcXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9jdGwuYyBiL2ZzL3hmcy94ZnNfaW9jdGwuY1xuaW5kZXggMWI1MzcwMWJlYmVhMWEuLmZjNzg2MGE4YjVhYmIxIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19pb2N0bC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2lvY3RsLmNcbkBAIC00OSw2ICYjNDM7NDksNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlYXR0ci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiAvKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIHBvc2l0aXZlIGVycm9yICovXG4gaW50XG5AQCAtMTQ2Niw2ICYjNDM7MTQ2NywxOSBAQCB4ZnNfZmlsZV9pb2N0bChcbiBcdGNhc2UgWEZTX0lPQ19WRVJJRllfTUVESUE6XG4gXHRcdHJldHVybiB4ZnNfaW9jX3ZlcmlmeV9tZWRpYShmaWxwLCBhcmcpO1xuIFxuJiM0MztcdGNhc2UgRlNfSU9DX0VOQUJMRV9WRVJJVFk6XG4mIzQzO1x0XHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0cmV0dXJuIGZzdmVyaXR5X2lvY3RsX2VuYWJsZShmaWxwLCBhcmcpO1xuJiM0MztcdGNhc2UgRlNfSU9DX01FQVNVUkVfVkVSSVRZOlxuJiM0MztcdFx0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkpXG4mIzQzO1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdHJldHVybiBmc3Zlcml0eV9pb2N0bF9tZWFzdXJlKGZpbHAsIGFyZyk7XG4mIzQzO1x0Y2FzZSBGU19JT0NfUkVBRF9WRVJJVFlfTUVUQURBVEE6XG4mIzQzO1x0XHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0cmV0dXJuIGZzdmVyaXR5X2lvY3RsX3JlYWRfbWV0YWRhdGEoZmlscCwgYXJnKTtcbiYjNDM7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVOT1RUWTtcbiBcdH1cbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvbWFwLmMgYi9mcy94ZnMveGZzX2lvbWFwLmNcbmluZGV4IDIyNWMzZGU4OGQwM2IxLi5hNGQ1NjU2NjE5ODkzMSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19pb21hcC5jXG5AQCAtMzIsNiAmIzQzOzMyLDggQEBcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfcnRiaXRtYXAuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc19pY2FjaGUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc196b25lX2FsbG9jLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7eGZzX2ZzdmVyaXR5LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuICNkZWZpbmUgWEZTX0FMTE9DX0FMSUdOKG1wLCBvZmYpIFxcXG4gXHQoKChvZmYpIFx1MDAzZVx1MDAzZSBtcC1cdTAwM2VtX2FsbG9jc2l6ZV9sb2cpIFx1MDAzY1x1MDAzYyBtcC1cdTAwM2VtX2FsbG9jc2l6ZV9sb2cpXG5AQCAtODgzLDYgJiM0Mzs4ODUsOSBAQCB4ZnNfZGlyZWN0X3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBJT01BUF9BVE9NSUMpXG4gXHRcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfQVRPTUlDX0JJTztcbiBcbiYjNDM7XHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXG4mIzQzO1x0XHRpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBDT1cgd3JpdGVzIG1heSBhbGxvY2F0ZSBkZWxhbGxvYyBzcGFjZSBvciBjb252ZXJ0IHVud3JpdHRlbiBDT1dcbiBcdCAqIGV4dGVudHMsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHRha2UgdGhlIGxvY2sgZXhjbHVzaXZlbHkgaGVyZS5cbkBAIC0xNTg5LDcgJiM0MzsxNTk0LDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0bG9mZl90XHRcdFx0Y291bnQsXG4gXHR1bnNpZ25lZFx0XHRmbGFncyxcbiBcdHN0cnVjdCBpb21hcFx0XHQqaW9tYXAsXG4tXHRzdHJ1Y3QgaW9tYXBcdFx0KnNyY21hcClcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBcdFx0KnNyY21hcCxcbiYjNDM7XHR1MTZcdFx0XHRpb21hcF9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfaXRlclx0Kml0ZXIgPVxuIFx0XHRjb250YWluZXJfb2YoaW9tYXAsIHN0cnVjdCBpb21hcF9pdGVyLCBpb21hcCk7XG5AQCAtMTU5OSw3ICYjNDM7MTYwNSw2IEBAIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihcbiBcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4gXHR4ZnNfZmlsZW9mZl90XHRcdG9mZnNldF9mc2IgPSBYRlNfQl9UT19GU0JUKG1wLCBvZmZzZXQpO1xuIFx0eGZzX2ZpbGVvZmZfdFx0XHRlbmRfZnNiID0geGZzX2lvbWFwX2VuZF9mc2IobXAsIG9mZnNldCwgY291bnQpO1xuLVx0dTE2XHRcdFx0aW9tYXBfZmxhZ3MgPSBJT01BUF9GX1NIQVJFRDtcbiBcdHVuc2lnbmVkIGludFx0XHRsb2NrbW9kZSA9IFhGU19JTE9DS19FWENMO1xuIFx0eGZzX2ZpbGJsa3NfdFx0XHRjb3VudF9mc2I7XG4gXHR4ZnNfZXh0bGVuX3RcdFx0aW5kbGVuO1xuQEAgLTE2NjIsNyAmIzQzOzE2NjcsOCBAQCB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oXG4gXHRcdFx0XHRzbWFwLmJyX3N0YXJ0b2ZmICYjNDM7IHNtYXAuYnJfYmxvY2tjb3VudCk7XG4gXHRcdFx0eGZzX3RyaW1fZXh0ZW50KFx1MDAyNnNtYXAsIG9mZnNldF9mc2IsXG4gXHRcdFx0XHRcdGVuZF9mc2IgLSBvZmZzZXRfZnNiKTtcbi1cdFx0XHRlcnJvciA9IHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBzcmNtYXAsIFx1MDAyNnNtYXAsIGZsYWdzLCAwLFxuJiM0MztcdFx0XHRlcnJvciA9IHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBzcmNtYXAsIFx1MDAyNnNtYXAsIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0aW9tYXBfZmxhZ3MsXG4gXHRcdFx0XHRcdHhmc19pb21hcF9pbm9kZV9zZXF1ZW5jZShpcCwgMCkpO1xuIFx0XHRcdGlmIChlcnJvcilcbiBcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbkBAIC0xNjcyLDYgJiM0MzsxNjc4LDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0aWYgKCFpcC1cdTAwM2VpX2Nvd2ZwKVxuIFx0XHR4ZnNfaWZvcmtfaW5pdF9jb3coaXApO1xuIFxuJiM0MztcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfU0hBUkVEO1xuJiM0MztcbiBcdGlmICgheGZzX2lleHRfbG9va3VwX2V4dGVudChpcCwgaXAtXHUwMDNlaV9jb3dmcCwgb2Zmc2V0X2ZzYiwgXHUwMDI2aWN1ciwgXHUwMDI2Z290KSlcbiBcdFx0Z290LmJyX3N0YXJ0b2ZmID0gZW5kX2ZzYjtcbiBcdGlmIChnb3QuYnJfc3RhcnRvZmYgXHUwMDNjPSBvZmZzZXRfZnNiKSB7XG5AQCAtMTgwMyw5ICYjNDM7MTgxMSwxMiBAQCB4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4mIzQzO1x0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxuJiM0MztcdFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiYjNDM7XG4gXHRpZiAoeGZzX2lzX3pvbmVkX2lub2RlKGlwKSlcbiBcdFx0cmV0dXJuIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LFxuLVx0XHRcdFx0Y291bnQsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcbiYjNDM7XHRcdFx0XHRjb3VudCwgZmxhZ3MsIGlvbWFwLCBzcmNtYXAsIGlvbWFwX2ZsYWdzKTtcbiBcbiBcdC8qIHdlIGNhbiYjMzk7dCB1c2UgZGVsYXllZCBhbGxvY2F0aW9ucyB3aGVuIHVzaW5nIGV4dGVudCBzaXplIGhpbnRzICovXG4gXHRpZiAoeGZzX2dldF9leHRzel9oaW50KGlwKSlcbkBAIC0yMTkxLDEyICYjNDM7MjIwMiwxNyBAQCB4ZnNfcmVhZF9pb21hcF9iZWdpbihcbiBcdGJvb2xcdFx0XHRzaGFyZWQgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGludFx0XHRsb2NrbW9kZSA9IFhGU19JTE9DS19TSEFSRUQ7XG4gXHR1NjRcdFx0XHRzZXE7XG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdGlvbWFwX2ZsYWdzID0gMDtcbiBcbiBcdEFTU0VSVCghKGZsYWdzIFx1MDAyNiAoSU9NQVBfV1JJVEUgfCBJT01BUF9aRVJPKSkpO1xuIFxuIFx0aWYgKHhmc19pc19zaHV0ZG93bihtcCkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuJiM0MztcdGlmIChmc3Zlcml0eV9hY3RpdmUoaW5vZGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAob2Zmc2V0IFx1MDAzZT0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpKVxuJiM0MztcdFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiYjNDM7XG4gXHRlcnJvciA9IHhmc19pbG9ja19mb3JfaW9tYXAoaXAsIGZsYWdzLCBcdTAwMjZsb2NrbW9kZSk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbkBAIC0yMjEwLDggJiM0MzsyMjI2LDkgQEAgeGZzX3JlYWRfaW9tYXBfYmVnaW4oXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdHRyYWNlX3hmc19pb21hcF9mb3VuZChpcCwgb2Zmc2V0LCBsZW5ndGgsIFhGU19EQVRBX0ZPUkssIFx1MDAyNmltYXApO1xuLVx0cmV0dXJuIHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2aW1hcCwgZmxhZ3MsXG4tXHRcdFx0XHQgc2hhcmVkID8gSU9NQVBfRl9TSEFSRUQgOiAwLCBzZXEpO1xuJiM0MztcdGlvbWFwX2ZsYWdzIHw9IHNoYXJlZCA/IElPTUFQX0ZfU0hBUkVEIDogMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2aW1hcCwgZmxhZ3MsIGlvbWFwX2ZsYWdzLCBzZXEpO1xuIH1cbiBcbiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIHhmc19yZWFkX2lvbWFwX29wcyA9IHtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvcHMuYyBiL2ZzL3hmcy94ZnNfaW9wcy5jXG5pbmRleCA2MzM5ZjQ5NTZlY2IzOS4uNzA2MzdjZGNjMjk5NzIgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lvcHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19pb3BzLmNcbkBAIC0zNSw2ICYjNDM7MzUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3VyaXR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pdmVyc2lvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmllbWFwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuIC8qXG4gICogRGlyZWN0b3JpZXMgaGF2ZSBkaWZmZXJlbnQgbG9jayBvcmRlciB3LnIudC4gbW1hcF9sb2NrIGNvbXBhcmVkIHRvIHJlZ3VsYXJcbkBAIC01ODAsNiAmIzQzOzU4MSwxMCBAQCB4ZnNfcmVwb3J0X2Rpb2FsaWduKFxuIFx0c3RydWN0IGJsb2NrX2RldmljZVx0KmJkZXYgPSB0YXJnZXQtXHUwMDNlYnRfYmRldjtcbiBcbiBcdHN0YXQtXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfRElPQUxJR04gfCBTVEFUWF9ESU9fUkVBRF9BTElHTjtcbiYjNDM7XG4mIzQzO1x0aWYgKGZzdmVyaXR5X2FjdGl2ZShWRlNfSShpcCkpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdHN0YXQtXHUwMDNlZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChiZGV2KSAmIzQzOyAxO1xuIFxuIFx0LypcbkBAIC0xMzcwLDYgJiM0MzsxMzc1LDggQEAgeGZzX2lub2RlX3Nob3VsZF9lbmFibGVfZGF4KFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAoIXhmc19pbm9kZV9zdXBwb3J0c19kYXgoaXApKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX1ZFUklUWSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcdGlmICh4ZnNfaGFzX2RheF9hbHdheXMoaXAtXHUwMDNlaV9tb3VudCkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0aWYgKGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX0RBWClcbkBAIC0xMzk4LDEyICYjNDM7MTQwNSwxNSBAQCB4ZnNfZGlmbGFnc190b19pZmxhZ3MoXG4gXHRcdGZsYWdzIHw9IFNfTk9BVElNRTtcbiBcdGlmIChpbml0IFx1MDAyNlx1MDAyNiB4ZnNfaW5vZGVfc2hvdWxkX2VuYWJsZV9kYXgoaXApKVxuIFx0XHRmbGFncyB8PSBTX0RBWDtcbiYjNDM7XHRpZiAoeGZsYWdzIFx1MDAyNiBGU19YRkxBR19WRVJJVFkpXG4mIzQzO1x0XHRmbGFncyB8PSBTX1ZFUklUWTtcbiBcbiBcdC8qXG4gXHQgKiBTX0RBWCBjYW4gb25seSBiZSBzZXQgZHVyaW5nIGlub2RlIGluaXRpYWxpemF0aW9uIGFuZCBpcyBuZXZlciBzZXQgYnlcbiBcdCAqIHRoZSBWRlMsIHNvIHdlIGNhbm5vdCBtYXNrIG9mZiBTX0RBWCBpbiBpX2ZsYWdzLlxuIFx0ICovXG4tXHRpbm9kZS1cdTAwM2VpX2ZsYWdzIFx1MDAyNj0gfihTX0lNTVVUQUJMRSB8IFNfQVBQRU5EIHwgU19TWU5DIHwgU19OT0FUSU1FKTtcbiYjNDM7XHRpbm9kZS1cdTAwM2VpX2ZsYWdzIFx1MDAyNj1cbiYjNDM7XHRcdH4oU19JTU1VVEFCTEUgfCBTX0FQUEVORCB8IFNfU1lOQyB8IFNfTk9BVElNRSB8IFNfVkVSSVRZKTtcbiBcdGlub2RlLVx1MDAzZWlfZmxhZ3MgfD0gZmxhZ3M7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jIGIvZnMveGZzL3hmc19tZXNzYWdlLmNcbmluZGV4IDAyNDNlNTA5YTQ2ODkxLi40NGIxM2Q0NjA0OWM2MiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX21lc3NhZ2UuY1xuQEAgLTE0OSw2ICYjNDM7MTQ5LDEwIEBAIHhmc193YXJuX2V4cGVyaW1lbnRhbChcbiBcdFx0XHQub3BzdGF0ZVx0PSBYRlNfT1BTVEFURV9XQVJORURfTEFSUCxcbiBcdFx0XHQubmFtZVx0XHQ9IFwmIzM0O2xvZ2dlZCBleHRlbmRlZCBhdHRyaWJ1dGVzXCYjMzQ7LFxuIFx0XHR9LFxuJiM0MztcdFx0W1hGU19FWFBFUklNRU5UQUxfRlNWRVJJVFldID0ge1xuJiM0MztcdFx0XHQub3BzdGF0ZVx0PSBYRlNfT1BTVEFURV9XQVJORURfRlNWRVJJVFksXG4mIzQzO1x0XHRcdC5uYW1lXHRcdD0gXCYjMzQ7ZnN2ZXJpdHlcJiMzNDssXG4mIzQzO1x0XHR9LFxuIFx0fTtcbiBcdEFTU0VSVChmZWF0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgZmVhdCBcdTAwM2MgWEZTX0VYUEVSSU1FTlRBTF9NQVgpO1xuIFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUoZmVhdHVyZXMpICE9IFhGU19FWFBFUklNRU5UQUxfTUFYKTtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21lc3NhZ2UuaCBiL2ZzL3hmcy94ZnNfbWVzc2FnZS5oXG5pbmRleCA4MTFiODg1ZjQxYzM1YS4uMzY0ZmNjN2U0MmIwODQgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX21lc3NhZ2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19tZXNzYWdlLmhcbkBAIC05Myw2ICYjNDM7OTMsNyBAQCB2b2lkIHhmc19idWZfYWxlcnRfcmF0ZWxpbWl0ZWQoc3RydWN0IHhmc19idWYgKmJwLCBjb25zdCBjaGFyICpybG1zZyxcbiBlbnVtIHhmc19leHBlcmltZW50YWxfZmVhdCB7XG4gXHRYRlNfRVhQRVJJTUVOVEFMX1NIUklOSyxcbiBcdFhGU19FWFBFUklNRU5UQUxfTEFSUCxcbiYjNDM7XHRYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZLFxuIFxuIFx0WEZTX0VYUEVSSU1FTlRBTF9NQVgsXG4gfTtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmhcbmluZGV4IDY2YTAyZDFiOWFkN2ExLi44NzVjOWIwZjhlOTkxZiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19tb3VudC5oXG5AQCAtMzg4LDYgJiM0MzszODgsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfbW91bnQge1xuICNkZWZpbmUgWEZTX0ZFQVRfRVhDSEFOR0VfUkFOR0VcdCgxVUxMIFx1MDAzY1x1MDAzYyAyNylcdC8qIGV4Y2hhbmdlIHJhbmdlICovXG4gI2RlZmluZSBYRlNfRkVBVF9NRVRBRElSXHQoMVVMTCBcdTAwM2NcdTAwM2MgMjgpXHQvKiBtZXRhZGF0YSBkaXJlY3RvcnkgdHJlZSAqL1xuICNkZWZpbmUgWEZTX0ZFQVRfWk9ORURcdFx0KDFVTEwgXHUwMDNjXHUwMDNjIDI5KVx0Lyogem9uZWQgUlQgZGV2aWNlICovXG4mIzQzOyNkZWZpbmUgWEZTX0ZFQVRfVkVSSVRZXHRcdCgxVUxMIFx1MDAzY1x1MDAzYyAzMClcdC8qIGZzLXZlcml0eSAqL1xuIFxuIC8qIE1vdW50IGZlYXR1cmVzICovXG4gI2RlZmluZSBYRlNfRkVBVF9OT0xJRkVUSU1FXHQoMVVMTCBcdTAwM2NcdTAwM2MgNDcpXHQvKiBkaXNhYmxlIGxpZmV0aW1lIGhpbnRzICovXG5AQCAtNDQ1LDYgJiM0Mzs0NDYsNyBAQCBfX1hGU19IQVNfRkVBVChleGNoYW5nZV9yYW5nZSwgRVhDSEFOR0VfUkFOR0UpXG4gX19YRlNfSEFTX0ZFQVQobWV0YWRpciwgTUVUQURJUilcbiBfX1hGU19IQVNfRkVBVCh6b25lZCwgWk9ORUQpXG4gX19YRlNfSEFTX0ZFQVQobm9saWZldGltZSwgTk9MSUZFVElNRSlcbiYjNDM7X19YRlNfSEFTX0ZFQVQodmVyaXR5LCBWRVJJVFkpXG4gXG4gc3RhdGljIGlubGluZSBib29sIHhmc19oYXNfcnRncm91cHMoY29uc3Qgc3RydWN0IHhmc19tb3VudCAqbXApXG4ge1xuQEAgLTU4Miw2ICYjNDM7NTg0LDggQEAgX19YRlNfSEFTX0ZFQVQobm91dWlkLCBOT1VVSUQpXG4gI2RlZmluZSBYRlNfT1BTVEFURV9SRVNVTUlOR19RVU9UQU9OXHQxOFxuIC8qIChab25lZCkgR0MgaXMgaW4gcHJvZ3Jlc3MgKi9cbiAjZGVmaW5lIFhGU19PUFNUQVRFX1pPTkVHQ19SVU5OSU5HXHQyMFxuJiM0MzsvKiBLZXJuZWwgaGFzIGxvZ2dlZCBhIHdhcm5pbmcgYWJvdXQgZnN2ZXJpdHkgc3VwcG9ydCAqL1xuJiM0MzsjZGVmaW5lIFhGU19PUFNUQVRFX1dBUk5FRF9GU1ZFUklUWVx0MjFcbiBcbiAjZGVmaW5lIF9fWEZTX0lTX09QU1RBVEUobmFtZSwgTkFNRSkgXFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lzXyAjIyBuYW1lIChzdHJ1Y3QgeGZzX21vdW50ICptcCkgXFxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3N1cGVyLmMgYi9mcy94ZnMveGZzX3N1cGVyLmNcbmluZGV4IDg1MzFkNTI2ZmM0NDA5Li5hNzc3NGQyZDZiMjNmYyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19zdXBlci5jXG5AQCAtMzAsNiAmIzQzOzMwLDcgQEBcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfZmlsZXN0cmVhbS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGZzX3F1b3RhLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt4ZnNfc3lzZnMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt4ZnNfZnN2ZXJpdHkuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc19vbmRpc2suaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc19ybWFwX2l0ZW0uaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3hmc19yZWZjb3VudF9pdGVtLmhcJiMzNDtcbkBAIC0xNjg5LDYgJiM0MzsxNjkwLDkgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoXG4gXHRzYi1cdTAwM2VzX3F1b3RhX3R5cGVzID0gUVRZUEVfTUFTS19VU1IgfCBRVFlQRV9NQVNLX0dSUCB8IFFUWVBFX01BU0tfUFJKO1xuICNlbmRpZlxuIFx0c2ItXHUwMDNlc19vcCA9IFx1MDAyNnhmc19zdXBlcl9vcGVyYXRpb25zO1xuJiM0MzsjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxuJiM0MztcdHNiLVx1MDAzZXNfdm9wID0gXHUwMDI2eGZzX2ZzdmVyaXR5X29wcztcbiYjNDM7I2VuZGlmXG4gXG4gXHQvKlxuIFx0ICogRGVsYXkgbW91bnQgd29yayBpZiB0aGUgZGVidWcgaG9vayBpcyBzZXQuIFRoaXMgaXMgZGVidWdcbkBAIC0xOTQxLDYgJiM0MzsxOTQ1LDkgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoXG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gb3V0X2ZpbGVzdHJlYW1fdW5tb3VudDtcbiBcbiYjNDM7XHRpZiAoeGZzX2hhc192ZXJpdHkobXApKVxuJiM0MztcdFx0eGZzX3dhcm5fZXhwZXJpbWVudGFsKG1wLCBYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZKTtcbiYjNDM7XG4gXHRyb290ID0gaWdyYWIoVkZTX0kobXAtXHUwMDNlbV9yb290aXApKTtcbiBcdGlmICghcm9vdCkge1xuIFx0XHRlcnJvciA9IC1FTk9FTlQ7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oIGIvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oXG5pbmRleCA2YzQ2N2RlZDk3NTFmYy4uZjk0MzMzMzJjMjc0YmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnN2ZXJpdHkuaFxuQEAgLTEyNCw2ICYjNDM7MTI0LDggQEAgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMge1xuIFx0ICogQGJ1ZjogdGhlIE1lcmtsZSB0cmVlIGJsb2NrIHRvIHdyaXRlXG4gXHQgKiBAcG9zOiB0aGUgcG9zaXRpb24gb2YgdGhlIGJsb2NrIGluIHRoZSBNZXJrbGUgdHJlZSAoaW4gYnl0ZXMpXG4gXHQgKiBAc2l6ZTogdGhlIE1lcmtsZSB0cmVlIGJsb2NrIHNpemUgKGluIGJ5dGVzKVxuJiM0MztcdCAqIEB6ZXJvX2RpZ2VzdDogdGhlIGhhc2ggb2YgdGhlIGFsbC16ZXJvZXMgYmxvY2tcbiYjNDM7XHQgKiBAZGlnZXN0X3NpemU6IHNpemUgb2YgemVyb19kaWdlc3QsIGluIGJ5dGVzXG4gXHQgKlxuIFx0ICogVGhpcyBpcyBvbmx5IGNhbGxlZCBiZXR3ZWVuIC1cdTAwM2ViZWdpbl9lbmFibGVfdmVyaXR5KCkgYW5kXG4gXHQgKiAtXHUwMDNlZW5kX2VuYWJsZV92ZXJpdHkoKS5cbkBAIC0xMzEsNyAmIzQzOzEzMyw5IEBAIHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHtcbiBcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZVxuIFx0ICovXG4gXHRpbnQgKCp3cml0ZV9tZXJrbGVfdHJlZV9ibG9jaykoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1Zixcbi1cdFx0XHRcdCAgICAgICB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxuJiM0MztcdFx0XHRcdCAgICAgICBjb25zdCB1OCAqemVyb19kaWdlc3QsXG4mIzQzO1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBkaWdlc3Rfc2l6ZSk7XG4gfTtcbiBcbiAjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxuQEAgLTMxNywxMCAmIzQzOzMyMSwxNCBAQCBzdGF0aWMgaW5saW5lIGludCBmc3Zlcml0eV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO2ludCBmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8oc3RydWN0IGlub2RlICppbm9kZSk7XG4mIzQzO1xuIHZvaWQgZnN2ZXJpdHlfY2xlYW51cF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiBzdHJ1Y3QgcGFnZSAqZ2VuZXJpY19yZWFkX21lcmtsZV90cmVlX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCk7XG4gdm9pZCBnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4mIzQzO2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbiYjNDM7XHRcdFx0ICAgIGxvZmZfdCBwb3MpO1xuIFxuICNlbmRpZlx0LyogX0xJTlVYX0ZTVkVSSVRZX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmggYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbmluZGV4IDU2YjQzZDU5NGU2ZTI5Li4zNmZjOTMxMzgyYTg3NiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pb21hcC5oXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbV90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrZGV2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mb2xpb19iYXRjaC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3Rfc29ydC5oXHUwMDNlXG4gXG4gc3RydWN0IGFkZHJlc3Nfc3BhY2U7XG4gc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbztcbkBAIC00ODgsNyAmIzQzOzQ4OSw5IEBAIHN0cnVjdCBpb21hcF9pb2VuZCAqaW9tYXBfc3BsaXRfaW9lbmQoc3RydWN0IGlvbWFwX2lvZW5kICppb2VuZCxcbiB2b2lkIGlvbWFwX2ZpbmlzaF9pb2VuZHMoc3RydWN0IGlvbWFwX2lvZW5kICppb2VuZCwgaW50IGVycm9yKTtcbiB2b2lkIGlvbWFwX2lvZW5kX3RyeV9tZXJnZShzdHJ1Y3QgaW9tYXBfaW9lbmQgKmlvZW5kLFxuIFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICptb3JlX2lvZW5kcyk7XG4tdm9pZCBpb21hcF9zb3J0X2lvZW5kcyhzdHJ1Y3QgbGlzdF9oZWFkICppb2VuZF9saXN0KTtcbiYjNDM7aW50IGlvbWFwX2lvZW5kX2NvbXBhcmUodm9pZCAqcHJpdiwgY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqYSxcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmIpO1xuJiM0Mzt2b2lkIGlvbWFwX3NvcnRfaW9lbmRzKHN0cnVjdCBsaXN0X2hlYWQgKmlvZW5kX2xpc3QsIGxpc3RfY21wX2Z1bmNfdCBjbXApO1xuIHNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGxvZmZfdCBwb3MsIGxvZmZfdCBlbmRfcG9zLCB1bnNpZ25lZCBpbnQgZGlydHlfbGVuKTtcbiBpbnQgaW9tYXBfaW9lbmRfd3JpdGViYWNrX3N1Ym1pdChzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLCBpbnQgZXJyb3IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDEzOjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGU19WRVJJVFkmIzM0OywKICAgICYjMzQ7WEZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3ImIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9yZWFkYWhlYWRfbWVya2xlX3RyZWUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9jYW5jZWxfdW53cml0dGVuJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yJiMzNDssCiAgICAmIzM0O3hjaGtfaW5vZGVfc2V0dXBfdmVyaXR5JiMzNDssCiAgICAmIzM0O3hjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbiYjMzQ7LAogICAgJiMzNDt4cmVwX2lub2RlX3Zlcml0eSYjMzQ7LAogICAgJiMzNDt4ZnNfcmVhZF9pb2VuZF9jb21wYXJlJiMzNDssCiAgICAmIzM0O3hmc19lbmRfaW9lbmRfcmVhZCYjMzQ7LAogICAgJiMzNDt4ZnNfaW9tYXBfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDtmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8mIzM0OywKICAgICYjMzQ7ZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBmcy12ZXJpdHkgc3VwcG9ydCBmb3IgdGhlIFhGUyBmaWxlc3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZpbGUgYGZzL3hmcy94ZnNfZnN2ZXJpdHkuY2Agd2l0aCB0aGUgY29yZSBsb2dpYywgbW9kaWZpZXMgWEZTIEkvTyBwYXRocywgYW5kIGludGVncmF0ZXMgd2l0aCB0aGUgZ2VuZXJpYyBmcy12ZXJpdHkgbGF5ZXIuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZDFiM2M1ZGQ4YWE1ZDgwMzIyM2NkZmVkYWNjMDJiNjRiMjZjZWQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjIgMTM6NTg6NDAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9hdHRyLmMgYi9mcy9hdHRyLmMKaW5kZXggNGY0MzdmYWJiN2YwZjUuLjcxODg4YWM5MDNjMjdkIDEwMDY0NAotLS0gYS9mcy9hdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYXR0ci5jCkBAIC0xNzYsNyAmIzQzOzE3Niw3IEBAIGludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJICogY292ZXJlZCBieSB0aGUgb3Blbi10aW1lIGNoZWNrIGJlY2F1c2Ugc3lzX3RydW5jYXRlKCkgdGFrZXMgYQogCQkgKiBwYXRoLCBub3QgYW4gb3BlbiBmaWxlLgogCQkgKi8KLQkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX1ZFUklUWSkgJmFtcDsmYW1wOyBJU19WRVJJVFkoaW5vZGUpKQomIzQzOwkJaWYgKElTX1ZFUklUWShpbm9kZSkpCiAJCQlyZXR1cm4gLUVQRVJNOwogCiAJCWVycm9yID0gaW5vZGVfbmV3c2l6ZV9vayhpbm9kZSwgYXR0ci0mZ3Q7aWFfc2l6ZSk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuYwppbmRleCAyNzI1OThmNmFlNzdhZi4uZGU3MjljNDRkNmQyNTEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnRyZnMvaW5vZGUuYwpAQCAtODA0MCw3ICYjNDM7ODA0MCw2IEBAIHN0YXRpYyBpbnQgYnRyZnNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShwYXRoLSZndDtkZW50cnkpOwogCXUzMiBibG9ja3NpemUgPSBidHJmc19zYihpbm9kZS0mZ3Q7aV9zYiktJmd0O3NlY3RvcnNpemU7CiAJdTMyIGJpX2ZsYWdzID0gQlRSRlNfSShpbm9kZSktJmd0O2ZsYWdzOwotCXUzMiBiaV9yb19mbGFncyA9IEJUUkZTX0koaW5vZGUpLSZndDtyb19mbGFnczsKIAogCXN0YXQtJmd0O3Jlc3VsdF9tYXNrIHw9IFNUQVRYX0JUSU1FOwogCXN0YXQtJmd0O2J0aW1lLnR2X3NlYyA9IEJUUkZTX0koaW5vZGUpLSZndDtpX290aW1lX3NlYzsKQEAgLTgwNTMsOCAmIzQzOzgwNTIsNiBAQCBzdGF0aWMgaW50IGJ0cmZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCXN0YXQtJmd0O2F0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9JTU1VVEFCTEU7CiAJaWYgKGJpX2ZsYWdzICZhbXA7IEJUUkZTX0lOT0RFX05PRFVNUCkKIAkJc3RhdC0mZ3Q7YXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX05PRFVNUDsKLQlpZiAoYmlfcm9fZmxhZ3MgJmFtcDsgQlRSRlNfSU5PREVfUk9fVkVSSVRZKQotCQlzdGF0LSZndDthdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfVkVSSVRZOwogCiAJc3RhdC0mZ3Q7YXR0cmlidXRlc19tYXNrIHw9IChTVEFUWF9BVFRSX0FQUEVORCB8CiAJCQkJICBTVEFUWF9BVFRSX0NPTVBSRVNTRUQgfApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdmVyaXR5LmMgYi9mcy9idHJmcy92ZXJpdHkuYwppbmRleCA5ODMzNjVhNzM1NDE2OC4uYmQ3OWUzNDNhZTIzN2YgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3Zlcml0eS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2J0cmZzL3Zlcml0eS5jCkBAIC03NzMsMTEgJiM0Mzs3NzMsMTUgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpidHJmc19yZWFkX21lcmtsZV90cmVlX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwKICAqIEBidWY6CU1lcmtsZSB0cmVlIGJsb2NrIHRvIHdyaXRlCiAgKiBAcG9zOgl0aGUgcG9zaXRpb24gb2YgdGhlIGJsb2NrIGluIHRoZSBNZXJrbGUgdHJlZSAoaW4gYnl0ZXMpCiAgKiBAc2l6ZToJdGhlIE1lcmtsZSB0cmVlIGJsb2NrIHNpemUgKGluIGJ5dGVzKQomIzQzOyAqIEB6ZXJvX2RpZ2VzdDoJdGhlIGhhc2ggb2YgdGhlIGFsbC16ZXJvZXMgYmxvY2sKJiM0MzsgKiBAZGlnZXN0X3NpemU6CXNpemUgb2YgemVyb19kaWdlc3QsIGluIGJ5dGVzCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlCiAgKi8KIHN0YXRpYyBpbnQgYnRyZnNfd3JpdGVfbWVya2xlX3RyZWVfYmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1ZiwKLQkJCQkJIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKQomIzQzOwkJCQkJIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLAomIzQzOwkJCQkJIGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCwKJiM0MzsJCQkJCSB1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiAJbG9mZl90IG1lcmtsZV9wb3MgPSBtZXJrbGVfZmlsZV9wb3MoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IGNlOTk4MDdjNWY1YjJjLi45OWZhN2EyODk1MWY1ZSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtNjI1MCwxNSAmIzQzOzYyNTAsMTIgQEAgaW50IGV4dDRfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsCiAJCXN0YXQtJmd0O2F0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9JTU1VVEFCTEU7CiAJaWYgKGZsYWdzICZhbXA7IEVYVDRfTk9EVU1QX0ZMKQogCQlzdGF0LSZndDthdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfTk9EVU1QOwotCWlmIChmbGFncyAmYW1wOyBFWFQ0X1ZFUklUWV9GTCkKLQkJc3RhdC0mZ3Q7YXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX1ZFUklUWTsKIAogCXN0YXQtJmd0O2F0dHJpYnV0ZXNfbWFzayB8PSAoU1RBVFhfQVRUUl9BUFBFTkQgfAogCQkJCSAgU1RBVFhfQVRUUl9DT01QUkVTU0VEIHwKIAkJCQkgIFNUQVRYX0FUVFJfRU5DUllQVEVEIHwKIAkJCQkgIFNUQVRYX0FUVFJfSU1NVVRBQkxFIHwKLQkJCQkgIFNUQVRYX0FUVFJfTk9EVU1QIHwKLQkJCQkgIFNUQVRYX0FUVFJfVkVSSVRZKTsKJiM0MzsJCQkJICBTVEFUWF9BVFRSX05PRFVNUCk7CiAKIAlnZW5lcmljX2ZpbGxhdHRyKGlkbWFwLCByZXF1ZXN0X21hc2ssIGlub2RlLCBzdGF0KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvdmVyaXR5LmMgYi9mcy9leHQ0L3Zlcml0eS5jCmluZGV4IGNhNjFkYTUzZjMxM2ZhLi5hYzVjMTMzZjU1MjkyNSAxMDA2NDQKLS0tIGEvZnMvZXh0NC92ZXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3Zlcml0eS5jCkBAIC0zNCwzMiAmIzQzOzM0LDYgQEAgc3RhdGljIGlubGluZSBsb2ZmX3QgZXh0NF92ZXJpdHlfbWV0YWRhdGFfcG9zKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJcmV0dXJuIHJvdW5kX3VwKGlub2RlLSZndDtpX3NpemUsIDY1NTM2KTsKIH0KIAotLyoKLSAqIFJlYWQgc29tZSB2ZXJpdHkgbWV0YWRhdGEgZnJvbSB0aGUgaW5vZGUuICBfX3Zmc19yZWFkKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZQotICogd2UgbmVlZCB0byByZWFkIGJleW9uZCBpX3NpemUuCi0gKi8KLXN0YXRpYyBpbnQgcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCi0JCQkgIGxvZmZfdCBwb3MpCi17Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCXN0cnVjdCBmb2xpbyAqZm9saW87Ci0JCXNpemVfdCBuOwotCi0JCWZvbGlvID0gcmVhZF9tYXBwaW5nX2ZvbGlvKGlub2RlLSZndDtpX21hcHBpbmcsIHBvcyAmZ3Q7Jmd0OyBQQUdFX1NISUZULAotCQkJCQkgTlVMTCk7Ci0JCWlmIChJU19FUlIoZm9saW8pKQotCQkJcmV0dXJuIFBUUl9FUlIoZm9saW8pOwotCi0JCW4gPSBtZW1jcHlfZnJvbV9maWxlX2ZvbGlvKGJ1ZiwgZm9saW8sIHBvcywgY291bnQpOwotCQlmb2xpb19wdXQoZm9saW8pOwotCi0JCWJ1ZiAmIzQzOz0gbjsKLQkJcG9zICYjNDM7PSBuOwotCQljb3VudCAtPSBuOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFdyaXRlIHNvbWUgdmVyaXR5IG1ldGFkYXRhIHRvIHRoZSBpbm9kZSBmb3IgRlNfSU9DX0VOQUJMRV9WRVJJVFkuCiAgKiBrZXJuZWxfd3JpdGUoKSBjYW4mIzM5O3QgYmUgdXNlZCBiZWNhdXNlIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgcmVhZG9ubHkuCkBAIC0zMTEsOCAmIzQzOzI4NSw4IEBAIHN0YXRpYyBpbnQgZXh0NF9nZXRfdmVyaXR5X2Rlc2NyaXB0b3JfbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwKIAkJZ290byBiYWQ7CiAJZGVzY19zaXplX3BvcyAtPSBzaXplb2YoZGVzY19zaXplX2Rpc2spOwogCi0JZXJyID0gcGFnZWNhY2hlX3JlYWQoaW5vZGUsICZhbXA7ZGVzY19zaXplX2Rpc2ssIHNpemVvZihkZXNjX3NpemVfZGlzayksCi0JCQkgICAgIGRlc2Nfc2l6ZV9wb3MpOwomIzQzOwllcnIgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgJmFtcDtkZXNjX3NpemVfZGlzaywKJiM0MzsJCQkJICAgICAgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSwgZGVzY19zaXplX3Bvcyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAlkZXNjX3NpemUgPSBsZTMyX3RvX2NwdShkZXNjX3NpemVfZGlzayk7CkBAIC0zNTIsNyAmIzQzOzMyNiw3IEBAIHN0YXRpYyBpbnQgZXh0NF9nZXRfdmVyaXR5X2Rlc2NyaXB0b3Ioc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLAogCWlmIChidWZfc2l6ZSkgewogCQlpZiAoZGVzY19zaXplICZndDsgYnVmX3NpemUpCiAJCQlyZXR1cm4gLUVSQU5HRTsKLQkJZXJyID0gcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7CiYjNDM7CQllcnIgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBkZXNjX3NpemUsIGRlc2NfcG9zKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMzc0LDcgJiM0MzszNDgsOSBAQCBzdGF0aWMgdm9pZCBleHQ0X3JlYWRhaGVhZF9tZXJrbGVfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogfQogCiBzdGF0aWMgaW50IGV4dDRfd3JpdGVfbWVya2xlX3RyZWVfYmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1ZiwKLQkJCQkJdTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUpCiYjNDM7CQkJCQl1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSwKJiM0MzsJCQkJCWNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCwKJiM0MzsJCQkJCXVuc2lnbmVkIGludCBkaWdlc3Rfc2l6ZSkKIHsKIAlwb3MgJiM0Mzs9IGV4dDRfdmVyaXR5X21ldGFkYXRhX3BvcyhmaWxlX2lub2RlKGZpbGUpKTsKIApkaWZmIC0tZ2l0IGEvZnMvZjJmcy9maWxlLmMgYi9mcy9mMmZzL2ZpbGUuYwppbmRleCA0YjUyYzU2ZDcxZjA3Zi4uOWI1MzFhMDE2ZWQ0ZDkgMTAwNjQ0Ci0tLSBhL2ZzL2YyZnMvZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2YyZnMvZmlsZS5jCkBAIC0xMDI0LDE1ICYjNDM7MTAyNCwxMiBAQCBpbnQgZjJmc19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwKIAkJc3RhdC0mZ3Q7YXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0lNTVVUQUJMRTsKIAlpZiAoZmxhZ3MgJmFtcDsgRjJGU19OT0RVTVBfRkwpCiAJCXN0YXQtJmd0O2F0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9OT0RVTVA7Ci0JaWYgKElTX1ZFUklUWShpbm9kZSkpCi0JCXN0YXQtJmd0O2F0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9WRVJJVFk7CiAKIAlzdGF0LSZndDthdHRyaWJ1dGVzX21hc2sgfD0gKFNUQVRYX0FUVFJfQ09NUFJFU1NFRCB8CiAJCQkJICBTVEFUWF9BVFRSX0FQUEVORCB8CiAJCQkJICBTVEFUWF9BVFRSX0VOQ1JZUFRFRCB8CiAJCQkJICBTVEFUWF9BVFRSX0lNTVVUQUJMRSB8Ci0JCQkJICBTVEFUWF9BVFRSX05PRFVNUCB8Ci0JCQkJICBTVEFUWF9BVFRSX1ZFUklUWSk7CiYjNDM7CQkJCSAgU1RBVFhfQVRUUl9OT0RVTVApOwogCiAJZ2VuZXJpY19maWxsYXR0cihpZG1hcCwgcmVxdWVzdF9tYXNrLCBpbm9kZSwgc3RhdCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2YyZnMvdmVyaXR5LmMgYi9mcy9mMmZzL3Zlcml0eS5jCmluZGV4IDM5ZjQ4MjUxNTQ0NTJhLi5mM2E0NjE3NjU2ZGI5YiAxMDA2NDQKLS0tIGEvZnMvZjJmcy92ZXJpdHkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9mMmZzL3Zlcml0eS5jCkBAIC0zNywzNCAmIzQzOzM3LDYgQEAgc3RhdGljIGlubGluZSBsb2ZmX3QgZjJmc192ZXJpdHlfbWV0YWRhdGFfcG9zKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJcmV0dXJuIHJvdW5kX3VwKGlub2RlLSZndDtpX3NpemUsIDY1NTM2KTsKIH0KIAotLyoKLSAqIFJlYWQgc29tZSB2ZXJpdHkgbWV0YWRhdGEgZnJvbSB0aGUgaW5vZGUuICBfX3Zmc19yZWFkKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZQotICogd2UgbmVlZCB0byByZWFkIGJleW9uZCBpX3NpemUuCi0gKi8KLXN0YXRpYyBpbnQgcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCi0JCQkgIGxvZmZfdCBwb3MpCi17Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCXNpemVfdCBuID0gbWluX3Qoc2l6ZV90LCBjb3VudCwKLQkJCQkgUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2UocG9zKSk7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShpbm9kZS0mZ3Q7aV9tYXBwaW5nLCBwb3MgJmd0OyZndDsgUEFHRV9TSElGVCwKLQkJCQkJIE5VTEwpOwotCQlpZiAoSVNfRVJSKHBhZ2UpKQotCQkJcmV0dXJuIFBUUl9FUlIocGFnZSk7Ci0KLQkJbWVtY3B5X2Zyb21fcGFnZShidWYsIHBhZ2UsIG9mZnNldF9pbl9wYWdlKHBvcyksIG4pOwotCi0JCXB1dF9wYWdlKHBhZ2UpOwotCi0JCWJ1ZiAmIzQzOz0gbjsKLQkJcG9zICYjNDM7PSBuOwotCQljb3VudCAtPSBuOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFdyaXRlIHNvbWUgdmVyaXR5IG1ldGFkYXRhIHRvIHRoZSBpbm9kZSBmb3IgRlNfSU9DX0VOQUJMRV9WRVJJVFkuCiAgKiBrZXJuZWxfd3JpdGUoKSBjYW4mIzM5O3QgYmUgdXNlZCBiZWNhdXNlIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgcmVhZG9ubHkuCkBAIC0yNTAsNyAmIzQzOzIyMiw3IEBAIHN0YXRpYyBpbnQgZjJmc19nZXRfdmVyaXR5X2Rlc2NyaXB0b3Ioc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLAogCWlmIChidWZfc2l6ZSkgewogCQlpZiAoc2l6ZSAmZ3Q7IGJ1Zl9zaXplKQogCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCXJlcyA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIHNpemUsIHBvcyk7CiYjNDM7CQlyZXMgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBzaXplLCBwb3MpOwogCQlpZiAocmVzKQogCQkJcmV0dXJuIHJlczsKIAl9CkBAIC0yNzIsNyAmIzQzOzI0NCw5IEBAIHN0YXRpYyB2b2lkIGYyZnNfcmVhZGFoZWFkX21lcmtsZV90cmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiB9CiAKIHN0YXRpYyBpbnQgZjJmc193cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLAotCQkJCQl1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSkKJiM0MzsJCQkJCXU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLAomIzQzOwkJCQkJY29uc3QgdTggKnplcm9fZGlnZXN0LAomIzQzOwkJCQkJdW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKQogewogCXBvcyAmIzQzOz0gZjJmc192ZXJpdHlfbWV0YWRhdGFfcG9zKGZpbGVfaW5vZGUoZmlsZSkpOwogCmRpZmYgLS1naXQgYS9mcy9maWxlX2F0dHIuYyBiL2ZzL2ZpbGVfYXR0ci5jCmluZGV4IGJmYjAwZDI1NmRkNTYwLi41NDI0ZWM0ZTM5NDkzZiAxMDA2NDQKLS0tIGEvZnMvZmlsZV9hdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmlsZV9hdHRyLmMKQEAgLTI0Niw2ICYjNDM7MjQ2LDExIEBAIHN0YXRpYyBpbnQgZmlsZWF0dHJfc2V0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwKIAlpZiAoZmEtJmd0O2ZzeF9jb3dleHRzaXplID09IDApCiAJCWZhLSZndDtmc3hfeGZsYWdzICZhbXA7PSB+RlNfWEZMQUdfQ09XRVhUU0laRTsKIAomIzQzOwkvKiBDYW4gbm90IGVuYWJsZSBEQVggb24gZnN2ZXJpdHkgZmlsZSAqLwomIzQzOwlpZiAoKG9sZF9tYS0mZ3Q7ZnN4X3hmbGFncyAmYW1wOyBGU19YRkxBR19WRVJJVFkpICZhbXA7JmFtcDsKJiM0MzsJCQlmYS0mZ3Q7ZnN4X3hmbGFncyAmYW1wOyBGU19YRkxBR19EQVgpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvaW9tYXAvaW9lbmQuYyBiL2ZzL2lvbWFwL2lvZW5kLmMKaW5kZXggMDU2NTMyODc2NGMxNzUuLjhlNDZiN2YxYWE2YTk3IDEwMDY0NAotLS0gYS9mcy9pb21hcC9pb2VuZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2lvZW5kLmMKQEAgLTQsNyAmIzQzOzQsNiBAQAogICovCiAjaW5jbHVkZSAmbHQ7bGludXgvYmlvLWludGVncml0eS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvbGlzdF9zb3J0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3dyaXRlYmFjay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZzZXJyb3IuaCZndDsKQEAgLTQyNSw3ICYjNDM7NDI0LDcgQEAgdm9pZCBpb21hcF9pb2VuZF90cnlfbWVyZ2Uoc3RydWN0IGlvbWFwX2lvZW5kICppb2VuZCwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2lvZW5kX3RyeV9tZXJnZSk7CiAKLXN0YXRpYyBpbnQgaW9tYXBfaW9lbmRfY29tcGFyZSh2b2lkICpwcml2LCBjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICphLAomIzQzO2ludCBpb21hcF9pb2VuZF9jb21wYXJlKHZvaWQgKnByaXYsIGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmEsCiAJCWNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmIpCiB7CiAJc3RydWN0IGlvbWFwX2lvZW5kICppYSA9IGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3QgaW9tYXBfaW9lbmQsIGlvX2xpc3QpOwpAQCAtNDM3LDEwICYjNDM7NDM2LDExIEBAIHN0YXRpYyBpbnQgaW9tYXBfaW9lbmRfY29tcGFyZSh2b2lkICpwcml2LCBjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICphLAogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pb2VuZF9jb21wYXJlKTsKIAotdm9pZCBpb21hcF9zb3J0X2lvZW5kcyhzdHJ1Y3QgbGlzdF9oZWFkICppb2VuZF9saXN0KQomIzQzO3ZvaWQgaW9tYXBfc29ydF9pb2VuZHMoc3RydWN0IGxpc3RfaGVhZCAqaW9lbmRfbGlzdCwgbGlzdF9jbXBfZnVuY190IGNtcCkKIHsKLQlsaXN0X3NvcnQoTlVMTCwgaW9lbmRfbGlzdCwgaW9tYXBfaW9lbmRfY29tcGFyZSk7CiYjNDM7CWxpc3Rfc29ydChOVUxMLCBpb2VuZF9saXN0LCBjbXApOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfc29ydF9pb2VuZHMpOwogCmRpZmYgLS1naXQgYS9mcy9zdGF0LmMgYi9mcy9zdGF0LmMKaW5kZXggODk5MDk3NDZiZWQxOWUuLmFlMTI5OWJkNzQzNjZjIDEwMDY0NAotLS0gYS9mcy9zdGF0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3RhdC5jCkBAIC0yMDMsOCAmIzQzOzIwMywxMiBAQCBpbnQgdmZzX2dldGF0dHJfbm9zZWMoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBrc3RhdCAqc3RhdCwKIAlpZiAoSVNfREFYKGlub2RlKSkKIAkJc3RhdC0mZ3Q7YXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0RBWDsKIAomIzQzOwlpZiAoSVNfVkVSSVRZKGlub2RlKSkKJiM0MzsJCXN0YXQtJmd0O2F0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9WRVJJVFk7CiYjNDM7CiAJc3RhdC0mZ3Q7YXR0cmlidXRlc19tYXNrIHw9IChTVEFUWF9BVFRSX0FVVE9NT1VOVCB8Ci0JCQkJICBTVEFUWF9BVFRSX0RBWCk7CiYjNDM7CQkJCSAgU1RBVFhfQVRUUl9EQVggfAomIzQzOwkJCQkgIFNUQVRYX0FUVFJfVkVSSVRZKTsKIAogCWlkbWFwID0gbW50X2lkbWFwKHBhdGgtJmd0O21udCk7CiAJaWYgKGlub2RlLSZndDtpX29wLSZndDtnZXRhdHRyKSB7CmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvZW5hYmxlLmMgYi9mcy92ZXJpdHkvZW5hYmxlLmMKaW5kZXggNDJkZmVkMWNlMGNlNjYuLmFkNGZmNzFkN2RkOTViIDEwMDY0NAotLS0gYS9mcy92ZXJpdHkvZW5hYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmVyaXR5L2VuYWJsZS5jCkBAIC01MCw3ICYjNDM7NTAsOSBAQCBzdGF0aWMgaW50IHdyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB1OCAqYnVmLAogCWludCBlcnI7CiAKIAllcnIgPSBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c192b3AtJmd0O3dyaXRlX21lcmtsZV90cmVlX2Jsb2NrKGZpbGUsIGJ1ZiwgcG9zLAotCQkJCQkJCSAgcGFyYW1zLSZndDtibG9ja19zaXplKTsKJiM0MzsJCQkJCQkJICBwYXJhbXMtJmd0O2Jsb2NrX3NpemUsCiYjNDM7CQkJCQkJCSAgcGFyYW1zLSZndDt6ZXJvX2RpZ2VzdCwKJiM0MzsJCQkJCQkJICBwYXJhbXMtJmd0O2RpZ2VzdF9zaXplKTsKIAlpZiAoZXJyKQogCQlmc3Zlcml0eV9lcnIoaW5vZGUsICYjMzQ7RXJyb3IgJWQgd3JpdGluZyBNZXJrbGUgdHJlZSBibG9jayAlbHUmIzM0OywKIAkJCSAgICAgZXJyLCBpbmRleCk7CmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvb3Blbi5jIGIvZnMvdmVyaXR5L29wZW4uYwppbmRleCBkMGM1NmE3ZmFhM2JiMS4uODc1ZTg4NTBjY2JhY2UgMTAwNjQ0Ci0tLSBhL2ZzL3Zlcml0eS9vcGVuLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvdmVyaXR5L29wZW4uYwpAQCAtMzQ3LDcgJiM0MzszNDcsMjQgQEAgaW50IGZzdmVyaXR5X2dldF9kZXNjcmlwdG9yKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7LyoqCiYjNDM7ICogZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKCkgLSBjYWNoZSB2ZXJpdHkgaW5mbyBpZiBpdCYjMzk7cyBub3QgYWxyZWFkeSBjYWNoZWQKJiM0MzsgKiBAaW5vZGU6IHRoZSBpbm9kZSBmb3Igd2hpY2ggdmVyaXR5IGluZm8gc2hvdWxkIGJlIGNhY2hlZAomIzQzOyAqCiYjNDM7ICogRW5zdXJlIHRoaXMgaW5vZGUgaGFzIHZlcml0eSBpbmZvIGF0dGFjaGVkIHRvIGl0LCBpdCYjMzk7cyBhc3N1bWVkIHRoZSBpbm9kZQomIzQzOyAqIGFscmVhZHkgaGFzIGZzdmVyaXR5IGVuYWJsZWQuIFJlYWQgZnN2ZXJpdHkgZGVzY3JpcHRvciBhbmQgY3JlYXRlcyB2ZXJpdHkKJiM0MzsgKiBiYXNlZCBvbiB0aGF0LgomIzQzOyAqCiYjNDM7ICogVGhpcyBuZWVkcyB0byBiZSBjYWxsZWQgYXQgbGVhc3Qgb25jZSBiZWZvcmUgYW55IG9mIHRoZSBpbm9kZSYjMzk7cyBkYXRhCiYjNDM7ICogY2FuIGJlIHZlcmlmaWVkIChhbmQgdGh1cyByZWFkIGF0IGFsbCkgb3IgdGhlIGlub2RlJiMzOTtzIGZzdmVyaXR5IGRpZ2VzdAomIzQzOyAqIHJldHJpZXZlZC4gIGZzdmVyaXR5X2ZpbGVfb3BlbigpIGNhbGxzIHRoaXMgYWxyZWFkeSwgd2hpY2ggaGFuZGxlcwomIzQzOyAqIG5vcm1hbCBmaWxlIGFjY2Vzc2VzLiAgSWYgYSBmaWxlc3lzdGVtIGRvZXMgYW55IGludGVybmFsIChpLmUuIG5vdAomIzQzOyAqIGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUgZGVzY3JpcHRvcikgcmVhZHMgb2YgdGhlIGZpbGUmIzM5O3MgZGF0YSBvcgomIzQzOyAqIGZzdmVyaXR5IGRpZ2VzdCwgaXQgbXVzdCBjYWxsIHRoaXMgZXhwbGljaXRseSBiZWZvcmUgZG9pbmcgc28uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmUKJiM0MzsgKi8KJiM0MztpbnQgZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpID0gZnN2ZXJpdHlfZ2V0X2luZm8oaW5vZGUpLCAqZm91bmQ7CiAJc3RydWN0IGZzdmVyaXR5X2Rlc2NyaXB0b3IgKmRlc2M7CkBAIC0zODMsMTIgJiM0Mzs0MDAsMTMgQEAgc3RhdGljIGludCBlbnN1cmVfdmVyaXR5X2luZm8oc3RydWN0IGlub2RlICppbm9kZSkKIAlrZnJlZShkZXNjKTsKIAlyZXR1cm4gZXJyOwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyk7CiAKIGludCBfX2ZzdmVyaXR5X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlpZiAoZmlscC0mZ3Q7Zl9tb2RlICZhbXA7IEZNT0RFX1dSSVRFKQogCQlyZXR1cm4gLUVQRVJNOwotCXJldHVybiBlbnN1cmVfdmVyaXR5X2luZm8oaW5vZGUpOwomIzQzOwlyZXR1cm4gZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKGlub2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fZnN2ZXJpdHlfZmlsZV9vcGVuKTsKIApkaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jIGIvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jCmluZGV4IDk5ZjVmNTNlZWE5ODVmLi4yNzBhYmQ2NTJlNDhjNiAxMDA2NDQKLS0tIGEvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zlcml0eS9wYWdlY2FjaGUuYwpAQCAtNjgsMTMgJiM0Mzs2OCw2NCBAQCBFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZSk7CiB2b2lkIGZzdmVyaXR5X2ZpbGxfemVyb2hhc2goc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbiwKIAkJCSAgICAgIHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSkKIHsKLQlzaXplX3Qgb2ZmID0gb2Zmc2V0OwomIzQzOwl2b2lkICp2YWRkcjsKJiM0MzsJdm9pZCAqdG87CiYjNDM7CXNpemVfdCBjaHVuazsKIAogCVdBUk5fT05fT05DRSghSVNfQUxJR05FRChvZmZzZXQsIHZpLSZndDt0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSkpOwogCVdBUk5fT05fT05DRSghSVNfQUxJR05FRChsZW4sIHZpLSZndDt0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSkpOwomIzQzOwlXQVJOX09OX09OQ0Uob2Zmc2V0ICYjNDM7IGxlbiAmZ3Q7IGZvbGlvX3NpemUoZm9saW8pKTsKIAotCWZvciAoOyBvZmYgJmx0OyAob2Zmc2V0ICYjNDM7IGxlbik7IG9mZiAmIzQzOz0gdmktJmd0O3RyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKQotCQltZW1jcHlfdG9fZm9saW8oZm9saW8sIG9mZiwgdmktJmd0O3RyZWVfcGFyYW1zLnplcm9fZGlnZXN0LAomIzQzOwlkbyB7CiYjNDM7CQl2YWRkciA9IGttYXBfbG9jYWxfZm9saW8oZm9saW8sIG9mZnNldCk7CiYjNDM7CQljaHVuayA9IGxlbjsKJiM0MzsJCXRvID0gdmFkZHI7CiYjNDM7CiYjNDM7CQlpZiAoZm9saW9fdGVzdF9wYXJ0aWFsX2ttYXAoZm9saW8pICZhbXA7JmFtcDsKJiM0MzsJCSAgICBjaHVuayAmZ3Q7IFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKG9mZnNldCkpCiYjNDM7CQkJY2h1bmsgPSBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpOwomIzQzOwkJZm9yICg7IHRvICZsdDsgKHZhZGRyICYjNDM7IGNodW5rKTsgdG8gJiM0Mzs9IHZpLSZndDt0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSkKJiM0MzsJCQltZW1jcHkodG8sIHZpLSZndDt0cmVlX3BhcmFtcy56ZXJvX2RpZ2VzdCwKIAkJCQl2aS0mZ3Q7dHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpOwomIzQzOwkJa3VubWFwX2xvY2FsKHZhZGRyKTsKJiM0MzsKJiM0MzsJCW9mZnNldCAmIzQzOz0gY2h1bms7CiYjNDM7CQlsZW4gLT0gY2h1bms7CiYjNDM7CX0gd2hpbGUgKGxlbiAmZ3Q7IDApOwomIzQzOwomIzQzOwlmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZnN2ZXJpdHlfZmlsbF96ZXJvaGFzaCk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoKSAtIHJlYWQgcGFnZSBhbmQgY29weSBkYXRhIHRvIGJ1ZmZlcgomIzQzOyAqIEBpbm9kZToJY29weSBmcm9tIHRoaXMgaW5vZGUmIzM5O3MgYWRkcmVzcyBzcGFjZQomIzQzOyAqIEBidWY6CWJ1ZmZlciB0byBjb3B5IHRvCiYjNDM7ICogQGNvdW50OgludW1iZXIgb2YgYnl0ZXMgdG8gY29weQomIzQzOyAqIEBwb3M6CXBvc2l0aW9uIG9mIHRoZSBmb2xpbyB0byBjb3B5IGZyb20KJiM0MzsgKgomIzQzOyAqIFJlYWQgc29tZSB2ZXJpdHkgbWV0YWRhdGEgZnJvbSB0aGUgaW5vZGUuICBfX3Zmc19yZWFkKCkgY2FuJiMzOTt0IGJlIHVzZWQgYmVjYXVzZQomIzQzOyAqIHdlIG5lZWQgdG8gcmVhZCBiZXlvbmQgaV9zaXplLgomIzQzOyAqLwomIzQzO2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwKJiM0MzsJCQkgIGxvZmZfdCBwb3MpCiYjNDM7ewomIzQzOwl3aGlsZSAoY291bnQpIHsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CQlzaXplX3QgbjsKJiM0MzsKJiM0MzsJCWZvbGlvID0gcmVhZF9tYXBwaW5nX2ZvbGlvKGlub2RlLSZndDtpX21hcHBpbmcsIHBvcyAmZ3Q7Jmd0OyBQQUdFX1NISUZULAomIzQzOwkJCQkJIE5VTEwpOwomIzQzOwkJaWYgKElTX0VSUihmb2xpbykpCiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIoZm9saW8pOwomIzQzOwomIzQzOwkJbiA9IG1lbWNweV9mcm9tX2ZpbGVfZm9saW8oYnVmLCBmb2xpbywgcG9zLCBjb3VudCk7CiYjNDM7CQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwomIzQzOwkJYnVmICYjNDM7PSBuOwomIzQzOwkJcG9zICYjNDM7PSBuOwomIzQzOwkJY291bnQgLT0gbjsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQpOwpkaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L3ZlcmlmeS5jIGIvZnMvdmVyaXR5L3ZlcmlmeS5jCmluZGV4IDQwMDRhMWQ0Mjg3NTFmLi5kYjhjMzUwMjM0YmI3MSAxMDA2NDQKLS0tIGEvZnMvdmVyaXR5L3ZlcmlmeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Zlcml0eS92ZXJpZnkuYwpAQCAtOSw2ICYjNDM7OSw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9iaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnNlcnJvci5oJmd0OwogCiAjZGVmaW5lIEZTX1ZFUklUWV9NQVhfUEVORElOR19CTE9DS1MgMgogCkBAIC0yMDUsNiAmIzQzOzIwNiw4IEBAIHN0YXRpYyBib29sIHZlcmlmeV9kYXRhX2Jsb2NrKHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSwKIAkJaWYgKG1lbWNocl9pbnYoZGJsb2NrLSZndDtkYXRhLCAwLCBwYXJhbXMtJmd0O2Jsb2NrX3NpemUpKSB7CiAJCQlmc3Zlcml0eV9lcnIoaW5vZGUsCiAJCQkJICAgICAmIzM0O0ZJTEUgQ09SUlVQVEVEISAgRGF0YSBwYXN0IEVPRiBpcyBub3QgemVyb2VkJiMzNDspOwomIzQzOwkJCWZzZXJyb3JfcmVwb3J0X2RhdGFfbG9zdChpbm9kZSwgZGF0YV9wb3MsCiYjNDM7CQkJCQkJIHBhcmFtcy0mZ3Q7YmxvY2tfc2l6ZSwgR0ZQX05PRlMpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCXJldHVybiB0cnVlOwpAQCAtMzEyLDYgJiM0MzszMTUsNyBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlfZGF0YV9ibG9jayhzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmksCiAJCWRhdGFfcG9zLCBsZXZlbCAtIDEsIHBhcmFtcy0mZ3Q7aGFzaF9hbGctJmd0O25hbWUsIGhzaXplLCB3YW50X2hhc2gsCiAJCXBhcmFtcy0mZ3Q7aGFzaF9hbGctJmd0O25hbWUsIGhzaXplLAogCQlsZXZlbCA9PSAwID8gZGJsb2NrLSZndDtyZWFsX2hhc2ggOiByZWFsX2hhc2gpOwomIzQzOwlmc2Vycm9yX3JlcG9ydF9kYXRhX2xvc3QoaW5vZGUsIGRhdGFfcG9zLCBwYXJhbXMtJmd0O2Jsb2NrX3NpemUsIEdGUF9OT0ZTKTsKIGVycm9yOgogCWZvciAoOyBsZXZlbCAmZ3Q7IDA7IGxldmVsLS0pIHsKIAkJa3VubWFwX2xvY2FsKGhibG9ja3NbbGV2ZWwgLSAxXS5hZGRyKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9NYWtlZmlsZSBiL2ZzL3hmcy9NYWtlZmlsZQppbmRleCA5ZjcxMzNlMDI1NzY4ZC4uMzhiN2Y1MWU1ZDg0MDUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvTWFrZWZpbGUKQEAgLTE0OSw2ICYjNDM7MTQ5LDcgQEAgeGZzLSQoQ09ORklHX1hGU19QT1NJWF9BQ0wpCSYjNDM7PSB4ZnNfYWNsLm8KIHhmcy0kKENPTkZJR19TWVNDVEwpCQkmIzQzOz0geGZzX3N5c2N0bC5vCiB4ZnMtJChDT05GSUdfQ09NUEFUKQkJJiM0Mzs9IHhmc19pb2N0bDMyLm8KIHhmcy0kKENPTkZJR19FWFBPUlRGU19CTE9DS19PUFMpCSYjNDM7PSB4ZnNfcG5mcy5vCiYjNDM7eGZzLSQoQ09ORklHX0ZTX1ZFUklUWSkJCSYjNDM7PSB4ZnNfZnN2ZXJpdHkubwogCiAjIG5vdGlmeSBmYWlsdXJlCiBpZmVxICgkKENPTkZJR19NRU1PUllfRkFJTFVSRSkseSkKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuYwppbmRleCBkNjRkZWZlZGE2NDVlZC4uY2M0OGY2ZTIwZTgwMDAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMKQEAgLTQxLDYgJiM0Mzs0MSw4IEBACiAjaW5jbHVkZSAmIzM0O3hmc19pbm9kZV91dGlsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfcnRncm91cC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX3pvbmVfYWxsb2MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfZnN2ZXJpdHkuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzdmVyaXR5LmgmZ3Q7CiAKIHN0cnVjdCBrbWVtX2NhY2hlCQkqeGZzX2JtYXBfaW50ZW50X2NhY2hlOwogCkBAIC00NDAyLDYgJiM0Mzs0NDA0LDEwIEBAIHhmc19ibWFwaV9jb252ZXJ0X29uZV9kZWxhbGxvYygKIAkgKiB0aGUgZXh0ZW50LiAgSnVzdCByZXR1cm4gdGhlIHJlYWwgZXh0ZW50IGF0IHRoaXMgb2Zmc2V0LgogCSAqLwogCWlmICghaXNudWxsc3RhcnRibG9jayhibWEuZ290LmJyX3N0YXJ0YmxvY2spKSB7CiYjNDM7CQlpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikgJmFtcDsmYW1wOwomIzQzOwkJICAgIFhGU19GU0JfVE9fQihtcCwgYm1hLmdvdC5icl9zdGFydG9mZikgJmd0Oz0KJiM0MzsJCQkgICAgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpCiYjNDM7CQkJZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTsKIAkJeGZzX2JtYnRfdG9faW9tYXAoaXAsIGlvbWFwLCAmYW1wO2JtYS5nb3QsIDAsIGZsYWdzLAogCQkJCXhmc19pb21hcF9pbm9kZV9zZXF1ZW5jZShpcCwgZmxhZ3MpKTsKIAkJaWYgKHNlcSkKQEAgLTQ0NDksNiAmIzQzOzQ0NTUsMTEgQEAgeGZzX2JtYXBpX2NvbnZlcnRfb25lX2RlbGFsbG9jKAogCVhGU19TVEFUU19BREQobXAsIHhzX3hzdHJhdF9ieXRlcywgWEZTX0ZTQl9UT19CKG1wLCBibWEubGVuZ3RoKSk7CiAJWEZTX1NUQVRTX0lOQyhtcCwgeHNfeHN0cmF0X3F1aWNrKTsKIAomIzQzOwlpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikgJmFtcDsmYW1wOwomIzQzOwkgICAgWEZTX0ZTQl9UT19CKG1wLCBibWEuZ290LmJyX3N0YXJ0b2ZmKSAmZ3Q7PQomIzQzOwkJICAgIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKQomIzQzOwkJZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTsKJiM0MzsKIAlBU1NFUlQoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSk7CiAJeGZzX2JtYnRfdG9faW9tYXAoaXAsIGlvbWFwLCAmYW1wO2JtYS5nb3QsIDAsIGZsYWdzLAogCQkJCXhmc19pb21hcF9pbm9kZV9zZXF1ZW5jZShpcCwgZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oIGIvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmgKaW5kZXggZGQwZWQwNDZmYmU5YzkuLjhiZTFiMTAxYjE5Njk5IDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaApAQCAtMzc0LDExICYjNDM7Mzc0LDEzIEBAIHhmc19zYl9oYXNfY29tcGF0X2ZlYXR1cmUoCiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9STUFQQlQgICAoMSAmbHQ7Jmx0OyAxKQkJLyogcmV2ZXJzZSBtYXAgYnRyZWUgKi8KICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JFRkxJTksgICgxICZsdDsmbHQ7IDIpCQkvKiByZWZsaW5rZWQgZmlsZXMgKi8KICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0lOT0JUQ05UICgxICZsdDsmbHQ7IDMpCQkvKiBpbm9idCBibG9jayBjb3VudHMgKi8KJiM0MzsjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9WRVJJVFkgICAoMSAmbHQ7Jmx0OyA0KQkJLyogZnMtdmVyaXR5ICovCiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9BTEwgXAogCQkoWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0ZJTk9CVCB8IFwKIAkJIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9STUFQQlQgfCBcCi0JCSBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOS3wgXAotCQkgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0lOT0JUQ05UKQomIzQzOwkJIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9SRUZMSU5LIHwgXAomIzQzOwkJIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVCB8IFwKJiM0MzsJCSBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZKQogI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfVU5LTk9XTgl+WEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0FMTAogc3RhdGljIGlubGluZSBib29sCiB4ZnNfc2JfaGFzX3JvX2NvbXBhdF9mZWF0dXJlKApAQCAtMTIzMCwxNiAmIzQzOzEyMzIsMjEgQEAgc3RhdGljIGlubGluZSB2b2lkIHhmc19kaW5vZGVfcHV0X3JkZXYoc3RydWN0IHhmc19kaW5vZGUgKmRpcCwgeGZzX2Rldl90IHJkZXYpCiAgKi8KICNkZWZpbmUgWEZTX0RJRkxBRzJfTUVUQURBVEFfQklUCTUKIAomIzQzOy8qIGlub2RlcyBzZWFsZWQgd2l0aCBmcy12ZXJpdHkgKi8KJiM0MzsjZGVmaW5lIFhGU19ESUZMQUcyX1ZFUklUWV9CSVQJCTYKJiM0MzsKICNkZWZpbmUgWEZTX0RJRkxBRzJfREFYCQkoMVVMTCAmbHQ7Jmx0OyBYRlNfRElGTEFHMl9EQVhfQklUKQogI2RlZmluZSBYRlNfRElGTEFHMl9SRUZMSU5LCSgxVUxMICZsdDsmbHQ7IFhGU19ESUZMQUcyX1JFRkxJTktfQklUKQogI2RlZmluZSBYRlNfRElGTEFHMl9DT1dFWFRTSVpFCSgxVUxMICZsdDsmbHQ7IFhGU19ESUZMQUcyX0NPV0VYVFNJWkVfQklUKQogI2RlZmluZSBYRlNfRElGTEFHMl9CSUdUSU1FCSgxVUxMICZsdDsmbHQ7IFhGU19ESUZMQUcyX0JJR1RJTUVfQklUKQogI2RlZmluZSBYRlNfRElGTEFHMl9OUkVYVDY0CSgxVUxMICZsdDsmbHQ7IFhGU19ESUZMQUcyX05SRVhUNjRfQklUKQogI2RlZmluZSBYRlNfRElGTEFHMl9NRVRBREFUQQkoMVVMTCAmbHQ7Jmx0OyBYRlNfRElGTEFHMl9NRVRBREFUQV9CSVQpCiYjNDM7I2RlZmluZSBYRlNfRElGTEFHMl9WRVJJVFkJKDFVTEwgJmx0OyZsdDsgWEZTX0RJRkxBRzJfVkVSSVRZX0JJVCkKIAogI2RlZmluZSBYRlNfRElGTEFHMl9BTlkgXAogCShYRlNfRElGTEFHMl9EQVggfCBYRlNfRElGTEFHMl9SRUZMSU5LIHwgWEZTX0RJRkxBRzJfQ09XRVhUU0laRSB8IFwKLQkgWEZTX0RJRkxBRzJfQklHVElNRSB8IFhGU19ESUZMQUcyX05SRVhUNjQgfCBYRlNfRElGTEFHMl9NRVRBREFUQSkKJiM0MzsJIFhGU19ESUZMQUcyX0JJR1RJTUUgfCBYRlNfRElGTEFHMl9OUkVYVDY0IHwgWEZTX0RJRkxBRzJfTUVUQURBVEEgfCBcCiYjNDM7CSBYRlNfRElGTEFHMl9WRVJJVFkpCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB4ZnNfZGlub2RlX2hhc19iaWd0aW1lKGNvbnN0IHN0cnVjdCB4ZnNfZGlub2RlICpkaXApCiB7CkBAIC0yMDI3LDQgJiM0MzsyMDM0LDI2IEBAIHN0cnVjdCB4ZnNfYWNsIHsKICNkZWZpbmUgU0dJX0FDTF9GSUxFX1NJWkUJKHNpemVvZihTR0lfQUNMX0ZJTEUpLTEpCiAjZGVmaW5lIFNHSV9BQ0xfREVGQVVMVF9TSVpFCShzaXplb2YoU0dJX0FDTF9ERUZBVUxUKS0xKQogCiYjNDM7LyoKJiM0MzsgKiBBdCBtYXhpbXVtIG9mIDggbGV2ZWxzIHdpdGggMTI4IGhhc2hlcyBwZXIgYmxvY2sgKDMyIGJ5dGVzIFNIQS0yNTYpIG1heGltdW0KJiM0MzsgKiB0cmVlIHNpemUgaXMgKCgxMjheOCDiiJIgMSkvKDEyOCDiiJIgMSkpID0gNTY3KjEwXjEyIGJsb2Nrcy4gVGhpcyBzaG91bGQgZml0IGluCiYjNDM7ICogNTMgYml0cyBhZGRyZXNzIHNwYWNlLgomIzQzOyAqCiYjNDM7ICogQXQgdGhpcyBNZXJrbGUgdHJlZSBzaXplIHdlIGNhbiBjb3ZlciAyOTVFQiBsYXJnZSBmaWxlLiBUaGlzIGlzIG11Y2ggbGFyZ2VyCiYjNDM7ICogdGhhbiB0aGUgY3VycmVudGx5IHN1cHBvcnRlZCBmaWxlIHNpemUuCiYjNDM7ICoKJiM0MzsgKiBGb3Igc2hhNTEyIHRoZSBsYXJnZXN0IGZpbGUgd2UgY2FuIGNvdmVyIGVuZHMgYXQgMSAmbHQ7Jmx0OyA1MCBvZmZzZXQsIHRoaXMgaXMgYWxzbwomIzQzOyAqIGdvb2QuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBYRlNfRlNWRVJJVFlfTEFSR0VTVF9GSUxFCSgobG9mZl90KTFVTEwgJmx0OyZsdDsgNTMpCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBbGlnbm1lbnQgb2YgdGhlIGZzdmVyaXR5IG1ldGFkYXRhIHBsYWNlbWVudC4gVGhpcyBpcyBsYXJnZXN0IHN1cHBvcnRlZCBQQUdFCiYjNDM7ICogU0laRSBmb3IgZnN2ZXJpdHkuIFRoaXMgaXMgdXNlZCB0byBzcGFjZSBvdXQgZGF0YSBhbmQgbWV0YWRhdGEgaW4gcGFnZSBjYWNoZS4KJiM0MzsgKiBUaGUgc3BhY2luZyBpcyBuZWNlc3NhcnkgZm9yIG5vbi1leHBvc3VyZSBvZiBtZXRhZGF0YSB0byB1c2Vyc3BhY2UgYW5kCiYjNDM7ICogY29ycmVjdCBtZXJrbGUgdHJlZSBzeW50aGVzaXMgaW4gdGhlIGlvbWFwLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgWEZTX0ZTVkVSSVRZX1NUQVJUX0FMSUdOCSg2NTUzNikKJiM0MzsKJiM0MzsKICNlbmRpZiAvKiBfX1hGU19GT1JNQVRfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19mcy5oIGIvZnMveGZzL2xpYnhmcy94ZnNfZnMuaAppbmRleCAxODVmMDlmMzI3YzAwYy4uODRkNjJiNzUwNmE5YWQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfZnMuaApAQCAtMjUwLDYgJiM0MzsyNTAsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfZnNvcF9yZXNibGtzIHsKICNkZWZpbmUgWEZTX0ZTT1BfR0VPTV9GTEFHU19QQVJFTlQJKDEgJmx0OyZsdDsgMjUpIC8qIGxpbnV4IHBhcmVudCBwb2ludGVycyAqLwogI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX01FVEFESVIJKDEgJmx0OyZsdDsgMjYpIC8qIG1ldGFkYXRhIGRpcmVjdG9yaWVzICovCiAjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfWk9ORUQJKDEgJmx0OyZsdDsgMjcpIC8qIHpvbmVkIHJ0IGRldmljZSAqLwomIzQzOyNkZWZpbmUgWEZTX0ZTT1BfR0VPTV9GTEFHU19WRVJJVFkJKDEgJmx0OyZsdDsgMjgpIC8qIGZzLXZlcml0eSAqLwogCiAvKgogICogTWluaW11bSBhbmQgbWF4aW11bSBzaXplcyBuZWVkIGZvciBncm93dGggY2hlY2tzLgpAQCAtNDIxLDYgJiM0Mzs0MjIsNyBAQCBzdHJ1Y3QgeGZzX2J1bGtzdGF0IHsKICNkZWZpbmUgWEZTX0JTX1NJQ0tfU1lNTElOSwkoMSAmbHQ7Jmx0OyA2KSAgLyogc3ltYm9saWMgbGluayByZW1vdGUgdGFyZ2V0ICovCiAjZGVmaW5lIFhGU19CU19TSUNLX1BBUkVOVAkoMSAmbHQ7Jmx0OyA3KSAgLyogcGFyZW50IHBvaW50ZXJzICovCiAjZGVmaW5lIFhGU19CU19TSUNLX0RJUlRSRUUJKDEgJmx0OyZsdDsgOCkgIC8qIGRpcmVjdG9yeSB0cmVlIHN0cnVjdHVyZSAqLwomIzQzOyNkZWZpbmUgWEZTX0JTX1NJQ0tfRlNWRVJJVFkJKDEgJmx0OyZsdDsgOSkgIC8qIGZzdmVyaXR5IG1ldGFkYXRhICovCiAKIC8qCiAgKiBQcm9qZWN0IHF1b3RhIGlkIGhlbHBlcnMgKHByZXZpb3VzbHkgcHJvamlkIHdhcyAxNmJpdCBvbmx5CmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaCBiL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oCmluZGV4IDFkNDVjZjU3ODllODY0Li45MzJiNDQ3MTkwZGE3NiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmgKQEAgLTEwNCw2ICYjNDM7MTA0LDcgQEAgc3RydWN0IHhmc19ydGdyb3VwOwogLyogRG9uJiMzOTt0IHByb3BhZ2F0ZSBzaWNrIHN0YXR1cyB0byBhZyBoZWFsdGggc3VtbWFyeSBkdXJpbmcgaW5hY3RpdmF0aW9uICovCiAjZGVmaW5lIFhGU19TSUNLX0lOT19GT1JHRVQJKDEgJmx0OyZsdDsgMTIpCiAjZGVmaW5lIFhGU19TSUNLX0lOT19ESVJUUkVFCSgxICZsdDsmbHQ7IDEzKSAgLyogZGlyZWN0b3J5IHRyZWUgc3RydWN0dXJlICovCiYjNDM7I2RlZmluZSBYRlNfU0lDS19JTk9fRlNWRVJJVFkJKDEgJmx0OyZsdDsgMTQpICAvKiBmc3Zlcml0eSBtZXRhZGF0YSAqLwogCiAvKiBQcmltYXJ5IGV2aWRlbmNlIG9mIGhlYWx0aCBwcm9ibGVtcyBpbiBhIGdpdmVuIGdyb3VwLiAqLwogI2RlZmluZSBYRlNfU0lDS19GU19QUklNQVJZCShYRlNfU0lDS19GU19DT1VOVEVSUyB8IFwKQEAgLTE0MCw3ICYjNDM7MTQxLDggQEAgc3RydWN0IHhmc19ydGdyb3VwOwogCQkJCSBYRlNfU0lDS19JTk9fWEFUVFIgfCBcCiAJCQkJIFhGU19TSUNLX0lOT19TWU1MSU5LIHwgXAogCQkJCSBYRlNfU0lDS19JTk9fUEFSRU5UIHwgXAotCQkJCSBYRlNfU0lDS19JTk9fRElSVFJFRSkKJiM0MzsJCQkJIFhGU19TSUNLX0lOT19ESVJUUkVFIHwgXAomIzQzOwkJCQkgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKQogCiAjZGVmaW5lIFhGU19TSUNLX0lOT19aQVBQRUQJKFhGU19TSUNLX0lOT19CTUJURF9aQVBQRUQgfCBcCiAJCQkJIFhGU19TSUNLX0lOT19CTUJUQV9aQVBQRUQgfCBcCmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX2J1Zi5jCmluZGV4IDMzNmVmODQzZjJmZTRmLi5iZDgwYTE5ZjJlMDkyOSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmMKQEAgLTc2MCw2ICYjNDM7NzYwLDE0IEBAIHhmc19kaW5vZGVfdmVyaWZ5KAogCSAgICAheGZzX2hhc19ydHJlZmxpbmsobXApKQogCQlyZXR1cm4gX190aGlzX2FkZHJlc3M7CiAKJiM0MzsJLyogb25seSByZWd1bGFyIGZpbGVzIGNhbiBoYXZlIGZzdmVyaXR5ICovCiYjNDM7CWlmIChmbGFnczIgJmFtcDsgWEZTX0RJRkxBRzJfVkVSSVRZKSB7CiYjNDM7CQlpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSkKJiM0MzsJCQlyZXR1cm4gX190aGlzX2FkZHJlc3M7CiYjNDM7CQlpZiAoIVNfSVNSRUcobW9kZSkpCiYjNDM7CQkJcmV0dXJuIF9fdGhpc19hZGRyZXNzOwomIzQzOwl9CiYjNDM7CiAJaWYgKHhmc19oYXNfem9uZWQobXApICZhbXA7JmFtcDsKIAkgICAgZGlwLSZndDtkaV9tZXRhdHlwZSA9PSBjcHVfdG9fYmUxNihYRlNfTUVUQUZJTEVfUlRSTUFQKSkgewogCQlpZiAoYmUzMl90b19jcHUoZGlwLSZndDtkaV91c2VkX2Jsb2NrcykgJmd0OyBtcC0mZ3Q7bV9zYi5zYl9yZ2V4dGVudHMpCmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmMgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmMKaW5kZXggMjU4YWMzZDBkNDg2ZTYuLjVhNTE2YmQzMWMzMTc1IDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfdXRpbC5jCkBAIC03NCw3ICYjNDM7NzQsOCBAQCB4ZnNfZmxhZ3MyZGlmbGFnczIoCiAJdWludDY0X3QJCWRpX2ZsYWdzMiA9CiAJCShpcC0mZ3Q7aV9kaWZsYWdzMiAmYW1wOyAoWEZTX0RJRkxBRzJfUkVGTElOSyB8CiAJCQkJICAgWEZTX0RJRkxBRzJfQklHVElNRSB8Ci0JCQkJICAgWEZTX0RJRkxBRzJfTlJFWFQ2NCkpOwomIzQzOwkJCQkgICBYRlNfRElGTEFHMl9OUkVYVDY0IHwKJiM0MzsJCQkJICAgWEZTX0RJRkxBRzJfVkVSSVRZKSk7CiAKIAlpZiAoeGZsYWdzICZhbXA7IEZTX1hGTEFHX0RBWCkKIAkJZGlfZmxhZ3MyIHw9IFhGU19ESUZMQUcyX0RBWDsKQEAgLTEyNiw2ICYjNDM7MTI3LDggQEAgeGZzX2lwMnhmbGFncygKIAkJCWZsYWdzIHw9IEZTX1hGTEFHX0RBWDsKIAkJaWYgKGlwLSZndDtpX2RpZmxhZ3MyICZhbXA7IFhGU19ESUZMQUcyX0NPV0VYVFNJWkUpCiAJCQlmbGFncyB8PSBGU19YRkxBR19DT1dFWFRTSVpFOwomIzQzOwkJaWYgKGlwLSZndDtpX2RpZmxhZ3MyICZhbXA7IFhGU19ESUZMQUcyX1ZFUklUWSkKJiM0MzsJCQlmbGFncyB8PSBGU19YRkxBR19WRVJJVFk7CiAJfQogCiAJaWYgKHhmc19pbm9kZV9oYXNfYXR0cl9mb3JrKGlwKSkKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmMgYi9mcy94ZnMvbGlieGZzL3hmc19zYi5jCmluZGV4IDQ3MzIyYWRiNzY5MDU5Li4yMjJiYmU1NTU5ZGY0NyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfc2IuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMvbGlieGZzL3hmc19zYi5jCkBAIC0xNjUsNiAmIzQzOzE2NSw4IEBAIHhmc19zYl92ZXJzaW9uX3RvX2ZlYXR1cmVzKAogCQlmZWF0dXJlcyB8PSBYRlNfRkVBVF9SRUZMSU5LOwogCWlmIChzYnAtJmd0O3NiX2ZlYXR1cmVzX3JvX2NvbXBhdCAmYW1wOyBYRlNfU0JfRkVBVF9ST19DT01QQVRfSU5PQlRDTlQpCiAJCWZlYXR1cmVzIHw9IFhGU19GRUFUX0lOT0JUQ05UOwomIzQzOwlpZiAoc2JwLSZndDtzYl9mZWF0dXJlc19yb19jb21wYXQgJmFtcDsgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSkKJiM0MzsJCWZlYXR1cmVzIHw9IFhGU19GRUFUX1ZFUklUWTsKIAlpZiAoc2JwLSZndDtzYl9mZWF0dXJlc19pbmNvbXBhdCAmYW1wOyBYRlNfU0JfRkVBVF9JTkNPTVBBVF9GVFlQRSkKIAkJZmVhdHVyZXMgfD0gWEZTX0ZFQVRfRlRZUEU7CiAJaWYgKHNicC0mZ3Q7c2JfZmVhdHVyZXNfaW5jb21wYXQgJmFtcDsgWEZTX1NCX0ZFQVRfSU5DT01QQVRfU1BJTk9ERVMpCkBAIC0xNTg4LDYgJiM0MzsxNTkwLDggQEAgeGZzX2ZzX2dlb21ldHJ5KAogCQlnZW8tJmd0O2ZsYWdzIHw9IFhGU19GU09QX0dFT01fRkxBR1NfTUVUQURJUjsKIAlpZiAoeGZzX2hhc196b25lZChtcCkpCiAJCWdlby0mZ3Q7ZmxhZ3MgfD0gWEZTX0ZTT1BfR0VPTV9GTEFHU19aT05FRDsKJiM0MzsJaWYgKHhmc19oYXNfdmVyaXR5KG1wKSkKJiM0MzsJCWdlby0mZ3Q7ZmxhZ3MgfD0gWEZTX0ZTT1BfR0VPTV9GTEFHU19WRVJJVFk7CiAJZ2VvLSZndDtydHNlY3RzaXplID0gc2JwLSZndDtzYl9ibG9ja3NpemU7CiAJZ2VvLSZndDtkaXJibG9ja3NpemUgPSB4ZnNfZGlyMl9kaXJibG9ja19ieXRlcyhzYnApOwogCmRpZmYgLS1naXQgYS9mcy94ZnMvc2NydWIvY29tbW9uLmMgYi9mcy94ZnMvc2NydWIvY29tbW9uLmMKaW5kZXggZTUyMzNlMzFhYmI3NTAuLjAyYjY4YmY0YzUxMjcwIDEwMDY0NAotLS0gYS9mcy94ZnMvc2NydWIvY29tbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3NjcnViL2NvbW1vbi5jCkBAIC00NSw2ICYjNDM7NDUsOCBAQAogI2luY2x1ZGUgJiMzNDtzY3J1Yi9oZWFsdGguaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3NjcnViL3RlbXBmaWxlLmgmIzM0OwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzdmVyaXR5LmgmZ3Q7CiYjNDM7CiAvKiBDb21tb24gY29kZSBmb3IgdGhlIG1ldGFkYXRhIHNjcnViYmVycy4gKi8KIAogLyoKQEAgLTE3NTQsMyAmIzQzOzE3NTYsNTYgQEAgeGNoa19pbm9kZV9jb3VudF9ibG9ja3MoCiAJcmV0dXJuIHhmc19ibWFwX2NvdW50X2Jsb2NrcyhzYy0mZ3Q7dHAsIHNjLSZndDtpcCwgd2hpY2hmb3JrLCBuZXh0ZW50cywKIAkJCWNvdW50KTsKIH0KJiM0MzsKJiM0MzsvKgomIzQzOyAqIElmIHRoaXMgaW5vZGUgaGFzIFNfVkVSSVRZIHNldCBvbiBpdCwgcmVhZCB0aGUgdmVyaXR5IGluZm8uIElmIHRoZSByZWFkaW5nCiYjNDM7ICogZmFpbHMgd2l0aCBhbnl0aGluZyBvdGhlciB0aGFuIEVOT01FTSwgdGhlIGZpbGUgaXMgY29ycnVwdCwgd2hpY2ggd2UgY2FuCiYjNDM7ICogZGV0ZWN0IGxhdGVyIHdpdGggZnN2ZXJpdHlfYWN0aXZlLgomIzQzOyAqCiYjNDM7ICogQ2FsbGVycyBtdXN0IGhvbGQgdGhlIElPTE9DSyBhbmQgbXVzdCBub3QgaG9sZCB0aGUgSUxPQ0sgb2Ygc2MtJmd0O2lwIGJlY2F1c2UKJiM0MzsgKiBhY3RpdmF0aW9uIHJlYWRzIGlub2RlIGRhdGEuCiYjNDM7ICovCiYjNDM7aW50CiYjNDM7eGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoCiYjNDM7CXN0cnVjdCB4ZnNfc2NydWIJKnNjKQomIzQzO3sKJiM0MzsJaW50CQkJZXJyb3I7CiYjNDM7CiYjNDM7CWlmICghZnN2ZXJpdHlfYWN0aXZlKFZGU19JKHNjLSZndDtpcCkpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWVycm9yID0gZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKFZGU19JKHNjLSZndDtpcCkpOwomIzQzOwlzd2l0Y2ggKGVycm9yKSB7CiYjNDM7CWNhc2UgMDoKJiM0MzsJCS8qIGZzdmVyaXR5IGlzIGFjdGl2ZSAqLwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgLUVOT0RBVEE6CiYjNDM7CWNhc2UgLUVNU0dTSVpFOgomIzQzOwljYXNlIC1FSU5WQUw6CiYjNDM7CWNhc2UgLUVGU0NPUlJVUFRFRDoKJiM0MzsJY2FzZSAtRUZCSUc6CiYjNDM7CWNhc2UgLUVSQU5HRToKJiM0MzsJY2FzZSAtRUJBRE1TRzoKJiM0MzsJCS8qCiYjNDM7CQkgKiBUaGUgbm9uemVybyBlcnJubyBjb2RlcyBhYm92ZSBhcmUgdGhlIGVycm9yIGNvZGVzIHRoYXQgY2FuCiYjNDM7CQkgKiBiZSByZXR1cm5lZCBmcm9tIGZzdmVyaXR5IG9uIG1ldGFkYXRhIHZhbGlkYXRpb24gZXJyb3JzLgomIzQzOwkJICovCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCS8qIHJ1bnRpbWUgZXJyb3JzICovCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogSXMgdGhpcyBhIHZlcml0eSBmaWxlIHRoYXQgZmFpbGVkIHRvIGFjdGl2YXRlPyAgQ2FsbGVycyBtdXN0IGhhdmUgdHJpZWQgdG8KJiM0MzsgKiBhY3RpdmF0ZSBmc3Zlcml0eSB2aWEgeGNoa19pbm9kZV9zZXR1cF92ZXJpdHkuCiYjNDM7ICovCiYjNDM7Ym9vbAomIzQzO3hjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbigKJiM0MzsJc3RydWN0IHhmc19pbm9kZQkqaXApCiYjNDM7ewomIzQzOwlyZXR1cm4gZnN2ZXJpdHlfYWN0aXZlKFZGU19JKGlwKSkgJmFtcDsmYW1wOyAhZnN2ZXJpdHlfZ2V0X2luZm8oVkZTX0koaXApKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9mcy94ZnMvc2NydWIvY29tbW9uLmggYi9mcy94ZnMvc2NydWIvY29tbW9uLmgKaW5kZXggOWQ2MjdmZDUwNjg3ZTQuLjNkZTJiNjAwOWE5OTQxIDEwMDY0NAotLS0gYS9mcy94ZnMvc2NydWIvY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3NjcnViL2NvbW1vbi5oCkBAIC0yNjgsNiAmIzQzOzI2OCw4IEBAIGludCB4Y2hrX2lub2RlX2lzX2FsbG9jYXRlZChzdHJ1Y3QgeGZzX3NjcnViICpzYywgeGZzX2FnaW5vX3QgYWdpbm8sCiAJCWJvb2wgKmludXNlKTsKIGludCB4Y2hrX2lub2RlX2NvdW50X2Jsb2NrcyhzdHJ1Y3QgeGZzX3NjcnViICpzYywgaW50IHdoaWNoZm9yaywKIAkJeGZzX2V4dG51bV90ICpuZXh0ZW50cywgeGZzX2ZpbGJsa3NfdCAqY291bnQpOwomIzQzO2ludCB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzdHJ1Y3QgeGZzX3NjcnViICpzYyk7CiYjNDM7Ym9vbCB4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oc3RydWN0IHhmc19pbm9kZSAqaXApOwogCiBib29sIHhjaGtfaW5vZGVfaXNfZGlydHJlZV9yb290KGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTsKIGJvb2wgeGNoa19pbm9kZV9pc19zYl9yb290ZWQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2lub2RlLmMgYi9mcy94ZnMvc2NydWIvaW5vZGUuYwppbmRleCA2NWIxM2UzMTE5MTY4MS4uZDFjZGQ2YjQ0NWQwMTcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jCkBAIC0zNiw2ICYjNDM7MzYsMTAgQEAgeGNoa19wcmVwYXJlX2lzY3J1YigKIAogCXhjaGtfaWxvY2soc2MsIFhGU19JT0xPQ0tfRVhDTCk7CiAKJiM0MzsJZXJyb3IgPSB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzYyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKIAllcnJvciA9IHhjaGtfdHJhbnNfYWxsb2Moc2MsIDApOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwpAQCAtODMzLDYgJiM0Mzs4MzcsOSBAQCB4Y2hrX2lub2RlKAogCWlmIChTX0lTUkVHKFZGU19JKHNjLSZndDtpcCktJmd0O2lfbW9kZSkpCiAJCXhjaGtfaW5vZGVfY2hlY2tfcmVmbGlua19pZmxhZyhzYywgSV9JTk8oc2MtJmd0O2lwKSk7CiAKJiM0MzsJaWYgKHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbihzYy0mZ3Q7aXApKQomIzQzOwkJeGNoa19pbm9fc2V0X2NvcnJ1cHQoc2MsIHNjLSZndDtzbS0mZ3Q7c21faW5vKTsKJiM0MzsKIAl4Y2hrX2lub2RlX2NoZWNrX3VubGlua2VkKHNjKTsKIAogCXhjaGtfaW5vZGVfeHJlZihzYywgSV9JTk8oc2MtJmd0O2lwKSwgJmFtcDtkaSk7CmRpZmYgLS1naXQgYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmMgYi9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmMKaW5kZXggM2VjNDFjMTk4MzUxMTYuLjM1ZTkzYTRiNTBjZDlmIDEwMDY0NAotLS0gYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3NjcnViL2lub2RlX3JlcGFpci5jCkBAIC01NzMsNiAmIzQzOzU3Myw4IEBAIHhyZXBfZGlub2RlX2ZsYWdzKAogCQlkaXAtJmd0O2RpX25yZXh0NjRfcGFkID0gMDsKIAllbHNlIGlmIChkaXAtJmd0O2RpX3ZlcnNpb24gJmd0Oz0gMykKIAkJZGlwLSZndDtkaV92M19wYWQgPSAwOwomIzQzOwlpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSB8fCAhU19JU1JFRyhtb2RlKSkKJiM0MzsJCWZsYWdzMiAmYW1wOz0gflhGU19ESUZMQUcyX1ZFUklUWTsKIAogCWlmIChmbGFnczIgJmFtcDsgWEZTX0RJRkxBRzJfTUVUQURBVEEpIHsKIAkJeGZzX2ZhaWxhZGRyX3QJZmE7CkBAIC0xNjE3LDYgJiM0MzsxNjE5LDEwIEBAIHhyZXBfZGlub2RlX2NvcmUoCiAJaWYgKGlnZXRfZXJyb3IpCiAJCXJldHVybiBpZ2V0X2Vycm9yOwogCiYjNDM7CWVycm9yID0geGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoc2MpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiAJZXJyb3IgPSB4Y2hrX3RyYW5zX2FsbG9jKHNjLCAwKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKQEAgLTIwMzUsNiAmIzQzOzIwNDEsMjcgQEAgeHJlcF9pbm9kZV91bmxpbmtlZCgKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qCiYjNDM7ICogSWYgdGhpcyBmaWxlIGlzIGEgZnN2ZXJpdHkgZmlsZSwgeGNoa19wcmVwYXJlX2lzY3J1YiBvciB4cmVwX2Rpbm9kZV9jb3JlCiYjNDM7ICogc2hvdWxkIGhhdmUgYWN0aXZhdGVkIGl0LiAgSWYgaXQmIzM5O3Mgc3RpbGwgbm90IGFjdGl2ZSwgdGhlbiB0aGVyZSYjMzk7cyBzb21ldGhpbmcKJiM0MzsgKiB3cm9uZyB3aXRoIHRoZSB2ZXJpdHkgZGVzY3JpcHRvciBhbmQgd2Ugc2hvdWxkIHR1cm4gaXQgb2ZmLgomIzQzOyAqLwomIzQzO1NUQVRJQyBpbnQKJiM0Mzt4cmVwX2lub2RlX3Zlcml0eSgKJiM0MzsJc3RydWN0IHhmc19zY3J1Ygkqc2MpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IFZGU19JKHNjLSZndDtpcCk7CiYjNDM7CiYjNDM7CWlmICh4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oc2MtJmd0O2lwKSkgewomIzQzOwkJc2MtJmd0O2lwLSZndDtpX2RpZmxhZ3MyICZhbXA7PSB+WEZTX0RJRkxBRzJfVkVSSVRZOwomIzQzOwkJaW5vZGVfc2V0X2ZsYWdzKGlub2RlLCAwLCBTX1ZFUklUWSk7CiYjNDM7CiYjNDM7CQl4ZnNfdHJhbnNfbG9nX2lub2RlKHNjLSZndDt0cCwgc2MtJmd0O2lwLCBYRlNfSUxPR19DT1JFKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKiBSZXBhaXIgYW4gaW5vZGUmIzM5O3MgZmllbGRzLiAqLwogaW50CiB4cmVwX2lub2RlKApAQCAtMjA4NCw2ICYjNDM7MjExMSwxNSBAQCB4cmVwX2lub2RlKAogCQkJcmV0dXJuIGVycm9yOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBEaXNhYmxlIGZzdmVyaXR5IGlmIGl0IGNhbm5vdCBiZSBhY3RpdmF0ZWQuICBBY3RpdmF0aW9uIGZhaWx1cmUKJiM0MzsJICogcHJvaGliaXRzIHRoZSBmaWxlIGZyb20gYmVpbmcgb3BlbmVkLCBzbyB0aGVyZSBjYW5ub3QgYmUgYW5vdGhlcgomIzQzOwkgKiBwcm9ncmFtIHdpdGggYW4gb3BlbiBmZCB0byB3aGF0IGl0IHRoaW5rcyBpcyBhIHZlcml0eSBmaWxlLgomIzQzOwkgKi8KJiM0MzsJZXJyb3IgPSB4cmVwX2lub2RlX3Zlcml0eShzYyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKIAkvKiBSZWNvbm5lY3QgaW5jb3JlIHVubGlua2VkIGxpc3QgKi8KIAllcnJvciA9IHhyZXBfaW5vZGVfdW5saW5rZWQoc2MpOwogCWlmIChlcnJvcikKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYW9wcy5jIGIvZnMveGZzL3hmc19hb3BzLmMKaW5kZXggNTEyOTNiNmYzMzFmMGIuLjEzNWJlNzExZjlhNDA5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2FvcHMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2FvcHMuYwpAQCAtMjIsNyAmIzQzOzIyLDkgQEAKICNpbmNsdWRlICYjMzQ7eGZzX2ljYWNoZS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX3pvbmVfYWxsb2MuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hmc19ydGdyb3VwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2ZzdmVyaXR5LmgmIzM0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Jpby1pbnRlZ3JpdHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnN2ZXJpdHkuaCZndDsKIAogc3RydWN0IHhmc193cml0ZXBhZ2VfY3R4IHsKIAlzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCBjdHg7CkBAIC0xODEsNiAmIzQzOzE4Myw0OSBAQCB4ZnNfZW5kX2lvZW5kX3dyaXRlKAogCW1lbWFsbG9jX25vZnNfcmVzdG9yZShub2ZzX2ZsYWcpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBQcmlvcml0aXplIGZzdmVyaXR5IG1ldGFkYXRhIG92ZXIgZmlsZSBkYXRhLiBTb3J0IGJhc2VkIG9uIGlfc2l6ZSBhcyBmc3Zlcml0eQomIzQzOyAqIG1ldGFkYXRhIGlzIGFsd2F5cyBiZXlvbmQgRU9GCiYjNDM7ICovCiYjNDM7c3RhdGljIGludAomIzQzO3hmc19yZWFkX2lvZW5kX2NvbXBhcmUoCiYjNDM7CXZvaWQJCQkqcHJpdiwKJiM0MzsJY29uc3Qgc3RydWN0IGxpc3RfaGVhZAkqYSwKJiM0MzsJY29uc3Qgc3RydWN0IGxpc3RfaGVhZAkqYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb21hcF9pb2VuZAkqaWEgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IGlvbWFwX2lvZW5kLAomIzQzOwkJCWlvX2xpc3QpOwomIzQzOwlzdHJ1Y3QgaW9tYXBfaW9lbmQJKmliID0gY29udGFpbmVyX29mKGIsIHN0cnVjdCBpb21hcF9pb2VuZCwKJiM0MzsJCQlpb19saXN0KTsKJiM0MzsJbG9mZl90CQkJaV9zaXplID0gaV9zaXplX3JlYWQoaWEtJmd0O2lvX2lub2RlKTsKJiM0MzsKJiM0MzsJaWYgKCFJU19WRVJJVFkoaWEtJmd0O2lvX2lub2RlKSkKJiM0MzsJCXJldHVybiBpb21hcF9pb2VuZF9jb21wYXJlKHByaXYsIGEsIGIpOwomIzQzOwomIzQzOwlpZiAoaWEtJmd0O2lvX29mZnNldCAmZ3Q7IGlfc2l6ZSAmYW1wOyZhbXA7IGliLSZndDtpb19vZmZzZXQgJmx0OyBpX3NpemUpCiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CWlmIChpYS0mZ3Q7aW9fb2Zmc2V0ICZsdDsgaV9zaXplICZhbXA7JmFtcDsgaWItJmd0O2lvX29mZnNldCAmZ3Q7IGlfc2l6ZSkKJiM0MzsJCXJldHVybiAxOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBJTyByZWFkIGNvbXBsZXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQKJiM0Mzt4ZnNfZW5kX2lvZW5kX3JlYWQoCiYjNDM7CXN0cnVjdCBpb21hcF9pb2VuZAkqaW9lbmQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlvZW5kLSZndDtpb19pbm9kZSk7CiYjNDM7CiYjNDM7CWlmICghaW9lbmQtJmd0O2lvX2Jpby5iaV9zdGF0dXMgJmFtcDsmYW1wOwomIzQzOwkJCXhmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoaXAsIGlvZW5kLSZndDtpb19vZmZzZXQpKQomIzQzOwkJZnN2ZXJpdHlfdmVyaWZ5X2Jpbyhpb2VuZC0mZ3Q7aW9fdmksCiYjNDM7CQkJCSAgICAmYW1wO2lvZW5kLSZndDtpb19iaW8pOwomIzQzOwlpb21hcF9maW5pc2hfaW9lbmRzKGlvZW5kLAomIzQzOwkJYmxrX3N0YXR1c190b19lcnJubyhpb2VuZC0mZ3Q7aW9fYmlvLmJpX3N0YXR1cykpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBGaW5pc2ggYWxsIHBlbmRpbmcgSU8gY29tcGxldGlvbnMgdGhhdCByZXF1aXJlIHRyYW5zYWN0aW9uYWwgbW9kaWZpY2F0aW9ucy4KICAqCkBAIC0yMDksMTQgJiM0MzsyNTQsMTcgQEAgeGZzX2VuZF9pbygKIAlsaXN0X3JlcGxhY2VfaW5pdCgmYW1wO2lwLSZndDtpX2lvZW5kX2xpc3QsICZhbXA7dG1wKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aXAtJmd0O2lfaW9lbmRfbG9jaywgZmxhZ3MpOwogCi0JaW9tYXBfc29ydF9pb2VuZHMoJmFtcDt0bXApOwomIzQzOwlpb2VuZCA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmYW1wO3RtcCwgc3RydWN0IGlvbWFwX2lvZW5kLCBpb19saXN0KTsKJiM0MzsJaWYgKGJpb19vcCgmYW1wO2lvZW5kLSZndDtpb19iaW8pID09IFJFUV9PUF9SRUFEKQomIzQzOwkJaW9tYXBfc29ydF9pb2VuZHMoJmFtcDt0bXAsIHhmc19yZWFkX2lvZW5kX2NvbXBhcmUpOwomIzQzOwllbHNlCiYjNDM7CQlpb21hcF9zb3J0X2lvZW5kcygmYW1wO3RtcCwgaW9tYXBfaW9lbmRfY29tcGFyZSk7CiAJd2hpbGUgKChpb2VuZCA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmYW1wO3RtcCwgc3RydWN0IGlvbWFwX2lvZW5kLAogCQkJaW9fbGlzdCkpKSB7CiAJCWxpc3RfZGVsX2luaXQoJmFtcDtpb2VuZC0mZ3Q7aW9fbGlzdCk7CiAJCWlvbWFwX2lvZW5kX3RyeV9tZXJnZShpb2VuZCwgJmFtcDt0bXApOwogCQlpZiAoYmlvX29wKCZhbXA7aW9lbmQtJmd0O2lvX2JpbykgPT0gUkVRX09QX1JFQUQpCi0JCQlpb21hcF9maW5pc2hfaW9lbmRzKGlvZW5kLAotCQkJCWJsa19zdGF0dXNfdG9fZXJybm8oaW9lbmQtJmd0O2lvX2Jpby5iaV9zdGF0dXMpKTsKJiM0MzsJCQl4ZnNfZW5kX2lvZW5kX3JlYWQoaW9lbmQpOwogCQllbHNlCiAJCQl4ZnNfZW5kX2lvZW5kX3dyaXRlKGlvZW5kKTsKIAkJY29uZF9yZXNjaGVkKCk7CkBAIC0yNDIsOSAmIzQzOzI5MCwxNCBAQCB4ZnNfZW5kX2JpbygKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2lwLSZndDtpX2lvZW5kX2xvY2ssIGZsYWdzKTsKLQlpZiAobGlzdF9lbXB0eSgmYW1wO2lwLSZndDtpX2lvZW5kX2xpc3QpKQotCQlXQVJOX09OX09OQ0UoIXF1ZXVlX3dvcmsobXAtJmd0O21fdW53cml0dGVuX3dvcmtxdWV1ZSwKJiM0MzsJaWYgKGxpc3RfZW1wdHkoJmFtcDtpcC0mZ3Q7aV9pb2VuZF9saXN0KSkgewomIzQzOwkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX1ZFUklUWSkgJmFtcDsmYW1wOyBpb2VuZC0mZ3Q7aW9fdmkgJmFtcDsmYW1wOwomIzQzOwkJICAgIGlvZW5kLSZndDtpb19vZmZzZXQgJmx0OyB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSkKJiM0MzsJCQlmc3Zlcml0eV9lbnF1ZXVlX3ZlcmlmeV93b3JrKCZhbXA7aXAtJmd0O2lfaW9lbmRfd29yayk7CiYjNDM7CQllbHNlCiYjNDM7CQkJV0FSTl9PTl9PTkNFKCFxdWV1ZV93b3JrKG1wLSZndDttX3Vud3JpdHRlbl93b3JrcXVldWUsCiAJCQkJCSAmYW1wO2lwLSZndDtpX2lvZW5kX3dvcmspKTsKJiM0MzsJfQogCWxpc3RfYWRkX3RhaWwoJmFtcDtpb2VuZC0mZ3Q7aW9fbGlzdCwgJmFtcDtpcC0mZ3Q7aV9pb2VuZF9saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7aXAtJmd0O2lfaW9lbmRfbG9jaywgZmxhZ3MpOwogfQpAQCAtMzUwLDEyICYjNDM7NDAzLDE2IEBAIHhmc19tYXBfYmxvY2tzKAogCWludAkJCXJldHJpZXMgPSAwOwogCWludAkJCWVycm9yID0gMDsKIAl1bnNpZ25lZCBpbnQJCSpzZXE7CiYjNDM7CXVuc2lnbmVkIGludAkJaW9tYXBfZmxhZ3MgPSAwOwogCiAJaWYgKHhmc19pc19zaHV0ZG93bihtcCkpCiAJCXJldHVybiAtRUlPOwogCiAJWEZTX0VSUk9SVEFHX0RFTEFZKG1wLCBYRlNfRVJSVEFHX1dCX0RFTEFZX01TKTsKIAomIzQzOwlpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpCiYjNDM7CQlpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZOwomIzQzOwogCS8qCiAJICogQ09XIGZvcmsgYmxvY2tzIGNhbiBvdmVybGFwIGRhdGEgZm9yayBibG9ja3MgZXZlbiBpZiB0aGUgYmxvY2tzCiAJICogYXJlbiYjMzk7dCBzaGFyZWQuICBDT1cgSS9PIGFsd2F5cyB0YWtlcyBwcmVjZWRlbnQsIHNvIHdlIG11c3QgYWx3YXlzCkBAIC00NDMsNyAmIzQzOzUwMCw4IEBAIHhmc19tYXBfYmxvY2tzKAogCSAgICBpc251bGxzdGFydGJsb2NrKGltYXAuYnJfc3RhcnRibG9jaykpCiAJCWdvdG8gYWxsb2NhdGVfYmxvY2tzOwogCi0JeGZzX2JtYnRfdG9faW9tYXAoaXAsICZhbXA7d3BjLSZndDtpb21hcCwgJmFtcDtpbWFwLCAwLCAwLCBYRlNfV1BDKHdwYyktJmd0O2RhdGFfc2VxKTsKJiM0MzsJeGZzX2JtYnRfdG9faW9tYXAoaXAsICZhbXA7d3BjLSZndDtpb21hcCwgJmFtcDtpbWFwLCAwLCBpb21hcF9mbGFncywKJiM0MzsJCQkgIFhGU19XUEMod3BjKS0mZ3Q7ZGF0YV9zZXEpOwogCXRyYWNlX3hmc19tYXBfYmxvY2tzX2ZvdW5kKGlwLCBvZmZzZXQsIGNvdW50LCB3aGljaGZvcmssICZhbXA7aW1hcCk7CiAJcmV0dXJuIDA7CiBhbGxvY2F0ZV9ibG9ja3M6CkBAIC01OTAsMTIgJiM0Mzs2NDgsMTYgQEAgeGZzX3pvbmVkX21hcF9ibG9ja3MoCiAJeGZzX2ZpbGJsa3NfdAkJY291bnRfZnNiOwogCXN0cnVjdCB4ZnNfYm1idF9pcmVjCWltYXAsIGRlbDsKIAlzdHJ1Y3QgeGZzX2lleHRfY3Vyc29yCWljdXI7CiYjNDM7CXUxNgkJCWlvbWFwX2ZsYWdzID0gMDsKIAogCWlmICh4ZnNfaXNfc2h1dGRvd24obXApKQogCQlyZXR1cm4gLUVJTzsKIAogCVhGU19FUlJPUlRBR19ERUxBWShtcCwgWEZTX0VSUlRBR19XQl9ERUxBWV9NUyk7CiAKJiM0MzsJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKQomIzQzOwkJaW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTsKJiM0MzsKIAkvKgogCSAqIEFsbCBkaXJ0eSBkYXRhIG11c3QgYmUgY292ZXJlZCBieSBkZWxhbGxvYyBleHRlbnRzLiAgQnV0IHRydW5jYXRlIGNhbgogCSAqIHJlbW92ZSBkZWxhbGxvYyBleHRlbnRzIHVuZGVybmVhdGggdXMgb3IgcmVkdWNlIHRoZWlyIHNpemUuCkBAIC02MTksNyAmIzQzOzY4MSw3IEBAIHhmc196b25lZF9tYXBfYmxvY2tzKAogCQlpbWFwLmJyX3N0YXJ0YmxvY2sgPSBIT0xFU1RBUlRCTE9DSzsKIAkJaW1hcC5icl9zdGF0ZSA9IFhGU19FWFRfTk9STTsKIAkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQkJeGZzX2JtYnRfdG9faW9tYXAoaXAsICZhbXA7d3BjLSZndDtpb21hcCwgJmFtcDtpbWFwLCAwLCAwLCAwKTsKJiM0MzsJCXhmc19ibWJ0X3RvX2lvbWFwKGlwLCAmYW1wO3dwYy0mZ3Q7aW9tYXAsICZhbXA7aW1hcCwgMCwgaW9tYXBfZmxhZ3MsIDApOwogCQlyZXR1cm4gMDsKIAl9CiAJZW5kX2ZzYiA9IG1pbihlbmRfZnNiLCBpbWFwLmJyX3N0YXJ0b2ZmICYjNDM7IGltYXAuYnJfYmxvY2tjb3VudCk7CkBAIC02MzIsMTEgJiM0Mzs2OTQsMTAgQEAgeGZzX3pvbmVkX21hcF9ibG9ja3MoCiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAogCXdwYy0mZ3Q7aW9tYXAudHlwZSA9IElPTUFQX01BUFBFRDsKLQl3cGMtJmd0O2lvbWFwLmZsYWdzID0gSU9NQVBfRl9ESVJUWTsKIAl3cGMtJmd0O2lvbWFwLmJkZXYgPSBtcC0mZ3Q7bV9ydGRldl90YXJncC0mZ3Q7YnRfYmRldjsKIAl3cGMtJmd0O2lvbWFwLm9mZnNldCA9IG9mZnNldDsKIAl3cGMtJmd0O2lvbWFwLmxlbmd0aCA9IFhGU19GU0JfVE9fQihtcCwgY291bnRfZnNiKTsKLQl3cGMtJmd0O2lvbWFwLmZsYWdzID0gSU9NQVBfRl9BTk9OX1dSSVRFOwomIzQzOwl3cGMtJmd0O2lvbWFwLmZsYWdzID0gaW9tYXBfZmxhZ3MgfCBJT01BUF9GX0FOT05fV1JJVEU7CiAKIAl0cmFjZV94ZnNfem9uZWRfbWFwX2Jsb2NrcyhpcCwgb2Zmc2V0LCB3cGMtJmd0O2lvbWFwLmxlbmd0aCk7CiAJcmV0dXJuIDA7CkBAIC02ODQsNiAmIzQzOzc0NSwyMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgeGZzX3pvbmVkX3dyaXRlYmFja19vcHMgPSB7CiAJLndyaXRlYmFja19zdWJtaXQJPSB4ZnNfem9uZWRfd3JpdGViYWNrX3N1Ym1pdCwKIH07CiAKJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2lvbWFwX3dyaXRlcGFnZXMoCiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJCSppcCwKJiM0MzsJc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHgJKmN0eCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFdyaXRlYmFjayBkb2VzIG5vdCB3b3JrIGZvciBmb2xpb3MgcGFzdCBFT0YsIGxldCBpdCBrbm93IHRoYXQKJiM0MzsJICogSS9PIGhhcHBlbnMgZm9yIGZzdmVyaXR5IG1ldGFkYXRhIGFuZCB0aGlzIHJlc3RyaWN0aW9uIG5lZWQKJiM0MzsJICogdG8gYmUgc2tpcHBlZAomIzQzOwkgKi8KJiM0MzsJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKQomIzQzOwkJY3R4LSZndDtpb21hcC5mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZOwomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcyhjdHgpOwomIzQzO30KJiM0MzsKIFNUQVRJQyBpbnQKIHhmc192bV93cml0ZXBhZ2VzKAogCXN0cnVjdCBhZGRyZXNzX3NwYWNlCSptYXBwaW5nLApAQCAtNzAzLDcgJiM0Mzs3ODAsNyBAQCB4ZnNfdm1fd3JpdGVwYWdlcygKIAkJfTsKIAkJaW50CQkJCWVycm9yOwogCi0JCWVycm9yID0gaW9tYXBfd3JpdGVwYWdlcygmYW1wO3hjLmN0eCk7CiYjNDM7CQllcnJvciA9IHhmc19pb21hcF93cml0ZXBhZ2VzKGlwLCAmYW1wO3hjLmN0eCk7CiAJCWlmICh4Yy5vcGVuX3pvbmUpCiAJCQl4ZnNfb3Blbl96b25lX3B1dCh4Yy5vcGVuX3pvbmUpOwogCQlyZXR1cm4gZXJyb3I7CkBAIC03MTYsNyAmIzQzOzc5Myw3IEBAIHhmc192bV93cml0ZXBhZ2VzKAogCQkJfSwKIAkJfTsKIAotCQlyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcygmYW1wO3dwYy5jdHgpOwomIzQzOwkJcmV0dXJuIHhmc19pb21hcF93cml0ZXBhZ2VzKGlwLCAmYW1wO3dwYy5jdHgpOwogCX0KIH0KIApAQCAtNzYxLDkgJiM0Mzs4MzgsMTIgQEAgeGZzX2Jpb19zdWJtaXRfcmVhZCgKIAlzdHJ1Y3QgaW9tYXBfcmVhZF9mb2xpb19jdHgJKmN0eCkKIHsKIAlzdHJ1Y3QgYmlvCQkJKmJpbyA9IGN0eC0mZ3Q7cmVhZF9jdHg7CiYjNDM7CXN0cnVjdCBpb21hcF9pb2VuZAkJKmlvZW5kOwogCiAJLyogZGVmZXIgcmVhZCBjb21wbGV0aW9ucyB0byB0aGUgaW9lbmQgd29ya3F1ZXVlICovCi0JaW9tYXBfaW5pdF9pb2VuZChpdGVyLSZndDtpbm9kZSwgYmlvLCBjdHgtJmd0O3JlYWRfY3R4X2ZpbGVfb2Zmc2V0LCAwKTsKJiM0MzsJaW9lbmQgPSBpb21hcF9pbml0X2lvZW5kKGl0ZXItJmd0O2lub2RlLCBiaW8sIGN0eC0mZ3Q7cmVhZF9jdHhfZmlsZV9vZmZzZXQsCiYjNDM7CQkJMCk7CiYjNDM7CWlvZW5kLSZndDtpb192aSA9IGN0eC0mZ3Q7dmk7CiAJaW9tYXBfYmlvX3N1Ym1pdF9yZWFkX2VuZGlvKGl0ZXIsIGN0eCwgeGZzX2VuZF9iaW8pOwogfQogCkBAIC03NzUsMTEgJiM0Mzs4NTUsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9yZWFkX29wcyB4ZnNfaW9tYXBfcmVhZF9vcHMgPSB7CiAKIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGlvbWFwX3JlYWRfb3BzICoKIHhmc19nZXRfaW9tYXBfcmVhZF9vcHMoCi0JY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2UJKm1hcHBpbmcpCiYjNDM7CWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlCSptYXBwaW5nLAomIzQzOwlsb2ZmX3QJCQkJcG9zaXRpb24pCiB7CiAJc3RydWN0IHhmc19pbm9kZQkJKmlwID0gWEZTX0kobWFwcGluZy0mZ3Q7aG9zdCk7CiAKLQlpZiAoYmRldl9oYXNfaW50ZWdyaXR5X2NzdW0oeGZzX2lub2RlX2J1ZnRhcmcoaXApLSZndDtidF9iZGV2KSkKJiM0MzsJaWYgKGJkZXZfaGFzX2ludGVncml0eV9jc3VtKHhmc19pbm9kZV9idWZ0YXJnKGlwKS0mZ3Q7YnRfYmRldikgfHwKJiM0MzsJCQl4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGlwLCBwb3NpdGlvbikpCiAJCXJldHVybiAmYW1wO3hmc19pb21hcF9yZWFkX29wczsKIAlyZXR1cm4gJmFtcDtpb21hcF9iaW9fcmVhZF9vcHM7CiB9CkBAIC03OTEsNyAmIzQzOzg3Myw3IEBAIHhmc192bV9yZWFkX2ZvbGlvKAogewogCXN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eAljdHggPSB7IC5jdXJfZm9saW8gPSBmb2xpbyB9OwogCi0JY3R4Lm9wcyA9IHhmc19nZXRfaW9tYXBfcmVhZF9vcHMoZm9saW8tJmd0O21hcHBpbmcpOwomIzQzOwljdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhmb2xpby0mZ3Q7bWFwcGluZywgZm9saW9fcG9zKGZvbGlvKSk7CiAJaW9tYXBfcmVhZF9mb2xpbygmYW1wO3hmc19yZWFkX2lvbWFwX29wcywgJmFtcDtjdHgsIE5VTEwpOwogCXJldHVybiAwOwogfQpAQCAtODAyLDcgJiM0Mzs4ODQsNyBAQCB4ZnNfdm1fcmVhZGFoZWFkKAogewogCXN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eAljdHggPSB7IC5yYWMgPSByYWMgfTsKIAotCWN0eC5vcHMgPSB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKHJhYy0mZ3Q7bWFwcGluZyksCiYjNDM7CWN0eC5vcHMgPSB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKHJhYy0mZ3Q7bWFwcGluZywgcmVhZGFoZWFkX3BvcyhyYWMpKTsKIAlpb21hcF9yZWFkYWhlYWQoJmFtcDt4ZnNfcmVhZF9pb21hcF9vcHMsICZhbXA7Y3R4LCBOVUxMKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwX3V0aWwuYyBiL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmMKaW5kZXggYzg4YjlhZGU3Mzg5ZGQuLmIxODc1ZDZlNzQ1Mjk2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXBfdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmMKQEAgLTMxLDYgJiM0MzszMSw3IEBACiAjaW5jbHVkZSAmIzM0O3hmc19ydGJpdG1hcC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX3J0Z3JvdXAuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hmc196b25lX2FsbG9jLmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mc3Zlcml0eS5oJmd0OwogCiAvKiBLZXJuZWwgb25seSBCTUFQIHJlbGF0ZWQgZGVmaW5pdGlvbnMgYW5kIGZ1bmN0aW9ucyAqLwogCkBAIC01NTMsNiAmIzQzOzU1NCwxNCBAQCB4ZnNfY2FuX2ZyZWVfZW9mYmxvY2tzKAogCWlmIChsYXN0X2ZzYiAmbHQ7PSBlbmRfZnNiKQogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJLyoKJiM0MzsJICogTm90aGluZyB0byBjbGVhbiBvbiBmc3Zlcml0eSBpbm9kZXMgYXMgdGhleSBkb24mIzM5O3QgdXNlIHByZWFsbG9jIGFuZAomIzQzOwkgKiB0aGVyZSBubyBkZWxhbGxvYyBhcyBvbmx5IHdyaXR0ZW4gZGF0YSBpcyBmc3Zlcml0eSBtZXRhZGF0YQomIzQzOwkgKi8KJiM0MzsJaWYgKElTX1ZFUklUWShWRlNfSShpcCkpIHx8CiYjNDM7CSAgICB4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAkvKgogCSAqIENoZWNrIGlmIHRoZXJlIGlzIGFuIHBvc3QtRU9GIGV4dGVudCB0byBmcmVlLiAgSWYgdGhlcmUgYXJlIGFueQogCSAqIGRlbGFsbG9jIGJsb2NrcyBhdHRhY2hlZCB0byB0aGUgaW5vZGUgKGRhdGEgZm9yayBkZWxhbGxvYwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19maWxlLmMgYi9mcy94ZnMveGZzX2ZpbGUuYwppbmRleCA4NDVhOTdjOWIwNjMwYi4uY2JhMTk0ZDY3OGZjNzcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfZmlsZS5jCkBAIC0zNyw2ICYjNDM7MzcsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZhZHZpc2UuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb3VudC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZpbGVsb2NrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzdmVyaXR5LmgmZ3Q7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgeGZzX2ZpbGVfdm1fb3BzOwogCkBAIC0yNDUsNiAmIzQzOzI0NiwyNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgeGZzX2Rpb19yZWFkX2JvdW5jZV9vcHMgPSB7CiAJLmJpb19zZXQJPSAmYW1wO2lvbWFwX2lvZW5kX2Jpb3NldCwKIH07CiAKJiM0MztTVEFUSUMgc3NpemVfdAomIzQzO3hmc19maWxlX2J1ZmZlcmVkX3JlYWQoCiYjNDM7CXN0cnVjdCBraW9jYgkJKmlvY2IsCiYjNDM7CXN0cnVjdCBpb3ZfaXRlcgkJKnRvKQomIzQzO3sKJiM0MzsJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApKTsKJiM0MzsJc3NpemVfdAkJCXJldDsKJiM0MzsKJiM0MzsJdHJhY2VfeGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7CiYjNDM7CiYjNDM7CXJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoaW9jYiwgdG8pOwomIzQzOwl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIFNUQVRJQyBzc2l6ZV90CiB4ZnNfZmlsZV9kaW9fcmVhZCgKIAlzdHJ1Y3Qga2lvY2IJCSppb2NiLApAQCAtMjY1LDYgJiM0MzsyODUsMTYgQEAgeGZzX2ZpbGVfZGlvX3JlYWQoCiAJcmV0ID0geGZzX2lsb2NrX2lvY2IoaW9jYiwgWEZTX0lPTE9DS19TSEFSRUQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiYjNDM7CS8qCiYjNDM7CSAqIFJlLWNoZWNrIHZlcml0eSBzdGF0dXMgYWZ0ZXIgYWNxdWlyaW5nIGxvY2suIFRoaXMgcHJldmVudHMgVE9DVE9VIGluCiYjNDM7CSAqIHhmc19maWxlX3JlYWRfaXRlcigpIHdoaWxlIGZhbGxpbmcgYmFjayBmcm9tIERJTyB0byBidWZmZXJlZCBJL08gYXMKJiM0MzsJICogbm93IHdlIGFyZSBob2xkaW5nIGEgbG9jawomIzQzOwkgKi8KJiM0MzsJaWYgKGZzdmVyaXR5X2FjdGl2ZShWRlNfSShpcCkpKSB7CiYjNDM7CQl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOwomIzQzOwkJaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDs9IH5JT0NCX0RJUkVDVDsKJiM0MzsJCXJldHVybiB4ZnNfZmlsZV9idWZmZXJlZF9yZWFkKGlvY2IsIHRvKTsKJiM0MzsJfQogCWlmIChtYXBwaW5nX3N0YWJsZV93cml0ZXMoaW9jYi0mZ3Q7a2lfZmlscC0mZ3Q7Zl9tYXBwaW5nKSkgewogCQlkaW9fb3BzID0gJmFtcDt4ZnNfZGlvX3JlYWRfYm91bmNlX29wczsKIAkJZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19CT1VOQ0U7CkBAIC0yODEsNyAmIzQzOzMxMSw4IEBAIHhmc19maWxlX2RheF9yZWFkKAogCXN0cnVjdCBraW9jYgkJKmlvY2IsCiAJc3RydWN0IGlvdl9pdGVyCQkqdG8pCiB7Ci0Jc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmctJmd0O2hvc3QpOwomIzQzOwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IGlvY2ItJmd0O2tpX2ZpbHAtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdDsKJiM0MzsJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CiAJc3NpemVfdAkJCXJldCA9IDA7CiAKIAl0cmFjZV94ZnNfZmlsZV9kYXhfcmVhZChpb2NiLCB0byk7CkBAIC0yOTksMjUgJiM0MzszMzAsNiBAQCB4ZnNfZmlsZV9kYXhfcmVhZCgKIAlyZXR1cm4gcmV0OwogfQogCi1TVEFUSUMgc3NpemVfdAoteGZzX2ZpbGVfYnVmZmVyZWRfcmVhZCgKLQlzdHJ1Y3Qga2lvY2IJCSppb2NiLAotCXN0cnVjdCBpb3ZfaXRlcgkJKnRvKQotewotCXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koZmlsZV9pbm9kZShpb2NiLSZndDtraV9maWxwKSk7Ci0Jc3NpemVfdAkJCXJldDsKLQotCXRyYWNlX3hmc19maWxlX2J1ZmZlcmVkX3JlYWQoaW9jYiwgdG8pOwotCi0JcmV0ID0geGZzX2lsb2NrX2lvY2IoaW9jYiwgWEZTX0lPTE9DS19TSEFSRUQpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JcmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7Ci0JeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIFNUQVRJQyBzc2l6ZV90CiB4ZnNfZmlsZV9yZWFkX2l0ZXIoCiAJc3RydWN0IGtpb2NiCQkqaW9jYiwKQEAgLTMzMiw2ICYjNDM7MzQ0LDE0IEBAIHhmc19maWxlX3JlYWRfaXRlcigKIAlpZiAoeGZzX2lzX3NodXRkb3duKG1wKSkKIAkJcmV0dXJuIC1FSU87CiAKJiM0MzsJLyoKJiM0MzsJICogSW4gY2FzZSBmcy12ZXJpdHkgaXMgZW5hYmxlZCwgd2UgYWxzbyBmYWxsYmFjayB0byB0aGUgYnVmZmVyZWQgcmVhZAomIzQzOwkgKiBmcm9tIHRoZSBkaXJlY3QgcmVhZCBwYXRoLiBUaGVyZWZvcmUsIElPQ0JfRElSRUNUIGlzIHNldCBhbmQgbmVlZCB0bwomIzQzOwkgKiBiZSBjbGVhcmVkIChzZWUgZ2VuZXJpY19maWxlX3JlYWRfaXRlcigpKQomIzQzOwkgKi8KJiM0MzsJaWYgKGZzdmVyaXR5X2FjdGl2ZShpbm9kZSkpCiYjNDM7CQlpb2NiLSZndDtraV9mbGFncyAmYW1wOz0gfklPQ0JfRElSRUNUOwomIzQzOwogCWlmIChJU19EQVgoaW5vZGUpKQogCQlyZXQgPSB4ZnNfZmlsZV9kYXhfcmVhZChpb2NiLCB0byk7CiAJZWxzZSBpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9ESVJFQ1QpCkBAIC0xNzAwLDExICYjNDM7MTcyMCwxOCBAQCB4ZnNfZmlsZV9vcGVuKAogCXN0cnVjdCBpbm9kZQkqaW5vZGUsCiAJc3RydWN0IGZpbGUJKmZpbGUpCiB7CiYjNDM7CWludAkJZXJyb3I7CiYjNDM7CiAJaWYgKHhmc19pc19zaHV0ZG93bihYRlNfTShpbm9kZS0mZ3Q7aV9zYikpKQogCQlyZXR1cm4gLUVJTzsKIAlmaWxlLSZndDtmX21vZGUgfD0gRk1PREVfTk9XQUlUIHwgRk1PREVfQ0FOX09ESVJFQ1Q7CiAJaWYgKHhmc19nZXRfYXRvbWljX3dyaXRlX21pbihYRlNfSShpbm9kZSkpICZndDsgMCkKIAkJZmlsZS0mZ3Q7Zl9tb2RlIHw9IEZNT0RFX0NBTl9BVE9NSUNfV1JJVEU7CiYjNDM7CiYjNDM7CWVycm9yID0gZnN2ZXJpdHlfZmlsZV9vcGVuKGlub2RlLCBmaWxlKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwogCXJldHVybiBnZW5lcmljX2ZpbGVfb3Blbihpbm9kZSwgZmlsZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuYyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNDYyMjIzYjQ2MTliMDYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX2ZzdmVyaXR5LmMKQEAgLTAsMCAmIzQzOzEsNDgwIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNiBSZWQgSGF0LCBJbmMuCiYjNDM7ICovCiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfcGxhdGZvcm0uaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDt4ZnNfZm9ybWF0LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX3NoYXJlZC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc190cmFuc19yZXN2LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX21vdW50LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2RhX2Zvcm1hdC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19kYV9idHJlZS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19pbm9kZS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19sb2dfZm9ybWF0LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX3RyYW5zLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2RlZmVyLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX3RyYWNlLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX3F1b3RhLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2ZzdmVyaXR5LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2lvbWFwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2Vycm9yLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2hlYWx0aC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19ibWFwLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2JtYXBfdXRpbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnN2ZXJpdHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9tYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwomIzQzOwomIzQzO2xvZmZfdAomIzQzO3hmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoCiYjNDM7CWNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUJKmlwKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJvdW5kX3VwKGlfc2l6ZV9yZWFkKFZGU19JQyhpcCkpLCBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR04pOwomIzQzO30KJiM0MzsKJiM0Mztib29sCiYjNDM7eGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YSgKJiM0MzsJY29uc3Qgc3RydWN0IHhmc19pbm9kZQkqaXAsCiYjNDM7CWxvZmZfdAkJCW9mZnNldCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmc3Zlcml0eV9hY3RpdmUoVkZTX0lDKGlwKSkgJmFtcDsmYW1wOwomIzQzOwkJCW9mZnNldCAmbHQ7IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJldHJpZXZlIHRoZSB2ZXJpdHkgZGVzY3JpcHRvci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yKAomIzQzOwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKJiM0MzsJdm9pZAkJCSpidWYsCiYjNDM7CXNpemVfdAkJCWJ1Zl9zaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CiYjNDM7CXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gaXAtJmd0O2lfbW91bnQ7CiYjNDM7CV9fYmUzMgkJCWRfZGVzY19zaXplOwomIzQzOwl1MzIJCQlkZXNjX3NpemU7CiYjNDM7CXU2NAkJCWRlc2Nfc2l6ZV9wb3M7CiYjNDM7CWludAkJCWVycm9yOwomIzQzOwl1NjQJCQlkZXNjX3BvczsKJiM0MzsJc3RydWN0IHhmc19ibWJ0X2lyZWMJcmVjOwomIzQzOwlpbnQJCQlpc19lbXB0eTsKJiM0MzsJdWludDMyX3QJCWJsb2Nrc2l6ZSA9IGlfYmxvY2tzaXplKFZGU19JKGlwKSk7CiYjNDM7CXhmc19maWxlb2ZmX3QJCWxhc3RfYmxvY2tfb2Zmc2V0OwomIzQzOwomIzQzOwlBU1NFUlQoaW5vZGUtJmd0O2lfZmxhZ3MgJmFtcDsgU19WRVJJVFkpOwomIzQzOwl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwomIzQzOwllcnJvciA9IHhmc19ibWFwX2xhc3RfZXh0ZW50KE5VTEwsIGlwLCBYRlNfREFUQV9GT1JLLCAmYW1wO3JlYywgJmFtcDtpc19lbXB0eSk7CiYjNDM7CXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwlpZiAoaXNfZW1wdHkpCiYjNDM7CQlyZXR1cm4gLUVOT0RBVEE7CiYjNDM7CiYjNDM7CWxhc3RfYmxvY2tfb2Zmc2V0ID0KJiM0MzsJCVhGU19GU0JfVE9fQihtcCwgcmVjLmJyX3N0YXJ0b2ZmICYjNDM7IHJlYy5icl9ibG9ja2NvdW50KTsKJiM0MzsJaWYgKGxhc3RfYmxvY2tfb2Zmc2V0ICZsdDs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKQomIzQzOwkJcmV0dXJuIC1FTk9EQVRBOwomIzQzOwomIzQzOwlkZXNjX3NpemVfcG9zID0gbGFzdF9ibG9ja19vZmZzZXQgLSBzaXplb2YoX19iZTMyKTsKJiM0MzsJZXJyb3IgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgKGNoYXIgKikmYW1wO2RfZGVzY19zaXplLAomIzQzOwkJCXNpemVvZihkX2Rlc2Nfc2l6ZSksIGRlc2Nfc2l6ZV9wb3MpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CWRlc2Nfc2l6ZSA9IGJlMzJfdG9fY3B1KGRfZGVzY19zaXplKTsKJiM0MzsJaWYgKFhGU19JU19DT1JSVVBUKG1wLCBkZXNjX3NpemUgJmd0OyBGU19WRVJJVFlfTUFYX0RFU0NSSVBUT1JfU0laRSkpIHsKJiM0MzsJCXhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpOwomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKFhGU19JU19DT1JSVVBUKG1wLCBkZXNjX3NpemUgJmd0OyBkZXNjX3NpemVfcG9zKSkgewomIzQzOwkJeGZzX2lub2RlX21hcmtfc2ljayhYRlNfSShpbm9kZSksIFhGU19TSUNLX0lOT19GU1ZFUklUWSk7CiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIWJ1Zl9zaXplKQomIzQzOwkJcmV0dXJuIGRlc2Nfc2l6ZTsKJiM0MzsKJiM0MzsJaWYgKFhGU19JU19DT1JSVVBUKG1wLCBkZXNjX3NpemUgJmd0OyBidWZfc2l6ZSkpIHsKJiM0MzsJCXhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpOwomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZGVzY19wb3MgPSByb3VuZF9kb3duKGRlc2Nfc2l6ZV9wb3MgLSBkZXNjX3NpemUsIGJsb2Nrc2l6ZSk7CiYjNDM7CWlmIChkZXNjX3BvcyAmbHQ7IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKSB7CiYjNDM7CQl4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTsKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVycm9yID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJcmV0dXJuIGRlc2Nfc2l6ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3hmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yKAomIzQzOwlzdHJ1Y3QgZmlsZQkJKmZpbGUsCiYjNDM7CWNvbnN0IHZvaWQJCSpkZXNjLAomIzQzOwl1MzIJCQlkZXNjX3NpemUsCiYjNDM7CXU2NAkJCW1lcmtsZV90cmVlX3NpemUpCiYjNDM7ewomIzQzOwlpbnQJCQllcnJvcjsKJiM0MzsJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKJiM0MzsJdW5zaWduZWQgaW50CQlibGtzaXplID0gaXAtJmd0O2lfbW91bnQtJmd0O21fc2Iuc2JfYmxvY2tzaXplOwomIzQzOwl1NjQJCQl0cmVlX2xhc3RfYmxvY2sgPQomIzQzOwkJCXhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApICYjNDM7IG1lcmtsZV90cmVlX3NpemU7CiYjNDM7CXU2NAkJCWRlc2NfcG9zID0KJiM0MzsJCQlyb3VuZF91cCh0cmVlX2xhc3RfYmxvY2ssIFhGU19GU1ZFUklUWV9TVEFSVF9BTElHTik7CiYjNDM7CXU2NAkJCWRlc2NfZW5kID0gZGVzY19wb3MgJiM0MzsgZGVzY19zaXplOwomIzQzOwlfX2JlMzIJCQlkZXNjX3NpemVfZGlzayA9IGNwdV90b19iZTMyKGRlc2Nfc2l6ZSk7CiYjNDM7CXU2NAkJCWRlc2Nfc2l6ZV9wb3MgPQomIzQzOwkJCXJvdW5kX3VwKGRlc2NfZW5kICYjNDM7IHNpemVvZihkZXNjX3NpemVfZGlzayksIGJsa3NpemUpIC0KJiM0MzsJCQlzaXplb2YoZGVzY19zaXplX2Rpc2spOwomIzQzOwomIzQzOwllcnJvciA9IGlvbWFwX2ZzdmVyaXR5X3dyaXRlKGZpbGUsIGRlc2Nfc2l6ZV9wb3MsIHNpemVvZihfX2JlMzIpLAomIzQzOwkJCShjb25zdCB2b2lkICopJmFtcDtkZXNjX3NpemVfZGlzaywKJiM0MzsJCQkmYW1wO3hmc19idWZmZXJlZF93cml0ZV9pb21hcF9vcHMsCiYjNDM7CQkJJmFtcDt4ZnNfaW9tYXBfd3JpdGVfb3BzKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfZnN2ZXJpdHlfd3JpdGUoZmlsZSwgZGVzY19wb3MsIGRlc2Nfc2l6ZSwgZGVzYywKJiM0MzsJCQkmYW1wO3hmc19idWZmZXJlZF93cml0ZV9pb21hcF9vcHMsCiYjNDM7CQkJJmFtcDt4ZnNfaW9tYXBfd3JpdGVfb3BzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBUcnkgdG8gcmVtb3ZlIGFsbCB0aGUgZnN2ZXJpdHkgbWV0YWRhdGEgYWZ0ZXIgYSBmYWlsZWQgZW5hYmxlbWVudC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YSgKJiM0MzsJc3RydWN0IHhmc19pbm9kZQkqaXApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeGZzX3RyYW5zCSp0cDsKJiM0MzsJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0mZ3Q7aV9tb3VudDsKJiM0MzsJaW50CQkJZXJyb3I7CiYjNDM7CiYjNDM7CWVycm9yID0geGZzX3RyYW5zX2FsbG9jKG1wLCAmYW1wO01fUkVTKG1wKS0mZ3Q7dHJfaXRydW5jYXRlLCAwLCAwLCAwLCAmYW1wO3RwKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJcmV0dXJuIGVycm9yOwomIzQzOwomIzQzOwl4ZnNfaWxvY2soaXAsIFhGU19NTUFQTE9DS19FWENMIHwgWEZTX0lMT0NLX0VYQ0wpOwomIzQzOwl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhWRlNfSShpcCktJmd0O2lfbWFwcGluZywgWEZTX0lTSVpFKGlwKSk7CiYjNDM7CXhmc190cmFuc19pam9pbih0cCwgaXAsIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXZSByZW1vdmUgcG9zdCBFT0YgZGF0YSwgbm8gbmVlZCB0byB1cGRhdGUgaV9zaXplIGFzIGZzdmVyaXR5CiYjNDM7CSAqIGRpZG4mIzM5O3QgbW92ZSBpX3NpemUgaW4gdGhlIGZpcnN0IHBsYWNlCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IHhmc19pdHJ1bmNhdGVfZXh0ZW50cygmYW1wO3RwLCBpcCwgWEZTX0RBVEFfRk9SSywgWEZTX0lTSVpFKGlwKSk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gZXJyX2NhbmNlbDsKJiM0MzsKJiM0MzsJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwKTsKJiM0MzsJeGZzX2l1bmxvY2soaXAsIFhGU19NTUFQTE9DS19FWENMIHwgWEZTX0lMT0NLX0VYQ0wpOwomIzQzOwlyZXR1cm4gZXJyb3I7CiYjNDM7ZXJyX2NhbmNlbDoKJiM0MzsJeGZzX3RyYW5zX2NhbmNlbCh0cCk7CiYjNDM7CXhmc19pdW5sb2NrKGlwLCBYRlNfTU1BUExPQ0tfRVhDTCB8IFhGU19JTE9DS19FWENMKTsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4oCiYjNDM7CXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAomIzQzOwlsb2ZmX3QJCQlzdGFydCwKJiM0MzsJbG9mZl90CQkJZW5kKQomIzQzO3sKJiM0MzsJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0mZ3Q7aV9tb3VudDsKJiM0MzsJc3RydWN0IHhmc190cmFucwkqdHA7CiYjNDM7CXhmc19maWxlb2ZmX3QJCW9mZnNldF9mc2IgPSBYRlNfQl9UT19GU0JUKG1wLCBzdGFydCk7CiYjNDM7CXhmc19maWxlb2ZmX3QJCWVuZF9mc2IgPSBYRlNfQl9UT19GU0IobXAsIGVuZCk7CiYjNDM7CXN0cnVjdCB4ZnNfYm1idF9pcmVjCWltYXA7CiYjNDM7CWludAkJCW5pbWFwczsKJiM0MzsJaW50CQkJZXJyb3IgPSAwOwomIzQzOwlpbnQJCQlkb25lOwomIzQzOwomIzQzOwl3aGlsZSAob2Zmc2V0X2ZzYiAmbHQ7IGVuZF9mc2IpIHsKJiM0MzsJCW5pbWFwcyA9IDE7CiYjNDM7CiYjNDM7CQllcnJvciA9IHhmc190cmFuc19hbGxvYyhtcCwgJmFtcDtNX1JFUyhtcCktJmd0O3RyX3dyaXRlLCAwLCAwLCAwLCAmYW1wO3RwKTsKJiM0MzsJCWlmIChlcnJvcikKJiM0MzsJCQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKJiM0MzsJCWVycm9yID0geGZzX2JtYXBpX3JlYWQoaXAsIG9mZnNldF9mc2IsCiYjNDM7CQkJCWVuZF9mc2IgLSBvZmZzZXRfZnNiLCAmYW1wO2ltYXAsICZhbXA7bmltYXBzLAomIzQzOwkJCQkwKTsKJiM0MzsJCWlmIChlcnJvcikKJiM0MzsJCQlnb3RvIG91dF9jYW5jZWw7CiYjNDM7CiYjNDM7CQlpZiAobmltYXBzID09IDApCiYjNDM7CQkJZ290byBvdXRfY2FuY2VsOwomIzQzOwomIzQzOwkJaWYgKGltYXAuYnJfc3RhdGUgPT0gWEZTX0VYVF9VTldSSVRURU4pIHsKJiM0MzsJCQlkb25lID0gMDsKJiM0MzsKJiM0MzsJCQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCAwKTsKJiM0MzsKJiM0MzsJCQl3aGlsZSAoIWRvbmUpIHsKJiM0MzsJCQkJZXJyb3IgPSB4ZnNfYnVubWFwaSh0cCwgaXAsIGltYXAuYnJfc3RhcnRvZmYsCiYjNDM7CQkJCQkJaW1hcC5icl9ibG9ja2NvdW50LCAwLCAxLAomIzQzOwkJCQkJCSZhbXA7ZG9uZSk7CiYjNDM7CQkJCWlmIChlcnJvcikKJiM0MzsJCQkJCWdvdG8gb3V0X2NhbmNlbDsKJiM0MzsKJiM0MzsJCQkJZXJyb3IgPSB4ZnNfZGVmZXJfZmluaXNoKCZhbXA7dHApOwomIzQzOwkJCQlpZiAoZXJyb3IpCiYjNDM7CQkJCQlnb3RvIG91dF9jYW5jZWw7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCk7CiYjNDM7CQkJaWYgKGVycm9yKQomIzQzOwkJCQlnb3RvIG91dF91bmxvY2s7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXhmc190cmFuc19jYW5jZWwodHApOwomIzQzOwkJfQomIzQzOwkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKJiM0MzsKJiM0MzsJCW9mZnNldF9mc2IgPSBpbWFwLmJyX3N0YXJ0b2ZmICYjNDM7IGltYXAuYnJfYmxvY2tjb3VudDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZXJyb3I7CiYjNDM7b3V0X2NhbmNlbDoKJiM0MzsJeGZzX3RyYW5zX2NhbmNlbCh0cCk7CiYjNDM7b3V0X3VubG9jazoKJiM0MzsJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO30KJiM0MzsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFByZXBhcmUgdG8gZW5hYmxlIGZzdmVyaXR5IGJ5IGNsZWFyaW5nIG9sZCBtZXRhZGF0YS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50CiYjNDM7eGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZSgKJiM0MzsJc3RydWN0IGZpbGUJCSpmaWxwKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApOwomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKJiM0MzsJaW50CQkJZXJyb3I7CiYjNDM7CiYjNDM7CXhmc19hc3NlcnRfaWxvY2tlZChpcCwgWEZTX0lPTE9DS19FWENMKTsKJiM0MzsKJiM0MzsJaWYgKElTX0RBWChpbm9kZSkgfHwgaXAtJmd0O2lfZGlmbGFnczIgJmFtcDsgWEZTX0RJRkxBRzJfREFYKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChpbm9kZS0mZ3Q7aV9zaXplICZndDsgWEZTX0ZTVkVSSVRZX0xBUkdFU1RfRklMRSkKJiM0MzsJCXJldHVybiAtRUZCSUc7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZsdXNoIHBhZ2VjYWNoZSBiZWZvcmUgYnVpbGRpbmcgTWVya2xlIHRyZWUuIElub2RlIGlzIGxvY2tlZCBhbmQgbm8KJiM0MzsJICogZnVydGhlciB3cml0ZXMgd2lsbCBoYXBwZW4gdG8gdGhlIGZpbGUgZXhjZXB0IGZzdmVyaXR5IG1ldGFkYXRhCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtJmd0O2lfbWFwcGluZyk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCXJldHVybiBlcnJvcjsKJiM0MzsKJiM0MzsJaWYgKHhmc19pZmxhZ3NfdGVzdF9hbmRfc2V0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwllcnJvciA9IHhmc19xbV9kcWF0dGFjaChpcCk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gb3V0X2NsZWFyOwomIzQzOwomIzQzOwllcnJvciA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlnb3RvIG91dF9jbGVhcjsKJiM0MzsJcmV0dXJuIGVycm9yOwomIzQzO291dF9jbGVhcjoKJiM0MzsJeGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pOwomIzQzOwlyZXR1cm4gZXJyb3I7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQ29tcGxldGUgKG9yIGZhaWwpIHRoZSBwcm9jZXNzIG9mIGVuYWJsaW5nIGZzdmVyaXR5LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZSgKJiM0MzsJc3RydWN0IGZpbGUJCSpmaWxlLAomIzQzOwljb25zdCB2b2lkCQkqZGVzYywKJiM0MzsJc2l6ZV90CQkJZGVzY19zaXplLAomIzQzOwl1NjQJCQltZXJrbGVfdHJlZV9zaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKJiM0MzsJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0mZ3Q7aV9tb3VudDsKJiM0MzsJc3RydWN0IHhmc190cmFucwkqdHA7CiYjNDM7CWludAkJCWVycm9yID0gMDsKJiM0MzsJbG9mZl90CQkJcmFuZ2Vfc3RhcnQgPSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKTsKJiM0MzsKJiM0MzsJeGZzX2Fzc2VydF9pbG9ja2VkKGlwLCBYRlNfSU9MT0NLX0VYQ0wpOwomIzQzOwomIzQzOwkvKiBmcy12ZXJpdHkgZmFpbGVkLCBqdXN0IGNsZWFudXAgKi8KJiM0MzsJaWYgKGRlc2MgPT0gTlVMTCkgewomIzQzOwkJZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWVycm9yID0geGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3IoZmlsZSwgZGVzYywgZGVzY19zaXplLAomIzQzOwkJCW1lcmtsZV90cmVlX3NpemUpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV2FpdCBmb3IgTWVya2xlIHRyZWUgZ2V0IHdyaXR0ZW4gdG8gZGlzayBiZWZvcmUgc2V0dGluZyBvbi1kaXNrIGlub2RlCiYjNDM7CSAqIGZsYWcgYW5kIGNsZWFyaW5nIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OCiYjNDM7CSAqLwomIzQzOwllcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtJmd0O2lfbWFwcGluZywgcmFuZ2Vfc3RhcnQsCiYjNDM7CQkJTExPTkdfTUFYKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJlbW92ZSB1bndyaXR0ZW4gZXh0ZW50cyBsZWZ0IGJ5IENPVyBwcmVhbGxvY2F0aW9ucyBhbmQgd3JpdGUKJiM0MzsJICogcHJlYWxsb2NhdGlvbiBpbiB0aGUgbWVya2xlIHRyZWUgaG9sZXMgYW5kIHBhc3QgZGVzY3JpcHRvcgomIzQzOwkgKi8KJiM0MzsJZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbihpcCwgcmFuZ2Vfc3RhcnQsIExMT05HX01BWCk7CiYjNDM7CWlmIChlcnJvcikKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBQcm9hY3RpdmVseSBkcm9wIGFueSBkZWxheWVkIGFsbG9jYXRpb25zIGluIENPVyBmb3JrLCB0aGUgZnN2ZXJpdHkKJiM0MzsJICogZmlsZXMgYXJlIHJlYWQtb25seQomIzQzOwkgKi8KJiM0MzsJaWYgKHhmc19pc19jb3dfaW5vZGUoaXApKSB7CiYjNDM7CQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKJiM0MzsJCXhmc19pZm9ya19pbml0X2NvdyhpcCk7CiYjNDM7CQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwomIzQzOwkJeGZzX2JtYXBfcHVuY2hfZGVsYWxsb2NfcmFuZ2UoaXAsIFhGU19DT1dfRk9SSywgMCwgTExPTkdfTUFYLAomIzQzOwkJCQlOVUxMKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTZXQgZnN2ZXJpdHkgaW5vZGUgZmxhZwomIzQzOwkgKi8KJiM0MzsJZXJyb3IgPSB4ZnNfdHJhbnNfYWxsb2NfaW5vZGUoaXAsICZhbXA7TV9SRVMobXApLSZndDt0cl9pY2hhbmdlLAomIzQzOwkJCTAsIDAsIGZhbHNlLCAmYW1wO3RwKTsKJiM0MzsJaWYgKGVycm9yKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEVuc3VyZSB0aGF0IHdlJiMzOTt2ZSBwZXJzaXN0ZWQgdGhlIHZlcml0eSBpbmZvcm1hdGlvbiBiZWZvcmUgd2UgZW5hYmxlCiYjNDM7CSAqIGl0IG9uIHRoZSBpbm9kZSBhbmQgdGVsbCB0aGUgY2FsbGVyIHdlIGhhdmUgc2VhbGVkIHRoZSBpbm9kZS4KJiM0MzsJICovCiYjNDM7CWlwLSZndDtpX2RpZmxhZ3MyIHw9IFhGU19ESUZMQUcyX1ZFUklUWTsKJiM0MzsKJiM0MzsJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOwomIzQzOwl4ZnNfdHJhbnNfc2V0X3N5bmModHApOwomIzQzOwomIzQzOwllcnJvciA9IHhmc190cmFuc19jb21taXQodHApOwomIzQzOwl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwomIzQzOwomIzQzOwlpZiAoIWVycm9yKQomIzQzOwkJaW5vZGVfc2V0X2ZsYWdzKGlub2RlLCBTX1ZFUklUWSwgU19WRVJJVFkpOwomIzQzOwomIzQzO291dDoKJiM0MzsJaWYgKGVycm9yKSB7CiYjNDM7CQlpbnQJZXJyb3IyOwomIzQzOwomIzQzOwkJZXJyb3IyID0geGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YShpcCk7CiYjNDM7CQlpZiAoZXJyb3IyKQomIzQzOwkJCXhmc19hbGVydChpcC0mZ3Q7aV9tb3VudCwKJiM0MzsmIzM0O2lubyAweCVsbHggZmFpbGVkIHRvIGNsZWFuIHVwIG5ldyBmc3Zlcml0eSBtZXRhZGF0YSwgZXJyICVkJiMzNDssCiYjNDM7CQkJCQlJX0lOTyhpcCksIGVycm9yMik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJeGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pOwomIzQzOwlyZXR1cm4gZXJyb3I7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmV0cmlldmUgYSBtZXJrbGUgdHJlZSBibG9jay4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKgomIzQzO3hmc19mc3Zlcml0eV9yZWFkX21lcmtsZSgKJiM0MzsJc3RydWN0IGlub2RlCQkqaW5vZGUsCiYjNDM7CXBnb2ZmX3QJCQlpbmRleCkKJiM0Mzt7CiYjNDM7CWluZGV4ICYjNDM7PSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KFhGU19JKGlub2RlKSkgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbmVyaWNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKGlub2RlLCBpbmRleCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmV0cmlldmUgYSBtZXJrbGUgdHJlZSBibG9jay4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZAomIzQzO3hmc19mc3Zlcml0eV9yZWFkYWhlYWRfbWVya2xlX3RyZWUoCiYjNDM7CXN0cnVjdCBpbm9kZQkJKmlub2RlLAomIzQzOwlwZ29mZl90CQkJaW5kZXgsCiYjNDM7CXVuc2lnbmVkIGxvbmcJCW5yX3BhZ2VzKQomIzQzO3sKJiM0MzsJaW5kZXggJiM0Mzs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoWEZTX0koaW5vZGUpKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwomIzQzOwlnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZShpbm9kZSwgaW5kZXgsIG5yX3BhZ2VzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBXcml0ZSBhIG1lcmtsZSB0cmVlIGJsb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlKAomIzQzOwlzdHJ1Y3QgZmlsZQkJKmZpbGUsCiYjNDM7CWNvbnN0IHZvaWQJCSpidWYsCiYjNDM7CXU2NAkJCXBvcywKJiM0MzsJdW5zaWduZWQgaW50CQlzaXplLAomIzQzOwljb25zdCB1OAkJKnplcm9fZGlnZXN0LAomIzQzOwl1bnNpZ25lZCBpbnQJCWRpZ2VzdF9zaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwomIzQzOwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKJiM0MzsJbG9mZl90CQkJcG9zaXRpb24gPSBwb3MgJiM0MzsKJiM0MzsJCXhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApOwomIzQzOwomIzQzOwlpZiAocG9zaXRpb24gJiM0Mzsgc2l6ZSAmZ3Q7IGlub2RlLSZndDtpX3NiLSZndDtzX21heGJ5dGVzKQomIzQzOwkJcmV0dXJuIC1FRkJJRzsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhpcyBpcyBhIGJsb2NrIGZ1bGwgb2YgaGFzaGVzIG9mIHplcm9lZCBibG9ja3MsIGRvbiYjMzk7dCBib3RoZXIKJiM0MzsJICogc3RvcmluZyB0aGUgYmxvY2suIFdlIGNhbiBzeW50aGVzaXplIHRoZW0gbGF0ZXIuCiYjNDM7CSAqCiYjNDM7CSAqIEhvd2V2ZXIsIGRvIHRoaXMgb25seSBpbiBjYXNlIE1lcmtsZSB0cmVlIGJsb2NrID09IGZzIGJsb2NrIHNpemUuCiYjNDM7CSAqIElvbWFwIHN5bnRoZXNpemVzIHRoZXNlIGJsb2NrcyBiYXNlZCBvbiBob2xlcyBpbiB0aGUgbWVya2xlIHRyZWUuIFdlCiYjNDM7CSAqIHdvbiYjMzk7dCBiZSBhYmxlIHRvIHRlbGwgaWYgc29tZXRoaW5nIG5lZWQgdG8gYmUgc3ludGhlc2l6ZXMgZm9yIHRoZQomIzQzOwkgKiByYW5nZSBpbiB0aGUgZnMgYmxvY2suIEZvciBleGFtcGxlLCBmb3IgNGsgZmlsZXN5c3RlbSBibG9jawomIzQzOwkgKgomIzQzOwkgKglbIDFrIHwgemVybyBoYXNoZXMgfCB6ZXJvIGhhc2hlcyB8IDFrIF0KJiM0MzsJICoKJiM0MzsJICogSW9tYXAgd29uJiMzOTt0IGtub3cgYWJvdXQgdGhlc2UgZW1wdHkgYmxvY2tzLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNpemUgPT0gaXAtJmd0O2lfbW91bnQtJmd0O21fc2Iuc2JfYmxvY2tzaXplICZhbXA7JmFtcDsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEZpcnN0IGRpZ2VzdCBpcyB6ZXJvX2RpZ2VzdAomIzQzOwkJCSAqLwomIzQzOwkJCW1lbWNtcChidWYsIHplcm9fZGlnZXN0LCBkaWdlc3Rfc2l6ZSkgPT0gMCAmYW1wOyZhbXA7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBFdmVyeSBkaWdlc3QgaXMgc2FtZSBhcyBwcmV2aW91cywgdGh1cyBhbGwgYXJlCiYjNDM7CQkJICogemVyb19kaWdlc3QKJiM0MzsJCQkgKi8KJiM0MzsJCQltZW1jbXAoYnVmICYjNDM7IGRpZ2VzdF9zaXplLCBidWYsIHNpemUgLSBkaWdlc3Rfc2l6ZSkgPT0gMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfZnN2ZXJpdHlfd3JpdGUoZmlsZSwgcG9zaXRpb24sIHNpemUsIGJ1ZiwKJiM0MzsJCQkmYW1wO3hmc19idWZmZXJlZF93cml0ZV9pb21hcF9vcHMsCiYjNDM7CQkJJmFtcDt4ZnNfaW9tYXBfd3JpdGVfb3BzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMgeGZzX2ZzdmVyaXR5X29wcyA9IHsKJiM0MzsJLmJlZ2luX2VuYWJsZV92ZXJpdHkJCT0geGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZSwKJiM0MzsJLmVuZF9lbmFibGVfdmVyaXR5CQk9IHhmc19mc3Zlcml0eV9lbmRfZW5hYmxlLAomIzQzOwkuZ2V0X3Zlcml0eV9kZXNjcmlwdG9yCQk9IHhmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvciwKJiM0MzsJLnJlYWRfbWVya2xlX3RyZWVfcGFnZQkJPSB4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGUsCiYjNDM7CS5yZWFkYWhlYWRfbWVya2xlX3RyZWUJCT0geGZzX2ZzdmVyaXR5X3JlYWRhaGVhZF9tZXJrbGVfdHJlZSwKJiM0MzsJLndyaXRlX21lcmtsZV90cmVlX2Jsb2NrCT0geGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZSwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mc3Zlcml0eS5oIGIvZnMveGZzL3hmc19mc3Zlcml0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi42YTk4MWUyMGE3NWJiOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaApAQCAtMCwwICYjNDM7MSwyOCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyoKJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjYgUmVkIEhhdCwgSW5jLgomIzQzOyAqLwomIzQzOyNpZm5kZWYgX19YRlNfRlNWRVJJVFlfSF9fCiYjNDM7I2RlZmluZSBfX1hGU19GU1ZFUklUWV9IX18KJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19wbGF0Zm9ybS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnN2ZXJpdHkuaCZndDsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWQomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB4ZnNfZnN2ZXJpdHlfb3BzOwomIzQzO2xvZmZfdCB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTsKJiM0Mztib29sIHhmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXAsIGxvZmZfdCBvZmZzZXQpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSBsb2ZmX3QgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCkKJiM0Mzt7CiYjNDM7CVdBUk5fT05fT05DRSgxKTsKJiM0MzsJcmV0dXJuIFVMTE9OR19NQVg7CiYjNDM7fQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwLAomIzQzOwkJCQkJICAgIGxvZmZfdCBvZmZzZXQpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOyNlbmRpZgkvKiBDT05GSUdfRlNfVkVSSVRZICovCiYjNDM7CiYjNDM7I2VuZGlmCS8qIF9fWEZTX0ZTVkVSSVRZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19oZWFsdGguYyBiL2ZzL3hmcy94ZnNfaGVhbHRoLmMKaW5kZXggMjM5Yjg0M2U4M2Q0MmEuLmJlNjY3NjBmYjEyMGY3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2hlYWx0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaGVhbHRoLmMKQEAgLTYyNSw2ICYjNDM7NjI1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb2N0bF9zaWNrX21hcCBpbm9fbWFwW10gPSB7CiAJeyBYRlNfU0lDS19JTk9fRElSX1pBUFBFRCwJWEZTX0JTX1NJQ0tfRElSIH0sCiAJeyBYRlNfU0lDS19JTk9fU1lNTElOS19aQVBQRUQsCVhGU19CU19TSUNLX1NZTUxJTksgfSwKIAl7IFhGU19TSUNLX0lOT19ESVJUUkVFLAlYRlNfQlNfU0lDS19ESVJUUkVFIH0sCiYjNDM7CXsgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZLAlYRlNfQlNfU0lDS19GU1ZFUklUWSB9LAogfTsKIAogLyogRmlsbCBvdXQgYnVsa3N0YXQgaGVhbHRoIGluZm8uICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmgKaW5kZXggMzRjMTAzOGViZmNkZTEuLjE3Y2UwODM1OTFmNDA4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19pbm9kZS5oCkBAIC00MTksNiAmIzQzOzQxOSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lub2RlX2Nhbl9zd19hdG9taWNfd3JpdGUoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApCiAgKi8KICNkZWZpbmUgWEZTX0lSRU1BUFBJTkcJCSgxVSAmbHQ7Jmx0OyAxNSkKIAomIzQzOy8qCiYjNDM7ICogZnMtdmVyaXR5JiMzOTtzIE1lcmtsZSB0cmVlIGlzIHVuZGVyIGNvbnN0cnVjdGlvbi4gVGhlIGZpbGUgaXMgcmVhZC1vbmx5LCB0aGUKJiM0MzsgKiBvbmx5IHdyaXRlcyBoYXBwZW5pbmcgYXJlIGZvciB0aGUgZnN2ZXJpdHkgbWV0YWRhdGEuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTgkoMVUgJmx0OyZsdDsgMTYpCiYjNDM7CiAvKiBBbGwgaW5vZGUgc3RhdGUgZmxhZ3MgcmVsYXRlZCB0byBpbm9kZSByZWNsYWltLiAqLwogI2RlZmluZSBYRlNfQUxMX0lSRUNMQUlNX0ZMQUdTCShYRlNfSVJFQ0xBSU1BQkxFIHwgXAogCQkJCSBYRlNfSVJFQ0xBSU0gfCBcCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvY3RsLmMgYi9mcy94ZnMveGZzX2lvY3RsLmMKaW5kZXggMWI1MzcwMWJlYmVhMWEuLmZjNzg2MGE4YjVhYmIxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lvY3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMveGZzL3hmc19pb2N0bC5jCkBAIC00OSw2ICYjNDM7NDksNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvbW91bnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWxlYXR0ci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9mc3Zlcml0eS5oJmd0OwogCiAvKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIHBvc2l0aXZlIGVycm9yICovCiBpbnQKQEAgLTE0NjYsNiAmIzQzOzE0NjcsMTkgQEAgeGZzX2ZpbGVfaW9jdGwoCiAJY2FzZSBYRlNfSU9DX1ZFUklGWV9NRURJQToKIAkJcmV0dXJuIHhmc19pb2NfdmVyaWZ5X21lZGlhKGZpbHAsIGFyZyk7CiAKJiM0MzsJY2FzZSBGU19JT0NfRU5BQkxFX1ZFUklUWToKJiM0MzsJCWlmICgheGZzX2hhc192ZXJpdHkobXApKQomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJCXJldHVybiBmc3Zlcml0eV9pb2N0bF9lbmFibGUoZmlscCwgYXJnKTsKJiM0MzsJY2FzZSBGU19JT0NfTUVBU1VSRV9WRVJJVFk6CiYjNDM7CQlpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQlyZXR1cm4gZnN2ZXJpdHlfaW9jdGxfbWVhc3VyZShmaWxwLCBhcmcpOwomIzQzOwljYXNlIEZTX0lPQ19SRUFEX1ZFUklUWV9NRVRBREFUQToKJiM0MzsJCWlmICgheGZzX2hhc192ZXJpdHkobXApKQomIzQzOwkJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJCXJldHVybiBmc3Zlcml0eV9pb2N0bF9yZWFkX21ldGFkYXRhKGZpbHAsIGFyZyk7CiYjNDM7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9UVFk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb21hcC5jIGIvZnMveGZzL3hmc19pb21hcC5jCmluZGV4IDIyNWMzZGU4OGQwM2IxLi5hNGQ1NjU2NjE5ODkzMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaW9tYXAuYwpAQCAtMzIsNiAmIzQzOzMyLDggQEAKICNpbmNsdWRlICYjMzQ7eGZzX3J0Yml0bWFwLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfaWNhY2hlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfem9uZV9hbGxvYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O3hmc19mc3Zlcml0eS5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnN2ZXJpdHkuaCZndDsKIAogI2RlZmluZSBYRlNfQUxMT0NfQUxJR04obXAsIG9mZikgXAogCSgoKG9mZikgJmd0OyZndDsgbXAtJmd0O21fYWxsb2NzaXplX2xvZykgJmx0OyZsdDsgbXAtJmd0O21fYWxsb2NzaXplX2xvZykKQEAgLTg4Myw2ICYjNDM7ODg1LDkgQEAgeGZzX2RpcmVjdF93cml0ZV9pb21hcF9iZWdpbigKIAlpZiAoZmxhZ3MgJmFtcDsgSU9NQVBfQVRPTUlDKQogCQlpb21hcF9mbGFncyB8PSBJT01BUF9GX0FUT01JQ19CSU87CiAKJiM0MzsJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKQomIzQzOwkJaW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTsKJiM0MzsKIAkvKgogCSAqIENPVyB3cml0ZXMgbWF5IGFsbG9jYXRlIGRlbGFsbG9jIHNwYWNlIG9yIGNvbnZlcnQgdW53cml0dGVuIENPVwogCSAqIGV4dGVudHMsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHRha2UgdGhlIGxvY2sgZXhjbHVzaXZlbHkgaGVyZS4KQEAgLTE1ODksNyAmIzQzOzE1OTQsOCBAQCB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oCiAJbG9mZl90CQkJY291bnQsCiAJdW5zaWduZWQJCWZsYWdzLAogCXN0cnVjdCBpb21hcAkJKmlvbWFwLAotCXN0cnVjdCBpb21hcAkJKnNyY21hcCkKJiM0MzsJc3RydWN0IGlvbWFwCQkqc3JjbWFwLAomIzQzOwl1MTYJCQlpb21hcF9mbGFncykKIHsKIAlzdHJ1Y3QgaW9tYXBfaXRlcgkqaXRlciA9CiAJCWNvbnRhaW5lcl9vZihpb21hcCwgc3RydWN0IGlvbWFwX2l0ZXIsIGlvbWFwKTsKQEAgLTE1OTksNyAmIzQzOzE2MDUsNiBAQCB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oCiAJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0mZ3Q7aV9tb3VudDsKIAl4ZnNfZmlsZW9mZl90CQlvZmZzZXRfZnNiID0gWEZTX0JfVE9fRlNCVChtcCwgb2Zmc2V0KTsKIAl4ZnNfZmlsZW9mZl90CQllbmRfZnNiID0geGZzX2lvbWFwX2VuZF9mc2IobXAsIG9mZnNldCwgY291bnQpOwotCXUxNgkJCWlvbWFwX2ZsYWdzID0gSU9NQVBfRl9TSEFSRUQ7CiAJdW5zaWduZWQgaW50CQlsb2NrbW9kZSA9IFhGU19JTE9DS19FWENMOwogCXhmc19maWxibGtzX3QJCWNvdW50X2ZzYjsKIAl4ZnNfZXh0bGVuX3QJCWluZGxlbjsKQEAgLTE2NjIsNyAmIzQzOzE2NjcsOCBAQCB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oCiAJCQkJc21hcC5icl9zdGFydG9mZiAmIzQzOyBzbWFwLmJyX2Jsb2NrY291bnQpOwogCQkJeGZzX3RyaW1fZXh0ZW50KCZhbXA7c21hcCwgb2Zmc2V0X2ZzYiwKIAkJCQkJZW5kX2ZzYiAtIG9mZnNldF9mc2IpOwotCQkJZXJyb3IgPSB4ZnNfYm1idF90b19pb21hcChpcCwgc3JjbWFwLCAmYW1wO3NtYXAsIGZsYWdzLCAwLAomIzQzOwkJCWVycm9yID0geGZzX2JtYnRfdG9faW9tYXAoaXAsIHNyY21hcCwgJmFtcDtzbWFwLCBmbGFncywKJiM0MzsJCQkJCWlvbWFwX2ZsYWdzLAogCQkJCQl4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIDApKTsKIAkJCWlmIChlcnJvcikKIAkJCQlnb3RvIG91dF91bmxvY2s7CkBAIC0xNjcyLDYgJiM0MzsxNjc4LDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKAogCWlmICghaXAtJmd0O2lfY293ZnApCiAJCXhmc19pZm9ya19pbml0X2NvdyhpcCk7CiAKJiM0MzsJaW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9TSEFSRUQ7CiYjNDM7CiAJaWYgKCF4ZnNfaWV4dF9sb29rdXBfZXh0ZW50KGlwLCBpcC0mZ3Q7aV9jb3dmcCwgb2Zmc2V0X2ZzYiwgJmFtcDtpY3VyLCAmYW1wO2dvdCkpCiAJCWdvdC5icl9zdGFydG9mZiA9IGVuZF9mc2I7CiAJaWYgKGdvdC5icl9zdGFydG9mZiAmbHQ7PSBvZmZzZXRfZnNiKSB7CkBAIC0xODAzLDkgJiM0MzsxODExLDEyIEBAIHhmc19idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbigKIAlpZiAoeGZzX2lzX3NodXRkb3duKG1wKSkKIAkJcmV0dXJuIC1FSU87CiAKJiM0MzsJaWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKQomIzQzOwkJaW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTsKJiM0MzsKIAlpZiAoeGZzX2lzX3pvbmVkX2lub2RlKGlwKSkKIAkJcmV0dXJuIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LAotCQkJCWNvdW50LCBmbGFncywgaW9tYXAsIHNyY21hcCk7CiYjNDM7CQkJCWNvdW50LCBmbGFncywgaW9tYXAsIHNyY21hcCwgaW9tYXBfZmxhZ3MpOwogCiAJLyogd2UgY2FuJiMzOTt0IHVzZSBkZWxheWVkIGFsbG9jYXRpb25zIHdoZW4gdXNpbmcgZXh0ZW50IHNpemUgaGludHMgKi8KIAlpZiAoeGZzX2dldF9leHRzel9oaW50KGlwKSkKQEAgLTIxOTEsMTIgJiM0MzsyMjAyLDE3IEBAIHhmc19yZWFkX2lvbWFwX2JlZ2luKAogCWJvb2wJCQlzaGFyZWQgPSBmYWxzZTsKIAl1bnNpZ25lZCBpbnQJCWxvY2ttb2RlID0gWEZTX0lMT0NLX1NIQVJFRDsKIAl1NjQJCQlzZXE7CiYjNDM7CXVuc2lnbmVkIGludAkJaW9tYXBfZmxhZ3MgPSAwOwogCiAJQVNTRVJUKCEoZmxhZ3MgJmFtcDsgKElPTUFQX1dSSVRFIHwgSU9NQVBfWkVSTykpKTsKIAogCWlmICh4ZnNfaXNfc2h1dGRvd24obXApKQogCQlyZXR1cm4gLUVJTzsKIAomIzQzOwlpZiAoZnN2ZXJpdHlfYWN0aXZlKGlub2RlKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAob2Zmc2V0ICZndDs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKSkKJiM0MzsJCWlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7CiYjNDM7CiAJZXJyb3IgPSB4ZnNfaWxvY2tfZm9yX2lvbWFwKGlwLCBmbGFncywgJmFtcDtsb2NrbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CkBAIC0yMjEwLDggJiM0MzsyMjI2LDkgQEAgeGZzX3JlYWRfaW9tYXBfYmVnaW4oCiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJdHJhY2VfeGZzX2lvbWFwX2ZvdW5kKGlwLCBvZmZzZXQsIGxlbmd0aCwgWEZTX0RBVEFfRk9SSywgJmFtcDtpbWFwKTsKLQlyZXR1cm4geGZzX2JtYnRfdG9faW9tYXAoaXAsIGlvbWFwLCAmYW1wO2ltYXAsIGZsYWdzLAotCQkJCSBzaGFyZWQgPyBJT01BUF9GX1NIQVJFRCA6IDAsIHNlcSk7CiYjNDM7CWlvbWFwX2ZsYWdzIHw9IHNoYXJlZCA/IElPTUFQX0ZfU0hBUkVEIDogMDsKJiM0MzsKJiM0MzsJcmV0dXJuIHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgJmFtcDtpbWFwLCBmbGFncywgaW9tYXBfZmxhZ3MsIHNlcSk7CiB9CiAKIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgeGZzX3JlYWRfaW9tYXBfb3BzID0gewpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb3BzLmMgYi9mcy94ZnMveGZzX2lvcHMuYwppbmRleCA2MzM5ZjQ5NTZlY2IzOS4uNzA2MzdjZGNjMjk5NzIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9wcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfaW9wcy5jCkBAIC0zNSw2ICYjNDM7MzUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NlY3VyaXR5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXZlcnNpb24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWVtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZnN2ZXJpdHkuaCZndDsKIAogLyoKICAqIERpcmVjdG9yaWVzIGhhdmUgZGlmZmVyZW50IGxvY2sgb3JkZXIgdy5yLnQuIG1tYXBfbG9jayBjb21wYXJlZCB0byByZWd1bGFyCkBAIC01ODAsNiAmIzQzOzU4MSwxMCBAQCB4ZnNfcmVwb3J0X2Rpb2FsaWduKAogCXN0cnVjdCBibG9ja19kZXZpY2UJKmJkZXYgPSB0YXJnZXQtJmd0O2J0X2JkZXY7CiAKIAlzdGF0LSZndDtyZXN1bHRfbWFzayB8PSBTVEFUWF9ESU9BTElHTiB8IFNUQVRYX0RJT19SRUFEX0FMSUdOOwomIzQzOwomIzQzOwlpZiAoZnN2ZXJpdHlfYWN0aXZlKFZGU19JKGlwKSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJc3RhdC0mZ3Q7ZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChiZGV2KSAmIzQzOyAxOwogCiAJLyoKQEAgLTEzNzAsNiAmIzQzOzEzNzUsOCBAQCB4ZnNfaW5vZGVfc2hvdWxkX2VuYWJsZV9kYXgoCiAJCXJldHVybiBmYWxzZTsKIAlpZiAoIXhmc19pbm9kZV9zdXBwb3J0c19kYXgoaXApKQogCQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmIChpcC0mZ3Q7aV9kaWZsYWdzMiAmYW1wOyBYRlNfRElGTEFHMl9WRVJJVFkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAJaWYgKHhmc19oYXNfZGF4X2Fsd2F5cyhpcC0mZ3Q7aV9tb3VudCkpCiAJCXJldHVybiB0cnVlOwogCWlmIChpcC0mZ3Q7aV9kaWZsYWdzMiAmYW1wOyBYRlNfRElGTEFHMl9EQVgpCkBAIC0xMzk4LDEyICYjNDM7MTQwNSwxNSBAQCB4ZnNfZGlmbGFnc190b19pZmxhZ3MoCiAJCWZsYWdzIHw9IFNfTk9BVElNRTsKIAlpZiAoaW5pdCAmYW1wOyZhbXA7IHhmc19pbm9kZV9zaG91bGRfZW5hYmxlX2RheChpcCkpCiAJCWZsYWdzIHw9IFNfREFYOwomIzQzOwlpZiAoeGZsYWdzICZhbXA7IEZTX1hGTEFHX1ZFUklUWSkKJiM0MzsJCWZsYWdzIHw9IFNfVkVSSVRZOwogCiAJLyoKIAkgKiBTX0RBWCBjYW4gb25seSBiZSBzZXQgZHVyaW5nIGlub2RlIGluaXRpYWxpemF0aW9uIGFuZCBpcyBuZXZlciBzZXQgYnkKIAkgKiB0aGUgVkZTLCBzbyB3ZSBjYW5ub3QgbWFzayBvZmYgU19EQVggaW4gaV9mbGFncy4KIAkgKi8KLQlpbm9kZS0mZ3Q7aV9mbGFncyAmYW1wOz0gfihTX0lNTVVUQUJMRSB8IFNfQVBQRU5EIHwgU19TWU5DIHwgU19OT0FUSU1FKTsKJiM0MzsJaW5vZGUtJmd0O2lfZmxhZ3MgJmFtcDs9CiYjNDM7CQl+KFNfSU1NVVRBQkxFIHwgU19BUFBFTkQgfCBTX1NZTkMgfCBTX05PQVRJTUUgfCBTX1ZFUklUWSk7CiAJaW5vZGUtJmd0O2lfZmxhZ3MgfD0gZmxhZ3M7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jIGIvZnMveGZzL3hmc19tZXNzYWdlLmMKaW5kZXggMDI0M2U1MDlhNDY4OTEuLjQ0YjEzZDQ2MDQ5YzYyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21lc3NhZ2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX21lc3NhZ2UuYwpAQCAtMTQ5LDYgJiM0MzsxNDksMTAgQEAgeGZzX3dhcm5fZXhwZXJpbWVudGFsKAogCQkJLm9wc3RhdGUJPSBYRlNfT1BTVEFURV9XQVJORURfTEFSUCwKIAkJCS5uYW1lCQk9ICYjMzQ7bG9nZ2VkIGV4dGVuZGVkIGF0dHJpYnV0ZXMmIzM0OywKIAkJfSwKJiM0MzsJCVtYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZXSA9IHsKJiM0MzsJCQkub3BzdGF0ZQk9IFhGU19PUFNUQVRFX1dBUk5FRF9GU1ZFUklUWSwKJiM0MzsJCQkubmFtZQkJPSAmIzM0O2ZzdmVyaXR5JiMzNDssCiYjNDM7CQl9LAogCX07CiAJQVNTRVJUKGZlYXQgJmd0Oz0gMCAmYW1wOyZhbXA7IGZlYXQgJmx0OyBYRlNfRVhQRVJJTUVOVEFMX01BWCk7CiAJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUoZmVhdHVyZXMpICE9IFhGU19FWFBFUklNRU5UQUxfTUFYKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5oIGIvZnMveGZzL3hmc19tZXNzYWdlLmgKaW5kZXggODExYjg4NWY0MWMzNWEuLjM2NGZjYzdlNDJiMDg0IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21lc3NhZ2UuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy94ZnMveGZzX21lc3NhZ2UuaApAQCAtOTMsNiAmIzQzOzkzLDcgQEAgdm9pZCB4ZnNfYnVmX2FsZXJ0X3JhdGVsaW1pdGVkKHN0cnVjdCB4ZnNfYnVmICpicCwgY29uc3QgY2hhciAqcmxtc2csCiBlbnVtIHhmc19leHBlcmltZW50YWxfZmVhdCB7CiAJWEZTX0VYUEVSSU1FTlRBTF9TSFJJTkssCiAJWEZTX0VYUEVSSU1FTlRBTF9MQVJQLAomIzQzOwlYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZLAogCiAJWEZTX0VYUEVSSU1FTlRBTF9NQVgsCiB9OwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3VudC5oCmluZGV4IDY2YTAyZDFiOWFkN2ExLi44NzVjOWIwZjhlOTkxZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfbW91bnQuaApAQCAtMzg4LDYgJiM0MzszODgsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfbW91bnQgewogI2RlZmluZSBYRlNfRkVBVF9FWENIQU5HRV9SQU5HRQkoMVVMTCAmbHQ7Jmx0OyAyNykJLyogZXhjaGFuZ2UgcmFuZ2UgKi8KICNkZWZpbmUgWEZTX0ZFQVRfTUVUQURJUgkoMVVMTCAmbHQ7Jmx0OyAyOCkJLyogbWV0YWRhdGEgZGlyZWN0b3J5IHRyZWUgKi8KICNkZWZpbmUgWEZTX0ZFQVRfWk9ORUQJCSgxVUxMICZsdDsmbHQ7IDI5KQkvKiB6b25lZCBSVCBkZXZpY2UgKi8KJiM0MzsjZGVmaW5lIFhGU19GRUFUX1ZFUklUWQkJKDFVTEwgJmx0OyZsdDsgMzApCS8qIGZzLXZlcml0eSAqLwogCiAvKiBNb3VudCBmZWF0dXJlcyAqLwogI2RlZmluZSBYRlNfRkVBVF9OT0xJRkVUSU1FCSgxVUxMICZsdDsmbHQ7IDQ3KQkvKiBkaXNhYmxlIGxpZmV0aW1lIGhpbnRzICovCkBAIC00NDUsNiAmIzQzOzQ0Niw3IEBAIF9fWEZTX0hBU19GRUFUKGV4Y2hhbmdlX3JhbmdlLCBFWENIQU5HRV9SQU5HRSkKIF9fWEZTX0hBU19GRUFUKG1ldGFkaXIsIE1FVEFESVIpCiBfX1hGU19IQVNfRkVBVCh6b25lZCwgWk9ORUQpCiBfX1hGU19IQVNfRkVBVChub2xpZmV0aW1lLCBOT0xJRkVUSU1FKQomIzQzO19fWEZTX0hBU19GRUFUKHZlcml0eSwgVkVSSVRZKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2hhc19ydGdyb3Vwcyhjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcCkKIHsKQEAgLTU4Miw2ICYjNDM7NTg0LDggQEAgX19YRlNfSEFTX0ZFQVQobm91dWlkLCBOT1VVSUQpCiAjZGVmaW5lIFhGU19PUFNUQVRFX1JFU1VNSU5HX1FVT1RBT04JMTgKIC8qIChab25lZCkgR0MgaXMgaW4gcHJvZ3Jlc3MgKi8KICNkZWZpbmUgWEZTX09QU1RBVEVfWk9ORUdDX1JVTk5JTkcJMjAKJiM0MzsvKiBLZXJuZWwgaGFzIGxvZ2dlZCBhIHdhcm5pbmcgYWJvdXQgZnN2ZXJpdHkgc3VwcG9ydCAqLwomIzQzOyNkZWZpbmUgWEZTX09QU1RBVEVfV0FSTkVEX0ZTVkVSSVRZCTIxCiAKICNkZWZpbmUgX19YRlNfSVNfT1BTVEFURShuYW1lLCBOQU1FKSBcCiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lzXyAjIyBuYW1lIChzdHJ1Y3QgeGZzX21vdW50ICptcCkgXApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19zdXBlci5jIGIvZnMveGZzL3hmc19zdXBlci5jCmluZGV4IDg1MzFkNTI2ZmM0NDA5Li5hNzc3NGQyZDZiMjNmYyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3hmcy94ZnNfc3VwZXIuYwpAQCAtMzAsNiAmIzQzOzMwLDcgQEAKICNpbmNsdWRlICYjMzQ7eGZzX2ZpbGVzdHJlYW0uaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hmc19xdW90YS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7eGZzX3N5c2ZzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7eGZzX2ZzdmVyaXR5LmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfb25kaXNrLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfcm1hcF9pdGVtLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt4ZnNfcmVmY291bnRfaXRlbS5oJiMzNDsKQEAgLTE2ODksNiAmIzQzOzE2OTAsOSBAQCB4ZnNfZnNfZmlsbF9zdXBlcigKIAlzYi0mZ3Q7c19xdW90YV90eXBlcyA9IFFUWVBFX01BU0tfVVNSIHwgUVRZUEVfTUFTS19HUlAgfCBRVFlQRV9NQVNLX1BSSjsKICNlbmRpZgogCXNiLSZndDtzX29wID0gJmFtcDt4ZnNfc3VwZXJfb3BlcmF0aW9uczsKJiM0MzsjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWQomIzQzOwlzYi0mZ3Q7c192b3AgPSAmYW1wO3hmc19mc3Zlcml0eV9vcHM7CiYjNDM7I2VuZGlmCiAKIAkvKgogCSAqIERlbGF5IG1vdW50IHdvcmsgaWYgdGhlIGRlYnVnIGhvb2sgaXMgc2V0LiBUaGlzIGlzIGRlYnVnCkBAIC0xOTQxLDYgJiM0MzsxOTQ1LDkgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoCiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9maWxlc3RyZWFtX3VubW91bnQ7CiAKJiM0MzsJaWYgKHhmc19oYXNfdmVyaXR5KG1wKSkKJiM0MzsJCXhmc193YXJuX2V4cGVyaW1lbnRhbChtcCwgWEZTX0VYUEVSSU1FTlRBTF9GU1ZFUklUWSk7CiYjNDM7CiAJcm9vdCA9IGlncmFiKFZGU19JKG1wLSZndDttX3Jvb3RpcCkpOwogCWlmICghcm9vdCkgewogCQllcnJvciA9IC1FTk9FTlQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmggYi9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmgKaW5kZXggNmM0NjdkZWQ5NzUxZmMuLmY5NDMzMzMyYzI3NGJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oCkBAIC0xMjQsNiAmIzQzOzEyNCw4IEBAIHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHsKIAkgKiBAYnVmOiB0aGUgTWVya2xlIHRyZWUgYmxvY2sgdG8gd3JpdGUKIAkgKiBAcG9zOiB0aGUgcG9zaXRpb24gb2YgdGhlIGJsb2NrIGluIHRoZSBNZXJrbGUgdHJlZSAoaW4gYnl0ZXMpCiAJICogQHNpemU6IHRoZSBNZXJrbGUgdHJlZSBibG9jayBzaXplIChpbiBieXRlcykKJiM0MzsJICogQHplcm9fZGlnZXN0OiB0aGUgaGFzaCBvZiB0aGUgYWxsLXplcm9lcyBibG9jawomIzQzOwkgKiBAZGlnZXN0X3NpemU6IHNpemUgb2YgemVyb19kaWdlc3QsIGluIGJ5dGVzCiAJICoKIAkgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIGJldHdlZW4gLSZndDtiZWdpbl9lbmFibGVfdmVyaXR5KCkgYW5kCiAJICogLSZndDtlbmRfZW5hYmxlX3Zlcml0eSgpLgpAQCAtMTMxLDcgJiM0MzsxMzMsOSBAQCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB7CiAJICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlCiAJICovCiAJaW50ICgqd3JpdGVfbWVya2xlX3RyZWVfYmxvY2spKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsCi0JCQkJICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKTsKJiM0MzsJCQkJICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLAomIzQzOwkJCQkgICAgICAgY29uc3QgdTggKnplcm9fZGlnZXN0LAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKTsKIH07CiAKICNpZmRlZiBDT05GSUdfRlNfVkVSSVRZCkBAIC0zMTcsMTAgJiM0MzszMjEsMTQgQEAgc3RhdGljIGlubGluZSBpbnQgZnN2ZXJpdHlfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogCXJldHVybiAwOwogfQogCiYjNDM7aW50IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKJiM0MzsKIHZvaWQgZnN2ZXJpdHlfY2xlYW51cF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogc3RydWN0IHBhZ2UgKmdlbmVyaWNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgpOwogdm9pZCBnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwomIzQzO2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwKJiM0MzsJCQkgICAgbG9mZl90IHBvcyk7CiAKICNlbmRpZgkvKiBfTElOVVhfRlNWRVJJVFlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oCmluZGV4IDU2YjQzZDU5NGU2ZTI5Li4zNmZjOTMxMzgyYTg3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaW9tYXAuaApAQCAtMTAsNiAmIzQzOzEwLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9tbV90eXBlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Jsa2Rldi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZvbGlvX2JhdGNoLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpc3Rfc29ydC5oJmd0OwogCiBzdHJ1Y3QgYWRkcmVzc19zcGFjZTsKIHN0cnVjdCBmaWVtYXBfZXh0ZW50X2luZm87CkBAIC00ODgsNyAmIzQzOzQ4OSw5IEBAIHN0cnVjdCBpb21hcF9pb2VuZCAqaW9tYXBfc3BsaXRfaW9lbmQoc3RydWN0IGlvbWFwX2lvZW5kICppb2VuZCwKIHZvaWQgaW9tYXBfZmluaXNoX2lvZW5kcyhzdHJ1Y3QgaW9tYXBfaW9lbmQgKmlvZW5kLCBpbnQgZXJyb3IpOwogdm9pZCBpb21hcF9pb2VuZF90cnlfbWVyZ2Uoc3RydWN0IGlvbWFwX2lvZW5kICppb2VuZCwKIAkJc3RydWN0IGxpc3RfaGVhZCAqbW9yZV9pb2VuZHMpOwotdm9pZCBpb21hcF9zb3J0X2lvZW5kcyhzdHJ1Y3QgbGlzdF9oZWFkICppb2VuZF9saXN0KTsKJiM0MztpbnQgaW9tYXBfaW9lbmRfY29tcGFyZSh2b2lkICpwcml2LCBjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICphLAomIzQzOwkJY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqYik7CiYjNDM7dm9pZCBpb21hcF9zb3J0X2lvZW5kcyhzdHJ1Y3QgbGlzdF9oZWFkICppb2VuZF9saXN0LCBsaXN0X2NtcF9mdW5jX3QgY21wKTsKIHNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCWxvZmZfdCBwb3MsIGxvZmZfdCBlbmRfcG9zLCB1bnNpZ25lZCBpbnQgZGlydHlfbGVuKTsKIGludCBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0KHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIGludCBlcnJvcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDEzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTY5CgkJCQkJCQlvdXRwdXQ6IDMzOAoJCQkJCQkJdGhvdWdodHM6IDEyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWEZTIGZzLXZlcml0eSBQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGFkZGluZyBmcy12ZXJpdHkgc3VwcG9ydCB0byBYRlMuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBhZGRpdGlvbiwgc28gbGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIFJpZ2h0IGF3YXksIEkmIzM5O20gbm90aWNpbmcgbW9kaWZpY2F0aW9ucyBhY3Jvc3MgbXVsdGlwbGUgZmlsZSBzeXN0ZW1zIOKAkyBgZnMveGZzL2AsIGBmcy92ZXJpdHkvYCwgYW5kIGV2ZW4gdG91Y2hlcyBpbiBgZnMvZXh0NC9gLCBgZnMvYnRyZnMvYCwgYW5kIGBmcy9mMmZzL2AuIFRoZSBmYWN0IHRoYXQgYGZzL3Zlcml0eS9gIGlzIGJlaW5nIHRvdWNoZWQgaXMgaW50ZXJlc3RpbmcsIGFsb25nIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBgZnMveGZzL3hmc19mc3Zlcml0eS5jYC4gQWRkaXRpb25hbGx5LCB3ZSBzZWUgY2hhbmdlcyBpbiBgZnMvYXR0ci5jYCwgYGZzL3N0YXQuY2AsIGBmcy9maWxlX2F0dHIuY2AsIGFuZCBgZnMvaW9tYXAvaW9lbmQuY2Ag4oCTIHRoaXMgdGhpbmcmIzM5O3MgZ290IGl0cyBmaW5nZXJzIGluIGEgbG90IG9mIHBpZXMuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBlbmFibGluZyBmcy12ZXJpdHkgYXMgYSBuZXcgZmVhdHVyZSBmb3IgWEZTLCB3aGljaCBtZWFucyBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlIGFuZCwgdGhlcmVmb3JlLCBmdXp6YWJsZS4gTXkgaW5pdGlhbCBzdHJhdGVneSBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBgQ09ORklHX0ZTX1ZFUklUWWAgaXMgYW4gb2J2aW91cyBwcmVyZXF1aXNpdGUuIEFuZCwgb2YgY291cnNlLCBgQ09ORklHX1hGU19GU2AgaXMgcmVxdWlyZWQuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY29yZSBmdW5jdGlvbnMgd2UgbmVlZCB0byBmb2N1cyBvbi4gSSYjMzk7bSBzZWVpbmcgYSBoYW5kZnVsIHRoYXQgbG9vayBwYXJ0aWN1bGFybHkgcmVsZXZhbnQ6IGB4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3JgLCBgeGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3JgLCBgeGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YWAsIGB4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbmAsIGB4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlYCwgYHhmc19mc3Zlcml0eV9lbmRfZW5hYmxlYCwgYHhmc19mc3Zlcml0eV9yZWFkX21lcmtsZWAsIGB4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlYCwgYHhmc19mc3Zlcml0eV93cml0ZV9tZXJrbGVgLCBhcyB3ZWxsIGFzIHN0YW5kYXJkIHJlYWQvd3JpdGUvb3BlbiByb3V0aW5lcyBsaWtlIGB4ZnNfZmlsZV9idWZmZXJlZF9yZWFkYCwgYHhmc19maWxlX2Rpb19yZWFkYCwgYHhmc19maWxlX3JlYWRfaXRlcmAsIGB4ZnNfZmlsZV9vcGVuYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldGAgYW5kIGB4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhYC4KCkkgd2FudCB0byBjb25maXJtIHdoZXRoZXIgYENPTkZJR19GU19WRVJJVFlgIGlzIHRoZSBvbmx5IGNvbmZpZyB0aGF0JiMzOTtzIHJlcXVpcmVkLiBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgWEZTIEtjb25maWcgb3IgTWFrZWZpbGUuIFRoZSBwYXRjaCBhZGRzIGB4ZnMtJChDT05GSUdfRlNfVkVSSVRZKSAmIzQzOz0geGZzX2ZzdmVyaXR5Lm9gLCBzbyB0aGF0IGNvbmZpcm1zIGl0LgoKTm93LCBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSBub3RhYmxlIGNoYW5nZXMgaW4gdGhlIGV4aXN0aW5nIGBmcy92ZXJpdHkvYCBjb2RlLiBgZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvYCwgYGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkYCwgYW5kIGBmc3Zlcml0eV9maWxsX3plcm9oYXNoYCBsb29rIGxpa2UgdGhleSBjb3VsZCBiZSB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBpbnRlcmFjdGlvbnMuCgpJJiMzOTttIGFsc28gc2VlaW5nIHNvbWUgZnMtdmVyaXR5LXJlbGF0ZWQgYWRkaXRpb25zIG9yIG1vZGlmaWNhdGlvbnMgaW4gb3RoZXIgWEZTIHN1Yi1zeXN0ZW1zLiBJbiBgZnMveGZzL3NjcnViL2NvbW1vbi5jYCwgdGhlcmUmIzM5O3MgYHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5YCBhbmQgYHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbmAuIEluIGBmcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNgLCB0aGVyZSBpcyBgeHJlcF9pbm9kZV92ZXJpdHlgLiBJbiBgZnMveGZzL3hmc19hb3BzLmNgLCBJIHNlZSBgeGZzX3JlYWRfaW9lbmRfY29tcGFyZWAsIGB4ZnNfZW5kX2lvZW5kX3JlYWRgLCBhbmQgYHhmc19pb21hcF93cml0ZXBhZ2VzYCBiZWluZyB0b3VjaGVkLiBBbmQgZmluYWxseSwgSSBzZWUgYHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbmAgaW4gYGZzL3hmcy94ZnNfaW9tYXAuY2AsIGFsb25nIHdpdGggYHhmc19maWxlX2J1ZmZlcmVkX3JlYWRgIGluIGBmcy94ZnMveGZzX2ZpbGUuY2AuCgpPa2F5LCBiYXNlZCBvbiB0aGlzIGluaXRpYWwgc3dlZXAsIEkmIzM5O2xsIGNvbXBpbGUgYSBgRm9jdXNTeW1ib2xzYCBsaXN0IGZvciB0aGUgZnV6emluZyBjYW1wYWlnbi4gSSYjMzk7bSBnb2luZyB0byBpbmNsdWRlOgoKLSBgeGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZWAKLSBgeGZzX2ZzdmVyaXR5X2VuZF9lbmFibGVgCi0gYHhmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvcmAKLSBgeGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlYAotIGB4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlYAotIGB4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlYAotIGB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhYAotIGB4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbmAKLSBgeGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3JgCi0gYHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5YAotCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNfVkVSSVRZJiMzNDssCiAgICAmIzM0O1hGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmc19mc3Zlcml0eV9iZWdpbl9lbmFibGUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9yZWFkX21lcmtsZSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbiYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvciYjMzQ7LAogICAgJiMzNDt4Y2hrX2lub2RlX3NldHVwX3Zlcml0eSYjMzQ7LAogICAgJiMzNDt4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4mIzM0OywKICAgICYjMzQ7eHJlcF9pbm9kZV92ZXJpdHkmIzM0OywKICAgICYjMzQ7eGZzX3JlYWRfaW9lbmRfY29tcGFyZSYjMzQ7LAogICAgJiMzNDt4ZnNfZW5kX2lvZW5kX3JlYWQmIzM0OywKICAgICYjMzQ7eGZzX2lvbWFwX3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7ZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvJiMzNDssCiAgICAmIzM0O2ZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgZnMtdmVyaXR5IHN1cHBvcnQgZm9yIHRoZSBYRlMgZmlsZXN5c3RlbS4gSXQgaW50cm9kdWNlcyBhIG5ldyBmaWxlIGBmcy94ZnMveGZzX2ZzdmVyaXR5LmNgIHdpdGggdGhlIGNvcmUgbG9naWMsIG1vZGlmaWVzIFhGUyBJL08gcGF0aHMsIGFuZCBpbnRlZ3JhdGVzIHdpdGggdGhlIGdlbmVyaWMgZnMtdmVyaXR5IGxheWVyLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RlNfVkVSSVRZJiMzNDssCiAgICAmIzM0O1hGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3hmc19mc3Zlcml0eV9iZWdpbl9lbmFibGUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV9yZWFkX21lcmtsZSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlJiMzNDssCiAgICAmIzM0O3hmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUmIzM0OywKICAgICYjMzQ7eGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YSYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbiYjMzQ7LAogICAgJiMzNDt4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvciYjMzQ7LAogICAgJiMzNDt4Y2hrX2lub2RlX3NldHVwX3Zlcml0eSYjMzQ7LAogICAgJiMzNDt4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4mIzM0OywKICAgICYjMzQ7eHJlcF9pbm9kZV92ZXJpdHkmIzM0OywKICAgICYjMzQ7eGZzX3JlYWRfaW9lbmRfY29tcGFyZSYjMzQ7LAogICAgJiMzNDt4ZnNfZW5kX2lvZW5kX3JlYWQmIzM0OywKICAgICYjMzQ7eGZzX2lvbWFwX3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7ZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvJiMzNDssCiAgICAmIzM0O2ZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGltcGxlbWVudHMgZnMtdmVyaXR5IHN1cHBvcnQgZm9yIHRoZSBYRlMgZmlsZXN5c3RlbS4gSXQgaW50cm9kdWNlcyBhIG5ldyBmaWxlIGBmcy94ZnMveGZzX2ZzdmVyaXR5LmNgIHdpdGggdGhlIGNvcmUgbG9naWMsIG1vZGlmaWVzIFhGUyBJL08gcGF0aHMsIGFuZCBpbnRlZ3JhdGVzIHdpdGggdGhlIGdlbmVyaWMgZnMtdmVyaXR5IGxheWVyLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDEzOjU4OjQyLjUxNDk1NTAyNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjY2MTY4MDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTX1ZFUklUWVwiLFxuICAgIFwiWEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZVwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X2VuZF9lbmFibGVcIixcbiAgICBcInhmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvclwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlblwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3JcIixcbiAgICBcInhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5XCIsXG4gICAgXCJ4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW5cIixcbiAgICBcInhyZXBfaW5vZGVfdmVyaXR5XCIsXG4gICAgXCJ4ZnNfcmVhZF9pb2VuZF9jb21wYXJlXCIsXG4gICAgXCJ4ZnNfZW5kX2lvZW5kX3JlYWRcIixcbiAgICBcInhmc19pb21hcF93cml0ZXBhZ2VzXCIsXG4gICAgXCJmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm9cIixcbiAgICBcImZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBmcy12ZXJpdHkgc3VwcG9ydCBmb3IgdGhlIFhGUyBmaWxlc3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZpbGUgYGZzL3hmcy94ZnNfZnN2ZXJpdHkuY2Agd2l0aCB0aGUgY29yZSBsb2dpYywgbW9kaWZpZXMgWEZTIEkvTyBwYXRocywgYW5kIGludGVncmF0ZXMgd2l0aCB0aGUgZ2VuZXJpYyBmcy12ZXJpdHkgbGF5ZXIuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMzo1ODo0Mi41MTQ5NjMxMDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTA2MjI2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZDFiM2M1ZGQ4YWE1ZDgwMzIyM2NkZmVkYWNjMDJiNjRiMjZjZWQ2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDIyIDEzOjU4OjQwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2F0dHIuYyBiL2ZzL2F0dHIuY1xcbmluZGV4IDRmNDM3ZmFiYjdmMGY1Li43MTg4OGFjOTAzYzI3ZCAxMDA2NDRcXG4tLS0gYS9mcy9hdHRyLmNcXG4rKysgYi9mcy9hdHRyLmNcXG5AQCAtMTc2LDcgKzE3Niw3IEBAIGludCBzZXRhdHRyX3ByZXBhcmUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4gXFx0XFx0ICogY292ZXJlZCBieSB0aGUgb3Blbi10aW1lIGNoZWNrIGJlY2F1c2Ugc3lzX3RydW5jYXRlKCkgdGFrZXMgYVxcbiBcXHRcXHQgKiBwYXRoLCBub3QgYW4gb3BlbiBmaWxlLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX1ZFUklUWSkgXFx1MDAyNlxcdTAwMjYgSVNfVkVSSVRZKGlub2RlKSlcXG4rXFx0XFx0aWYgKElTX1ZFUklUWShpbm9kZSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuIFxcbiBcXHRcXHRlcnJvciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIGF0dHItXFx1MDAzZWlhX3NpemUpO1xcbmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuY1xcbmluZGV4IDI3MjU5OGY2YWU3N2FmLi5kZTcyOWM0NGQ2ZDI1MSAxMDA2NDRcXG4tLS0gYS9mcy9idHJmcy9pbm9kZS5jXFxuKysrIGIvZnMvYnRyZnMvaW5vZGUuY1xcbkBAIC04MDQwLDcgKzgwNDAsNiBAQCBzdGF0aWMgaW50IGJ0cmZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKHBhdGgtXFx1MDAzZWRlbnRyeSk7XFxuIFxcdHUzMiBibG9ja3NpemUgPSBidHJmc19zYihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNlY3RvcnNpemU7XFxuIFxcdHUzMiBiaV9mbGFncyA9IEJUUkZTX0koaW5vZGUpLVxcdTAwM2VmbGFncztcXG4tXFx0dTMyIGJpX3JvX2ZsYWdzID0gQlRSRlNfSShpbm9kZSktXFx1MDAzZXJvX2ZsYWdzO1xcbiBcXG4gXFx0c3RhdC1cXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfQlRJTUU7XFxuIFxcdHN0YXQtXFx1MDAzZWJ0aW1lLnR2X3NlYyA9IEJUUkZTX0koaW5vZGUpLVxcdTAwM2VpX290aW1lX3NlYztcXG5AQCAtODA1Myw4ICs4MDUyLDYgQEAgc3RhdGljIGludCBidHJmc19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfSU1NVVRBQkxFO1xcbiBcXHRpZiAoYmlfZmxhZ3MgXFx1MDAyNiBCVFJGU19JTk9ERV9OT0RVTVApXFxuIFxcdFxcdHN0YXQtXFx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9OT0RVTVA7XFxuLVxcdGlmIChiaV9yb19mbGFncyBcXHUwMDI2IEJUUkZTX0lOT0RFX1JPX1ZFUklUWSlcXG4tXFx0XFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX1ZFUklUWTtcXG4gXFxuIFxcdHN0YXQtXFx1MDAzZWF0dHJpYnV0ZXNfbWFzayB8PSAoU1RBVFhfQVRUUl9BUFBFTkQgfFxcbiBcXHRcXHRcXHRcXHQgIFNUQVRYX0FUVFJfQ09NUFJFU1NFRCB8XFxuZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3Zlcml0eS5jIGIvZnMvYnRyZnMvdmVyaXR5LmNcXG5pbmRleCA5ODMzNjVhNzM1NDE2OC4uYmQ3OWUzNDNhZTIzN2YgMTAwNjQ0XFxuLS0tIGEvZnMvYnRyZnMvdmVyaXR5LmNcXG4rKysgYi9mcy9idHJmcy92ZXJpdHkuY1xcbkBAIC03NzMsMTEgKzc3MywxNSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmJ0cmZzX3JlYWRfbWVya2xlX3RyZWVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiAgKiBAYnVmOlxcdE1lcmtsZSB0cmVlIGJsb2NrIHRvIHdyaXRlXFxuICAqIEBwb3M6XFx0dGhlIHBvc2l0aW9uIG9mIHRoZSBibG9jayBpbiB0aGUgTWVya2xlIHRyZWUgKGluIGJ5dGVzKVxcbiAgKiBAc2l6ZTpcXHR0aGUgTWVya2xlIHRyZWUgYmxvY2sgc2l6ZSAoaW4gYnl0ZXMpXFxuKyAqIEB6ZXJvX2RpZ2VzdDpcXHR0aGUgaGFzaCBvZiB0aGUgYWxsLXplcm9lcyBibG9ja1xcbisgKiBAZGlnZXN0X3NpemU6XFx0c2l6ZSBvZiB6ZXJvX2RpZ2VzdCwgaW4gYnl0ZXNcXG4gICpcXG4gICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlXFxuICAqL1xcbiBzdGF0aWMgaW50IGJ0cmZzX3dyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsXFxuLVxcdFxcdFxcdFxcdFxcdCB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSlcXG4rXFx0XFx0XFx0XFx0XFx0IHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxcbitcXHRcXHRcXHRcXHRcXHQgY29uc3QgdTggKnplcm9fZGlnZXN0LFxcbitcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xcbiBcXHRsb2ZmX3QgbWVya2xlX3BvcyA9IG1lcmtsZV9maWxlX3Bvcyhpbm9kZSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi45OWZhN2EyODk1MWY1ZSAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcXG4rKysgYi9mcy9leHQ0L2lub2RlLmNcXG5AQCAtNjI1MCwxNSArNjI1MCwxMiBAQCBpbnQgZXh0NF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcXG4gXFx0XFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0lNTVVUQUJMRTtcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgRVhUNF9OT0RVTVBfRkwpXFxuIFxcdFxcdHN0YXQtXFx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9OT0RVTVA7XFxuLVxcdGlmIChmbGFncyBcXHUwMDI2IEVYVDRfVkVSSVRZX0ZMKVxcbi1cXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfVkVSSVRZO1xcbiBcXG4gXFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlc19tYXNrIHw9IChTVEFUWF9BVFRSX0FQUEVORCB8XFxuIFxcdFxcdFxcdFxcdCAgU1RBVFhfQVRUUl9DT01QUkVTU0VEIHxcXG4gXFx0XFx0XFx0XFx0ICBTVEFUWF9BVFRSX0VOQ1JZUFRFRCB8XFxuIFxcdFxcdFxcdFxcdCAgU1RBVFhfQVRUUl9JTU1VVEFCTEUgfFxcbi1cXHRcXHRcXHRcXHQgIFNUQVRYX0FUVFJfTk9EVU1QIHxcXG4tXFx0XFx0XFx0XFx0ICBTVEFUWF9BVFRSX1ZFUklUWSk7XFxuK1xcdFxcdFxcdFxcdCAgU1RBVFhfQVRUUl9OT0RVTVApO1xcbiBcXG4gXFx0Z2VuZXJpY19maWxsYXR0cihpZG1hcCwgcmVxdWVzdF9tYXNrLCBpbm9kZSwgc3RhdCk7XFxuIFxcdHJldHVybiAwO1xcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3Zlcml0eS5jIGIvZnMvZXh0NC92ZXJpdHkuY1xcbmluZGV4IGNhNjFkYTUzZjMxM2ZhLi5hYzVjMTMzZjU1MjkyNSAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3Zlcml0eS5jXFxuKysrIGIvZnMvZXh0NC92ZXJpdHkuY1xcbkBAIC0zNCwzMiArMzQsNiBAQCBzdGF0aWMgaW5saW5lIGxvZmZfdCBleHQ0X3Zlcml0eV9tZXRhZGF0YV9wb3MoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0cmV0dXJuIHJvdW5kX3VwKGlub2RlLVxcdTAwM2VpX3NpemUsIDY1NTM2KTtcXG4gfVxcbiBcXG4tLypcXG4tICogUmVhZCBzb21lIHZlcml0eSBtZXRhZGF0YSBmcm9tIHRoZSBpbm9kZS4gIF9fdmZzX3JlYWQoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2VcXG4tICogd2UgbmVlZCB0byByZWFkIGJleW9uZCBpX3NpemUuXFxuLSAqL1xcbi1zdGF0aWMgaW50IHBhZ2VjYWNoZV9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LFxcbi1cXHRcXHRcXHQgIGxvZmZfdCBwb3MpXFxuLXtcXG4tXFx0d2hpbGUgKGNvdW50KSB7XFxuLVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuLVxcdFxcdHNpemVfdCBuO1xcbi1cXG4tXFx0XFx0Zm9saW8gPSByZWFkX21hcHBpbmdfZm9saW8oaW5vZGUtXFx1MDAzZWlfbWFwcGluZywgcG9zIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsXFxuLVxcdFxcdFxcdFxcdFxcdCBOVUxMKTtcXG4tXFx0XFx0aWYgKElTX0VSUihmb2xpbykpXFxuLVxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcXG4tXFxuLVxcdFxcdG4gPSBtZW1jcHlfZnJvbV9maWxlX2ZvbGlvKGJ1ZiwgZm9saW8sIHBvcywgY291bnQpO1xcbi1cXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi1cXG4tXFx0XFx0YnVmICs9IG47XFxuLVxcdFxcdHBvcyArPSBuO1xcbi1cXHRcXHRjb3VudCAtPSBuO1xcbi1cXHR9XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBXcml0ZSBzb21lIHZlcml0eSBtZXRhZGF0YSB0byB0aGUgaW5vZGUgZm9yIEZTX0lPQ19FTkFCTEVfVkVSSVRZLlxcbiAgKiBrZXJuZWxfd3JpdGUoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2UgdGhlIGZpbGUgZGVzY3JpcHRvciBpcyByZWFkb25seS5cXG5AQCAtMzExLDggKzI4NSw4IEBAIHN0YXRpYyBpbnQgZXh0NF9nZXRfdmVyaXR5X2Rlc2NyaXB0b3JfbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0Z290byBiYWQ7XFxuIFxcdGRlc2Nfc2l6ZV9wb3MgLT0gc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKTtcXG4gXFxuLVxcdGVyciA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBcXHUwMDI2ZGVzY19zaXplX2Rpc2ssIHNpemVvZihkZXNjX3NpemVfZGlzayksXFxuLVxcdFxcdFxcdCAgICAgZGVzY19zaXplX3Bvcyk7XFxuK1xcdGVyciA9IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKGlub2RlLCBcXHUwMDI2ZGVzY19zaXplX2Rpc2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgIHNpemVvZihkZXNjX3NpemVfZGlzayksIGRlc2Nfc2l6ZV9wb3MpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRkZXNjX3NpemUgPSBsZTMyX3RvX2NwdShkZXNjX3NpemVfZGlzayk7XFxuQEAgLTM1Miw3ICszMjYsNyBAQCBzdGF0aWMgaW50IGV4dDRfZ2V0X3Zlcml0eV9kZXNjcmlwdG9yKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZixcXG4gXFx0aWYgKGJ1Zl9zaXplKSB7XFxuIFxcdFxcdGlmIChkZXNjX3NpemUgXFx1MDAzZSBidWZfc2l6ZSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuLVxcdFxcdGVyciA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIGRlc2Nfc2l6ZSwgZGVzY19wb3MpO1xcbitcXHRcXHRlcnIgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBkZXNjX3NpemUsIGRlc2NfcG9zKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbkBAIC0zNzQsNyArMzQ4LDkgQEAgc3RhdGljIHZvaWQgZXh0NF9yZWFkYWhlYWRfbWVya2xlX3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4gfVxcbiBcXG4gc3RhdGljIGludCBleHQ0X3dyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsXFxuLVxcdFxcdFxcdFxcdFxcdHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKVxcbitcXHRcXHRcXHRcXHRcXHR1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0Y29uc3QgdTggKnplcm9fZGlnZXN0LFxcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpXFxuIHtcXG4gXFx0cG9zICs9IGV4dDRfdmVyaXR5X21ldGFkYXRhX3BvcyhmaWxlX2lub2RlKGZpbGUpKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZmlsZS5jIGIvZnMvZjJmcy9maWxlLmNcXG5pbmRleCA0YjUyYzU2ZDcxZjA3Zi4uOWI1MzFhMDE2ZWQ0ZDkgMTAwNjQ0XFxuLS0tIGEvZnMvZjJmcy9maWxlLmNcXG4rKysgYi9mcy9mMmZzL2ZpbGUuY1xcbkBAIC0xMDI0LDE1ICsxMDI0LDEyIEBAIGludCBmMmZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxcbiBcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfSU1NVVRBQkxFO1xcbiBcXHRpZiAoZmxhZ3MgXFx1MDAyNiBGMkZTX05PRFVNUF9GTClcXG4gXFx0XFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX05PRFVNUDtcXG4tXFx0aWYgKElTX1ZFUklUWShpbm9kZSkpXFxuLVxcdFxcdHN0YXQtXFx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9WRVJJVFk7XFxuIFxcbiBcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzX21hc2sgfD0gKFNUQVRYX0FUVFJfQ09NUFJFU1NFRCB8XFxuIFxcdFxcdFxcdFxcdCAgU1RBVFhfQVRUUl9BUFBFTkQgfFxcbiBcXHRcXHRcXHRcXHQgIFNUQVRYX0FUVFJfRU5DUllQVEVEIHxcXG4gXFx0XFx0XFx0XFx0ICBTVEFUWF9BVFRSX0lNTVVUQUJMRSB8XFxuLVxcdFxcdFxcdFxcdCAgU1RBVFhfQVRUUl9OT0RVTVAgfFxcbi1cXHRcXHRcXHRcXHQgIFNUQVRYX0FUVFJfVkVSSVRZKTtcXG4rXFx0XFx0XFx0XFx0ICBTVEFUWF9BVFRSX05PRFVNUCk7XFxuIFxcbiBcXHRnZW5lcmljX2ZpbGxhdHRyKGlkbWFwLCByZXF1ZXN0X21hc2ssIGlub2RlLCBzdGF0KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2YyZnMvdmVyaXR5LmMgYi9mcy9mMmZzL3Zlcml0eS5jXFxuaW5kZXggMzlmNDgyNTE1NDQ1MmEuLmYzYTQ2MTc2NTZkYjliIDEwMDY0NFxcbi0tLSBhL2ZzL2YyZnMvdmVyaXR5LmNcXG4rKysgYi9mcy9mMmZzL3Zlcml0eS5jXFxuQEAgLTM3LDM0ICszNyw2IEBAIHN0YXRpYyBpbmxpbmUgbG9mZl90IGYyZnNfdmVyaXR5X21ldGFkYXRhX3Bvcyhjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRyZXR1cm4gcm91bmRfdXAoaW5vZGUtXFx1MDAzZWlfc2l6ZSwgNjU1MzYpO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBSZWFkIHNvbWUgdmVyaXR5IG1ldGFkYXRhIGZyb20gdGhlIGlub2RlLiAgX192ZnNfcmVhZCgpIGNhbid0IGJlIHVzZWQgYmVjYXVzZVxcbi0gKiB3ZSBuZWVkIHRvIHJlYWQgYmV5b25kIGlfc2l6ZS5cXG4tICovXFxuLXN0YXRpYyBpbnQgcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsXFxuLVxcdFxcdFxcdCAgbG9mZl90IHBvcylcXG4te1xcbi1cXHR3aGlsZSAoY291bnQpIHtcXG4tXFx0XFx0c2l6ZV90IG4gPSBtaW5fdChzaXplX3QsIGNvdW50LFxcbi1cXHRcXHRcXHRcXHQgUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2UocG9zKSk7XFxuLVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbi1cXG4tXFx0XFx0cGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKGlub2RlLVxcdTAwM2VpX21hcHBpbmcsIHBvcyBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZULFxcbi1cXHRcXHRcXHRcXHRcXHQgTlVMTCk7XFxuLVxcdFxcdGlmIChJU19FUlIocGFnZSkpXFxuLVxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBhZ2UpO1xcbi1cXG4tXFx0XFx0bWVtY3B5X2Zyb21fcGFnZShidWYsIHBhZ2UsIG9mZnNldF9pbl9wYWdlKHBvcyksIG4pO1xcbi1cXG4tXFx0XFx0cHV0X3BhZ2UocGFnZSk7XFxuLVxcbi1cXHRcXHRidWYgKz0gbjtcXG4tXFx0XFx0cG9zICs9IG47XFxuLVxcdFxcdGNvdW50IC09IG47XFxuLVxcdH1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuIC8qXFxuICAqIFdyaXRlIHNvbWUgdmVyaXR5IG1ldGFkYXRhIHRvIHRoZSBpbm9kZSBmb3IgRlNfSU9DX0VOQUJMRV9WRVJJVFkuXFxuICAqIGtlcm5lbF93cml0ZSgpIGNhbid0IGJlIHVzZWQgYmVjYXVzZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIHJlYWRvbmx5LlxcbkBAIC0yNTAsNyArMjIyLDcgQEAgc3RhdGljIGludCBmMmZzX2dldF92ZXJpdHlfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsXFxuIFxcdGlmIChidWZfc2l6ZSkge1xcbiBcXHRcXHRpZiAoc2l6ZSBcXHUwMDNlIGJ1Zl9zaXplKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4tXFx0XFx0cmVzID0gcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1Ziwgc2l6ZSwgcG9zKTtcXG4rXFx0XFx0cmVzID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1Ziwgc2l6ZSwgcG9zKTtcXG4gXFx0XFx0aWYgKHJlcylcXG4gXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4gXFx0fVxcbkBAIC0yNzIsNyArMjQ0LDkgQEAgc3RhdGljIHZvaWQgZjJmc19yZWFkYWhlYWRfbWVya2xlX3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4gfVxcbiBcXG4gc3RhdGljIGludCBmMmZzX3dyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsXFxuLVxcdFxcdFxcdFxcdFxcdHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKVxcbitcXHRcXHRcXHRcXHRcXHR1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0XFx0Y29uc3QgdTggKnplcm9fZGlnZXN0LFxcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpXFxuIHtcXG4gXFx0cG9zICs9IGYyZnNfdmVyaXR5X21ldGFkYXRhX3BvcyhmaWxlX2lub2RlKGZpbGUpKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL2ZpbGVfYXR0ci5jIGIvZnMvZmlsZV9hdHRyLmNcXG5pbmRleCBiZmIwMGQyNTZkZDU2MC4uNTQyNGVjNGUzOTQ5M2YgMTAwNjQ0XFxuLS0tIGEvZnMvZmlsZV9hdHRyLmNcXG4rKysgYi9mcy9maWxlX2F0dHIuY1xcbkBAIC0yNDYsNiArMjQ2LDExIEBAIHN0YXRpYyBpbnQgZmlsZWF0dHJfc2V0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0aWYgKGZhLVxcdTAwM2Vmc3hfY293ZXh0c2l6ZSA9PSAwKVxcbiBcXHRcXHRmYS1cXHUwMDNlZnN4X3hmbGFncyBcXHUwMDI2PSB+RlNfWEZMQUdfQ09XRVhUU0laRTtcXG4gXFxuK1xcdC8qIENhbiBub3QgZW5hYmxlIERBWCBvbiBmc3Zlcml0eSBmaWxlICovXFxuK1xcdGlmICgob2xkX21hLVxcdTAwM2Vmc3hfeGZsYWdzIFxcdTAwMjYgRlNfWEZMQUdfVkVSSVRZKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRmYS1cXHUwMDNlZnN4X3hmbGFncyBcXHUwMDI2IEZTX1hGTEFHX0RBWClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvaW9lbmQuYyBiL2ZzL2lvbWFwL2lvZW5kLmNcXG5pbmRleCAwNTY1MzI4NzY0YzE3NS4uOGU0NmI3ZjFhYTZhOTcgMTAwNjQ0XFxuLS0tIGEvZnMvaW9tYXAvaW9lbmQuY1xcbisrKyBiL2ZzL2lvbWFwL2lvZW5kLmNcXG5AQCAtNCw3ICs0LDYgQEBcXG4gICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW8taW50ZWdyaXR5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21hcC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdF9zb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlbWFwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93cml0ZWJhY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzZXJyb3IuaFxcdTAwM2VcXG5AQCAtNDI1LDcgKzQyNCw3IEBAIHZvaWQgaW9tYXBfaW9lbmRfdHJ5X21lcmdlKHN0cnVjdCBpb21hcF9pb2VuZCAqaW9lbmQsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfaW9lbmRfdHJ5X21lcmdlKTtcXG4gXFxuLXN0YXRpYyBpbnQgaW9tYXBfaW9lbmRfY29tcGFyZSh2b2lkICpwcml2LCBjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICphLFxcbitpbnQgaW9tYXBfaW9lbmRfY29tcGFyZSh2b2lkICpwcml2LCBjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICphLFxcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpiKVxcbiB7XFxuIFxcdHN0cnVjdCBpb21hcF9pb2VuZCAqaWEgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IGlvbWFwX2lvZW5kLCBpb19saXN0KTtcXG5AQCAtNDM3LDEwICs0MzYsMTEgQEAgc3RhdGljIGludCBpb21hcF9pb2VuZF9jb21wYXJlKHZvaWQgKnByaXYsIGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmEsXFxuIFxcdFxcdHJldHVybiAxO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbitFWFBPUlRfU1lNQk9MX0dQTChpb21hcF9pb2VuZF9jb21wYXJlKTtcXG4gXFxuLXZvaWQgaW9tYXBfc29ydF9pb2VuZHMoc3RydWN0IGxpc3RfaGVhZCAqaW9lbmRfbGlzdClcXG4rdm9pZCBpb21hcF9zb3J0X2lvZW5kcyhzdHJ1Y3QgbGlzdF9oZWFkICppb2VuZF9saXN0LCBsaXN0X2NtcF9mdW5jX3QgY21wKVxcbiB7XFxuLVxcdGxpc3Rfc29ydChOVUxMLCBpb2VuZF9saXN0LCBpb21hcF9pb2VuZF9jb21wYXJlKTtcXG4rXFx0bGlzdF9zb3J0KE5VTEwsIGlvZW5kX2xpc3QsIGNtcCk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfc29ydF9pb2VuZHMpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZnMvc3RhdC5jIGIvZnMvc3RhdC5jXFxuaW5kZXggODk5MDk3NDZiZWQxOWUuLmFlMTI5OWJkNzQzNjZjIDEwMDY0NFxcbi0tLSBhL2ZzL3N0YXQuY1xcbisrKyBiL2ZzL3N0YXQuY1xcbkBAIC0yMDMsOCArMjAzLDEyIEBAIGludCB2ZnNfZ2V0YXR0cl9ub3NlYyhjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGtzdGF0ICpzdGF0LFxcbiBcXHRpZiAoSVNfREFYKGlub2RlKSlcXG4gXFx0XFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0RBWDtcXG4gXFxuK1xcdGlmIChJU19WRVJJVFkoaW5vZGUpKVxcbitcXHRcXHRzdGF0LVxcdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfVkVSSVRZO1xcbitcXG4gXFx0c3RhdC1cXHUwMDNlYXR0cmlidXRlc19tYXNrIHw9IChTVEFUWF9BVFRSX0FVVE9NT1VOVCB8XFxuLVxcdFxcdFxcdFxcdCAgU1RBVFhfQVRUUl9EQVgpO1xcbitcXHRcXHRcXHRcXHQgIFNUQVRYX0FUVFJfREFYIHxcXG4rXFx0XFx0XFx0XFx0ICBTVEFUWF9BVFRSX1ZFUklUWSk7XFxuIFxcbiBcXHRpZG1hcCA9IG1udF9pZG1hcChwYXRoLVxcdTAwM2VtbnQpO1xcbiBcXHRpZiAoaW5vZGUtXFx1MDAzZWlfb3AtXFx1MDAzZWdldGF0dHIpIHtcXG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L2VuYWJsZS5jIGIvZnMvdmVyaXR5L2VuYWJsZS5jXFxuaW5kZXggNDJkZmVkMWNlMGNlNjYuLmFkNGZmNzFkN2RkOTViIDEwMDY0NFxcbi0tLSBhL2ZzL3Zlcml0eS9lbmFibGUuY1xcbisrKyBiL2ZzL3Zlcml0eS9lbmFibGUuY1xcbkBAIC01MCw3ICs1MCw5IEBAIHN0YXRpYyBpbnQgd3JpdGVfbWVya2xlX3RyZWVfYmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHU4ICpidWYsXFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRlcnIgPSBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc192b3AtXFx1MDAzZXdyaXRlX21lcmtsZV90cmVlX2Jsb2NrKGZpbGUsIGJ1ZiwgcG9zLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHBhcmFtcy1cXHUwMDNlYmxvY2tfc2l6ZSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgcGFyYW1zLVxcdTAwM2VibG9ja19zaXplLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHBhcmFtcy1cXHUwMDNlemVyb19kaWdlc3QsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgcGFyYW1zLVxcdTAwM2VkaWdlc3Rfc2l6ZSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGZzdmVyaXR5X2Vycihpbm9kZSwgXFxcIkVycm9yICVkIHdyaXRpbmcgTWVya2xlIHRyZWUgYmxvY2sgJWx1XFxcIixcXG4gXFx0XFx0XFx0ICAgICBlcnIsIGluZGV4KTtcXG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L29wZW4uYyBiL2ZzL3Zlcml0eS9vcGVuLmNcXG5pbmRleCBkMGM1NmE3ZmFhM2JiMS4uODc1ZTg4NTBjY2JhY2UgMTAwNjQ0XFxuLS0tIGEvZnMvdmVyaXR5L29wZW4uY1xcbisrKyBiL2ZzL3Zlcml0eS9vcGVuLmNcXG5AQCAtMzQ3LDcgKzM0NywyNCBAQCBpbnQgZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3Ioc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuKy8qKlxcbisgKiBmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8oKSAtIGNhY2hlIHZlcml0eSBpbmZvIGlmIGl0J3Mgbm90IGFscmVhZHkgY2FjaGVkXFxuKyAqIEBpbm9kZTogdGhlIGlub2RlIGZvciB3aGljaCB2ZXJpdHkgaW5mbyBzaG91bGQgYmUgY2FjaGVkXFxuKyAqXFxuKyAqIEVuc3VyZSB0aGlzIGlub2RlIGhhcyB2ZXJpdHkgaW5mbyBhdHRhY2hlZCB0byBpdCwgaXQncyBhc3N1bWVkIHRoZSBpbm9kZVxcbisgKiBhbHJlYWR5IGhhcyBmc3Zlcml0eSBlbmFibGVkLiBSZWFkIGZzdmVyaXR5IGRlc2NyaXB0b3IgYW5kIGNyZWF0ZXMgdmVyaXR5XFxuKyAqIGJhc2VkIG9uIHRoYXQuXFxuKyAqXFxuKyAqIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGF0IGxlYXN0IG9uY2UgYmVmb3JlIGFueSBvZiB0aGUgaW5vZGUncyBkYXRhXFxuKyAqIGNhbiBiZSB2ZXJpZmllZCAoYW5kIHRodXMgcmVhZCBhdCBhbGwpIG9yIHRoZSBpbm9kZSdzIGZzdmVyaXR5IGRpZ2VzdFxcbisgKiByZXRyaWV2ZWQuICBmc3Zlcml0eV9maWxlX29wZW4oKSBjYWxscyB0aGlzIGFscmVhZHksIHdoaWNoIGhhbmRsZXNcXG4rICogbm9ybWFsIGZpbGUgYWNjZXNzZXMuICBJZiBhIGZpbGVzeXN0ZW0gZG9lcyBhbnkgaW50ZXJuYWwgKGkuZS4gbm90XFxuKyAqIGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUgZGVzY3JpcHRvcikgcmVhZHMgb2YgdGhlIGZpbGUncyBkYXRhIG9yXFxuKyAqIGZzdmVyaXR5IGRpZ2VzdCwgaXQgbXVzdCBjYWxsIHRoaXMgZXhwbGljaXRseSBiZWZvcmUgZG9pbmcgc28uXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZmFpbHVyZVxcbisgKi9cXG4raW50IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiB7XFxuIFxcdHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSA9IGZzdmVyaXR5X2dldF9pbmZvKGlub2RlKSwgKmZvdW5kO1xcbiBcXHRzdHJ1Y3QgZnN2ZXJpdHlfZGVzY3JpcHRvciAqZGVzYztcXG5AQCAtMzgzLDEyICs0MDAsMTMgQEAgc3RhdGljIGludCBlbnN1cmVfdmVyaXR5X2luZm8oc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0a2ZyZWUoZGVzYyk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4rRVhQT1JUX1NZTUJPTF9HUEwoZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKTtcXG4gXFxuIGludCBfX2ZzdmVyaXR5X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG4ge1xcbiBcXHRpZiAoZmlscC1cXHUwMDNlZl9tb2RlIFxcdTAwMjYgRk1PREVfV1JJVEUpXFxuIFxcdFxcdHJldHVybiAtRVBFUk07XFxuLVxcdHJldHVybiBlbnN1cmVfdmVyaXR5X2luZm8oaW5vZGUpO1xcbitcXHRyZXR1cm4gZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKGlub2RlKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChfX2ZzdmVyaXR5X2ZpbGVfb3Blbik7XFxuIFxcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvcGFnZWNhY2hlLmMgYi9mcy92ZXJpdHkvcGFnZWNhY2hlLmNcXG5pbmRleCA5OWY1ZjUzZWVhOTg1Zi4uMjcwYWJkNjUyZTQ4YzYgMTAwNjQ0XFxuLS0tIGEvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jXFxuKysrIGIvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jXFxuQEAgLTY4LDEzICs2OCw2NCBAQCBFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX3JlYWRhaGVhZF9tZXJrbGVfdHJlZSk7XFxuIHZvaWQgZnN2ZXJpdHlfZmlsbF96ZXJvaGFzaChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuLFxcbiBcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmkpXFxuIHtcXG4tXFx0c2l6ZV90IG9mZiA9IG9mZnNldDtcXG4rXFx0dm9pZCAqdmFkZHI7XFxuK1xcdHZvaWQgKnRvO1xcbitcXHRzaXplX3QgY2h1bms7XFxuIFxcbiBcXHRXQVJOX09OX09OQ0UoIUlTX0FMSUdORUQob2Zmc2V0LCB2aS1cXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpKTtcXG4gXFx0V0FSTl9PTl9PTkNFKCFJU19BTElHTkVEKGxlbiwgdmktXFx1MDAzZXRyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKSk7XFxuK1xcdFdBUk5fT05fT05DRShvZmZzZXQgKyBsZW4gXFx1MDAzZSBmb2xpb19zaXplKGZvbGlvKSk7XFxuIFxcbi1cXHRmb3IgKDsgb2ZmIFxcdTAwM2MgKG9mZnNldCArIGxlbik7IG9mZiArPSB2aS1cXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpXFxuLVxcdFxcdG1lbWNweV90b19mb2xpbyhmb2xpbywgb2ZmLCB2aS1cXHUwMDNldHJlZV9wYXJhbXMuemVyb19kaWdlc3QsXFxuK1xcdGRvIHtcXG4rXFx0XFx0dmFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBvZmZzZXQpO1xcbitcXHRcXHRjaHVuayA9IGxlbjtcXG4rXFx0XFx0dG8gPSB2YWRkcjtcXG4rXFxuK1xcdFxcdGlmIChmb2xpb190ZXN0X3BhcnRpYWxfa21hcChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGNodW5rIFxcdTAwM2UgUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KSlcXG4rXFx0XFx0XFx0Y2h1bmsgPSBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpO1xcbitcXHRcXHRmb3IgKDsgdG8gXFx1MDAzYyAodmFkZHIgKyBjaHVuayk7IHRvICs9IHZpLVxcdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSlcXG4rXFx0XFx0XFx0bWVtY3B5KHRvLCB2aS1cXHUwMDNldHJlZV9wYXJhbXMuemVyb19kaWdlc3QsXFxuIFxcdFxcdFxcdFxcdHZpLVxcdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSk7XFxuK1xcdFxcdGt1bm1hcF9sb2NhbCh2YWRkcik7XFxuK1xcbitcXHRcXHRvZmZzZXQgKz0gY2h1bms7XFxuK1xcdFxcdGxlbiAtPSBjaHVuaztcXG4rXFx0fSB3aGlsZSAobGVuIFxcdTAwM2UgMCk7XFxuK1xcbitcXHRmbHVzaF9kY2FjaGVfZm9saW8oZm9saW8pO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGZzdmVyaXR5X2ZpbGxfemVyb2hhc2gpO1xcbitcXG4rLyoqXFxuKyAqIGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKCkgLSByZWFkIHBhZ2UgYW5kIGNvcHkgZGF0YSB0byBidWZmZXJcXG4rICogQGlub2RlOlxcdGNvcHkgZnJvbSB0aGlzIGlub2RlJ3MgYWRkcmVzcyBzcGFjZVxcbisgKiBAYnVmOlxcdGJ1ZmZlciB0byBjb3B5IHRvXFxuKyAqIEBjb3VudDpcXHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxcbisgKiBAcG9zOlxcdHBvc2l0aW9uIG9mIHRoZSBmb2xpbyB0byBjb3B5IGZyb21cXG4rICpcXG4rICogUmVhZCBzb21lIHZlcml0eSBtZXRhZGF0YSBmcm9tIHRoZSBpbm9kZS4gIF9fdmZzX3JlYWQoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2VcXG4rICogd2UgbmVlZCB0byByZWFkIGJleW9uZCBpX3NpemUuXFxuKyAqL1xcbitpbnQgZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsXFxuK1xcdFxcdFxcdCAgbG9mZl90IHBvcylcXG4re1xcbitcXHR3aGlsZSAoY291bnQpIHtcXG4rXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0XFx0c2l6ZV90IG47XFxuK1xcbitcXHRcXHRmb2xpbyA9IHJlYWRfbWFwcGluZ19mb2xpbyhpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBwb3MgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG4rXFx0XFx0XFx0XFx0XFx0IE5VTEwpO1xcbitcXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG4rXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoZm9saW8pO1xcbitcXG4rXFx0XFx0biA9IG1lbWNweV9mcm9tX2ZpbGVfZm9saW8oYnVmLCBmb2xpbywgcG9zLCBjb3VudCk7XFxuK1xcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcbitcXHRcXHRidWYgKz0gbjtcXG4rXFx0XFx0cG9zICs9IG47XFxuK1xcdFxcdGNvdW50IC09IG47XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQpO1xcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvdmVyaWZ5LmMgYi9mcy92ZXJpdHkvdmVyaWZ5LmNcXG5pbmRleCA0MDA0YTFkNDI4NzUxZi4uZGI4YzM1MDIzNGJiNzEgMTAwNjQ0XFxuLS0tIGEvZnMvdmVyaXR5L3ZlcmlmeS5jXFxuKysrIGIvZnMvdmVyaXR5L3ZlcmlmeS5jXFxuQEAgLTksNiArOSw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYmlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzZXJyb3IuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgRlNfVkVSSVRZX01BWF9QRU5ESU5HX0JMT0NLUyAyXFxuIFxcbkBAIC0yMDUsNiArMjA2LDggQEAgc3RhdGljIGJvb2wgdmVyaWZ5X2RhdGFfYmxvY2soc3RydWN0IGZzdmVyaXR5X2luZm8gKnZpLFxcbiBcXHRcXHRpZiAobWVtY2hyX2ludihkYmxvY2stXFx1MDAzZWRhdGEsIDAsIHBhcmFtcy1cXHUwMDNlYmxvY2tfc2l6ZSkpIHtcXG4gXFx0XFx0XFx0ZnN2ZXJpdHlfZXJyKGlub2RlLFxcbiBcXHRcXHRcXHRcXHQgICAgIFxcXCJGSUxFIENPUlJVUFRFRCEgIERhdGEgcGFzdCBFT0YgaXMgbm90IHplcm9lZFxcXCIpO1xcbitcXHRcXHRcXHRmc2Vycm9yX3JlcG9ydF9kYXRhX2xvc3QoaW5vZGUsIGRhdGFfcG9zLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgcGFyYW1zLVxcdTAwM2VibG9ja19zaXplLCBHRlBfTk9GUyk7XFxuIFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtMzEyLDYgKzMxNSw3IEBAIHN0YXRpYyBib29sIHZlcmlmeV9kYXRhX2Jsb2NrKHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSxcXG4gXFx0XFx0ZGF0YV9wb3MsIGxldmVsIC0gMSwgcGFyYW1zLVxcdTAwM2VoYXNoX2FsZy1cXHUwMDNlbmFtZSwgaHNpemUsIHdhbnRfaGFzaCxcXG4gXFx0XFx0cGFyYW1zLVxcdTAwM2VoYXNoX2FsZy1cXHUwMDNlbmFtZSwgaHNpemUsXFxuIFxcdFxcdGxldmVsID09IDAgPyBkYmxvY2stXFx1MDAzZXJlYWxfaGFzaCA6IHJlYWxfaGFzaCk7XFxuK1xcdGZzZXJyb3JfcmVwb3J0X2RhdGFfbG9zdChpbm9kZSwgZGF0YV9wb3MsIHBhcmFtcy1cXHUwMDNlYmxvY2tfc2l6ZSwgR0ZQX05PRlMpO1xcbiBlcnJvcjpcXG4gXFx0Zm9yICg7IGxldmVsIFxcdTAwM2UgMDsgbGV2ZWwtLSkge1xcbiBcXHRcXHRrdW5tYXBfbG9jYWwoaGJsb2Nrc1tsZXZlbCAtIDFdLmFkZHIpO1xcbmRpZmYgLS1naXQgYS9mcy94ZnMvTWFrZWZpbGUgYi9mcy94ZnMvTWFrZWZpbGVcXG5pbmRleCA5ZjcxMzNlMDI1NzY4ZC4uMzhiN2Y1MWU1ZDg0MDUgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL01ha2VmaWxlXFxuKysrIGIvZnMveGZzL01ha2VmaWxlXFxuQEAgLTE0OSw2ICsxNDksNyBAQCB4ZnMtJChDT05GSUdfWEZTX1BPU0lYX0FDTClcXHQrPSB4ZnNfYWNsLm9cXG4geGZzLSQoQ09ORklHX1NZU0NUTClcXHRcXHQrPSB4ZnNfc3lzY3RsLm9cXG4geGZzLSQoQ09ORklHX0NPTVBBVClcXHRcXHQrPSB4ZnNfaW9jdGwzMi5vXFxuIHhmcy0kKENPTkZJR19FWFBPUlRGU19CTE9DS19PUFMpXFx0Kz0geGZzX3BuZnMub1xcbit4ZnMtJChDT05GSUdfRlNfVkVSSVRZKVxcdFxcdCs9IHhmc19mc3Zlcml0eS5vXFxuIFxcbiAjIG5vdGlmeSBmYWlsdXJlXFxuIGlmZXEgKCQoQ09ORklHX01FTU9SWV9GQUlMVVJFKSx5KVxcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmNcXG5pbmRleCBkNjRkZWZlZGE2NDVlZC4uY2M0OGY2ZTIwZTgwMDAgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXFxuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXFxuQEAgLTQxLDYgKzQxLDggQEBcXG4gI2luY2x1ZGUgXFxcInhmc19pbm9kZV91dGlsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfcnRncm91cC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGZzX3pvbmVfYWxsb2MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19mc3Zlcml0eS5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnN2ZXJpdHkuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBrbWVtX2NhY2hlXFx0XFx0Knhmc19ibWFwX2ludGVudF9jYWNoZTtcXG4gXFxuQEAgLTQ0MDIsNiArNDQwNCwxMCBAQCB4ZnNfYm1hcGlfY29udmVydF9vbmVfZGVsYWxsb2MoXFxuIFxcdCAqIHRoZSBleHRlbnQuICBKdXN0IHJldHVybiB0aGUgcmVhbCBleHRlbnQgYXQgdGhpcyBvZmZzZXQuXFxuIFxcdCAqL1xcbiBcXHRpZiAoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSkge1xcbitcXHRcXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIFhGU19GU0JfVE9fQihtcCwgYm1hLmdvdC5icl9zdGFydG9mZikgXFx1MDAzZT1cXG4rXFx0XFx0XFx0ICAgIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApKVxcbitcXHRcXHRcXHRmbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xcbiBcXHRcXHR4ZnNfYm1idF90b19pb21hcChpcCwgaW9tYXAsIFxcdTAwMjZibWEuZ290LCAwLCBmbGFncyxcXG4gXFx0XFx0XFx0XFx0eGZzX2lvbWFwX2lub2RlX3NlcXVlbmNlKGlwLCBmbGFncykpO1xcbiBcXHRcXHRpZiAoc2VxKVxcbkBAIC00NDQ5LDYgKzQ0NTUsMTEgQEAgeGZzX2JtYXBpX2NvbnZlcnRfb25lX2RlbGFsbG9jKFxcbiBcXHRYRlNfU1RBVFNfQUREKG1wLCB4c194c3RyYXRfYnl0ZXMsIFhGU19GU0JfVE9fQihtcCwgYm1hLmxlbmd0aCkpO1xcbiBcXHRYRlNfU1RBVFNfSU5DKG1wLCB4c194c3RyYXRfcXVpY2spO1xcbiBcXG4rXFx0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBYRlNfRlNCX1RPX0IobXAsIGJtYS5nb3QuYnJfc3RhcnRvZmYpIFxcdTAwM2U9XFxuK1xcdFxcdCAgICB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSlcXG4rXFx0XFx0ZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcXG4rXFxuIFxcdEFTU0VSVCghaXNudWxsc3RhcnRibG9jayhibWEuZ290LmJyX3N0YXJ0YmxvY2spKTtcXG4gXFx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIGlvbWFwLCBcXHUwMDI2Ym1hLmdvdCwgMCwgZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdHhmc19pb21hcF9pbm9kZV9zZXF1ZW5jZShpcCwgZmxhZ3MpKTtcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmggYi9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaFxcbmluZGV4IGRkMGVkMDQ2ZmJlOWM5Li44YmUxYjEwMWIxOTY5OSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaFxcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oXFxuQEAgLTM3NCwxMSArMzc0LDEzIEBAIHhmc19zYl9oYXNfY29tcGF0X2ZlYXR1cmUoXFxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JNQVBCVCAgICgxIFxcdTAwM2NcXHUwMDNjIDEpXFx0XFx0LyogcmV2ZXJzZSBtYXAgYnRyZWUgKi9cXG4gI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOSyAgKDEgXFx1MDAzY1xcdTAwM2MgMilcXHRcXHQvKiByZWZsaW5rZWQgZmlsZXMgKi9cXG4gI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfSU5PQlRDTlQgKDEgXFx1MDAzY1xcdTAwM2MgMylcXHRcXHQvKiBpbm9idCBibG9jayBjb3VudHMgKi9cXG4rI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZICAgKDEgXFx1MDAzY1xcdTAwM2MgNClcXHRcXHQvKiBmcy12ZXJpdHkgKi9cXG4gI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfQUxMIFxcXFxcXG4gXFx0XFx0KFhGU19TQl9GRUFUX1JPX0NPTVBBVF9GSU5PQlQgfCBcXFxcXFxuIFxcdFxcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfUk1BUEJUIHwgXFxcXFxcbi1cXHRcXHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JFRkxJTkt8IFxcXFxcXG4tXFx0XFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVClcXG4rXFx0XFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9SRUZMSU5LIHwgXFxcXFxcbitcXHRcXHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0lOT0JUQ05UIHwgXFxcXFxcbitcXHRcXHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSlcXG4gI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfVU5LTk9XTlxcdH5YRlNfU0JfRkVBVF9ST19DT01QQVRfQUxMXFxuIHN0YXRpYyBpbmxpbmUgYm9vbFxcbiB4ZnNfc2JfaGFzX3JvX2NvbXBhdF9mZWF0dXJlKFxcbkBAIC0xMjMwLDE2ICsxMjMyLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnNfZGlub2RlX3B1dF9yZGV2KHN0cnVjdCB4ZnNfZGlub2RlICpkaXAsIHhmc19kZXZfdCByZGV2KVxcbiAgKi9cXG4gI2RlZmluZSBYRlNfRElGTEFHMl9NRVRBREFUQV9CSVRcXHQ1XFxuIFxcbisvKiBpbm9kZXMgc2VhbGVkIHdpdGggZnMtdmVyaXR5ICovXFxuKyNkZWZpbmUgWEZTX0RJRkxBRzJfVkVSSVRZX0JJVFxcdFxcdDZcXG4rXFxuICNkZWZpbmUgWEZTX0RJRkxBRzJfREFYXFx0XFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgWEZTX0RJRkxBRzJfREFYX0JJVClcXG4gI2RlZmluZSBYRlNfRElGTEFHMl9SRUZMSU5LXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgWEZTX0RJRkxBRzJfUkVGTElOS19CSVQpXFxuICNkZWZpbmUgWEZTX0RJRkxBRzJfQ09XRVhUU0laRVxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIFhGU19ESUZMQUcyX0NPV0VYVFNJWkVfQklUKVxcbiAjZGVmaW5lIFhGU19ESUZMQUcyX0JJR1RJTUVcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyBYRlNfRElGTEFHMl9CSUdUSU1FX0JJVClcXG4gI2RlZmluZSBYRlNfRElGTEFHMl9OUkVYVDY0XFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgWEZTX0RJRkxBRzJfTlJFWFQ2NF9CSVQpXFxuICNkZWZpbmUgWEZTX0RJRkxBRzJfTUVUQURBVEFcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyBYRlNfRElGTEFHMl9NRVRBREFUQV9CSVQpXFxuKyNkZWZpbmUgWEZTX0RJRkxBRzJfVkVSSVRZXFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgWEZTX0RJRkxBRzJfVkVSSVRZX0JJVClcXG4gXFxuICNkZWZpbmUgWEZTX0RJRkxBRzJfQU5ZIFxcXFxcXG4gXFx0KFhGU19ESUZMQUcyX0RBWCB8IFhGU19ESUZMQUcyX1JFRkxJTksgfCBYRlNfRElGTEFHMl9DT1dFWFRTSVpFIHwgXFxcXFxcbi1cXHQgWEZTX0RJRkxBRzJfQklHVElNRSB8IFhGU19ESUZMQUcyX05SRVhUNjQgfCBYRlNfRElGTEFHMl9NRVRBREFUQSlcXG4rXFx0IFhGU19ESUZMQUcyX0JJR1RJTUUgfCBYRlNfRElGTEFHMl9OUkVYVDY0IHwgWEZTX0RJRkxBRzJfTUVUQURBVEEgfCBcXFxcXFxuK1xcdCBYRlNfRElGTEFHMl9WRVJJVFkpXFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2Rpbm9kZV9oYXNfYmlndGltZShjb25zdCBzdHJ1Y3QgeGZzX2Rpbm9kZSAqZGlwKVxcbiB7XFxuQEAgLTIwMjcsNCArMjAzNCwyNiBAQCBzdHJ1Y3QgeGZzX2FjbCB7XFxuICNkZWZpbmUgU0dJX0FDTF9GSUxFX1NJWkVcXHQoc2l6ZW9mKFNHSV9BQ0xfRklMRSktMSlcXG4gI2RlZmluZSBTR0lfQUNMX0RFRkFVTFRfU0laRVxcdChzaXplb2YoU0dJX0FDTF9ERUZBVUxUKS0xKVxcbiBcXG4rLypcXG4rICogQXQgbWF4aW11bSBvZiA4IGxldmVscyB3aXRoIDEyOCBoYXNoZXMgcGVyIGJsb2NrICgzMiBieXRlcyBTSEEtMjU2KSBtYXhpbXVtXFxuKyAqIHRyZWUgc2l6ZSBpcyAoKDEyOF44IOKIkiAxKS8oMTI4IOKIkiAxKSkgPSA1NjcqMTBeMTIgYmxvY2tzLiBUaGlzIHNob3VsZCBmaXQgaW5cXG4rICogNTMgYml0cyBhZGRyZXNzIHNwYWNlLlxcbisgKlxcbisgKiBBdCB0aGlzIE1lcmtsZSB0cmVlIHNpemUgd2UgY2FuIGNvdmVyIDI5NUVCIGxhcmdlIGZpbGUuIFRoaXMgaXMgbXVjaCBsYXJnZXJcXG4rICogdGhhbiB0aGUgY3VycmVudGx5IHN1cHBvcnRlZCBmaWxlIHNpemUuXFxuKyAqXFxuKyAqIEZvciBzaGE1MTIgdGhlIGxhcmdlc3QgZmlsZSB3ZSBjYW4gY292ZXIgZW5kcyBhdCAxIFxcdTAwM2NcXHUwMDNjIDUwIG9mZnNldCwgdGhpcyBpcyBhbHNvXFxuKyAqIGdvb2QuXFxuKyAqL1xcbisjZGVmaW5lIFhGU19GU1ZFUklUWV9MQVJHRVNUX0ZJTEVcXHQoKGxvZmZfdCkxVUxMIFxcdTAwM2NcXHUwMDNjIDUzKVxcbitcXG4rLypcXG4rICogQWxpZ25tZW50IG9mIHRoZSBmc3Zlcml0eSBtZXRhZGF0YSBwbGFjZW1lbnQuIFRoaXMgaXMgbGFyZ2VzdCBzdXBwb3J0ZWQgUEFHRVxcbisgKiBTSVpFIGZvciBmc3Zlcml0eS4gVGhpcyBpcyB1c2VkIHRvIHNwYWNlIG91dCBkYXRhIGFuZCBtZXRhZGF0YSBpbiBwYWdlIGNhY2hlLlxcbisgKiBUaGUgc3BhY2luZyBpcyBuZWNlc3NhcnkgZm9yIG5vbi1leHBvc3VyZSBvZiBtZXRhZGF0YSB0byB1c2Vyc3BhY2UgYW5kXFxuKyAqIGNvcnJlY3QgbWVya2xlIHRyZWUgc3ludGhlc2lzIGluIHRoZSBpb21hcC5cXG4rICovXFxuKyNkZWZpbmUgWEZTX0ZTVkVSSVRZX1NUQVJUX0FMSUdOXFx0KDY1NTM2KVxcbitcXG4rXFxuICNlbmRpZiAvKiBfX1hGU19GT1JNQVRfSF9fICovXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2ZzLmggYi9mcy94ZnMvbGlieGZzL3hmc19mcy5oXFxuaW5kZXggMTg1ZjA5ZjMyN2MwMGMuLjg0ZDYyYjc1MDZhOWFkIDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2ZzLmhcXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19mcy5oXFxuQEAgLTI1MCw2ICsyNTAsNyBAQCB0eXBlZGVmIHN0cnVjdCB4ZnNfZnNvcF9yZXNibGtzIHtcXG4gI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1BBUkVOVFxcdCgxIFxcdTAwM2NcXHUwMDNjIDI1KSAvKiBsaW51eCBwYXJlbnQgcG9pbnRlcnMgKi9cXG4gI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX01FVEFESVJcXHQoMSBcXHUwMDNjXFx1MDAzYyAyNikgLyogbWV0YWRhdGEgZGlyZWN0b3JpZXMgKi9cXG4gI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1pPTkVEXFx0KDEgXFx1MDAzY1xcdTAwM2MgMjcpIC8qIHpvbmVkIHJ0IGRldmljZSAqL1xcbisjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfVkVSSVRZXFx0KDEgXFx1MDAzY1xcdTAwM2MgMjgpIC8qIGZzLXZlcml0eSAqL1xcbiBcXG4gLypcXG4gICogTWluaW11bSBhbmQgbWF4aW11bSBzaXplcyBuZWVkIGZvciBncm93dGggY2hlY2tzLlxcbkBAIC00MjEsNiArNDIyLDcgQEAgc3RydWN0IHhmc19idWxrc3RhdCB7XFxuICNkZWZpbmUgWEZTX0JTX1NJQ0tfU1lNTElOS1xcdCgxIFxcdTAwM2NcXHUwMDNjIDYpICAvKiBzeW1ib2xpYyBsaW5rIHJlbW90ZSB0YXJnZXQgKi9cXG4gI2RlZmluZSBYRlNfQlNfU0lDS19QQVJFTlRcXHQoMSBcXHUwMDNjXFx1MDAzYyA3KSAgLyogcGFyZW50IHBvaW50ZXJzICovXFxuICNkZWZpbmUgWEZTX0JTX1NJQ0tfRElSVFJFRVxcdCgxIFxcdTAwM2NcXHUwMDNjIDgpICAvKiBkaXJlY3RvcnkgdHJlZSBzdHJ1Y3R1cmUgKi9cXG4rI2RlZmluZSBYRlNfQlNfU0lDS19GU1ZFUklUWVxcdCgxIFxcdTAwM2NcXHUwMDNjIDkpICAvKiBmc3Zlcml0eSBtZXRhZGF0YSAqL1xcbiBcXG4gLypcXG4gICogUHJvamVjdCBxdW90YSBpZCBoZWxwZXJzIChwcmV2aW91c2x5IHByb2ppZCB3YXMgMTZiaXQgb25seVxcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaCBiL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oXFxuaW5kZXggMWQ0NWNmNTc4OWU4NjQuLjkzMmI0NDcxOTBkYTc2IDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oXFxuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmhcXG5AQCAtMTA0LDYgKzEwNCw3IEBAIHN0cnVjdCB4ZnNfcnRncm91cDtcXG4gLyogRG9uJ3QgcHJvcGFnYXRlIHNpY2sgc3RhdHVzIHRvIGFnIGhlYWx0aCBzdW1tYXJ5IGR1cmluZyBpbmFjdGl2YXRpb24gKi9cXG4gI2RlZmluZSBYRlNfU0lDS19JTk9fRk9SR0VUXFx0KDEgXFx1MDAzY1xcdTAwM2MgMTIpXFxuICNkZWZpbmUgWEZTX1NJQ0tfSU5PX0RJUlRSRUVcXHQoMSBcXHUwMDNjXFx1MDAzYyAxMykgIC8qIGRpcmVjdG9yeSB0cmVlIHN0cnVjdHVyZSAqL1xcbisjZGVmaW5lIFhGU19TSUNLX0lOT19GU1ZFUklUWVxcdCgxIFxcdTAwM2NcXHUwMDNjIDE0KSAgLyogZnN2ZXJpdHkgbWV0YWRhdGEgKi9cXG4gXFxuIC8qIFByaW1hcnkgZXZpZGVuY2Ugb2YgaGVhbHRoIHByb2JsZW1zIGluIGEgZ2l2ZW4gZ3JvdXAuICovXFxuICNkZWZpbmUgWEZTX1NJQ0tfRlNfUFJJTUFSWVxcdChYRlNfU0lDS19GU19DT1VOVEVSUyB8IFxcXFxcXG5AQCAtMTQwLDcgKzE0MSw4IEBAIHN0cnVjdCB4ZnNfcnRncm91cDtcXG4gXFx0XFx0XFx0XFx0IFhGU19TSUNLX0lOT19YQVRUUiB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0IFhGU19TSUNLX0lOT19TWU1MSU5LIHwgXFxcXFxcbiBcXHRcXHRcXHRcXHQgWEZTX1NJQ0tfSU5PX1BBUkVOVCB8IFxcXFxcXG4tXFx0XFx0XFx0XFx0IFhGU19TSUNLX0lOT19ESVJUUkVFKVxcbitcXHRcXHRcXHRcXHQgWEZTX1NJQ0tfSU5PX0RJUlRSRUUgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpXFxuIFxcbiAjZGVmaW5lIFhGU19TSUNLX0lOT19aQVBQRURcXHQoWEZTX1NJQ0tfSU5PX0JNQlREX1pBUFBFRCB8IFxcXFxcXG4gXFx0XFx0XFx0XFx0IFhGU19TSUNLX0lOT19CTUJUQV9aQVBQRUQgfCBcXFxcXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX2J1Zi5jIGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmNcXG5pbmRleCAzMzZlZjg0M2YyZmU0Zi4uYmQ4MGExOWYyZTA5MjkgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmNcXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuY1xcbkBAIC03NjAsNiArNzYwLDE0IEBAIHhmc19kaW5vZGVfdmVyaWZ5KFxcbiBcXHQgICAgIXhmc19oYXNfcnRyZWZsaW5rKG1wKSlcXG4gXFx0XFx0cmV0dXJuIF9fdGhpc19hZGRyZXNzO1xcbiBcXG4rXFx0Lyogb25seSByZWd1bGFyIGZpbGVzIGNhbiBoYXZlIGZzdmVyaXR5ICovXFxuK1xcdGlmIChmbGFnczIgXFx1MDAyNiBYRlNfRElGTEFHMl9WRVJJVFkpIHtcXG4rXFx0XFx0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkpXFxuK1xcdFxcdFxcdHJldHVybiBfX3RoaXNfYWRkcmVzcztcXG4rXFx0XFx0aWYgKCFTX0lTUkVHKG1vZGUpKVxcbitcXHRcXHRcXHRyZXR1cm4gX190aGlzX2FkZHJlc3M7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICh4ZnNfaGFzX3pvbmVkKG1wKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgZGlwLVxcdTAwM2VkaV9tZXRhdHlwZSA9PSBjcHVfdG9fYmUxNihYRlNfTUVUQUZJTEVfUlRSTUFQKSkge1xcbiBcXHRcXHRpZiAoYmUzMl90b19jcHUoZGlwLVxcdTAwM2VkaV91c2VkX2Jsb2NrcykgXFx1MDAzZSBtcC1cXHUwMDNlbV9zYi5zYl9yZ2V4dGVudHMpXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuY1xcbmluZGV4IDI1OGFjM2QwZDQ4NmU2Li41YTUxNmJkMzFjMzE3NSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmNcXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmNcXG5AQCAtNzQsNyArNzQsOCBAQCB4ZnNfZmxhZ3MyZGlmbGFnczIoXFxuIFxcdHVpbnQ2NF90XFx0XFx0ZGlfZmxhZ3MyID1cXG4gXFx0XFx0KGlwLVxcdTAwM2VpX2RpZmxhZ3MyIFxcdTAwMjYgKFhGU19ESUZMQUcyX1JFRkxJTksgfFxcbiBcXHRcXHRcXHRcXHQgICBYRlNfRElGTEFHMl9CSUdUSU1FIHxcXG4tXFx0XFx0XFx0XFx0ICAgWEZTX0RJRkxBRzJfTlJFWFQ2NCkpO1xcbitcXHRcXHRcXHRcXHQgICBYRlNfRElGTEFHMl9OUkVYVDY0IHxcXG4rXFx0XFx0XFx0XFx0ICAgWEZTX0RJRkxBRzJfVkVSSVRZKSk7XFxuIFxcbiBcXHRpZiAoeGZsYWdzIFxcdTAwMjYgRlNfWEZMQUdfREFYKVxcbiBcXHRcXHRkaV9mbGFnczIgfD0gWEZTX0RJRkxBRzJfREFYO1xcbkBAIC0xMjYsNiArMTI3LDggQEAgeGZzX2lwMnhmbGFncyhcXG4gXFx0XFx0XFx0ZmxhZ3MgfD0gRlNfWEZMQUdfREFYO1xcbiBcXHRcXHRpZiAoaXAtXFx1MDAzZWlfZGlmbGFnczIgXFx1MDAyNiBYRlNfRElGTEFHMl9DT1dFWFRTSVpFKVxcbiBcXHRcXHRcXHRmbGFncyB8PSBGU19YRkxBR19DT1dFWFRTSVpFO1xcbitcXHRcXHRpZiAoaXAtXFx1MDAzZWlfZGlmbGFnczIgXFx1MDAyNiBYRlNfRElGTEFHMl9WRVJJVFkpXFxuK1xcdFxcdFxcdGZsYWdzIHw9IEZTX1hGTEFHX1ZFUklUWTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHhmc19pbm9kZV9oYXNfYXR0cl9mb3JrKGlwKSlcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfc2IuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmNcXG5pbmRleCA0NzMyMmFkYjc2OTA1OS4uMjIyYmJlNTU1OWRmNDcgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfc2IuY1xcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmNcXG5AQCAtMTY1LDYgKzE2NSw4IEBAIHhmc19zYl92ZXJzaW9uX3RvX2ZlYXR1cmVzKFxcbiBcXHRcXHRmZWF0dXJlcyB8PSBYRlNfRkVBVF9SRUZMSU5LO1xcbiBcXHRpZiAoc2JwLVxcdTAwM2VzYl9mZWF0dXJlc19yb19jb21wYXQgXFx1MDAyNiBYRlNfU0JfRkVBVF9ST19DT01QQVRfSU5PQlRDTlQpXFxuIFxcdFxcdGZlYXR1cmVzIHw9IFhGU19GRUFUX0lOT0JUQ05UO1xcbitcXHRpZiAoc2JwLVxcdTAwM2VzYl9mZWF0dXJlc19yb19jb21wYXQgXFx1MDAyNiBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZKVxcbitcXHRcXHRmZWF0dXJlcyB8PSBYRlNfRkVBVF9WRVJJVFk7XFxuIFxcdGlmIChzYnAtXFx1MDAzZXNiX2ZlYXR1cmVzX2luY29tcGF0IFxcdTAwMjYgWEZTX1NCX0ZFQVRfSU5DT01QQVRfRlRZUEUpXFxuIFxcdFxcdGZlYXR1cmVzIHw9IFhGU19GRUFUX0ZUWVBFO1xcbiBcXHRpZiAoc2JwLVxcdTAwM2VzYl9mZWF0dXJlc19pbmNvbXBhdCBcXHUwMDI2IFhGU19TQl9GRUFUX0lOQ09NUEFUX1NQSU5PREVTKVxcbkBAIC0xNTg4LDYgKzE1OTAsOCBAQCB4ZnNfZnNfZ2VvbWV0cnkoXFxuIFxcdFxcdGdlby1cXHUwMDNlZmxhZ3MgfD0gWEZTX0ZTT1BfR0VPTV9GTEFHU19NRVRBRElSO1xcbiBcXHRpZiAoeGZzX2hhc196b25lZChtcCkpXFxuIFxcdFxcdGdlby1cXHUwMDNlZmxhZ3MgfD0gWEZTX0ZTT1BfR0VPTV9GTEFHU19aT05FRDtcXG4rXFx0aWYgKHhmc19oYXNfdmVyaXR5KG1wKSlcXG4rXFx0XFx0Z2VvLVxcdTAwM2VmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1ZFUklUWTtcXG4gXFx0Z2VvLVxcdTAwM2VydHNlY3RzaXplID0gc2JwLVxcdTAwM2VzYl9ibG9ja3NpemU7XFxuIFxcdGdlby1cXHUwMDNlZGlyYmxvY2tzaXplID0geGZzX2RpcjJfZGlyYmxvY2tfYnl0ZXMoc2JwKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uYyBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uY1xcbmluZGV4IGU1MjMzZTMxYWJiNzUwLi4wMmI2OGJmNGM1MTI3MCAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvc2NydWIvY29tbW9uLmNcXG4rKysgYi9mcy94ZnMvc2NydWIvY29tbW9uLmNcXG5AQCAtNDUsNiArNDUsOCBAQFxcbiAjaW5jbHVkZSBcXFwic2NydWIvaGVhbHRoLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJzY3J1Yi90ZW1wZmlsZS5oXFxcIlxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuK1xcbiAvKiBDb21tb24gY29kZSBmb3IgdGhlIG1ldGFkYXRhIHNjcnViYmVycy4gKi9cXG4gXFxuIC8qXFxuQEAgLTE3NTQsMyArMTc1Niw1NiBAQCB4Y2hrX2lub2RlX2NvdW50X2Jsb2NrcyhcXG4gXFx0cmV0dXJuIHhmc19ibWFwX2NvdW50X2Jsb2NrcyhzYy1cXHUwMDNldHAsIHNjLVxcdTAwM2VpcCwgd2hpY2hmb3JrLCBuZXh0ZW50cyxcXG4gXFx0XFx0XFx0Y291bnQpO1xcbiB9XFxuK1xcbisvKlxcbisgKiBJZiB0aGlzIGlub2RlIGhhcyBTX1ZFUklUWSBzZXQgb24gaXQsIHJlYWQgdGhlIHZlcml0eSBpbmZvLiBJZiB0aGUgcmVhZGluZ1xcbisgKiBmYWlscyB3aXRoIGFueXRoaW5nIG90aGVyIHRoYW4gRU5PTUVNLCB0aGUgZmlsZSBpcyBjb3JydXB0LCB3aGljaCB3ZSBjYW5cXG4rICogZGV0ZWN0IGxhdGVyIHdpdGggZnN2ZXJpdHlfYWN0aXZlLlxcbisgKlxcbisgKiBDYWxsZXJzIG11c3QgaG9sZCB0aGUgSU9MT0NLIGFuZCBtdXN0IG5vdCBob2xkIHRoZSBJTE9DSyBvZiBzYy1cXHUwMDNlaXAgYmVjYXVzZVxcbisgKiBhY3RpdmF0aW9uIHJlYWRzIGlub2RlIGRhdGEuXFxuKyAqL1xcbitpbnRcXG4reGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoXFxuK1xcdHN0cnVjdCB4ZnNfc2NydWJcXHQqc2MpXFxuK3tcXG4rXFx0aW50XFx0XFx0XFx0ZXJyb3I7XFxuK1xcbitcXHRpZiAoIWZzdmVyaXR5X2FjdGl2ZShWRlNfSShzYy1cXHUwMDNlaXApKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRlcnJvciA9IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhWRlNfSShzYy1cXHUwMDNlaXApKTtcXG4rXFx0c3dpdGNoIChlcnJvcikge1xcbitcXHRjYXNlIDA6XFxuK1xcdFxcdC8qIGZzdmVyaXR5IGlzIGFjdGl2ZSAqL1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSAtRU5PREFUQTpcXG4rXFx0Y2FzZSAtRU1TR1NJWkU6XFxuK1xcdGNhc2UgLUVJTlZBTDpcXG4rXFx0Y2FzZSAtRUZTQ09SUlVQVEVEOlxcbitcXHRjYXNlIC1FRkJJRzpcXG4rXFx0Y2FzZSAtRVJBTkdFOlxcbitcXHRjYXNlIC1FQkFETVNHOlxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgbm9uemVybyBlcnJubyBjb2RlcyBhYm92ZSBhcmUgdGhlIGVycm9yIGNvZGVzIHRoYXQgY2FuXFxuK1xcdFxcdCAqIGJlIHJldHVybmVkIGZyb20gZnN2ZXJpdHkgb24gbWV0YWRhdGEgdmFsaWRhdGlvbiBlcnJvcnMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0LyogcnVudGltZSBlcnJvcnMgKi9cXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLypcXG4rICogSXMgdGhpcyBhIHZlcml0eSBmaWxlIHRoYXQgZmFpbGVkIHRvIGFjdGl2YXRlPyAgQ2FsbGVycyBtdXN0IGhhdmUgdHJpZWQgdG9cXG4rICogYWN0aXZhdGUgZnN2ZXJpdHkgdmlhIHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5LlxcbisgKi9cXG4rYm9vbFxcbit4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oXFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXApXFxuK3tcXG4rXFx0cmV0dXJuIGZzdmVyaXR5X2FjdGl2ZShWRlNfSShpcCkpIFxcdTAwMjZcXHUwMDI2ICFmc3Zlcml0eV9nZXRfaW5mbyhWRlNfSShpcCkpO1xcbit9XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uaCBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uaFxcbmluZGV4IDlkNjI3ZmQ1MDY4N2U0Li4zZGUyYjYwMDlhOTk0MSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvc2NydWIvY29tbW9uLmhcXG4rKysgYi9mcy94ZnMvc2NydWIvY29tbW9uLmhcXG5AQCAtMjY4LDYgKzI2OCw4IEBAIGludCB4Y2hrX2lub2RlX2lzX2FsbG9jYXRlZChzdHJ1Y3QgeGZzX3NjcnViICpzYywgeGZzX2FnaW5vX3QgYWdpbm8sXFxuIFxcdFxcdGJvb2wgKmludXNlKTtcXG4gaW50IHhjaGtfaW5vZGVfY291bnRfYmxvY2tzKHN0cnVjdCB4ZnNfc2NydWIgKnNjLCBpbnQgd2hpY2hmb3JrLFxcbiBcXHRcXHR4ZnNfZXh0bnVtX3QgKm5leHRlbnRzLCB4ZnNfZmlsYmxrc190ICpjb3VudCk7XFxuK2ludCB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzdHJ1Y3QgeGZzX3NjcnViICpzYyk7XFxuK2Jvb2wgeGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTtcXG4gXFxuIGJvb2wgeGNoa19pbm9kZV9pc19kaXJ0cmVlX3Jvb3QoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xcbiBib29sIHhjaGtfaW5vZGVfaXNfc2Jfcm9vdGVkKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTtcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2lub2RlLmMgYi9mcy94ZnMvc2NydWIvaW5vZGUuY1xcbmluZGV4IDY1YjEzZTMxMTkxNjgxLi5kMWNkZDZiNDQ1ZDAxNyAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvc2NydWIvaW5vZGUuY1xcbisrKyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jXFxuQEAgLTM2LDYgKzM2LDEwIEBAIHhjaGtfcHJlcGFyZV9pc2NydWIoXFxuIFxcbiBcXHR4Y2hrX2lsb2NrKHNjLCBYRlNfSU9MT0NLX0VYQ0wpO1xcbiBcXG4rXFx0ZXJyb3IgPSB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzYyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4gXFx0ZXJyb3IgPSB4Y2hrX3RyYW5zX2FsbG9jKHNjLCAwKTtcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRyZXR1cm4gZXJyb3I7XFxuQEAgLTgzMyw2ICs4MzcsOSBAQCB4Y2hrX2lub2RlKFxcbiBcXHRpZiAoU19JU1JFRyhWRlNfSShzYy1cXHUwMDNlaXApLVxcdTAwM2VpX21vZGUpKVxcbiBcXHRcXHR4Y2hrX2lub2RlX2NoZWNrX3JlZmxpbmtfaWZsYWcoc2MsIElfSU5PKHNjLVxcdTAwM2VpcCkpO1xcbiBcXG4rXFx0aWYgKHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbihzYy1cXHUwMDNlaXApKVxcbitcXHRcXHR4Y2hrX2lub19zZXRfY29ycnVwdChzYywgc2MtXFx1MDAzZXNtLVxcdTAwM2VzbV9pbm8pO1xcbitcXG4gXFx0eGNoa19pbm9kZV9jaGVja191bmxpbmtlZChzYyk7XFxuIFxcbiBcXHR4Y2hrX2lub2RlX3hyZWYoc2MsIElfSU5PKHNjLVxcdTAwM2VpcCksIFxcdTAwMjZkaSk7XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9pbm9kZV9yZXBhaXIuYyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZV9yZXBhaXIuY1xcbmluZGV4IDNlYzQxYzE5ODM1MTE2Li4zNWU5M2E0YjUwY2Q5ZiAxMDA2NDRcXG4tLS0gYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNcXG4rKysgYi9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNcXG5AQCAtNTczLDYgKzU3Myw4IEBAIHhyZXBfZGlub2RlX2ZsYWdzKFxcbiBcXHRcXHRkaXAtXFx1MDAzZWRpX25yZXh0NjRfcGFkID0gMDtcXG4gXFx0ZWxzZSBpZiAoZGlwLVxcdTAwM2VkaV92ZXJzaW9uIFxcdTAwM2U9IDMpXFxuIFxcdFxcdGRpcC1cXHUwMDNlZGlfdjNfcGFkID0gMDtcXG4rXFx0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkgfHwgIVNfSVNSRUcobW9kZSkpXFxuK1xcdFxcdGZsYWdzMiBcXHUwMDI2PSB+WEZTX0RJRkxBRzJfVkVSSVRZO1xcbiBcXG4gXFx0aWYgKGZsYWdzMiBcXHUwMDI2IFhGU19ESUZMQUcyX01FVEFEQVRBKSB7XFxuIFxcdFxcdHhmc19mYWlsYWRkcl90XFx0ZmE7XFxuQEAgLTE2MTcsNiArMTYxOSwxMCBAQCB4cmVwX2Rpbm9kZV9jb3JlKFxcbiBcXHRpZiAoaWdldF9lcnJvcilcXG4gXFx0XFx0cmV0dXJuIGlnZXRfZXJyb3I7XFxuIFxcbitcXHRlcnJvciA9IHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5KHNjKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbiBcXHRlcnJvciA9IHhjaGtfdHJhbnNfYWxsb2Moc2MsIDApO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG5AQCAtMjAzNSw2ICsyMDQxLDI3IEBAIHhyZXBfaW5vZGVfdW5saW5rZWQoXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbisvKlxcbisgKiBJZiB0aGlzIGZpbGUgaXMgYSBmc3Zlcml0eSBmaWxlLCB4Y2hrX3ByZXBhcmVfaXNjcnViIG9yIHhyZXBfZGlub2RlX2NvcmVcXG4rICogc2hvdWxkIGhhdmUgYWN0aXZhdGVkIGl0LiAgSWYgaXQncyBzdGlsbCBub3QgYWN0aXZlLCB0aGVuIHRoZXJlJ3Mgc29tZXRoaW5nXFxuKyAqIHdyb25nIHdpdGggdGhlIHZlcml0eSBkZXNjcmlwdG9yIGFuZCB3ZSBzaG91bGQgdHVybiBpdCBvZmYuXFxuKyAqL1xcbitTVEFUSUMgaW50XFxuK3hyZXBfaW5vZGVfdmVyaXR5KFxcbitcXHRzdHJ1Y3QgeGZzX3NjcnViXFx0KnNjKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSA9IFZGU19JKHNjLVxcdTAwM2VpcCk7XFxuK1xcbitcXHRpZiAoeGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKHNjLVxcdTAwM2VpcCkpIHtcXG4rXFx0XFx0c2MtXFx1MDAzZWlwLVxcdTAwM2VpX2RpZmxhZ3MyIFxcdTAwMjY9IH5YRlNfRElGTEFHMl9WRVJJVFk7XFxuK1xcdFxcdGlub2RlX3NldF9mbGFncyhpbm9kZSwgMCwgU19WRVJJVFkpO1xcbitcXG4rXFx0XFx0eGZzX3RyYW5zX2xvZ19pbm9kZShzYy1cXHUwMDNldHAsIHNjLVxcdTAwM2VpcCwgWEZTX0lMT0dfQ09SRSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKiBSZXBhaXIgYW4gaW5vZGUncyBmaWVsZHMuICovXFxuIGludFxcbiB4cmVwX2lub2RlKFxcbkBAIC0yMDg0LDYgKzIxMTEsMTUgQEAgeHJlcF9pbm9kZShcXG4gXFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBEaXNhYmxlIGZzdmVyaXR5IGlmIGl0IGNhbm5vdCBiZSBhY3RpdmF0ZWQuICBBY3RpdmF0aW9uIGZhaWx1cmVcXG4rXFx0ICogcHJvaGliaXRzIHRoZSBmaWxlIGZyb20gYmVpbmcgb3BlbmVkLCBzbyB0aGVyZSBjYW5ub3QgYmUgYW5vdGhlclxcbitcXHQgKiBwcm9ncmFtIHdpdGggYW4gb3BlbiBmZCB0byB3aGF0IGl0IHRoaW5rcyBpcyBhIHZlcml0eSBmaWxlLlxcbitcXHQgKi9cXG4rXFx0ZXJyb3IgPSB4cmVwX2lub2RlX3Zlcml0eShzYyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4gXFx0LyogUmVjb25uZWN0IGluY29yZSB1bmxpbmtlZCBsaXN0ICovXFxuIFxcdGVycm9yID0geHJlcF9pbm9kZV91bmxpbmtlZChzYyk7XFxuIFxcdGlmIChlcnJvcilcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hb3BzLmMgYi9mcy94ZnMveGZzX2FvcHMuY1xcbmluZGV4IDUxMjkzYjZmMzMxZjBiLi4xMzViZTcxMWY5YTQwOSAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX2FvcHMuY1xcbisrKyBiL2ZzL3hmcy94ZnNfYW9wcy5jXFxuQEAgLTIyLDcgKzIyLDkgQEBcXG4gI2luY2x1ZGUgXFxcInhmc19pY2FjaGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhmc196b25lX2FsbG9jLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfcnRncm91cC5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2ZzdmVyaXR5LmhcXFwiXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW8taW50ZWdyaXR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc3Zlcml0eS5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IHhmc193cml0ZXBhZ2VfY3R4IHtcXG4gXFx0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggY3R4O1xcbkBAIC0xODEsNiArMTgzLDQ5IEBAIHhmc19lbmRfaW9lbmRfd3JpdGUoXFxuIFxcdG1lbWFsbG9jX25vZnNfcmVzdG9yZShub2ZzX2ZsYWcpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBQcmlvcml0aXplIGZzdmVyaXR5IG1ldGFkYXRhIG92ZXIgZmlsZSBkYXRhLiBTb3J0IGJhc2VkIG9uIGlfc2l6ZSBhcyBmc3Zlcml0eVxcbisgKiBtZXRhZGF0YSBpcyBhbHdheXMgYmV5b25kIEVPRlxcbisgKi9cXG4rc3RhdGljIGludFxcbit4ZnNfcmVhZF9pb2VuZF9jb21wYXJlKFxcbitcXHR2b2lkXFx0XFx0XFx0KnByaXYsXFxuK1xcdGNvbnN0IHN0cnVjdCBsaXN0X2hlYWRcXHQqYSxcXG4rXFx0Y29uc3Qgc3RydWN0IGxpc3RfaGVhZFxcdCpiKVxcbit7XFxuK1xcdHN0cnVjdCBpb21hcF9pb2VuZFxcdCppYSA9IGNvbnRhaW5lcl9vZihhLCBzdHJ1Y3QgaW9tYXBfaW9lbmQsXFxuK1xcdFxcdFxcdGlvX2xpc3QpO1xcbitcXHRzdHJ1Y3QgaW9tYXBfaW9lbmRcXHQqaWIgPSBjb250YWluZXJfb2YoYiwgc3RydWN0IGlvbWFwX2lvZW5kLFxcbitcXHRcXHRcXHRpb19saXN0KTtcXG4rXFx0bG9mZl90XFx0XFx0XFx0aV9zaXplID0gaV9zaXplX3JlYWQoaWEtXFx1MDAzZWlvX2lub2RlKTtcXG4rXFxuK1xcdGlmICghSVNfVkVSSVRZKGlhLVxcdTAwM2Vpb19pbm9kZSkpXFxuK1xcdFxcdHJldHVybiBpb21hcF9pb2VuZF9jb21wYXJlKHByaXYsIGEsIGIpO1xcbitcXG4rXFx0aWYgKGlhLVxcdTAwM2Vpb19vZmZzZXQgXFx1MDAzZSBpX3NpemUgXFx1MDAyNlxcdTAwMjYgaWItXFx1MDAzZWlvX29mZnNldCBcXHUwMDNjIGlfc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXHRpZiAoaWEtXFx1MDAzZWlvX29mZnNldCBcXHUwMDNjIGlfc2l6ZSBcXHUwMDI2XFx1MDAyNiBpYi1cXHUwMDNlaW9fb2Zmc2V0IFxcdTAwM2UgaV9zaXplKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIElPIHJlYWQgY29tcGxldGlvbi5cXG4rICovXFxuK3N0YXRpYyB2b2lkXFxuK3hmc19lbmRfaW9lbmRfcmVhZChcXG4rXFx0c3RydWN0IGlvbWFwX2lvZW5kXFx0KmlvZW5kKVxcbit7XFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShpb2VuZC1cXHUwMDNlaW9faW5vZGUpO1xcbitcXG4rXFx0aWYgKCFpb2VuZC1cXHUwMDNlaW9fYmlvLmJpX3N0YXR1cyBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHR4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGlwLCBpb2VuZC1cXHUwMDNlaW9fb2Zmc2V0KSlcXG4rXFx0XFx0ZnN2ZXJpdHlfdmVyaWZ5X2Jpbyhpb2VuZC1cXHUwMDNlaW9fdmksXFxuK1xcdFxcdFxcdFxcdCAgICBcXHUwMDI2aW9lbmQtXFx1MDAzZWlvX2Jpbyk7XFxuK1xcdGlvbWFwX2ZpbmlzaF9pb2VuZHMoaW9lbmQsXFxuK1xcdFxcdGJsa19zdGF0dXNfdG9fZXJybm8oaW9lbmQtXFx1MDAzZWlvX2Jpby5iaV9zdGF0dXMpKTtcXG4rfVxcbitcXG4gLypcXG4gICogRmluaXNoIGFsbCBwZW5kaW5nIElPIGNvbXBsZXRpb25zIHRoYXQgcmVxdWlyZSB0cmFuc2FjdGlvbmFsIG1vZGlmaWNhdGlvbnMuXFxuICAqXFxuQEAgLTIwOSwxNCArMjU0LDE3IEBAIHhmc19lbmRfaW8oXFxuIFxcdGxpc3RfcmVwbGFjZV9pbml0KFxcdTAwMjZpcC1cXHUwMDNlaV9pb2VuZF9saXN0LCBcXHUwMDI2dG1wKTtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aXAtXFx1MDAzZWlfaW9lbmRfbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0aW9tYXBfc29ydF9pb2VuZHMoXFx1MDAyNnRtcCk7XFxuK1xcdGlvZW5kID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFxcdTAwMjZ0bXAsIHN0cnVjdCBpb21hcF9pb2VuZCwgaW9fbGlzdCk7XFxuK1xcdGlmIChiaW9fb3AoXFx1MDAyNmlvZW5kLVxcdTAwM2Vpb19iaW8pID09IFJFUV9PUF9SRUFEKVxcbitcXHRcXHRpb21hcF9zb3J0X2lvZW5kcyhcXHUwMDI2dG1wLCB4ZnNfcmVhZF9pb2VuZF9jb21wYXJlKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRpb21hcF9zb3J0X2lvZW5kcyhcXHUwMDI2dG1wLCBpb21hcF9pb2VuZF9jb21wYXJlKTtcXG4gXFx0d2hpbGUgKChpb2VuZCA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbChcXHUwMDI2dG1wLCBzdHJ1Y3QgaW9tYXBfaW9lbmQsXFxuIFxcdFxcdFxcdGlvX2xpc3QpKSkge1xcbiBcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZpb2VuZC1cXHUwMDNlaW9fbGlzdCk7XFxuIFxcdFxcdGlvbWFwX2lvZW5kX3RyeV9tZXJnZShpb2VuZCwgXFx1MDAyNnRtcCk7XFxuIFxcdFxcdGlmIChiaW9fb3AoXFx1MDAyNmlvZW5kLVxcdTAwM2Vpb19iaW8pID09IFJFUV9PUF9SRUFEKVxcbi1cXHRcXHRcXHRpb21hcF9maW5pc2hfaW9lbmRzKGlvZW5kLFxcbi1cXHRcXHRcXHRcXHRibGtfc3RhdHVzX3RvX2Vycm5vKGlvZW5kLVxcdTAwM2Vpb19iaW8uYmlfc3RhdHVzKSk7XFxuK1xcdFxcdFxcdHhmc19lbmRfaW9lbmRfcmVhZChpb2VuZCk7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0eGZzX2VuZF9pb2VuZF93cml0ZShpb2VuZCk7XFxuIFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbkBAIC0yNDIsOSArMjkwLDE0IEBAIHhmc19lbmRfYmlvKFxcbiBcXHR9XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aXAtXFx1MDAzZWlfaW9lbmRfbG9jaywgZmxhZ3MpO1xcbi1cXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2aXAtXFx1MDAzZWlfaW9lbmRfbGlzdCkpXFxuLVxcdFxcdFdBUk5fT05fT05DRSghcXVldWVfd29yayhtcC1cXHUwMDNlbV91bndyaXR0ZW5fd29ya3F1ZXVlLFxcbitcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2aXAtXFx1MDAzZWlfaW9lbmRfbGlzdCkpIHtcXG4rXFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0ZTX1ZFUklUWSkgXFx1MDAyNlxcdTAwMjYgaW9lbmQtXFx1MDAzZWlvX3ZpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBpb2VuZC1cXHUwMDNlaW9fb2Zmc2V0IFxcdTAwM2MgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXFxuK1xcdFxcdFxcdGZzdmVyaXR5X2VucXVldWVfdmVyaWZ5X3dvcmsoXFx1MDAyNmlwLVxcdTAwM2VpX2lvZW5kX3dvcmspO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRSghcXVldWVfd29yayhtcC1cXHUwMDNlbV91bndyaXR0ZW5fd29ya3F1ZXVlLFxcbiBcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmlwLVxcdTAwM2VpX2lvZW5kX3dvcmspKTtcXG4rXFx0fVxcbiBcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZpb2VuZC1cXHUwMDNlaW9fbGlzdCwgXFx1MDAyNmlwLVxcdTAwM2VpX2lvZW5kX2xpc3QpO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZpcC1cXHUwMDNlaV9pb2VuZF9sb2NrLCBmbGFncyk7XFxuIH1cXG5AQCAtMzUwLDEyICs0MDMsMTYgQEAgeGZzX21hcF9ibG9ja3MoXFxuIFxcdGludFxcdFxcdFxcdHJldHJpZXMgPSAwO1xcbiBcXHRpbnRcXHRcXHRcXHRlcnJvciA9IDA7XFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdCpzZXE7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdGlvbWFwX2ZsYWdzID0gMDtcXG4gXFxuIFxcdGlmICh4ZnNfaXNfc2h1dGRvd24obXApKVxcbiBcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFxuIFxcdFhGU19FUlJPUlRBR19ERUxBWShtcCwgWEZTX0VSUlRBR19XQl9ERUxBWV9NUyk7XFxuIFxcbitcXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXFxuK1xcdFxcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBDT1cgZm9yayBibG9ja3MgY2FuIG92ZXJsYXAgZGF0YSBmb3JrIGJsb2NrcyBldmVuIGlmIHRoZSBibG9ja3NcXG4gXFx0ICogYXJlbid0IHNoYXJlZC4gIENPVyBJL08gYWx3YXlzIHRha2VzIHByZWNlZGVudCwgc28gd2UgbXVzdCBhbHdheXNcXG5AQCAtNDQzLDcgKzUwMCw4IEBAIHhmc19tYXBfYmxvY2tzKFxcbiBcXHQgICAgaXNudWxsc3RhcnRibG9jayhpbWFwLmJyX3N0YXJ0YmxvY2spKVxcbiBcXHRcXHRnb3RvIGFsbG9jYXRlX2Jsb2NrcztcXG4gXFxuLVxcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBcXHUwMDI2d3BjLVxcdTAwM2Vpb21hcCwgXFx1MDAyNmltYXAsIDAsIDAsIFhGU19XUEMod3BjKS1cXHUwMDNlZGF0YV9zZXEpO1xcbitcXHR4ZnNfYm1idF90b19pb21hcChpcCwgXFx1MDAyNndwYy1cXHUwMDNlaW9tYXAsIFxcdTAwMjZpbWFwLCAwLCBpb21hcF9mbGFncyxcXG4rXFx0XFx0XFx0ICBYRlNfV1BDKHdwYyktXFx1MDAzZWRhdGFfc2VxKTtcXG4gXFx0dHJhY2VfeGZzX21hcF9ibG9ja3NfZm91bmQoaXAsIG9mZnNldCwgY291bnQsIHdoaWNoZm9yaywgXFx1MDAyNmltYXApO1xcbiBcXHRyZXR1cm4gMDtcXG4gYWxsb2NhdGVfYmxvY2tzOlxcbkBAIC01OTAsMTIgKzY0OCwxNiBAQCB4ZnNfem9uZWRfbWFwX2Jsb2NrcyhcXG4gXFx0eGZzX2ZpbGJsa3NfdFxcdFxcdGNvdW50X2ZzYjtcXG4gXFx0c3RydWN0IHhmc19ibWJ0X2lyZWNcXHRpbWFwLCBkZWw7XFxuIFxcdHN0cnVjdCB4ZnNfaWV4dF9jdXJzb3JcXHRpY3VyO1xcbitcXHR1MTZcXHRcXHRcXHRpb21hcF9mbGFncyA9IDA7XFxuIFxcbiBcXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbiBcXHRYRlNfRVJST1JUQUdfREVMQVkobXAsIFhGU19FUlJUQUdfV0JfREVMQVlfTVMpO1xcbiBcXG4rXFx0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxcbitcXHRcXHRpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xcbitcXG4gXFx0LypcXG4gXFx0ICogQWxsIGRpcnR5IGRhdGEgbXVzdCBiZSBjb3ZlcmVkIGJ5IGRlbGFsbG9jIGV4dGVudHMuICBCdXQgdHJ1bmNhdGUgY2FuXFxuIFxcdCAqIHJlbW92ZSBkZWxhbGxvYyBleHRlbnRzIHVuZGVybmVhdGggdXMgb3IgcmVkdWNlIHRoZWlyIHNpemUuXFxuQEAgLTYxOSw3ICs2ODEsNyBAQCB4ZnNfem9uZWRfbWFwX2Jsb2NrcyhcXG4gXFx0XFx0aW1hcC5icl9zdGFydGJsb2NrID0gSE9MRVNUQVJUQkxPQ0s7XFxuIFxcdFxcdGltYXAuYnJfc3RhdGUgPSBYRlNfRVhUX05PUk07XFxuIFxcdFxcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XFxuLVxcdFxcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBcXHUwMDI2d3BjLVxcdTAwM2Vpb21hcCwgXFx1MDAyNmltYXAsIDAsIDAsIDApO1xcbitcXHRcXHR4ZnNfYm1idF90b19pb21hcChpcCwgXFx1MDAyNndwYy1cXHUwMDNlaW9tYXAsIFxcdTAwMjZpbWFwLCAwLCBpb21hcF9mbGFncywgMCk7XFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcdGVuZF9mc2IgPSBtaW4oZW5kX2ZzYiwgaW1hcC5icl9zdGFydG9mZiArIGltYXAuYnJfYmxvY2tjb3VudCk7XFxuQEAgLTYzMiwxMSArNjk0LDEwIEBAIHhmc196b25lZF9tYXBfYmxvY2tzKFxcbiBcXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xcbiBcXG4gXFx0d3BjLVxcdTAwM2Vpb21hcC50eXBlID0gSU9NQVBfTUFQUEVEO1xcbi1cXHR3cGMtXFx1MDAzZWlvbWFwLmZsYWdzID0gSU9NQVBfRl9ESVJUWTtcXG4gXFx0d3BjLVxcdTAwM2Vpb21hcC5iZGV2ID0gbXAtXFx1MDAzZW1fcnRkZXZfdGFyZ3AtXFx1MDAzZWJ0X2JkZXY7XFxuIFxcdHdwYy1cXHUwMDNlaW9tYXAub2Zmc2V0ID0gb2Zmc2V0O1xcbiBcXHR3cGMtXFx1MDAzZWlvbWFwLmxlbmd0aCA9IFhGU19GU0JfVE9fQihtcCwgY291bnRfZnNiKTtcXG4tXFx0d3BjLVxcdTAwM2Vpb21hcC5mbGFncyA9IElPTUFQX0ZfQU5PTl9XUklURTtcXG4rXFx0d3BjLVxcdTAwM2Vpb21hcC5mbGFncyA9IGlvbWFwX2ZsYWdzIHwgSU9NQVBfRl9BTk9OX1dSSVRFO1xcbiBcXG4gXFx0dHJhY2VfeGZzX3pvbmVkX21hcF9ibG9ja3MoaXAsIG9mZnNldCwgd3BjLVxcdTAwM2Vpb21hcC5sZW5ndGgpO1xcbiBcXHRyZXR1cm4gMDtcXG5AQCAtNjg0LDYgKzc0NSwyMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgeGZzX3pvbmVkX3dyaXRlYmFja19vcHMgPSB7XFxuIFxcdC53cml0ZWJhY2tfc3VibWl0XFx0PSB4ZnNfem9uZWRfd3JpdGViYWNrX3N1Ym1pdCxcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbnRcXG4reGZzX2lvbWFwX3dyaXRlcGFnZXMoXFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHRcXHQqaXAsXFxuK1xcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4XFx0KmN0eClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBXcml0ZWJhY2sgZG9lcyBub3Qgd29yayBmb3IgZm9saW9zIHBhc3QgRU9GLCBsZXQgaXQga25vdyB0aGF0XFxuK1xcdCAqIEkvTyBoYXBwZW5zIGZvciBmc3Zlcml0eSBtZXRhZGF0YSBhbmQgdGhpcyByZXN0cmljdGlvbiBuZWVkXFxuK1xcdCAqIHRvIGJlIHNraXBwZWRcXG4rXFx0ICovXFxuK1xcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcXG4rXFx0XFx0Y3R4LVxcdTAwM2Vpb21hcC5mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xcbitcXG4rXFx0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoY3R4KTtcXG4rfVxcbitcXG4gU1RBVElDIGludFxcbiB4ZnNfdm1fd3JpdGVwYWdlcyhcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2VcXHQqbWFwcGluZyxcXG5AQCAtNzAzLDcgKzc4MCw3IEBAIHhmc192bV93cml0ZXBhZ2VzKFxcbiBcXHRcXHR9O1xcbiBcXHRcXHRpbnRcXHRcXHRcXHRcXHRlcnJvcjtcXG4gXFxuLVxcdFxcdGVycm9yID0gaW9tYXBfd3JpdGVwYWdlcyhcXHUwMDI2eGMuY3R4KTtcXG4rXFx0XFx0ZXJyb3IgPSB4ZnNfaW9tYXBfd3JpdGVwYWdlcyhpcCwgXFx1MDAyNnhjLmN0eCk7XFxuIFxcdFxcdGlmICh4Yy5vcGVuX3pvbmUpXFxuIFxcdFxcdFxcdHhmc19vcGVuX3pvbmVfcHV0KHhjLm9wZW5fem9uZSk7XFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG5AQCAtNzE2LDcgKzc5Myw3IEBAIHhmc192bV93cml0ZXBhZ2VzKFxcbiBcXHRcXHRcXHR9LFxcbiBcXHRcXHR9O1xcbiBcXG4tXFx0XFx0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXFx1MDAyNndwYy5jdHgpO1xcbitcXHRcXHRyZXR1cm4geGZzX2lvbWFwX3dyaXRlcGFnZXMoaXAsIFxcdTAwMjZ3cGMuY3R4KTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC03NjEsOSArODM4LDEyIEBAIHhmc19iaW9fc3VibWl0X3JlYWQoXFxuIFxcdHN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eFxcdCpjdHgpXFxuIHtcXG4gXFx0c3RydWN0IGJpb1xcdFxcdFxcdCpiaW8gPSBjdHgtXFx1MDAzZXJlYWRfY3R4O1xcbitcXHRzdHJ1Y3QgaW9tYXBfaW9lbmRcXHRcXHQqaW9lbmQ7XFxuIFxcbiBcXHQvKiBkZWZlciByZWFkIGNvbXBsZXRpb25zIHRvIHRoZSBpb2VuZCB3b3JrcXVldWUgKi9cXG4tXFx0aW9tYXBfaW5pdF9pb2VuZChpdGVyLVxcdTAwM2Vpbm9kZSwgYmlvLCBjdHgtXFx1MDAzZXJlYWRfY3R4X2ZpbGVfb2Zmc2V0LCAwKTtcXG4rXFx0aW9lbmQgPSBpb21hcF9pbml0X2lvZW5kKGl0ZXItXFx1MDAzZWlub2RlLCBiaW8sIGN0eC1cXHUwMDNlcmVhZF9jdHhfZmlsZV9vZmZzZXQsXFxuK1xcdFxcdFxcdDApO1xcbitcXHRpb2VuZC1cXHUwMDNlaW9fdmkgPSBjdHgtXFx1MDAzZXZpO1xcbiBcXHRpb21hcF9iaW9fc3VibWl0X3JlYWRfZW5kaW8oaXRlciwgY3R4LCB4ZnNfZW5kX2Jpbyk7XFxuIH1cXG4gXFxuQEAgLTc3NSwxMSArODU1LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfcmVhZF9vcHMgeGZzX2lvbWFwX3JlYWRfb3BzID0ge1xcbiBcXG4gc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfcmVhZF9vcHMgKlxcbiB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKFxcbi1cXHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZVxcdCptYXBwaW5nKVxcbitcXHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZVxcdCptYXBwaW5nLFxcbitcXHRsb2ZmX3RcXHRcXHRcXHRcXHRwb3NpdGlvbilcXG4ge1xcbiBcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0XFx0KmlwID0gWEZTX0kobWFwcGluZy1cXHUwMDNlaG9zdCk7XFxuIFxcbi1cXHRpZiAoYmRldl9oYXNfaW50ZWdyaXR5X2NzdW0oeGZzX2lub2RlX2J1ZnRhcmcoaXApLVxcdTAwM2VidF9iZGV2KSlcXG4rXFx0aWYgKGJkZXZfaGFzX2ludGVncml0eV9jc3VtKHhmc19pbm9kZV9idWZ0YXJnKGlwKS1cXHUwMDNlYnRfYmRldikgfHxcXG4rXFx0XFx0XFx0eGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShpcCwgcG9zaXRpb24pKVxcbiBcXHRcXHRyZXR1cm4gXFx1MDAyNnhmc19pb21hcF9yZWFkX29wcztcXG4gXFx0cmV0dXJuIFxcdTAwMjZpb21hcF9iaW9fcmVhZF9vcHM7XFxuIH1cXG5AQCAtNzkxLDcgKzg3Myw3IEBAIHhmc192bV9yZWFkX2ZvbGlvKFxcbiB7XFxuIFxcdHN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eFxcdGN0eCA9IHsgLmN1cl9mb2xpbyA9IGZvbGlvIH07XFxuIFxcbi1cXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhmb2xpby1cXHUwMDNlbWFwcGluZyk7XFxuK1xcdGN0eC5vcHMgPSB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKGZvbGlvLVxcdTAwM2VtYXBwaW5nLCBmb2xpb19wb3MoZm9saW8pKTtcXG4gXFx0aW9tYXBfcmVhZF9mb2xpbyhcXHUwMDI2eGZzX3JlYWRfaW9tYXBfb3BzLCBcXHUwMDI2Y3R4LCBOVUxMKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtODAyLDcgKzg4NCw3IEBAIHhmc192bV9yZWFkYWhlYWQoXFxuIHtcXG4gXFx0c3RydWN0IGlvbWFwX3JlYWRfZm9saW9fY3R4XFx0Y3R4ID0geyAucmFjID0gcmFjIH07XFxuIFxcbi1cXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhyYWMtXFx1MDAzZW1hcHBpbmcpLFxcbitcXHRjdHgub3BzID0geGZzX2dldF9pb21hcF9yZWFkX29wcyhyYWMtXFx1MDAzZW1hcHBpbmcsIHJlYWRhaGVhZF9wb3MocmFjKSk7XFxuIFxcdGlvbWFwX3JlYWRhaGVhZChcXHUwMDI2eGZzX3JlYWRfaW9tYXBfb3BzLCBcXHUwMDI2Y3R4LCBOVUxMKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwX3V0aWwuYyBiL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmNcXG5pbmRleCBjODhiOWFkZTczODlkZC4uYjE4NzVkNmU3NDUyOTYgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19ibWFwX3V0aWwuY1xcbisrKyBiL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmNcXG5AQCAtMzEsNiArMzEsNyBAQFxcbiAjaW5jbHVkZSBcXFwieGZzX3J0Yml0bWFwLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ4ZnNfcnRncm91cC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGZzX3pvbmVfYWxsb2MuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuIFxcbiAvKiBLZXJuZWwgb25seSBCTUFQIHJlbGF0ZWQgZGVmaW5pdGlvbnMgYW5kIGZ1bmN0aW9ucyAqL1xcbiBcXG5AQCAtNTUzLDYgKzU1NCwxNCBAQCB4ZnNfY2FuX2ZyZWVfZW9mYmxvY2tzKFxcbiBcXHRpZiAobGFzdF9mc2IgXFx1MDAzYz0gZW5kX2ZzYilcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogTm90aGluZyB0byBjbGVhbiBvbiBmc3Zlcml0eSBpbm9kZXMgYXMgdGhleSBkb24ndCB1c2UgcHJlYWxsb2MgYW5kXFxuK1xcdCAqIHRoZXJlIG5vIGRlbGFsbG9jIGFzIG9ubHkgd3JpdHRlbiBkYXRhIGlzIGZzdmVyaXR5IG1ldGFkYXRhXFxuK1xcdCAqL1xcbitcXHRpZiAoSVNfVkVSSVRZKFZGU19JKGlwKSkgfHxcXG4rXFx0ICAgIHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBwb3N0LUVPRiBleHRlbnQgdG8gZnJlZS4gIElmIHRoZXJlIGFyZSBhbnlcXG4gXFx0ICogZGVsYWxsb2MgYmxvY2tzIGF0dGFjaGVkIHRvIHRoZSBpbm9kZSAoZGF0YSBmb3JrIGRlbGFsbG9jXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZmlsZS5jIGIvZnMveGZzL3hmc19maWxlLmNcXG5pbmRleCA4NDVhOTdjOWIwNjMwYi4uY2JhMTk0ZDY3OGZjNzcgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19maWxlLmNcXG4rKysgYi9mcy94ZnMveGZzX2ZpbGUuY1xcbkBAIC0zNyw2ICszNyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mYWR2aXNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb3VudC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsZWxvY2suaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wcztcXG4gXFxuQEAgLTI0NSw2ICsyNDYsMjUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIHhmc19kaW9fcmVhZF9ib3VuY2Vfb3BzID0ge1xcbiBcXHQuYmlvX3NldFxcdD0gXFx1MDAyNmlvbWFwX2lvZW5kX2Jpb3NldCxcXG4gfTtcXG4gXFxuK1NUQVRJQyBzc2l6ZV90XFxuK3hmc19maWxlX2J1ZmZlcmVkX3JlYWQoXFxuK1xcdHN0cnVjdCBraW9jYlxcdFxcdCppb2NiLFxcbitcXHRzdHJ1Y3QgaW92X2l0ZXJcXHRcXHQqdG8pXFxuK3tcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCA9IFhGU19JKGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCkpO1xcbitcXHRzc2l6ZV90XFx0XFx0XFx0cmV0O1xcbitcXG4rXFx0dHJhY2VfeGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7XFxuK1xcbitcXHRyZXQgPSB4ZnNfaWxvY2tfaW9jYihpb2NiLCBYRlNfSU9MT0NLX1NIQVJFRCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIoaW9jYiwgdG8pO1xcbitcXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gU1RBVElDIHNzaXplX3RcXG4geGZzX2ZpbGVfZGlvX3JlYWQoXFxuIFxcdHN0cnVjdCBraW9jYlxcdFxcdCppb2NiLFxcbkBAIC0yNjUsNiArMjg1LDE2IEBAIHhmc19maWxlX2Rpb19yZWFkKFxcbiBcXHRyZXQgPSB4ZnNfaWxvY2tfaW9jYihpb2NiLCBYRlNfSU9MT0NLX1NIQVJFRCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qXFxuK1xcdCAqIFJlLWNoZWNrIHZlcml0eSBzdGF0dXMgYWZ0ZXIgYWNxdWlyaW5nIGxvY2suIFRoaXMgcHJldmVudHMgVE9DVE9VIGluXFxuK1xcdCAqIHhmc19maWxlX3JlYWRfaXRlcigpIHdoaWxlIGZhbGxpbmcgYmFjayBmcm9tIERJTyB0byBidWZmZXJlZCBJL08gYXNcXG4rXFx0ICogbm93IHdlIGFyZSBob2xkaW5nIGEgbG9ja1xcbitcXHQgKi9cXG4rXFx0aWYgKGZzdmVyaXR5X2FjdGl2ZShWRlNfSShpcCkpKSB7XFxuK1xcdFxcdHhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7XFxuK1xcdFxcdGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjY9IH5JT0NCX0RJUkVDVDtcXG4rXFx0XFx0cmV0dXJuIHhmc19maWxlX2J1ZmZlcmVkX3JlYWQoaW9jYiwgdG8pO1xcbitcXHR9XFxuIFxcdGlmIChtYXBwaW5nX3N0YWJsZV93cml0ZXMoaW9jYi1cXHUwMDNla2lfZmlscC1cXHUwMDNlZl9tYXBwaW5nKSkge1xcbiBcXHRcXHRkaW9fb3BzID0gXFx1MDAyNnhmc19kaW9fcmVhZF9ib3VuY2Vfb3BzO1xcbiBcXHRcXHRkaW9fZmxhZ3MgfD0gSU9NQVBfRElPX0JPVU5DRTtcXG5AQCAtMjgxLDcgKzMxMSw4IEBAIHhmc19maWxlX2RheF9yZWFkKFxcbiBcXHRzdHJ1Y3Qga2lvY2JcXHRcXHQqaW9jYixcXG4gXFx0c3RydWN0IGlvdl9pdGVyXFx0XFx0KnRvKVxcbiB7XFxuLVxcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShpb2NiLVxcdTAwM2VraV9maWxwLVxcdTAwM2VmX21hcHBpbmctXFx1MDAzZWhvc3QpO1xcbitcXHRzdHJ1Y3QgaW5vZGVcXHRcXHQqaW5vZGUgPSBpb2NiLVxcdTAwM2VraV9maWxwLVxcdTAwM2VmX21hcHBpbmctXFx1MDAzZWhvc3Q7XFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShpbm9kZSk7XFxuIFxcdHNzaXplX3RcXHRcXHRcXHRyZXQgPSAwO1xcbiBcXG4gXFx0dHJhY2VfeGZzX2ZpbGVfZGF4X3JlYWQoaW9jYiwgdG8pO1xcbkBAIC0yOTksMjUgKzMzMCw2IEBAIHhmc19maWxlX2RheF9yZWFkKFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1TVEFUSUMgc3NpemVfdFxcbi14ZnNfZmlsZV9idWZmZXJlZF9yZWFkKFxcbi1cXHRzdHJ1Y3Qga2lvY2JcXHRcXHQqaW9jYixcXG4tXFx0c3RydWN0IGlvdl9pdGVyXFx0XFx0KnRvKVxcbi17XFxuLVxcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShmaWxlX2lub2RlKGlvY2ItXFx1MDAzZWtpX2ZpbHApKTtcXG4tXFx0c3NpemVfdFxcdFxcdFxcdHJldDtcXG4tXFxuLVxcdHRyYWNlX3hmc19maWxlX2J1ZmZlcmVkX3JlYWQoaW9jYiwgdG8pO1xcbi1cXG4tXFx0cmV0ID0geGZzX2lsb2NrX2lvY2IoaW9jYiwgWEZTX0lPTE9DS19TSEFSRUQpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXHRyZXQgPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKGlvY2IsIHRvKTtcXG4tXFx0eGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTtcXG4tXFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuIFNUQVRJQyBzc2l6ZV90XFxuIHhmc19maWxlX3JlYWRfaXRlcihcXG4gXFx0c3RydWN0IGtpb2NiXFx0XFx0KmlvY2IsXFxuQEAgLTMzMiw2ICszNDQsMTQgQEAgeGZzX2ZpbGVfcmVhZF9pdGVyKFxcbiBcXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbitcXHQvKlxcbitcXHQgKiBJbiBjYXNlIGZzLXZlcml0eSBpcyBlbmFibGVkLCB3ZSBhbHNvIGZhbGxiYWNrIHRvIHRoZSBidWZmZXJlZCByZWFkXFxuK1xcdCAqIGZyb20gdGhlIGRpcmVjdCByZWFkIHBhdGguIFRoZXJlZm9yZSwgSU9DQl9ESVJFQ1QgaXMgc2V0IGFuZCBuZWVkIHRvXFxuK1xcdCAqIGJlIGNsZWFyZWQgKHNlZSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKCkpXFxuK1xcdCAqL1xcbitcXHRpZiAoZnN2ZXJpdHlfYWN0aXZlKGlub2RlKSlcXG4rXFx0XFx0aW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNj0gfklPQ0JfRElSRUNUO1xcbitcXG4gXFx0aWYgKElTX0RBWChpbm9kZSkpXFxuIFxcdFxcdHJldCA9IHhmc19maWxlX2RheF9yZWFkKGlvY2IsIHRvKTtcXG4gXFx0ZWxzZSBpZiAoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0RJUkVDVClcXG5AQCAtMTcwMCwxMSArMTcyMCwxOCBAQCB4ZnNfZmlsZV9vcGVuKFxcbiBcXHRzdHJ1Y3QgaW5vZGVcXHQqaW5vZGUsXFxuIFxcdHN0cnVjdCBmaWxlXFx0KmZpbGUpXFxuIHtcXG4rXFx0aW50XFx0XFx0ZXJyb3I7XFxuK1xcbiBcXHRpZiAoeGZzX2lzX3NodXRkb3duKFhGU19NKGlub2RlLVxcdTAwM2VpX3NiKSkpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRmaWxlLVxcdTAwM2VmX21vZGUgfD0gRk1PREVfTk9XQUlUIHwgRk1PREVfQ0FOX09ESVJFQ1Q7XFxuIFxcdGlmICh4ZnNfZ2V0X2F0b21pY193cml0ZV9taW4oWEZTX0koaW5vZGUpKSBcXHUwMDNlIDApXFxuIFxcdFxcdGZpbGUtXFx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DQU5fQVRPTUlDX1dSSVRFO1xcbitcXG4rXFx0ZXJyb3IgPSBmc3Zlcml0eV9maWxlX29wZW4oaW5vZGUsIGZpbGUpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuIFxcdHJldHVybiBnZW5lcmljX2ZpbGVfb3Blbihpbm9kZSwgZmlsZSk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuYyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjQ2MjIyM2I0NjE5YjA2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuY1xcbkBAIC0wLDAgKzEsNDgwIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKy8qXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNiBSZWQgSGF0LCBJbmMuXFxuKyAqL1xcbisjaW5jbHVkZSBcXFwieGZzX3BsYXRmb3JtLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfZm9ybWF0LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfc2hhcmVkLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfdHJhbnNfcmVzdi5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX21vdW50LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfZGFfZm9ybWF0LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfZGFfYnRyZWUuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19pbm9kZS5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2xvZ19mb3JtYXQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc190cmFucy5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2RlZmVyLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfdHJhY2UuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19xdW90YS5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2ZzdmVyaXR5LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfaW9tYXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19lcnJvci5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2hlYWx0aC5oXFxcIlxcbisjaW5jbHVkZSBcXFwieGZzX2JtYXAuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19ibWFwX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb21hcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZW1hcC5oXFx1MDAzZVxcbitcXG4rbG9mZl90XFxuK3hmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoXFxuK1xcdGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXApXFxuK3tcXG4rXFx0cmV0dXJuIHJvdW5kX3VwKGlfc2l6ZV9yZWFkKFZGU19JQyhpcCkpLCBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR04pO1xcbit9XFxuK1xcbitib29sXFxuK3hmc19mc3Zlcml0eV9pc19maWxlX2RhdGEoXFxuK1xcdGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAsXFxuK1xcdGxvZmZfdFxcdFxcdFxcdG9mZnNldClcXG4re1xcbitcXHRyZXR1cm4gZnN2ZXJpdHlfYWN0aXZlKFZGU19JQyhpcCkpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdG9mZnNldCBcXHUwMDNjIHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZXRyaWV2ZSB0aGUgdmVyaXR5IGRlc2NyaXB0b3IuXFxuKyAqL1xcbitzdGF0aWMgaW50XFxuK3hmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvcihcXG4rXFx0c3RydWN0IGlub2RlXFx0XFx0Kmlub2RlLFxcbitcXHR2b2lkXFx0XFx0XFx0KmJ1ZixcXG4rXFx0c2l6ZV90XFx0XFx0XFx0YnVmX3NpemUpXFxuK3tcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCA9IFhGU19JKGlub2RlKTtcXG4rXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCA9IGlwLVxcdTAwM2VpX21vdW50O1xcbitcXHRfX2JlMzJcXHRcXHRcXHRkX2Rlc2Nfc2l6ZTtcXG4rXFx0dTMyXFx0XFx0XFx0ZGVzY19zaXplO1xcbitcXHR1NjRcXHRcXHRcXHRkZXNjX3NpemVfcG9zO1xcbitcXHRpbnRcXHRcXHRcXHRlcnJvcjtcXG4rXFx0dTY0XFx0XFx0XFx0ZGVzY19wb3M7XFxuK1xcdHN0cnVjdCB4ZnNfYm1idF9pcmVjXFx0cmVjO1xcbitcXHRpbnRcXHRcXHRcXHRpc19lbXB0eTtcXG4rXFx0dWludDMyX3RcXHRcXHRibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShWRlNfSShpcCkpO1xcbitcXHR4ZnNfZmlsZW9mZl90XFx0XFx0bGFzdF9ibG9ja19vZmZzZXQ7XFxuK1xcbitcXHRBU1NFUlQoaW5vZGUtXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBTX1ZFUklUWSk7XFxuK1xcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7XFxuK1xcdGVycm9yID0geGZzX2JtYXBfbGFzdF9leHRlbnQoTlVMTCwgaXAsIFhGU19EQVRBX0ZPUkssIFxcdTAwMjZyZWMsIFxcdTAwMjZpc19lbXB0eSk7XFxuK1xcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbitcXHRpZiAoaXNfZW1wdHkpXFxuK1xcdFxcdHJldHVybiAtRU5PREFUQTtcXG4rXFxuK1xcdGxhc3RfYmxvY2tfb2Zmc2V0ID1cXG4rXFx0XFx0WEZTX0ZTQl9UT19CKG1wLCByZWMuYnJfc3RhcnRvZmYgKyByZWMuYnJfYmxvY2tjb3VudCk7XFxuK1xcdGlmIChsYXN0X2Jsb2NrX29mZnNldCBcXHUwMDNjPSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9EQVRBO1xcbitcXG4rXFx0ZGVzY19zaXplX3BvcyA9IGxhc3RfYmxvY2tfb2Zmc2V0IC0gc2l6ZW9mKF9fYmUzMik7XFxuK1xcdGVycm9yID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIChjaGFyICopXFx1MDAyNmRfZGVzY19zaXplLFxcbitcXHRcXHRcXHRzaXplb2YoZF9kZXNjX3NpemUpLCBkZXNjX3NpemVfcG9zKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbitcXHRkZXNjX3NpemUgPSBiZTMyX3RvX2NwdShkX2Rlc2Nfc2l6ZSk7XFxuK1xcdGlmIChYRlNfSVNfQ09SUlVQVChtcCwgZGVzY19zaXplIFxcdTAwM2UgRlNfVkVSSVRZX01BWF9ERVNDUklQVE9SX1NJWkUpKSB7XFxuK1xcdFxcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKFhGU19JU19DT1JSVVBUKG1wLCBkZXNjX3NpemUgXFx1MDAzZSBkZXNjX3NpemVfcG9zKSkge1xcbitcXHRcXHR4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTtcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghYnVmX3NpemUpXFxuK1xcdFxcdHJldHVybiBkZXNjX3NpemU7XFxuK1xcbitcXHRpZiAoWEZTX0lTX0NPUlJVUFQobXAsIGRlc2Nfc2l6ZSBcXHUwMDNlIGJ1Zl9zaXplKSkge1xcbitcXHRcXHR4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTtcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdGRlc2NfcG9zID0gcm91bmRfZG93bihkZXNjX3NpemVfcG9zIC0gZGVzY19zaXplLCBibG9ja3NpemUpO1xcbitcXHRpZiAoZGVzY19wb3MgXFx1MDAzYyB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSkge1xcbitcXHRcXHR4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTtcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcdH1cXG4rXFxuK1xcdGVycm9yID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1ZiwgZGVzY19zaXplLCBkZXNjX3Bvcyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0cmV0dXJuIGRlc2Nfc2l6ZTtcXG4rfVxcbitcXG4rc3RhdGljIGludFxcbit4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvcihcXG4rXFx0c3RydWN0IGZpbGVcXHRcXHQqZmlsZSxcXG4rXFx0Y29uc3Qgdm9pZFxcdFxcdCpkZXNjLFxcbitcXHR1MzJcXHRcXHRcXHRkZXNjX3NpemUsXFxuK1xcdHU2NFxcdFxcdFxcdG1lcmtsZV90cmVlX3NpemUpXFxuK3tcXG4rXFx0aW50XFx0XFx0XFx0ZXJyb3I7XFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShpbm9kZSk7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdGJsa3NpemUgPSBpcC1cXHUwMDNlaV9tb3VudC1cXHUwMDNlbV9zYi5zYl9ibG9ja3NpemU7XFxuK1xcdHU2NFxcdFxcdFxcdHRyZWVfbGFzdF9ibG9jayA9XFxuK1xcdFxcdFxcdHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApICsgbWVya2xlX3RyZWVfc2l6ZTtcXG4rXFx0dTY0XFx0XFx0XFx0ZGVzY19wb3MgPVxcbitcXHRcXHRcXHRyb3VuZF91cCh0cmVlX2xhc3RfYmxvY2ssIFhGU19GU1ZFUklUWV9TVEFSVF9BTElHTik7XFxuK1xcdHU2NFxcdFxcdFxcdGRlc2NfZW5kID0gZGVzY19wb3MgKyBkZXNjX3NpemU7XFxuK1xcdF9fYmUzMlxcdFxcdFxcdGRlc2Nfc2l6ZV9kaXNrID0gY3B1X3RvX2JlMzIoZGVzY19zaXplKTtcXG4rXFx0dTY0XFx0XFx0XFx0ZGVzY19zaXplX3BvcyA9XFxuK1xcdFxcdFxcdHJvdW5kX3VwKGRlc2NfZW5kICsgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSwgYmxrc2l6ZSkgLVxcbitcXHRcXHRcXHRzaXplb2YoZGVzY19zaXplX2Rpc2spO1xcbitcXG4rXFx0ZXJyb3IgPSBpb21hcF9mc3Zlcml0eV93cml0ZShmaWxlLCBkZXNjX3NpemVfcG9zLCBzaXplb2YoX19iZTMyKSxcXG4rXFx0XFx0XFx0KGNvbnN0IHZvaWQgKilcXHUwMDI2ZGVzY19zaXplX2Rpc2ssXFxuK1xcdFxcdFxcdFxcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxcbitcXHRcXHRcXHRcXHUwMDI2eGZzX2lvbWFwX3dyaXRlX29wcyk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0cmV0dXJuIGlvbWFwX2ZzdmVyaXR5X3dyaXRlKGZpbGUsIGRlc2NfcG9zLCBkZXNjX3NpemUsIGRlc2MsXFxuK1xcdFxcdFxcdFxcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxcbitcXHRcXHRcXHRcXHUwMDI2eGZzX2lvbWFwX3dyaXRlX29wcyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFRyeSB0byByZW1vdmUgYWxsIHRoZSBmc3Zlcml0eSBtZXRhZGF0YSBhZnRlciBhIGZhaWxlZCBlbmFibGVtZW50LlxcbisgKi9cXG4rc3RhdGljIGludFxcbit4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKFxcbitcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwKVxcbit7XFxuK1xcdHN0cnVjdCB4ZnNfdHJhbnNcXHQqdHA7XFxuK1xcdHN0cnVjdCB4ZnNfbW91bnRcXHQqbXAgPSBpcC1cXHUwMDNlaV9tb3VudDtcXG4rXFx0aW50XFx0XFx0XFx0ZXJyb3I7XFxuK1xcbitcXHRlcnJvciA9IHhmc190cmFuc19hbGxvYyhtcCwgXFx1MDAyNk1fUkVTKG1wKS1cXHUwMDNldHJfaXRydW5jYXRlLCAwLCAwLCAwLCBcXHUwMDI2dHApO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdHhmc19pbG9jayhpcCwgWEZTX01NQVBMT0NLX0VYQ0wgfCBYRlNfSUxPQ0tfRVhDTCk7XFxuK1xcdHRydW5jYXRlX2lub2RlX3BhZ2VzKFZGU19JKGlwKS1cXHUwMDNlaV9tYXBwaW5nLCBYRlNfSVNJWkUoaXApKTtcXG4rXFx0eGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXZSByZW1vdmUgcG9zdCBFT0YgZGF0YSwgbm8gbmVlZCB0byB1cGRhdGUgaV9zaXplIGFzIGZzdmVyaXR5XFxuK1xcdCAqIGRpZG4ndCBtb3ZlIGlfc2l6ZSBpbiB0aGUgZmlyc3QgcGxhY2VcXG4rXFx0ICovXFxuK1xcdGVycm9yID0geGZzX2l0cnVuY2F0ZV9leHRlbnRzKFxcdTAwMjZ0cCwgaXAsIFhGU19EQVRBX0ZPUkssIFhGU19JU0laRShpcCkpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdGdvdG8gZXJyX2NhbmNlbDtcXG4rXFxuK1xcdGVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCk7XFxuK1xcdHhmc19pdW5sb2NrKGlwLCBYRlNfTU1BUExPQ0tfRVhDTCB8IFhGU19JTE9DS19FWENMKTtcXG4rXFx0cmV0dXJuIGVycm9yO1xcbitlcnJfY2FuY2VsOlxcbitcXHR4ZnNfdHJhbnNfY2FuY2VsKHRwKTtcXG4rXFx0eGZzX2l1bmxvY2soaXAsIFhGU19NTUFQTE9DS19FWENMIHwgWEZTX0lMT0NLX0VYQ0wpO1xcbitcXHRyZXR1cm4gZXJyb3I7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4oXFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAsXFxuK1xcdGxvZmZfdFxcdFxcdFxcdHN0YXJ0LFxcbitcXHRsb2ZmX3RcXHRcXHRcXHRlbmQpXFxuK3tcXG4rXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCA9IGlwLVxcdTAwM2VpX21vdW50O1xcbitcXHRzdHJ1Y3QgeGZzX3RyYW5zXFx0KnRwO1xcbitcXHR4ZnNfZmlsZW9mZl90XFx0XFx0b2Zmc2V0X2ZzYiA9IFhGU19CX1RPX0ZTQlQobXAsIHN0YXJ0KTtcXG4rXFx0eGZzX2ZpbGVvZmZfdFxcdFxcdGVuZF9mc2IgPSBYRlNfQl9UT19GU0IobXAsIGVuZCk7XFxuK1xcdHN0cnVjdCB4ZnNfYm1idF9pcmVjXFx0aW1hcDtcXG4rXFx0aW50XFx0XFx0XFx0bmltYXBzO1xcbitcXHRpbnRcXHRcXHRcXHRlcnJvciA9IDA7XFxuK1xcdGludFxcdFxcdFxcdGRvbmU7XFxuK1xcbitcXHR3aGlsZSAob2Zmc2V0X2ZzYiBcXHUwMDNjIGVuZF9mc2IpIHtcXG4rXFx0XFx0bmltYXBzID0gMTtcXG4rXFxuK1xcdFxcdGVycm9yID0geGZzX3RyYW5zX2FsbG9jKG1wLCBcXHUwMDI2TV9SRVMobXApLVxcdTAwM2V0cl93cml0ZSwgMCwgMCwgMCwgXFx1MDAyNnRwKTtcXG4rXFx0XFx0aWYgKGVycm9yKVxcbitcXHRcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbitcXHRcXHR4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFx0XFx0ZXJyb3IgPSB4ZnNfYm1hcGlfcmVhZChpcCwgb2Zmc2V0X2ZzYixcXG4rXFx0XFx0XFx0XFx0ZW5kX2ZzYiAtIG9mZnNldF9mc2IsIFxcdTAwMjZpbWFwLCBcXHUwMDI2bmltYXBzLFxcbitcXHRcXHRcXHRcXHQwKTtcXG4rXFx0XFx0aWYgKGVycm9yKVxcbitcXHRcXHRcXHRnb3RvIG91dF9jYW5jZWw7XFxuK1xcbitcXHRcXHRpZiAobmltYXBzID09IDApXFxuK1xcdFxcdFxcdGdvdG8gb3V0X2NhbmNlbDtcXG4rXFxuK1xcdFxcdGlmIChpbWFwLmJyX3N0YXRlID09IFhGU19FWFRfVU5XUklUVEVOKSB7XFxuK1xcdFxcdFxcdGRvbmUgPSAwO1xcbitcXG4rXFx0XFx0XFx0eGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgMCk7XFxuK1xcbitcXHRcXHRcXHR3aGlsZSAoIWRvbmUpIHtcXG4rXFx0XFx0XFx0XFx0ZXJyb3IgPSB4ZnNfYnVubWFwaSh0cCwgaXAsIGltYXAuYnJfc3RhcnRvZmYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdGltYXAuYnJfYmxvY2tjb3VudCwgMCwgMSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmRvbmUpO1xcbitcXHRcXHRcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2NhbmNlbDtcXG4rXFxuK1xcdFxcdFxcdFxcdGVycm9yID0geGZzX2RlZmVyX2ZpbmlzaChcXHUwMDI2dHApO1xcbitcXHRcXHRcXHRcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gb3V0X2NhbmNlbDtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0ZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwKTtcXG4rXFx0XFx0XFx0aWYgKGVycm9yKVxcbitcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHhmc190cmFuc19jYW5jZWwodHApO1xcbitcXHRcXHR9XFxuK1xcdFxcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XFxuK1xcbitcXHRcXHRvZmZzZXRfZnNiID0gaW1hcC5icl9zdGFydG9mZiArIGltYXAuYnJfYmxvY2tjb3VudDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGVycm9yO1xcbitvdXRfY2FuY2VsOlxcbitcXHR4ZnNfdHJhbnNfY2FuY2VsKHRwKTtcXG4rb3V0X3VubG9jazpcXG4rXFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFx0cmV0dXJuIGVycm9yO1xcbit9XFxuK1xcbitcXG4rLypcXG4rICogUHJlcGFyZSB0byBlbmFibGUgZnN2ZXJpdHkgYnkgY2xlYXJpbmcgb2xkIG1ldGFkYXRhLlxcbisgKi9cXG4rc3RhdGljIGludFxcbit4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlKFxcbitcXHRzdHJ1Y3QgZmlsZVxcdFxcdCpmaWxwKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XFxuK1xcdHN0cnVjdCB4ZnNfaW5vZGVcXHQqaXAgPSBYRlNfSShpbm9kZSk7XFxuK1xcdGludFxcdFxcdFxcdGVycm9yO1xcbitcXG4rXFx0eGZzX2Fzc2VydF9pbG9ja2VkKGlwLCBYRlNfSU9MT0NLX0VYQ0wpO1xcbitcXG4rXFx0aWYgKElTX0RBWChpbm9kZSkgfHwgaXAtXFx1MDAzZWlfZGlmbGFnczIgXFx1MDAyNiBYRlNfRElGTEFHMl9EQVgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKGlub2RlLVxcdTAwM2VpX3NpemUgXFx1MDAzZSBYRlNfRlNWRVJJVFlfTEFSR0VTVF9GSUxFKVxcbitcXHRcXHRyZXR1cm4gLUVGQklHO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRmx1c2ggcGFnZWNhY2hlIGJlZm9yZSBidWlsZGluZyBNZXJrbGUgdHJlZS4gSW5vZGUgaXMgbG9ja2VkIGFuZCBub1xcbitcXHQgKiBmdXJ0aGVyIHdyaXRlcyB3aWxsIGhhcHBlbiB0byB0aGUgZmlsZSBleGNlcHQgZnN2ZXJpdHkgbWV0YWRhdGFcXG4rXFx0ICovXFxuK1xcdGVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuK1xcbitcXHRpZiAoeGZzX2lmbGFnc190ZXN0X2FuZF9zZXQoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdGVycm9yID0geGZzX3FtX2RxYXR0YWNoKGlwKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIG91dF9jbGVhcjtcXG4rXFxuK1xcdGVycm9yID0geGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YShpcCk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0Z290byBvdXRfY2xlYXI7XFxuK1xcdHJldHVybiBlcnJvcjtcXG4rb3V0X2NsZWFyOlxcbitcXHR4ZnNfaWZsYWdzX2NsZWFyKGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTik7XFxuK1xcdHJldHVybiBlcnJvcjtcXG4rfVxcbitcXG4rLypcXG4rICogQ29tcGxldGUgKG9yIGZhaWwpIHRoZSBwcm9jZXNzIG9mIGVuYWJsaW5nIGZzdmVyaXR5LlxcbisgKi9cXG4rc3RhdGljIGludFxcbit4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZShcXG4rXFx0c3RydWN0IGZpbGVcXHRcXHQqZmlsZSxcXG4rXFx0Y29uc3Qgdm9pZFxcdFxcdCpkZXNjLFxcbitcXHRzaXplX3RcXHRcXHRcXHRkZXNjX3NpemUsXFxuK1xcdHU2NFxcdFxcdFxcdG1lcmtsZV90cmVlX3NpemUpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlXFx0XFx0Kmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4rXFx0c3RydWN0IHhmc19pbm9kZVxcdCppcCA9IFhGU19JKGlub2RlKTtcXG4rXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCA9IGlwLVxcdTAwM2VpX21vdW50O1xcbitcXHRzdHJ1Y3QgeGZzX3RyYW5zXFx0KnRwO1xcbitcXHRpbnRcXHRcXHRcXHRlcnJvciA9IDA7XFxuK1xcdGxvZmZfdFxcdFxcdFxcdHJhbmdlX3N0YXJ0ID0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCk7XFxuK1xcbitcXHR4ZnNfYXNzZXJ0X2lsb2NrZWQoaXAsIFhGU19JT0xPQ0tfRVhDTCk7XFxuK1xcbitcXHQvKiBmcy12ZXJpdHkgZmFpbGVkLCBqdXN0IGNsZWFudXAgKi9cXG4rXFx0aWYgKGRlc2MgPT0gTlVMTCkge1xcbitcXHRcXHRlcnJvciA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvcihmaWxlLCBkZXNjLCBkZXNjX3NpemUsXFxuK1xcdFxcdFxcdG1lcmtsZV90cmVlX3NpemUpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogV2FpdCBmb3IgTWVya2xlIHRyZWUgZ2V0IHdyaXR0ZW4gdG8gZGlzayBiZWZvcmUgc2V0dGluZyBvbi1kaXNrIGlub2RlXFxuK1xcdCAqIGZsYWcgYW5kIGNsZWFyaW5nIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OXFxuK1xcdCAqL1xcbitcXHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtXFx1MDAzZWlfbWFwcGluZywgcmFuZ2Vfc3RhcnQsXFxuK1xcdFxcdFxcdExMT05HX01BWCk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZW1vdmUgdW53cml0dGVuIGV4dGVudHMgbGVmdCBieSBDT1cgcHJlYWxsb2NhdGlvbnMgYW5kIHdyaXRlXFxuK1xcdCAqIHByZWFsbG9jYXRpb24gaW4gdGhlIG1lcmtsZSB0cmVlIGhvbGVzIGFuZCBwYXN0IGRlc2NyaXB0b3JcXG4rXFx0ICovXFxuK1xcdGVycm9yID0geGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4oaXAsIHJhbmdlX3N0YXJ0LCBMTE9OR19NQVgpO1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LypcXG4rXFx0ICogUHJvYWN0aXZlbHkgZHJvcCBhbnkgZGVsYXllZCBhbGxvY2F0aW9ucyBpbiBDT1cgZm9yaywgdGhlIGZzdmVyaXR5XFxuK1xcdCAqIGZpbGVzIGFyZSByZWFkLW9ubHlcXG4rXFx0ICovXFxuK1xcdGlmICh4ZnNfaXNfY293X2lub2RlKGlwKSkge1xcbitcXHRcXHR4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFx0XFx0eGZzX2lmb3JrX2luaXRfY293KGlwKTtcXG4rXFx0XFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFx0XFx0eGZzX2JtYXBfcHVuY2hfZGVsYWxsb2NfcmFuZ2UoaXAsIFhGU19DT1dfRk9SSywgMCwgTExPTkdfTUFYLFxcbitcXHRcXHRcXHRcXHROVUxMKTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogU2V0IGZzdmVyaXR5IGlub2RlIGZsYWdcXG4rXFx0ICovXFxuK1xcdGVycm9yID0geGZzX3RyYW5zX2FsbG9jX2lub2RlKGlwLCBcXHUwMDI2TV9SRVMobXApLVxcdTAwM2V0cl9pY2hhbmdlLFxcbitcXHRcXHRcXHQwLCAwLCBmYWxzZSwgXFx1MDAyNnRwKTtcXG4rXFx0aWYgKGVycm9yKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEVuc3VyZSB0aGF0IHdlJ3ZlIHBlcnNpc3RlZCB0aGUgdmVyaXR5IGluZm9ybWF0aW9uIGJlZm9yZSB3ZSBlbmFibGVcXG4rXFx0ICogaXQgb24gdGhlIGlub2RlIGFuZCB0ZWxsIHRoZSBjYWxsZXIgd2UgaGF2ZSBzZWFsZWQgdGhlIGlub2RlLlxcbitcXHQgKi9cXG4rXFx0aXAtXFx1MDAzZWlfZGlmbGFnczIgfD0gWEZTX0RJRkxBRzJfVkVSSVRZO1xcbitcXG4rXFx0eGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpO1xcbitcXHR4ZnNfdHJhbnNfc2V0X3N5bmModHApO1xcbitcXG4rXFx0ZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwKTtcXG4rXFx0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcXG4rXFxuK1xcdGlmICghZXJyb3IpXFxuK1xcdFxcdGlub2RlX3NldF9mbGFncyhpbm9kZSwgU19WRVJJVFksIFNfVkVSSVRZKTtcXG4rXFxuK291dDpcXG4rXFx0aWYgKGVycm9yKSB7XFxuK1xcdFxcdGludFxcdGVycm9yMjtcXG4rXFxuK1xcdFxcdGVycm9yMiA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApO1xcbitcXHRcXHRpZiAoZXJyb3IyKVxcbitcXHRcXHRcXHR4ZnNfYWxlcnQoaXAtXFx1MDAzZWlfbW91bnQsXFxuK1xcXCJpbm8gMHglbGx4IGZhaWxlZCB0byBjbGVhbiB1cCBuZXcgZnN2ZXJpdHkgbWV0YWRhdGEsIGVyciAlZFxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdElfSU5PKGlwKSwgZXJyb3IyKTtcXG4rXFx0fVxcbitcXG4rXFx0eGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pO1xcbitcXHRyZXR1cm4gZXJyb3I7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJldHJpZXZlIGEgbWVya2xlIHRyZWUgYmxvY2suXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IHBhZ2UgKlxcbit4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGUoXFxuK1xcdHN0cnVjdCBpbm9kZVxcdFxcdCppbm9kZSxcXG4rXFx0cGdvZmZfdFxcdFxcdFxcdGluZGV4KVxcbit7XFxuK1xcdGluZGV4ICs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoWEZTX0koaW5vZGUpKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXG4rXFx0cmV0dXJuIGdlbmVyaWNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKGlub2RlLCBpbmRleCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJldHJpZXZlIGEgbWVya2xlIHRyZWUgYmxvY2suXFxuKyAqL1xcbitzdGF0aWMgdm9pZFxcbit4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlKFxcbitcXHRzdHJ1Y3QgaW5vZGVcXHRcXHQqaW5vZGUsXFxuK1xcdHBnb2ZmX3RcXHRcXHRcXHRpbmRleCxcXG4rXFx0dW5zaWduZWQgbG9uZ1xcdFxcdG5yX3BhZ2VzKVxcbit7XFxuK1xcdGluZGV4ICs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoWEZTX0koaW5vZGUpKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbitcXG4rXFx0Z2VuZXJpY19yZWFkYWhlYWRfbWVya2xlX3RyZWUoaW5vZGUsIGluZGV4LCBucl9wYWdlcyk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFdyaXRlIGEgbWVya2xlIHRyZWUgYmxvY2suXFxuKyAqL1xcbitzdGF0aWMgaW50XFxuK3hmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUoXFxuK1xcdHN0cnVjdCBmaWxlXFx0XFx0KmZpbGUsXFxuK1xcdGNvbnN0IHZvaWRcXHRcXHQqYnVmLFxcbitcXHR1NjRcXHRcXHRcXHRwb3MsXFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdHNpemUsXFxuK1xcdGNvbnN0IHU4XFx0XFx0Knplcm9fZGlnZXN0LFxcbitcXHR1bnNpZ25lZCBpbnRcXHRcXHRkaWdlc3Rfc2l6ZSlcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGVcXHRcXHQqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xcbitcXHRzdHJ1Y3QgeGZzX2lub2RlXFx0KmlwID0gWEZTX0koaW5vZGUpO1xcbitcXHRsb2ZmX3RcXHRcXHRcXHRwb3NpdGlvbiA9IHBvcyArXFxuK1xcdFxcdHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApO1xcbitcXG4rXFx0aWYgKHBvc2l0aW9uICsgc2l6ZSBcXHUwMDNlIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX21heGJ5dGVzKVxcbitcXHRcXHRyZXR1cm4gLUVGQklHO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgdGhpcyBpcyBhIGJsb2NrIGZ1bGwgb2YgaGFzaGVzIG9mIHplcm9lZCBibG9ja3MsIGRvbid0IGJvdGhlclxcbitcXHQgKiBzdG9yaW5nIHRoZSBibG9jay4gV2UgY2FuIHN5bnRoZXNpemUgdGhlbSBsYXRlci5cXG4rXFx0ICpcXG4rXFx0ICogSG93ZXZlciwgZG8gdGhpcyBvbmx5IGluIGNhc2UgTWVya2xlIHRyZWUgYmxvY2sgPT0gZnMgYmxvY2sgc2l6ZS5cXG4rXFx0ICogSW9tYXAgc3ludGhlc2l6ZXMgdGhlc2UgYmxvY2tzIGJhc2VkIG9uIGhvbGVzIGluIHRoZSBtZXJrbGUgdHJlZS4gV2VcXG4rXFx0ICogd29uJ3QgYmUgYWJsZSB0byB0ZWxsIGlmIHNvbWV0aGluZyBuZWVkIHRvIGJlIHN5bnRoZXNpemVzIGZvciB0aGVcXG4rXFx0ICogcmFuZ2UgaW4gdGhlIGZzIGJsb2NrLiBGb3IgZXhhbXBsZSwgZm9yIDRrIGZpbGVzeXN0ZW0gYmxvY2tcXG4rXFx0ICpcXG4rXFx0ICpcXHRbIDFrIHwgemVybyBoYXNoZXMgfCB6ZXJvIGhhc2hlcyB8IDFrIF1cXG4rXFx0ICpcXG4rXFx0ICogSW9tYXAgd29uJ3Qga25vdyBhYm91dCB0aGVzZSBlbXB0eSBibG9ja3MuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2l6ZSA9PSBpcC1cXHUwMDNlaV9tb3VudC1cXHUwMDNlbV9zYi5zYl9ibG9ja3NpemUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogRmlyc3QgZGlnZXN0IGlzIHplcm9fZGlnZXN0XFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRtZW1jbXAoYnVmLCB6ZXJvX2RpZ2VzdCwgZGlnZXN0X3NpemUpID09IDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogRXZlcnkgZGlnZXN0IGlzIHNhbWUgYXMgcHJldmlvdXMsIHRodXMgYWxsIGFyZVxcbitcXHRcXHRcXHQgKiB6ZXJvX2RpZ2VzdFxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0bWVtY21wKGJ1ZiArIGRpZ2VzdF9zaXplLCBidWYsIHNpemUgLSBkaWdlc3Rfc2l6ZSkgPT0gMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gaW9tYXBfZnN2ZXJpdHlfd3JpdGUoZmlsZSwgcG9zaXRpb24sIHNpemUsIGJ1ZixcXG4rXFx0XFx0XFx0XFx1MDAyNnhmc19idWZmZXJlZF93cml0ZV9pb21hcF9vcHMsXFxuK1xcdFxcdFxcdFxcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMgeGZzX2ZzdmVyaXR5X29wcyA9IHtcXG4rXFx0LmJlZ2luX2VuYWJsZV92ZXJpdHlcXHRcXHQ9IHhmc19mc3Zlcml0eV9iZWdpbl9lbmFibGUsXFxuK1xcdC5lbmRfZW5hYmxlX3Zlcml0eVxcdFxcdD0geGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUsXFxuK1xcdC5nZXRfdmVyaXR5X2Rlc2NyaXB0b3JcXHRcXHQ9IHhmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvcixcXG4rXFx0LnJlYWRfbWVya2xlX3RyZWVfcGFnZVxcdFxcdD0geGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlLFxcbitcXHQucmVhZGFoZWFkX21lcmtsZV90cmVlXFx0XFx0PSB4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlLFxcbitcXHQud3JpdGVfbWVya2xlX3RyZWVfYmxvY2tcXHQ9IHhmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUsXFxuK307XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaCBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjZhOTgxZTIwYTc1YmI4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaFxcbkBAIC0wLDAgKzEsMjggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLypcXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IFJlZCBIYXQsIEluYy5cXG4rICovXFxuKyNpZm5kZWYgX19YRlNfRlNWRVJJVFlfSF9fXFxuKyNkZWZpbmUgX19YRlNfRlNWRVJJVFlfSF9fXFxuK1xcbisjaW5jbHVkZSBcXFwieGZzX3BsYXRmb3JtLmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc3Zlcml0eS5oXFx1MDAzZVxcbitcXG4rI2lmZGVmIENPTkZJR19GU19WRVJJVFlcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHhmc19mc3Zlcml0eV9vcHM7XFxuK2xvZmZfdCB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTtcXG4rYm9vbCB4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBsb2ZmX3Qgb2Zmc2V0KTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBsb2ZmX3QgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcClcXG4re1xcbitcXHRXQVJOX09OX09OQ0UoMSk7XFxuK1xcdHJldHVybiBVTExPTkdfTUFYO1xcbit9XFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgbG9mZl90IG9mZnNldClcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rI2VuZGlmXFx0LyogQ09ORklHX0ZTX1ZFUklUWSAqL1xcbitcXG4rI2VuZGlmXFx0LyogX19YRlNfRlNWRVJJVFlfSF9fICovXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaGVhbHRoLmMgYi9mcy94ZnMveGZzX2hlYWx0aC5jXFxuaW5kZXggMjM5Yjg0M2U4M2Q0MmEuLmJlNjY3NjBmYjEyMGY3IDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy94ZnNfaGVhbHRoLmNcXG4rKysgYi9mcy94ZnMveGZzX2hlYWx0aC5jXFxuQEAgLTYyNSw2ICs2MjUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlvY3RsX3NpY2tfbWFwIGlub19tYXBbXSA9IHtcXG4gXFx0eyBYRlNfU0lDS19JTk9fRElSX1pBUFBFRCxcXHRYRlNfQlNfU0lDS19ESVIgfSxcXG4gXFx0eyBYRlNfU0lDS19JTk9fU1lNTElOS19aQVBQRUQsXFx0WEZTX0JTX1NJQ0tfU1lNTElOSyB9LFxcbiBcXHR7IFhGU19TSUNLX0lOT19ESVJUUkVFLFxcdFhGU19CU19TSUNLX0RJUlRSRUUgfSxcXG4rXFx0eyBYRlNfU0lDS19JTk9fRlNWRVJJVFksXFx0WEZTX0JTX1NJQ0tfRlNWRVJJVFkgfSxcXG4gfTtcXG4gXFxuIC8qIEZpbGwgb3V0IGJ1bGtzdGF0IGhlYWx0aCBpbmZvLiAqL1xcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmhcXG5pbmRleCAzNGMxMDM4ZWJmY2RlMS4uMTdjZTA4MzU5MWY0MDggMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oXFxuKysrIGIvZnMveGZzL3hmc19pbm9kZS5oXFxuQEAgLTQxOSw2ICs0MTksMTIgQEAgc3RhdGljIGlubGluZSBib29sIHhmc19pbm9kZV9jYW5fc3dfYXRvbWljX3dyaXRlKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwKVxcbiAgKi9cXG4gI2RlZmluZSBYRlNfSVJFTUFQUElOR1xcdFxcdCgxVSBcXHUwMDNjXFx1MDAzYyAxNSlcXG4gXFxuKy8qXFxuKyAqIGZzLXZlcml0eSdzIE1lcmtsZSB0cmVlIGlzIHVuZGVyIGNvbnN0cnVjdGlvbi4gVGhlIGZpbGUgaXMgcmVhZC1vbmx5LCB0aGVcXG4rICogb25seSB3cml0ZXMgaGFwcGVuaW5nIGFyZSBmb3IgdGhlIGZzdmVyaXR5IG1ldGFkYXRhLlxcbisgKi9cXG4rI2RlZmluZSBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTlxcdCgxVSBcXHUwMDNjXFx1MDAzYyAxNilcXG4rXFxuIC8qIEFsbCBpbm9kZSBzdGF0ZSBmbGFncyByZWxhdGVkIHRvIGlub2RlIHJlY2xhaW0uICovXFxuICNkZWZpbmUgWEZTX0FMTF9JUkVDTEFJTV9GTEFHU1xcdChYRlNfSVJFQ0xBSU1BQkxFIHwgXFxcXFxcbiBcXHRcXHRcXHRcXHQgWEZTX0lSRUNMQUlNIHwgXFxcXFxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvY3RsLmMgYi9mcy94ZnMveGZzX2lvY3RsLmNcXG5pbmRleCAxYjUzNzAxYmViZWExYS4uZmM3ODYwYThiNWFiYjEgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19pb2N0bC5jXFxuKysrIGIvZnMveGZzL3hmc19pb2N0bC5jXFxuQEAgLTQ5LDYgKzQ5LDcgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb3VudC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsZWF0dHIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcXHUwMDNlXFxuIFxcbiAvKiBSZXR1cm4gMCBvbiBzdWNjZXNzIG9yIHBvc2l0aXZlIGVycm9yICovXFxuIGludFxcbkBAIC0xNDY2LDYgKzE0NjcsMTkgQEAgeGZzX2ZpbGVfaW9jdGwoXFxuIFxcdGNhc2UgWEZTX0lPQ19WRVJJRllfTUVESUE6XFxuIFxcdFxcdHJldHVybiB4ZnNfaW9jX3ZlcmlmeV9tZWRpYShmaWxwLCBhcmcpO1xcbiBcXG4rXFx0Y2FzZSBGU19JT0NfRU5BQkxFX1ZFUklUWTpcXG4rXFx0XFx0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkpXFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0cmV0dXJuIGZzdmVyaXR5X2lvY3RsX2VuYWJsZShmaWxwLCBhcmcpO1xcbitcXHRjYXNlIEZTX0lPQ19NRUFTVVJFX1ZFUklUWTpcXG4rXFx0XFx0aWYgKCF4ZnNfaGFzX3Zlcml0eShtcCkpXFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0cmV0dXJuIGZzdmVyaXR5X2lvY3RsX21lYXN1cmUoZmlscCwgYXJnKTtcXG4rXFx0Y2FzZSBGU19JT0NfUkVBRF9WRVJJVFlfTUVUQURBVEE6XFxuK1xcdFxcdGlmICgheGZzX2hhc192ZXJpdHkobXApKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdHJldHVybiBmc3Zlcml0eV9pb2N0bF9yZWFkX21ldGFkYXRhKGZpbHAsIGFyZyk7XFxuK1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvbWFwLmMgYi9mcy94ZnMveGZzX2lvbWFwLmNcXG5pbmRleCAyMjVjM2RlODhkMDNiMS4uYTRkNTY1NjYxOTg5MzEgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19pb21hcC5jXFxuKysrIGIvZnMveGZzL3hmc19pb21hcC5jXFxuQEAgLTMyLDYgKzMyLDggQEBcXG4gI2luY2x1ZGUgXFxcInhmc19ydGJpdG1hcC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGZzX2ljYWNoZS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGZzX3pvbmVfYWxsb2MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInhmc19mc3Zlcml0eS5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnN2ZXJpdHkuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgWEZTX0FMTE9DX0FMSUdOKG1wLCBvZmYpIFxcXFxcXG4gXFx0KCgob2ZmKSBcXHUwMDNlXFx1MDAzZSBtcC1cXHUwMDNlbV9hbGxvY3NpemVfbG9nKSBcXHUwMDNjXFx1MDAzYyBtcC1cXHUwMDNlbV9hbGxvY3NpemVfbG9nKVxcbkBAIC04ODMsNiArODg1LDkgQEAgeGZzX2RpcmVjdF93cml0ZV9pb21hcF9iZWdpbihcXG4gXFx0aWYgKGZsYWdzIFxcdTAwMjYgSU9NQVBfQVRPTUlDKVxcbiBcXHRcXHRpb21hcF9mbGFncyB8PSBJT01BUF9GX0FUT01JQ19CSU87XFxuIFxcbitcXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXFxuK1xcdFxcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBDT1cgd3JpdGVzIG1heSBhbGxvY2F0ZSBkZWxhbGxvYyBzcGFjZSBvciBjb252ZXJ0IHVud3JpdHRlbiBDT1dcXG4gXFx0ICogZXh0ZW50cywgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdG8gdGFrZSB0aGUgbG9jayBleGNsdXNpdmVseSBoZXJlLlxcbkBAIC0xNTg5LDcgKzE1OTQsOCBAQCB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oXFxuIFxcdGxvZmZfdFxcdFxcdFxcdGNvdW50LFxcbiBcXHR1bnNpZ25lZFxcdFxcdGZsYWdzLFxcbiBcXHRzdHJ1Y3QgaW9tYXBcXHRcXHQqaW9tYXAsXFxuLVxcdHN0cnVjdCBpb21hcFxcdFxcdCpzcmNtYXApXFxuK1xcdHN0cnVjdCBpb21hcFxcdFxcdCpzcmNtYXAsXFxuK1xcdHUxNlxcdFxcdFxcdGlvbWFwX2ZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBpb21hcF9pdGVyXFx0Kml0ZXIgPVxcbiBcXHRcXHRjb250YWluZXJfb2YoaW9tYXAsIHN0cnVjdCBpb21hcF9pdGVyLCBpb21hcCk7XFxuQEAgLTE1OTksNyArMTYwNSw2IEBAIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihcXG4gXFx0c3RydWN0IHhmc19tb3VudFxcdCptcCA9IGlwLVxcdTAwM2VpX21vdW50O1xcbiBcXHR4ZnNfZmlsZW9mZl90XFx0XFx0b2Zmc2V0X2ZzYiA9IFhGU19CX1RPX0ZTQlQobXAsIG9mZnNldCk7XFxuIFxcdHhmc19maWxlb2ZmX3RcXHRcXHRlbmRfZnNiID0geGZzX2lvbWFwX2VuZF9mc2IobXAsIG9mZnNldCwgY291bnQpO1xcbi1cXHR1MTZcXHRcXHRcXHRpb21hcF9mbGFncyA9IElPTUFQX0ZfU0hBUkVEO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRsb2NrbW9kZSA9IFhGU19JTE9DS19FWENMO1xcbiBcXHR4ZnNfZmlsYmxrc190XFx0XFx0Y291bnRfZnNiO1xcbiBcXHR4ZnNfZXh0bGVuX3RcXHRcXHRpbmRsZW47XFxuQEAgLTE2NjIsNyArMTY2Nyw4IEBAIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihcXG4gXFx0XFx0XFx0XFx0c21hcC5icl9zdGFydG9mZiArIHNtYXAuYnJfYmxvY2tjb3VudCk7XFxuIFxcdFxcdFxcdHhmc190cmltX2V4dGVudChcXHUwMDI2c21hcCwgb2Zmc2V0X2ZzYixcXG4gXFx0XFx0XFx0XFx0XFx0ZW5kX2ZzYiAtIG9mZnNldF9mc2IpO1xcbi1cXHRcXHRcXHRlcnJvciA9IHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBzcmNtYXAsIFxcdTAwMjZzbWFwLCBmbGFncywgMCxcXG4rXFx0XFx0XFx0ZXJyb3IgPSB4ZnNfYm1idF90b19pb21hcChpcCwgc3JjbWFwLCBcXHUwMDI2c21hcCwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdGlvbWFwX2ZsYWdzLFxcbiBcXHRcXHRcXHRcXHRcXHR4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIDApKTtcXG4gXFx0XFx0XFx0aWYgKGVycm9yKVxcbiBcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuQEAgLTE2NzIsNiArMTY3OCw4IEBAIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihcXG4gXFx0aWYgKCFpcC1cXHUwMDNlaV9jb3dmcClcXG4gXFx0XFx0eGZzX2lmb3JrX2luaXRfY293KGlwKTtcXG4gXFxuK1xcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfU0hBUkVEO1xcbitcXG4gXFx0aWYgKCF4ZnNfaWV4dF9sb29rdXBfZXh0ZW50KGlwLCBpcC1cXHUwMDNlaV9jb3dmcCwgb2Zmc2V0X2ZzYiwgXFx1MDAyNmljdXIsIFxcdTAwMjZnb3QpKVxcbiBcXHRcXHRnb3QuYnJfc3RhcnRvZmYgPSBlbmRfZnNiO1xcbiBcXHRpZiAoZ290LmJyX3N0YXJ0b2ZmIFxcdTAwM2M9IG9mZnNldF9mc2IpIHtcXG5AQCAtMTgwMyw5ICsxODExLDEyIEBAIHhmc19idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihcXG4gXFx0aWYgKHhmc19pc19zaHV0ZG93bihtcCkpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4rXFx0aWYgKHhmc19pZmxhZ3NfdGVzdChpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pKVxcbitcXHRcXHRpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xcbitcXG4gXFx0aWYgKHhmc19pc196b25lZF9pbm9kZShpcCkpXFxuIFxcdFxcdHJldHVybiB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oaW5vZGUsIG9mZnNldCxcXG4tXFx0XFx0XFx0XFx0Y291bnQsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcXG4rXFx0XFx0XFx0XFx0Y291bnQsIGZsYWdzLCBpb21hcCwgc3JjbWFwLCBpb21hcF9mbGFncyk7XFxuIFxcbiBcXHQvKiB3ZSBjYW4ndCB1c2UgZGVsYXllZCBhbGxvY2F0aW9ucyB3aGVuIHVzaW5nIGV4dGVudCBzaXplIGhpbnRzICovXFxuIFxcdGlmICh4ZnNfZ2V0X2V4dHN6X2hpbnQoaXApKVxcbkBAIC0yMTkxLDEyICsyMjAyLDE3IEBAIHhmc19yZWFkX2lvbWFwX2JlZ2luKFxcbiBcXHRib29sXFx0XFx0XFx0c2hhcmVkID0gZmFsc2U7XFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdGxvY2ttb2RlID0gWEZTX0lMT0NLX1NIQVJFRDtcXG4gXFx0dTY0XFx0XFx0XFx0c2VxO1xcbitcXHR1bnNpZ25lZCBpbnRcXHRcXHRpb21hcF9mbGFncyA9IDA7XFxuIFxcbiBcXHRBU1NFUlQoIShmbGFncyBcXHUwMDI2IChJT01BUF9XUklURSB8IElPTUFQX1pFUk8pKSk7XFxuIFxcbiBcXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbitcXHRpZiAoZnN2ZXJpdHlfYWN0aXZlKGlub2RlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgKG9mZnNldCBcXHUwMDNlPSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSkpXFxuK1xcdFxcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XFxuK1xcbiBcXHRlcnJvciA9IHhmc19pbG9ja19mb3JfaW9tYXAoaXAsIGZsYWdzLCBcXHUwMDI2bG9ja21vZGUpO1xcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdHJldHVybiBlcnJvcjtcXG5AQCAtMjIxMCw4ICsyMjI2LDkgQEAgeGZzX3JlYWRfaW9tYXBfYmVnaW4oXFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHR0cmFjZV94ZnNfaW9tYXBfZm91bmQoaXAsIG9mZnNldCwgbGVuZ3RoLCBYRlNfREFUQV9GT1JLLCBcXHUwMDI2aW1hcCk7XFxuLVxcdHJldHVybiB4ZnNfYm1idF90b19pb21hcChpcCwgaW9tYXAsIFxcdTAwMjZpbWFwLCBmbGFncyxcXG4tXFx0XFx0XFx0XFx0IHNoYXJlZCA/IElPTUFQX0ZfU0hBUkVEIDogMCwgc2VxKTtcXG4rXFx0aW9tYXBfZmxhZ3MgfD0gc2hhcmVkID8gSU9NQVBfRl9TSEFSRUQgOiAwO1xcbitcXG4rXFx0cmV0dXJuIHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXFx1MDAyNmltYXAsIGZsYWdzLCBpb21hcF9mbGFncywgc2VxKTtcXG4gfVxcbiBcXG4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyB4ZnNfcmVhZF9pb21hcF9vcHMgPSB7XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9wcy5jIGIvZnMveGZzL3hmc19pb3BzLmNcXG5pbmRleCA2MzM5ZjQ5NTZlY2IzOS4uNzA2MzdjZGNjMjk5NzIgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19pb3BzLmNcXG4rKysgYi9mcy94ZnMveGZzX2lvcHMuY1xcbkBAIC0zNSw2ICszNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWN1cml0eS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaXZlcnNpb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZpZW1hcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZnN2ZXJpdHkuaFxcdTAwM2VcXG4gXFxuIC8qXFxuICAqIERpcmVjdG9yaWVzIGhhdmUgZGlmZmVyZW50IGxvY2sgb3JkZXIgdy5yLnQuIG1tYXBfbG9jayBjb21wYXJlZCB0byByZWd1bGFyXFxuQEAgLTU4MCw2ICs1ODEsMTAgQEAgeGZzX3JlcG9ydF9kaW9hbGlnbihcXG4gXFx0c3RydWN0IGJsb2NrX2RldmljZVxcdCpiZGV2ID0gdGFyZ2V0LVxcdTAwM2VidF9iZGV2O1xcbiBcXG4gXFx0c3RhdC1cXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfRElPQUxJR04gfCBTVEFUWF9ESU9fUkVBRF9BTElHTjtcXG4rXFxuK1xcdGlmIChmc3Zlcml0eV9hY3RpdmUoVkZTX0koaXApKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0c3RhdC1cXHUwMDNlZGlvX21lbV9hbGlnbiA9IGJkZXZfZG1hX2FsaWdubWVudChiZGV2KSArIDE7XFxuIFxcbiBcXHQvKlxcbkBAIC0xMzcwLDYgKzEzNzUsOCBAQCB4ZnNfaW5vZGVfc2hvdWxkX2VuYWJsZV9kYXgoXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0aWYgKCF4ZnNfaW5vZGVfc3VwcG9ydHNfZGF4KGlwKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoaXAtXFx1MDAzZWlfZGlmbGFnczIgXFx1MDAyNiBYRlNfRElGTEFHMl9WRVJJVFkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0aWYgKHhmc19oYXNfZGF4X2Fsd2F5cyhpcC1cXHUwMDNlaV9tb3VudCkpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbiBcXHRpZiAoaXAtXFx1MDAzZWlfZGlmbGFnczIgXFx1MDAyNiBYRlNfRElGTEFHMl9EQVgpXFxuQEAgLTEzOTgsMTIgKzE0MDUsMTUgQEAgeGZzX2RpZmxhZ3NfdG9faWZsYWdzKFxcbiBcXHRcXHRmbGFncyB8PSBTX05PQVRJTUU7XFxuIFxcdGlmIChpbml0IFxcdTAwMjZcXHUwMDI2IHhmc19pbm9kZV9zaG91bGRfZW5hYmxlX2RheChpcCkpXFxuIFxcdFxcdGZsYWdzIHw9IFNfREFYO1xcbitcXHRpZiAoeGZsYWdzIFxcdTAwMjYgRlNfWEZMQUdfVkVSSVRZKVxcbitcXHRcXHRmbGFncyB8PSBTX1ZFUklUWTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFNfREFYIGNhbiBvbmx5IGJlIHNldCBkdXJpbmcgaW5vZGUgaW5pdGlhbGl6YXRpb24gYW5kIGlzIG5ldmVyIHNldCBieVxcbiBcXHQgKiB0aGUgVkZTLCBzbyB3ZSBjYW5ub3QgbWFzayBvZmYgU19EQVggaW4gaV9mbGFncy5cXG4gXFx0ICovXFxuLVxcdGlub2RlLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjY9IH4oU19JTU1VVEFCTEUgfCBTX0FQUEVORCB8IFNfU1lOQyB8IFNfTk9BVElNRSk7XFxuK1xcdGlub2RlLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjY9XFxuK1xcdFxcdH4oU19JTU1VVEFCTEUgfCBTX0FQUEVORCB8IFNfU1lOQyB8IFNfTk9BVElNRSB8IFNfVkVSSVRZKTtcXG4gXFx0aW5vZGUtXFx1MDAzZWlfZmxhZ3MgfD0gZmxhZ3M7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5jIGIvZnMveGZzL3hmc19tZXNzYWdlLmNcXG5pbmRleCAwMjQzZTUwOWE0Njg5MS4uNDRiMTNkNDYwNDljNjIgMTAwNjQ0XFxuLS0tIGEvZnMveGZzL3hmc19tZXNzYWdlLmNcXG4rKysgYi9mcy94ZnMveGZzX21lc3NhZ2UuY1xcbkBAIC0xNDksNiArMTQ5LDEwIEBAIHhmc193YXJuX2V4cGVyaW1lbnRhbChcXG4gXFx0XFx0XFx0Lm9wc3RhdGVcXHQ9IFhGU19PUFNUQVRFX1dBUk5FRF9MQVJQLFxcbiBcXHRcXHRcXHQubmFtZVxcdFxcdD0gXFxcImxvZ2dlZCBleHRlbmRlZCBhdHRyaWJ1dGVzXFxcIixcXG4gXFx0XFx0fSxcXG4rXFx0XFx0W1hGU19FWFBFUklNRU5UQUxfRlNWRVJJVFldID0ge1xcbitcXHRcXHRcXHQub3BzdGF0ZVxcdD0gWEZTX09QU1RBVEVfV0FSTkVEX0ZTVkVSSVRZLFxcbitcXHRcXHRcXHQubmFtZVxcdFxcdD0gXFxcImZzdmVyaXR5XFxcIixcXG4rXFx0XFx0fSxcXG4gXFx0fTtcXG4gXFx0QVNTRVJUKGZlYXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBmZWF0IFxcdTAwM2MgWEZTX0VYUEVSSU1FTlRBTF9NQVgpO1xcbiBcXHRCVUlMRF9CVUdfT04oQVJSQVlfU0laRShmZWF0dXJlcykgIT0gWEZTX0VYUEVSSU1FTlRBTF9NQVgpO1xcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21lc3NhZ2UuaCBiL2ZzL3hmcy94ZnNfbWVzc2FnZS5oXFxuaW5kZXggODExYjg4NWY0MWMzNWEuLjM2NGZjYzdlNDJiMDg0IDEwMDY0NFxcbi0tLSBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5oXFxuKysrIGIvZnMveGZzL3hmc19tZXNzYWdlLmhcXG5AQCAtOTMsNiArOTMsNyBAQCB2b2lkIHhmc19idWZfYWxlcnRfcmF0ZWxpbWl0ZWQoc3RydWN0IHhmc19idWYgKmJwLCBjb25zdCBjaGFyICpybG1zZyxcXG4gZW51bSB4ZnNfZXhwZXJpbWVudGFsX2ZlYXQge1xcbiBcXHRYRlNfRVhQRVJJTUVOVEFMX1NIUklOSyxcXG4gXFx0WEZTX0VYUEVSSU1FTlRBTF9MQVJQLFxcbitcXHRYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZLFxcbiBcXG4gXFx0WEZTX0VYUEVSSU1FTlRBTF9NQVgsXFxuIH07XFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbW91bnQuaCBiL2ZzL3hmcy94ZnNfbW91bnQuaFxcbmluZGV4IDY2YTAyZDFiOWFkN2ExLi44NzVjOWIwZjhlOTkxZiAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX21vdW50LmhcXG4rKysgYi9mcy94ZnMveGZzX21vdW50LmhcXG5AQCAtMzg4LDYgKzM4OCw3IEBAIHR5cGVkZWYgc3RydWN0IHhmc19tb3VudCB7XFxuICNkZWZpbmUgWEZTX0ZFQVRfRVhDSEFOR0VfUkFOR0VcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAyNylcXHQvKiBleGNoYW5nZSByYW5nZSAqL1xcbiAjZGVmaW5lIFhGU19GRUFUX01FVEFESVJcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyAyOClcXHQvKiBtZXRhZGF0YSBkaXJlY3RvcnkgdHJlZSAqL1xcbiAjZGVmaW5lIFhGU19GRUFUX1pPTkVEXFx0XFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgMjkpXFx0Lyogem9uZWQgUlQgZGV2aWNlICovXFxuKyNkZWZpbmUgWEZTX0ZFQVRfVkVSSVRZXFx0XFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgMzApXFx0LyogZnMtdmVyaXR5ICovXFxuIFxcbiAvKiBNb3VudCBmZWF0dXJlcyAqL1xcbiAjZGVmaW5lIFhGU19GRUFUX05PTElGRVRJTUVcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyA0NylcXHQvKiBkaXNhYmxlIGxpZmV0aW1lIGhpbnRzICovXFxuQEAgLTQ0NSw2ICs0NDYsNyBAQCBfX1hGU19IQVNfRkVBVChleGNoYW5nZV9yYW5nZSwgRVhDSEFOR0VfUkFOR0UpXFxuIF9fWEZTX0hBU19GRUFUKG1ldGFkaXIsIE1FVEFESVIpXFxuIF9fWEZTX0hBU19GRUFUKHpvbmVkLCBaT05FRClcXG4gX19YRlNfSEFTX0ZFQVQobm9saWZldGltZSwgTk9MSUZFVElNRSlcXG4rX19YRlNfSEFTX0ZFQVQodmVyaXR5LCBWRVJJVFkpXFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2hhc19ydGdyb3Vwcyhjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcClcXG4ge1xcbkBAIC01ODIsNiArNTg0LDggQEAgX19YRlNfSEFTX0ZFQVQobm91dWlkLCBOT1VVSUQpXFxuICNkZWZpbmUgWEZTX09QU1RBVEVfUkVTVU1JTkdfUVVPVEFPTlxcdDE4XFxuIC8qIChab25lZCkgR0MgaXMgaW4gcHJvZ3Jlc3MgKi9cXG4gI2RlZmluZSBYRlNfT1BTVEFURV9aT05FR0NfUlVOTklOR1xcdDIwXFxuKy8qIEtlcm5lbCBoYXMgbG9nZ2VkIGEgd2FybmluZyBhYm91dCBmc3Zlcml0eSBzdXBwb3J0ICovXFxuKyNkZWZpbmUgWEZTX09QU1RBVEVfV0FSTkVEX0ZTVkVSSVRZXFx0MjFcXG4gXFxuICNkZWZpbmUgX19YRlNfSVNfT1BTVEFURShuYW1lLCBOQU1FKSBcXFxcXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB4ZnNfaXNfICMjIG5hbWUgKHN0cnVjdCB4ZnNfbW91bnQgKm1wKSBcXFxcXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfc3VwZXIuYyBiL2ZzL3hmcy94ZnNfc3VwZXIuY1xcbmluZGV4IDg1MzFkNTI2ZmM0NDA5Li5hNzc3NGQyZDZiMjNmYyAxMDA2NDRcXG4tLS0gYS9mcy94ZnMveGZzX3N1cGVyLmNcXG4rKysgYi9mcy94ZnMveGZzX3N1cGVyLmNcXG5AQCAtMzAsNiArMzAsNyBAQFxcbiAjaW5jbHVkZSBcXFwieGZzX2ZpbGVzdHJlYW0uaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhmc19xdW90YS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGZzX3N5c2ZzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJ4ZnNfZnN2ZXJpdHkuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhmc19vbmRpc2suaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhmc19ybWFwX2l0ZW0uaFxcXCJcXG4gI2luY2x1ZGUgXFxcInhmc19yZWZjb3VudF9pdGVtLmhcXFwiXFxuQEAgLTE2ODksNiArMTY5MCw5IEBAIHhmc19mc19maWxsX3N1cGVyKFxcbiBcXHRzYi1cXHUwMDNlc19xdW90YV90eXBlcyA9IFFUWVBFX01BU0tfVVNSIHwgUVRZUEVfTUFTS19HUlAgfCBRVFlQRV9NQVNLX1BSSjtcXG4gI2VuZGlmXFxuIFxcdHNiLVxcdTAwM2VzX29wID0gXFx1MDAyNnhmc19zdXBlcl9vcGVyYXRpb25zO1xcbisjaWZkZWYgQ09ORklHX0ZTX1ZFUklUWVxcbitcXHRzYi1cXHUwMDNlc192b3AgPSBcXHUwMDI2eGZzX2ZzdmVyaXR5X29wcztcXG4rI2VuZGlmXFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBEZWxheSBtb3VudCB3b3JrIGlmIHRoZSBkZWJ1ZyBob29rIGlzIHNldC4gVGhpcyBpcyBkZWJ1Z1xcbkBAIC0xOTQxLDYgKzE5NDUsOSBAQCB4ZnNfZnNfZmlsbF9zdXBlcihcXG4gXFx0aWYgKGVycm9yKVxcbiBcXHRcXHRnb3RvIG91dF9maWxlc3RyZWFtX3VubW91bnQ7XFxuIFxcbitcXHRpZiAoeGZzX2hhc192ZXJpdHkobXApKVxcbitcXHRcXHR4ZnNfd2Fybl9leHBlcmltZW50YWwobXAsIFhGU19FWFBFUklNRU5UQUxfRlNWRVJJVFkpO1xcbitcXG4gXFx0cm9vdCA9IGlncmFiKFZGU19JKG1wLVxcdTAwM2VtX3Jvb3RpcCkpO1xcbiBcXHRpZiAoIXJvb3QpIHtcXG4gXFx0XFx0ZXJyb3IgPSAtRU5PRU5UO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmggYi9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmhcXG5pbmRleCA2YzQ2N2RlZDk3NTFmYy4uZjk0MzMzMzJjMjc0YmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oXFxuQEAgLTEyNCw2ICsxMjQsOCBAQCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB7XFxuIFxcdCAqIEBidWY6IHRoZSBNZXJrbGUgdHJlZSBibG9jayB0byB3cml0ZVxcbiBcXHQgKiBAcG9zOiB0aGUgcG9zaXRpb24gb2YgdGhlIGJsb2NrIGluIHRoZSBNZXJrbGUgdHJlZSAoaW4gYnl0ZXMpXFxuIFxcdCAqIEBzaXplOiB0aGUgTWVya2xlIHRyZWUgYmxvY2sgc2l6ZSAoaW4gYnl0ZXMpXFxuK1xcdCAqIEB6ZXJvX2RpZ2VzdDogdGhlIGhhc2ggb2YgdGhlIGFsbC16ZXJvZXMgYmxvY2tcXG4rXFx0ICogQGRpZ2VzdF9zaXplOiBzaXplIG9mIHplcm9fZGlnZXN0LCBpbiBieXRlc1xcbiBcXHQgKlxcbiBcXHQgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIGJldHdlZW4gLVxcdTAwM2ViZWdpbl9lbmFibGVfdmVyaXR5KCkgYW5kXFxuIFxcdCAqIC1cXHUwMDNlZW5kX2VuYWJsZV92ZXJpdHkoKS5cXG5AQCAtMTMxLDcgKzEzMyw5IEBAIHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHtcXG4gXFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlXFxuIFxcdCAqL1xcbiBcXHRpbnQgKCp3cml0ZV9tZXJrbGVfdHJlZV9ibG9jaykoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1ZixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxcbitcXHRcXHRcXHRcXHQgICAgICAgY29uc3QgdTggKnplcm9fZGlnZXN0LFxcbitcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IGRpZ2VzdF9zaXplKTtcXG4gfTtcXG4gXFxuICNpZmRlZiBDT05GSUdfRlNfVkVSSVRZXFxuQEAgLTMxNywxMCArMzIxLDE0IEBAIHN0YXRpYyBpbmxpbmUgaW50IGZzdmVyaXR5X2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK2ludCBmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm8oc3RydWN0IGlub2RlICppbm9kZSk7XFxuK1xcbiB2b2lkIGZzdmVyaXR5X2NsZWFudXBfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XFxuIFxcbiBzdHJ1Y3QgcGFnZSAqZ2VuZXJpY19yZWFkX21lcmtsZV90cmVlX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCk7XFxuIHZvaWQgZ2VuZXJpY19yZWFkYWhlYWRfbWVya2xlX3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4gXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuK2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcXG4rXFx0XFx0XFx0ICAgIGxvZmZfdCBwb3MpO1xcbiBcXG4gI2VuZGlmXFx0LyogX0xJTlVYX0ZTVkVSSVRZX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXFxuaW5kZXggNTZiNDNkNTk0ZTZlMjkuLjM2ZmM5MzEzODJhODc2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxcbkBAIC0xMCw2ICsxMCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbV90eXBlcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYmxrZGV2LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mb2xpb19iYXRjaC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdF9zb3J0LmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgYWRkcmVzc19zcGFjZTtcXG4gc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbztcXG5AQCAtNDg4LDcgKzQ4OSw5IEBAIHN0cnVjdCBpb21hcF9pb2VuZCAqaW9tYXBfc3BsaXRfaW9lbmQoc3RydWN0IGlvbWFwX2lvZW5kICppb2VuZCxcXG4gdm9pZCBpb21hcF9maW5pc2hfaW9lbmRzKHN0cnVjdCBpb21hcF9pb2VuZCAqaW9lbmQsIGludCBlcnJvcik7XFxuIHZvaWQgaW9tYXBfaW9lbmRfdHJ5X21lcmdlKHN0cnVjdCBpb21hcF9pb2VuZCAqaW9lbmQsXFxuIFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKm1vcmVfaW9lbmRzKTtcXG4tdm9pZCBpb21hcF9zb3J0X2lvZW5kcyhzdHJ1Y3QgbGlzdF9oZWFkICppb2VuZF9saXN0KTtcXG4raW50IGlvbWFwX2lvZW5kX2NvbXBhcmUodm9pZCAqcHJpdiwgY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqYSxcXG4rXFx0XFx0Y29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqYik7XFxuK3ZvaWQgaW9tYXBfc29ydF9pb2VuZHMoc3RydWN0IGxpc3RfaGVhZCAqaW9lbmRfbGlzdCwgbGlzdF9jbXBfZnVuY190IGNtcCk7XFxuIHNzaXplX3QgaW9tYXBfYWRkX3RvX2lvZW5kKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdGxvZmZfdCBwb3MsIGxvZmZfdCBlbmRfcG9zLCB1bnNpZ25lZCBpbnQgZGlydHlfbGVuKTtcXG4gaW50IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgaW50IGVycm9yKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTM6NTg6NDMuNzA2NDc1MzI5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTg0NzQ2MzQyOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRlNfVkVSSVRZXCIsXG4gICAgXCJYRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfZW5kX2VuYWJsZVwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGVcIixcbiAgICBcInhmc19mc3Zlcml0eV9yZWFkYWhlYWRfbWVya2xlX3RyZWVcIixcbiAgICBcInhmc19mc3Zlcml0eV93cml0ZV9tZXJrbGVcIixcbiAgICBcInhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGFcIixcbiAgICBcInhmc19mc3Zlcml0eV9jYW5jZWxfdW53cml0dGVuXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfd3JpdGVfZGVzY3JpcHRvclwiLFxuICAgIFwieGNoa19pbm9kZV9zZXR1cF92ZXJpdHlcIixcbiAgICBcInhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlblwiLFxuICAgIFwieHJlcF9pbm9kZV92ZXJpdHlcIixcbiAgICBcInhmc19yZWFkX2lvZW5kX2NvbXBhcmVcIixcbiAgICBcInhmc19lbmRfaW9lbmRfcmVhZFwiLFxuICAgIFwieGZzX2lvbWFwX3dyaXRlcGFnZXNcIixcbiAgICBcImZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mb1wiLFxuICAgIFwiZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGZzLXZlcml0eSBzdXBwb3J0IGZvciB0aGUgWEZTIGZpbGVzeXN0ZW0uIEl0IGludHJvZHVjZXMgYSBuZXcgZmlsZSBgZnMveGZzL3hmc19mc3Zlcml0eS5jYCB3aXRoIHRoZSBjb3JlIGxvZ2ljLCBtb2RpZmllcyBYRlMgSS9PIHBhdGhzLCBhbmQgaW50ZWdyYXRlcyB3aXRoIHRoZSBnZW5lcmljIGZzLXZlcml0eSBsYXllci4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2QxYjNjNWRkOGFhNWQ4MDMyMjNjZGZlZGFjYzAyYjY0YjI2Y2VkNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDEzOjU4OjQwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYXR0ci5jIGIvZnMvYXR0ci5jXG5pbmRleCA0ZjQzN2ZhYmI3ZjBmNS4uNzE4ODhhYzkwM2MyN2QgMTAwNjQ0XG4tLS0gYS9mcy9hdHRyLmNcbisrKyBiL2ZzL2F0dHIuY1xuQEAgLTE3Niw3ICsxNzYsNyBAQCBpbnQgc2V0YXR0cl9wcmVwYXJlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRcdCAqIGNvdmVyZWQgYnkgdGhlIG9wZW4tdGltZSBjaGVjayBiZWNhdXNlIHN5c190cnVuY2F0ZSgpIHRha2VzIGFcbiBcdFx0ICogcGF0aCwgbm90IGFuIG9wZW4gZmlsZS5cbiBcdFx0ICovXG4tXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19WRVJJVFkpIFx1MDAyNlx1MDAyNiBJU19WRVJJVFkoaW5vZGUpKVxuK1x0XHRpZiAoSVNfVkVSSVRZKGlub2RlKSlcbiBcdFx0XHRyZXR1cm4gLUVQRVJNO1xuIFxuIFx0XHRlcnJvciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIGF0dHItXHUwMDNlaWFfc2l6ZSk7XG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmNcbmluZGV4IDI3MjU5OGY2YWU3N2FmLi5kZTcyOWM0NGQ2ZDI1MSAxMDA2NDRcbi0tLSBhL2ZzL2J0cmZzL2lub2RlLmNcbisrKyBiL2ZzL2J0cmZzL2lub2RlLmNcbkBAIC04MDQwLDcgKzgwNDAsNiBAQCBzdGF0aWMgaW50IGJ0cmZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShwYXRoLVx1MDAzZWRlbnRyeSk7XG4gXHR1MzIgYmxvY2tzaXplID0gYnRyZnNfc2IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc2VjdG9yc2l6ZTtcbiBcdHUzMiBiaV9mbGFncyA9IEJUUkZTX0koaW5vZGUpLVx1MDAzZWZsYWdzO1xuLVx0dTMyIGJpX3JvX2ZsYWdzID0gQlRSRlNfSShpbm9kZSktXHUwMDNlcm9fZmxhZ3M7XG4gXG4gXHRzdGF0LVx1MDAzZXJlc3VsdF9tYXNrIHw9IFNUQVRYX0JUSU1FO1xuIFx0c3RhdC1cdTAwM2VidGltZS50dl9zZWMgPSBCVFJGU19JKGlub2RlKS1cdTAwM2VpX290aW1lX3NlYztcbkBAIC04MDUzLDggKzgwNTIsNiBAQCBzdGF0aWMgaW50IGJ0cmZzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0lNTVVUQUJMRTtcbiBcdGlmIChiaV9mbGFncyBcdTAwMjYgQlRSRlNfSU5PREVfTk9EVU1QKVxuIFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9OT0RVTVA7XG4tXHRpZiAoYmlfcm9fZmxhZ3MgXHUwMDI2IEJUUkZTX0lOT0RFX1JPX1ZFUklUWSlcbi1cdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfVkVSSVRZO1xuIFxuIFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzX21hc2sgfD0gKFNUQVRYX0FUVFJfQVBQRU5EIHxcbiBcdFx0XHRcdCAgU1RBVFhfQVRUUl9DT01QUkVTU0VEIHxcbmRpZmYgLS1naXQgYS9mcy9idHJmcy92ZXJpdHkuYyBiL2ZzL2J0cmZzL3Zlcml0eS5jXG5pbmRleCA5ODMzNjVhNzM1NDE2OC4uYmQ3OWUzNDNhZTIzN2YgMTAwNjQ0XG4tLS0gYS9mcy9idHJmcy92ZXJpdHkuY1xuKysrIGIvZnMvYnRyZnMvdmVyaXR5LmNcbkBAIC03NzMsMTEgKzc3MywxNSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmJ0cmZzX3JlYWRfbWVya2xlX3RyZWVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuICAqIEBidWY6XHRNZXJrbGUgdHJlZSBibG9jayB0byB3cml0ZVxuICAqIEBwb3M6XHR0aGUgcG9zaXRpb24gb2YgdGhlIGJsb2NrIGluIHRoZSBNZXJrbGUgdHJlZSAoaW4gYnl0ZXMpXG4gICogQHNpemU6XHR0aGUgTWVya2xlIHRyZWUgYmxvY2sgc2l6ZSAoaW4gYnl0ZXMpXG4rICogQHplcm9fZGlnZXN0Olx0dGhlIGhhc2ggb2YgdGhlIGFsbC16ZXJvZXMgYmxvY2tcbisgKiBAZGlnZXN0X3NpemU6XHRzaXplIG9mIHplcm9fZGlnZXN0LCBpbiBieXRlc1xuICAqXG4gICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlXG4gICovXG4gc3RhdGljIGludCBidHJmc193cml0ZV9tZXJrbGVfdHJlZV9ibG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYnVmLFxuLVx0XHRcdFx0XHQgdTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUpXG4rXHRcdFx0XHRcdCB1NjQgcG9zLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbitcdFx0XHRcdFx0IGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCxcbitcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBkaWdlc3Rfc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbiBcdGxvZmZfdCBtZXJrbGVfcG9zID0gbWVya2xlX2ZpbGVfcG9zKGlub2RlKTtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi45OWZhN2EyODk1MWY1ZSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtNjI1MCwxNSArNjI1MCwxMiBAQCBpbnQgZXh0NF9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbiBcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfSU1NVVRBQkxFO1xuIFx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X05PRFVNUF9GTClcbiBcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfTk9EVU1QO1xuLVx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X1ZFUklUWV9GTClcbi1cdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfVkVSSVRZO1xuIFxuIFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzX21hc2sgfD0gKFNUQVRYX0FUVFJfQVBQRU5EIHxcbiBcdFx0XHRcdCAgU1RBVFhfQVRUUl9DT01QUkVTU0VEIHxcbiBcdFx0XHRcdCAgU1RBVFhfQVRUUl9FTkNSWVBURUQgfFxuIFx0XHRcdFx0ICBTVEFUWF9BVFRSX0lNTVVUQUJMRSB8XG4tXHRcdFx0XHQgIFNUQVRYX0FUVFJfTk9EVU1QIHxcbi1cdFx0XHRcdCAgU1RBVFhfQVRUUl9WRVJJVFkpO1xuK1x0XHRcdFx0ICBTVEFUWF9BVFRSX05PRFVNUCk7XG4gXG4gXHRnZW5lcmljX2ZpbGxhdHRyKGlkbWFwLCByZXF1ZXN0X21hc2ssIGlub2RlLCBzdGF0KTtcbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvdmVyaXR5LmMgYi9mcy9leHQ0L3Zlcml0eS5jXG5pbmRleCBjYTYxZGE1M2YzMTNmYS4uYWM1YzEzM2Y1NTI5MjUgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3Zlcml0eS5jXG4rKysgYi9mcy9leHQ0L3Zlcml0eS5jXG5AQCAtMzQsMzIgKzM0LDYgQEAgc3RhdGljIGlubGluZSBsb2ZmX3QgZXh0NF92ZXJpdHlfbWV0YWRhdGFfcG9zKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gcm91bmRfdXAoaW5vZGUtXHUwMDNlaV9zaXplLCA2NTUzNik7XG4gfVxuIFxuLS8qXG4tICogUmVhZCBzb21lIHZlcml0eSBtZXRhZGF0YSBmcm9tIHRoZSBpbm9kZS4gIF9fdmZzX3JlYWQoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2Vcbi0gKiB3ZSBuZWVkIHRvIHJlYWQgYmV5b25kIGlfc2l6ZS5cbi0gKi9cbi1zdGF0aWMgaW50IHBhZ2VjYWNoZV9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LFxuLVx0XHRcdCAgbG9mZl90IHBvcylcbi17XG4tXHR3aGlsZSAoY291bnQpIHtcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdFx0c2l6ZV90IG47XG4tXG4tXHRcdGZvbGlvID0gcmVhZF9tYXBwaW5nX2ZvbGlvKGlub2RlLVx1MDAzZWlfbWFwcGluZywgcG9zIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuLVx0XHRcdFx0XHQgTlVMTCk7XG4tXHRcdGlmIChJU19FUlIoZm9saW8pKVxuLVx0XHRcdHJldHVybiBQVFJfRVJSKGZvbGlvKTtcbi1cbi1cdFx0biA9IG1lbWNweV9mcm9tX2ZpbGVfZm9saW8oYnVmLCBmb2xpbywgcG9zLCBjb3VudCk7XG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4tXG4tXHRcdGJ1ZiArPSBuO1xuLVx0XHRwb3MgKz0gbjtcbi1cdFx0Y291bnQgLT0gbjtcbi1cdH1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIFdyaXRlIHNvbWUgdmVyaXR5IG1ldGFkYXRhIHRvIHRoZSBpbm9kZSBmb3IgRlNfSU9DX0VOQUJMRV9WRVJJVFkuXG4gICoga2VybmVsX3dyaXRlKCkgY2FuJ3QgYmUgdXNlZCBiZWNhdXNlIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgcmVhZG9ubHkuXG5AQCAtMzExLDggKzI4NSw4IEBAIHN0YXRpYyBpbnQgZXh0NF9nZXRfdmVyaXR5X2Rlc2NyaXB0b3JfbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0Z290byBiYWQ7XG4gXHRkZXNjX3NpemVfcG9zIC09IHNpemVvZihkZXNjX3NpemVfZGlzayk7XG4gXG4tXHRlcnIgPSBwYWdlY2FjaGVfcmVhZChpbm9kZSwgXHUwMDI2ZGVzY19zaXplX2Rpc2ssIHNpemVvZihkZXNjX3NpemVfZGlzayksXG4tXHRcdFx0ICAgICBkZXNjX3NpemVfcG9zKTtcbitcdGVyciA9IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKGlub2RlLCBcdTAwMjZkZXNjX3NpemVfZGlzayxcbitcdFx0XHRcdCAgICAgIHNpemVvZihkZXNjX3NpemVfZGlzayksIGRlc2Nfc2l6ZV9wb3MpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcdGRlc2Nfc2l6ZSA9IGxlMzJfdG9fY3B1KGRlc2Nfc2l6ZV9kaXNrKTtcbkBAIC0zNTIsNyArMzI2LDcgQEAgc3RhdGljIGludCBleHQ0X2dldF92ZXJpdHlfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsXG4gXHRpZiAoYnVmX3NpemUpIHtcbiBcdFx0aWYgKGRlc2Nfc2l6ZSBcdTAwM2UgYnVmX3NpemUpXG4gXHRcdFx0cmV0dXJuIC1FUkFOR0U7XG4tXHRcdGVyciA9IHBhZ2VjYWNoZV9yZWFkKGlub2RlLCBidWYsIGRlc2Nfc2l6ZSwgZGVzY19wb3MpO1xuK1x0XHRlcnIgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBkZXNjX3NpemUsIGRlc2NfcG9zKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuQEAgLTM3NCw3ICszNDgsOSBAQCBzdGF0aWMgdm9pZCBleHQ0X3JlYWRhaGVhZF9tZXJrbGVfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIH1cbiBcbiBzdGF0aWMgaW50IGV4dDRfd3JpdGVfbWVya2xlX3RyZWVfYmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1Zixcbi1cdFx0XHRcdFx0dTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUpXG4rXHRcdFx0XHRcdHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxuK1x0XHRcdFx0XHRjb25zdCB1OCAqemVyb19kaWdlc3QsXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCBkaWdlc3Rfc2l6ZSlcbiB7XG4gXHRwb3MgKz0gZXh0NF92ZXJpdHlfbWV0YWRhdGFfcG9zKGZpbGVfaW5vZGUoZmlsZSkpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZmlsZS5jIGIvZnMvZjJmcy9maWxlLmNcbmluZGV4IDRiNTJjNTZkNzFmMDdmLi45YjUzMWEwMTZlZDRkOSAxMDA2NDRcbi0tLSBhL2ZzL2YyZnMvZmlsZS5jXG4rKysgYi9mcy9mMmZzL2ZpbGUuY1xuQEAgLTEwMjQsMTUgKzEwMjQsMTIgQEAgaW50IGYyZnNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXG4gXHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX0lNTVVUQUJMRTtcbiBcdGlmIChmbGFncyBcdTAwMjYgRjJGU19OT0RVTVBfRkwpXG4gXHRcdHN0YXQtXHUwMDNlYXR0cmlidXRlcyB8PSBTVEFUWF9BVFRSX05PRFVNUDtcbi1cdGlmIChJU19WRVJJVFkoaW5vZGUpKVxuLVx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9WRVJJVFk7XG4gXG4gXHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXNfbWFzayB8PSAoU1RBVFhfQVRUUl9DT01QUkVTU0VEIHxcbiBcdFx0XHRcdCAgU1RBVFhfQVRUUl9BUFBFTkQgfFxuIFx0XHRcdFx0ICBTVEFUWF9BVFRSX0VOQ1JZUFRFRCB8XG4gXHRcdFx0XHQgIFNUQVRYX0FUVFJfSU1NVVRBQkxFIHxcbi1cdFx0XHRcdCAgU1RBVFhfQVRUUl9OT0RVTVAgfFxuLVx0XHRcdFx0ICBTVEFUWF9BVFRSX1ZFUklUWSk7XG4rXHRcdFx0XHQgIFNUQVRYX0FUVFJfTk9EVU1QKTtcbiBcbiBcdGdlbmVyaWNfZmlsbGF0dHIoaWRtYXAsIHJlcXVlc3RfbWFzaywgaW5vZGUsIHN0YXQpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2YyZnMvdmVyaXR5LmMgYi9mcy9mMmZzL3Zlcml0eS5jXG5pbmRleCAzOWY0ODI1MTU0NDUyYS4uZjNhNDYxNzY1NmRiOWIgMTAwNjQ0XG4tLS0gYS9mcy9mMmZzL3Zlcml0eS5jXG4rKysgYi9mcy9mMmZzL3Zlcml0eS5jXG5AQCAtMzcsMzQgKzM3LDYgQEAgc3RhdGljIGlubGluZSBsb2ZmX3QgZjJmc192ZXJpdHlfbWV0YWRhdGFfcG9zKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gcm91bmRfdXAoaW5vZGUtXHUwMDNlaV9zaXplLCA2NTUzNik7XG4gfVxuIFxuLS8qXG4tICogUmVhZCBzb21lIHZlcml0eSBtZXRhZGF0YSBmcm9tIHRoZSBpbm9kZS4gIF9fdmZzX3JlYWQoKSBjYW4ndCBiZSB1c2VkIGJlY2F1c2Vcbi0gKiB3ZSBuZWVkIHRvIHJlYWQgYmV5b25kIGlfc2l6ZS5cbi0gKi9cbi1zdGF0aWMgaW50IHBhZ2VjYWNoZV9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LFxuLVx0XHRcdCAgbG9mZl90IHBvcylcbi17XG4tXHR3aGlsZSAoY291bnQpIHtcbi1cdFx0c2l6ZV90IG4gPSBtaW5fdChzaXplX3QsIGNvdW50LFxuLVx0XHRcdFx0IFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKHBvcykpO1xuLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbi1cbi1cdFx0cGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKGlub2RlLVx1MDAzZWlfbWFwcGluZywgcG9zIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuLVx0XHRcdFx0XHQgTlVMTCk7XG4tXHRcdGlmIChJU19FUlIocGFnZSkpXG4tXHRcdFx0cmV0dXJuIFBUUl9FUlIocGFnZSk7XG4tXG4tXHRcdG1lbWNweV9mcm9tX3BhZ2UoYnVmLCBwYWdlLCBvZmZzZXRfaW5fcGFnZShwb3MpLCBuKTtcbi1cbi1cdFx0cHV0X3BhZ2UocGFnZSk7XG4tXG4tXHRcdGJ1ZiArPSBuO1xuLVx0XHRwb3MgKz0gbjtcbi1cdFx0Y291bnQgLT0gbjtcbi1cdH1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIFdyaXRlIHNvbWUgdmVyaXR5IG1ldGFkYXRhIHRvIHRoZSBpbm9kZSBmb3IgRlNfSU9DX0VOQUJMRV9WRVJJVFkuXG4gICoga2VybmVsX3dyaXRlKCkgY2FuJ3QgYmUgdXNlZCBiZWNhdXNlIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgcmVhZG9ubHkuXG5AQCAtMjUwLDcgKzIyMiw3IEBAIHN0YXRpYyBpbnQgZjJmc19nZXRfdmVyaXR5X2Rlc2NyaXB0b3Ioc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqYnVmLFxuIFx0aWYgKGJ1Zl9zaXplKSB7XG4gXHRcdGlmIChzaXplIFx1MDAzZSBidWZfc2l6ZSlcbiBcdFx0XHRyZXR1cm4gLUVSQU5HRTtcbi1cdFx0cmVzID0gcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1Ziwgc2l6ZSwgcG9zKTtcbitcdFx0cmVzID0gZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQoaW5vZGUsIGJ1Ziwgc2l6ZSwgcG9zKTtcbiBcdFx0aWYgKHJlcylcbiBcdFx0XHRyZXR1cm4gcmVzO1xuIFx0fVxuQEAgLTI3Miw3ICsyNDQsOSBAQCBzdGF0aWMgdm9pZCBmMmZzX3JlYWRhaGVhZF9tZXJrbGVfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIH1cbiBcbiBzdGF0aWMgaW50IGYyZnNfd3JpdGVfbWVya2xlX3RyZWVfYmxvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmJ1Zixcbi1cdFx0XHRcdFx0dTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUpXG4rXHRcdFx0XHRcdHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxuK1x0XHRcdFx0XHRjb25zdCB1OCAqemVyb19kaWdlc3QsXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCBkaWdlc3Rfc2l6ZSlcbiB7XG4gXHRwb3MgKz0gZjJmc192ZXJpdHlfbWV0YWRhdGFfcG9zKGZpbGVfaW5vZGUoZmlsZSkpO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL2ZpbGVfYXR0ci5jIGIvZnMvZmlsZV9hdHRyLmNcbmluZGV4IGJmYjAwZDI1NmRkNTYwLi41NDI0ZWM0ZTM5NDkzZiAxMDA2NDRcbi0tLSBhL2ZzL2ZpbGVfYXR0ci5jXG4rKysgYi9mcy9maWxlX2F0dHIuY1xuQEAgLTI0Niw2ICsyNDYsMTEgQEAgc3RhdGljIGludCBmaWxlYXR0cl9zZXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0aWYgKGZhLVx1MDAzZWZzeF9jb3dleHRzaXplID09IDApXG4gXHRcdGZhLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2PSB+RlNfWEZMQUdfQ09XRVhUU0laRTtcbiBcbitcdC8qIENhbiBub3QgZW5hYmxlIERBWCBvbiBmc3Zlcml0eSBmaWxlICovXG4rXHRpZiAoKG9sZF9tYS1cdTAwM2Vmc3hfeGZsYWdzIFx1MDAyNiBGU19YRkxBR19WRVJJVFkpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdGZhLVx1MDAzZWZzeF94ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX0RBWClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvaW9lbmQuYyBiL2ZzL2lvbWFwL2lvZW5kLmNcbmluZGV4IDA1NjUzMjg3NjRjMTc1Li44ZTQ2YjdmMWFhNmE5NyAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2lvZW5kLmNcbisrKyBiL2ZzL2lvbWFwL2lvZW5kLmNcbkBAIC00LDcgKzQsNiBAQFxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby1pbnRlZ3JpdHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X3NvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dyaXRlYmFjay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnNlcnJvci5oXHUwMDNlXG5AQCAtNDI1LDcgKzQyNCw3IEBAIHZvaWQgaW9tYXBfaW9lbmRfdHJ5X21lcmdlKHN0cnVjdCBpb21hcF9pb2VuZCAqaW9lbmQsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2lvZW5kX3RyeV9tZXJnZSk7XG4gXG4tc3RhdGljIGludCBpb21hcF9pb2VuZF9jb21wYXJlKHZvaWQgKnByaXYsIGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmEsXG4raW50IGlvbWFwX2lvZW5kX2NvbXBhcmUodm9pZCAqcHJpdiwgY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqYSxcbiBcdFx0Y29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqYilcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfaW9lbmQgKmlhID0gY29udGFpbmVyX29mKGEsIHN0cnVjdCBpb21hcF9pb2VuZCwgaW9fbGlzdCk7XG5AQCAtNDM3LDEwICs0MzYsMTEgQEAgc3RhdGljIGludCBpb21hcF9pb2VuZF9jb21wYXJlKHZvaWQgKnByaXYsIGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmEsXG4gXHRcdHJldHVybiAxO1xuIFx0cmV0dXJuIDA7XG4gfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2lvZW5kX2NvbXBhcmUpO1xuIFxuLXZvaWQgaW9tYXBfc29ydF9pb2VuZHMoc3RydWN0IGxpc3RfaGVhZCAqaW9lbmRfbGlzdClcbit2b2lkIGlvbWFwX3NvcnRfaW9lbmRzKHN0cnVjdCBsaXN0X2hlYWQgKmlvZW5kX2xpc3QsIGxpc3RfY21wX2Z1bmNfdCBjbXApXG4ge1xuLVx0bGlzdF9zb3J0KE5VTEwsIGlvZW5kX2xpc3QsIGlvbWFwX2lvZW5kX2NvbXBhcmUpO1xuK1x0bGlzdF9zb3J0KE5VTEwsIGlvZW5kX2xpc3QsIGNtcCk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX3NvcnRfaW9lbmRzKTtcbiBcbmRpZmYgLS1naXQgYS9mcy9zdGF0LmMgYi9mcy9zdGF0LmNcbmluZGV4IDg5OTA5NzQ2YmVkMTllLi5hZTEyOTliZDc0MzY2YyAxMDA2NDRcbi0tLSBhL2ZzL3N0YXQuY1xuKysrIGIvZnMvc3RhdC5jXG5AQCAtMjAzLDggKzIwMywxMiBAQCBpbnQgdmZzX2dldGF0dHJfbm9zZWMoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBrc3RhdCAqc3RhdCxcbiBcdGlmIChJU19EQVgoaW5vZGUpKVxuIFx0XHRzdGF0LVx1MDAzZWF0dHJpYnV0ZXMgfD0gU1RBVFhfQVRUUl9EQVg7XG4gXG4rXHRpZiAoSVNfVkVSSVRZKGlub2RlKSlcbitcdFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzIHw9IFNUQVRYX0FUVFJfVkVSSVRZO1xuK1xuIFx0c3RhdC1cdTAwM2VhdHRyaWJ1dGVzX21hc2sgfD0gKFNUQVRYX0FUVFJfQVVUT01PVU5UIHxcbi1cdFx0XHRcdCAgU1RBVFhfQVRUUl9EQVgpO1xuK1x0XHRcdFx0ICBTVEFUWF9BVFRSX0RBWCB8XG4rXHRcdFx0XHQgIFNUQVRYX0FUVFJfVkVSSVRZKTtcbiBcbiBcdGlkbWFwID0gbW50X2lkbWFwKHBhdGgtXHUwMDNlbW50KTtcbiBcdGlmIChpbm9kZS1cdTAwM2VpX29wLVx1MDAzZWdldGF0dHIpIHtcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvZW5hYmxlLmMgYi9mcy92ZXJpdHkvZW5hYmxlLmNcbmluZGV4IDQyZGZlZDFjZTBjZTY2Li5hZDRmZjcxZDdkZDk1YiAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9lbmFibGUuY1xuKysrIGIvZnMvdmVyaXR5L2VuYWJsZS5jXG5AQCAtNTAsNyArNTAsOSBAQCBzdGF0aWMgaW50IHdyaXRlX21lcmtsZV90cmVlX2Jsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB1OCAqYnVmLFxuIFx0aW50IGVycjtcbiBcbiBcdGVyciA9IGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc192b3AtXHUwMDNld3JpdGVfbWVya2xlX3RyZWVfYmxvY2soZmlsZSwgYnVmLCBwb3MsXG4tXHRcdFx0XHRcdFx0XHQgIHBhcmFtcy1cdTAwM2VibG9ja19zaXplKTtcbitcdFx0XHRcdFx0XHRcdCAgcGFyYW1zLVx1MDAzZWJsb2NrX3NpemUsXG4rXHRcdFx0XHRcdFx0XHQgIHBhcmFtcy1cdTAwM2V6ZXJvX2RpZ2VzdCxcbitcdFx0XHRcdFx0XHRcdCAgcGFyYW1zLVx1MDAzZWRpZ2VzdF9zaXplKTtcbiBcdGlmIChlcnIpXG4gXHRcdGZzdmVyaXR5X2Vycihpbm9kZSwgXCJFcnJvciAlZCB3cml0aW5nIE1lcmtsZSB0cmVlIGJsb2NrICVsdVwiLFxuIFx0XHRcdCAgICAgZXJyLCBpbmRleCk7XG5kaWZmIC0tZ2l0IGEvZnMvdmVyaXR5L29wZW4uYyBiL2ZzL3Zlcml0eS9vcGVuLmNcbmluZGV4IGQwYzU2YTdmYWEzYmIxLi44NzVlODg1MGNjYmFjZSAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9vcGVuLmNcbisrKyBiL2ZzL3Zlcml0eS9vcGVuLmNcbkBAIC0zNDcsNyArMzQ3LDI0IEBAIGludCBmc3Zlcml0eV9nZXRfZGVzY3JpcHRvcihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZW5zdXJlX3Zlcml0eV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4rLyoqXG4rICogZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKCkgLSBjYWNoZSB2ZXJpdHkgaW5mbyBpZiBpdCdzIG5vdCBhbHJlYWR5IGNhY2hlZFxuKyAqIEBpbm9kZTogdGhlIGlub2RlIGZvciB3aGljaCB2ZXJpdHkgaW5mbyBzaG91bGQgYmUgY2FjaGVkXG4rICpcbisgKiBFbnN1cmUgdGhpcyBpbm9kZSBoYXMgdmVyaXR5IGluZm8gYXR0YWNoZWQgdG8gaXQsIGl0J3MgYXNzdW1lZCB0aGUgaW5vZGVcbisgKiBhbHJlYWR5IGhhcyBmc3Zlcml0eSBlbmFibGVkLiBSZWFkIGZzdmVyaXR5IGRlc2NyaXB0b3IgYW5kIGNyZWF0ZXMgdmVyaXR5XG4rICogYmFzZWQgb24gdGhhdC5cbisgKlxuKyAqIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIGF0IGxlYXN0IG9uY2UgYmVmb3JlIGFueSBvZiB0aGUgaW5vZGUncyBkYXRhXG4rICogY2FuIGJlIHZlcmlmaWVkIChhbmQgdGh1cyByZWFkIGF0IGFsbCkgb3IgdGhlIGlub2RlJ3MgZnN2ZXJpdHkgZGlnZXN0XG4rICogcmV0cmlldmVkLiAgZnN2ZXJpdHlfZmlsZV9vcGVuKCkgY2FsbHMgdGhpcyBhbHJlYWR5LCB3aGljaCBoYW5kbGVzXG4rICogbm9ybWFsIGZpbGUgYWNjZXNzZXMuICBJZiBhIGZpbGVzeXN0ZW0gZG9lcyBhbnkgaW50ZXJuYWwgKGkuZS4gbm90XG4rICogYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSBkZXNjcmlwdG9yKSByZWFkcyBvZiB0aGUgZmlsZSdzIGRhdGEgb3JcbisgKiBmc3Zlcml0eSBkaWdlc3QsIGl0IG11c3QgY2FsbCB0aGlzIGV4cGxpY2l0bHkgYmVmb3JlIGRvaW5nIHNvLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvbiBmYWlsdXJlXG4rICovXG4raW50IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbiBcdHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSA9IGZzdmVyaXR5X2dldF9pbmZvKGlub2RlKSwgKmZvdW5kO1xuIFx0c3RydWN0IGZzdmVyaXR5X2Rlc2NyaXB0b3IgKmRlc2M7XG5AQCAtMzgzLDEyICs0MDAsMTMgQEAgc3RhdGljIGludCBlbnN1cmVfdmVyaXR5X2luZm8oc3RydWN0IGlub2RlICppbm9kZSlcbiBcdGtmcmVlKGRlc2MpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKTtcbiBcbiBpbnQgX19mc3Zlcml0eV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4ge1xuIFx0aWYgKGZpbHAtXHUwMDNlZl9tb2RlIFx1MDAyNiBGTU9ERV9XUklURSlcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbi1cdHJldHVybiBlbnN1cmVfdmVyaXR5X2luZm8oaW5vZGUpO1xuK1x0cmV0dXJuIGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhpbm9kZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKF9fZnN2ZXJpdHlfZmlsZV9vcGVuKTtcbiBcbmRpZmYgLS1naXQgYS9mcy92ZXJpdHkvcGFnZWNhY2hlLmMgYi9mcy92ZXJpdHkvcGFnZWNhY2hlLmNcbmluZGV4IDk5ZjVmNTNlZWE5ODVmLi4yNzBhYmQ2NTJlNDhjNiAxMDA2NDRcbi0tLSBhL2ZzL3Zlcml0eS9wYWdlY2FjaGUuY1xuKysrIGIvZnMvdmVyaXR5L3BhZ2VjYWNoZS5jXG5AQCAtNjgsMTMgKzY4LDY0IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfcmVhZGFoZWFkX21lcmtsZV90cmVlKTtcbiB2b2lkIGZzdmVyaXR5X2ZpbGxfemVyb2hhc2goc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbixcbiBcdFx0XHQgICAgICBzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmkpXG4ge1xuLVx0c2l6ZV90IG9mZiA9IG9mZnNldDtcbitcdHZvaWQgKnZhZGRyO1xuK1x0dm9pZCAqdG87XG4rXHRzaXplX3QgY2h1bms7XG4gXG4gXHRXQVJOX09OX09OQ0UoIUlTX0FMSUdORUQob2Zmc2V0LCB2aS1cdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSkpO1xuIFx0V0FSTl9PTl9PTkNFKCFJU19BTElHTkVEKGxlbiwgdmktXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpKTtcbitcdFdBUk5fT05fT05DRShvZmZzZXQgKyBsZW4gXHUwMDNlIGZvbGlvX3NpemUoZm9saW8pKTtcbiBcbi1cdGZvciAoOyBvZmYgXHUwMDNjIChvZmZzZXQgKyBsZW4pOyBvZmYgKz0gdmktXHUwMDNldHJlZV9wYXJhbXMuZGlnZXN0X3NpemUpXG4tXHRcdG1lbWNweV90b19mb2xpbyhmb2xpbywgb2ZmLCB2aS1cdTAwM2V0cmVlX3BhcmFtcy56ZXJvX2RpZ2VzdCxcbitcdGRvIHtcbitcdFx0dmFkZHIgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBvZmZzZXQpO1xuK1x0XHRjaHVuayA9IGxlbjtcbitcdFx0dG8gPSB2YWRkcjtcbitcbitcdFx0aWYgKGZvbGlvX3Rlc3RfcGFydGlhbF9rbWFwKGZvbGlvKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGNodW5rIFx1MDAzZSBQQUdFX1NJWkUgLSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpKVxuK1x0XHRcdGNodW5rID0gUEFHRV9TSVpFIC0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTtcbitcdFx0Zm9yICg7IHRvIFx1MDAzYyAodmFkZHIgKyBjaHVuayk7IHRvICs9IHZpLVx1MDAzZXRyZWVfcGFyYW1zLmRpZ2VzdF9zaXplKVxuK1x0XHRcdG1lbWNweSh0bywgdmktXHUwMDNldHJlZV9wYXJhbXMuemVyb19kaWdlc3QsXG4gXHRcdFx0XHR2aS1cdTAwM2V0cmVlX3BhcmFtcy5kaWdlc3Rfc2l6ZSk7XG4rXHRcdGt1bm1hcF9sb2NhbCh2YWRkcik7XG4rXG4rXHRcdG9mZnNldCArPSBjaHVuaztcbitcdFx0bGVuIC09IGNodW5rO1xuK1x0fSB3aGlsZSAobGVuIFx1MDAzZSAwKTtcbitcbitcdGZsdXNoX2RjYWNoZV9mb2xpbyhmb2xpbyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGZzdmVyaXR5X2ZpbGxfemVyb2hhc2gpO1xuK1xuKy8qKlxuKyAqIGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKCkgLSByZWFkIHBhZ2UgYW5kIGNvcHkgZGF0YSB0byBidWZmZXJcbisgKiBAaW5vZGU6XHRjb3B5IGZyb20gdGhpcyBpbm9kZSdzIGFkZHJlc3Mgc3BhY2VcbisgKiBAYnVmOlx0YnVmZmVyIHRvIGNvcHkgdG9cbisgKiBAY291bnQ6XHRudW1iZXIgb2YgYnl0ZXMgdG8gY29weVxuKyAqIEBwb3M6XHRwb3NpdGlvbiBvZiB0aGUgZm9saW8gdG8gY29weSBmcm9tXG4rICpcbisgKiBSZWFkIHNvbWUgdmVyaXR5IG1ldGFkYXRhIGZyb20gdGhlIGlub2RlLiAgX192ZnNfcmVhZCgpIGNhbid0IGJlIHVzZWQgYmVjYXVzZVxuKyAqIHdlIG5lZWQgdG8gcmVhZCBiZXlvbmQgaV9zaXplLlxuKyAqL1xuK2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbitcdFx0XHQgIGxvZmZfdCBwb3MpXG4re1xuK1x0d2hpbGUgKGNvdW50KSB7XG4rXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRcdHNpemVfdCBuO1xuK1xuK1x0XHRmb2xpbyA9IHJlYWRfbWFwcGluZ19mb2xpbyhpbm9kZS1cdTAwM2VpX21hcHBpbmcsIHBvcyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbitcdFx0XHRcdFx0IE5VTEwpO1xuK1x0XHRpZiAoSVNfRVJSKGZvbGlvKSlcbitcdFx0XHRyZXR1cm4gUFRSX0VSUihmb2xpbyk7XG4rXG4rXHRcdG4gPSBtZW1jcHlfZnJvbV9maWxlX2ZvbGlvKGJ1ZiwgZm9saW8sIHBvcywgY291bnQpO1xuK1x0XHRmb2xpb19wdXQoZm9saW8pO1xuK1xuK1x0XHRidWYgKz0gbjtcbitcdFx0cG9zICs9IG47XG4rXHRcdGNvdW50IC09IG47XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoZnN2ZXJpdHlfcGFnZWNhY2hlX3JlYWQpO1xuZGlmZiAtLWdpdCBhL2ZzL3Zlcml0eS92ZXJpZnkuYyBiL2ZzL3Zlcml0eS92ZXJpZnkuY1xuaW5kZXggNDAwNGExZDQyODc1MWYuLmRiOGMzNTAyMzRiYjcxIDEwMDY0NFxuLS0tIGEvZnMvdmVyaXR5L3ZlcmlmeS5jXG4rKysgYi9mcy92ZXJpdHkvdmVyaWZ5LmNcbkBAIC05LDYgKzksNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc2Vycm9yLmhcdTAwM2VcbiBcbiAjZGVmaW5lIEZTX1ZFUklUWV9NQVhfUEVORElOR19CTE9DS1MgMlxuIFxuQEAgLTIwNSw2ICsyMDYsOCBAQCBzdGF0aWMgYm9vbCB2ZXJpZnlfZGF0YV9ibG9jayhzdHJ1Y3QgZnN2ZXJpdHlfaW5mbyAqdmksXG4gXHRcdGlmIChtZW1jaHJfaW52KGRibG9jay1cdTAwM2VkYXRhLCAwLCBwYXJhbXMtXHUwMDNlYmxvY2tfc2l6ZSkpIHtcbiBcdFx0XHRmc3Zlcml0eV9lcnIoaW5vZGUsXG4gXHRcdFx0XHQgICAgIFwiRklMRSBDT1JSVVBURUQhICBEYXRhIHBhc3QgRU9GIGlzIG5vdCB6ZXJvZWRcIik7XG4rXHRcdFx0ZnNlcnJvcl9yZXBvcnRfZGF0YV9sb3N0KGlub2RlLCBkYXRhX3BvcyxcbitcdFx0XHRcdFx0XHQgcGFyYW1zLVx1MDAzZWJsb2NrX3NpemUsIEdGUF9OT0ZTKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtMzEyLDYgKzMxNSw3IEBAIHN0YXRpYyBib29sIHZlcmlmeV9kYXRhX2Jsb2NrKHN0cnVjdCBmc3Zlcml0eV9pbmZvICp2aSxcbiBcdFx0ZGF0YV9wb3MsIGxldmVsIC0gMSwgcGFyYW1zLVx1MDAzZWhhc2hfYWxnLVx1MDAzZW5hbWUsIGhzaXplLCB3YW50X2hhc2gsXG4gXHRcdHBhcmFtcy1cdTAwM2VoYXNoX2FsZy1cdTAwM2VuYW1lLCBoc2l6ZSxcbiBcdFx0bGV2ZWwgPT0gMCA/IGRibG9jay1cdTAwM2VyZWFsX2hhc2ggOiByZWFsX2hhc2gpO1xuK1x0ZnNlcnJvcl9yZXBvcnRfZGF0YV9sb3N0KGlub2RlLCBkYXRhX3BvcywgcGFyYW1zLVx1MDAzZWJsb2NrX3NpemUsIEdGUF9OT0ZTKTtcbiBlcnJvcjpcbiBcdGZvciAoOyBsZXZlbCBcdTAwM2UgMDsgbGV2ZWwtLSkge1xuIFx0XHRrdW5tYXBfbG9jYWwoaGJsb2Nrc1tsZXZlbCAtIDFdLmFkZHIpO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9NYWtlZmlsZSBiL2ZzL3hmcy9NYWtlZmlsZVxuaW5kZXggOWY3MTMzZTAyNTc2OGQuLjM4YjdmNTFlNWQ4NDA1IDEwMDY0NFxuLS0tIGEvZnMveGZzL01ha2VmaWxlXG4rKysgYi9mcy94ZnMvTWFrZWZpbGVcbkBAIC0xNDksNiArMTQ5LDcgQEAgeGZzLSQoQ09ORklHX1hGU19QT1NJWF9BQ0wpXHQrPSB4ZnNfYWNsLm9cbiB4ZnMtJChDT05GSUdfU1lTQ1RMKVx0XHQrPSB4ZnNfc3lzY3RsLm9cbiB4ZnMtJChDT05GSUdfQ09NUEFUKVx0XHQrPSB4ZnNfaW9jdGwzMi5vXG4geGZzLSQoQ09ORklHX0VYUE9SVEZTX0JMT0NLX09QUylcdCs9IHhmc19wbmZzLm9cbit4ZnMtJChDT05GSUdfRlNfVkVSSVRZKVx0XHQrPSB4ZnNfZnN2ZXJpdHkub1xuIFxuICMgbm90aWZ5IGZhaWx1cmVcbiBpZmVxICgkKENPTkZJR19NRU1PUllfRkFJTFVSRSkseSlcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmNcbmluZGV4IGQ2NGRlZmVkYTY0NWVkLi5jYzQ4ZjZlMjBlODAwMCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuY1xuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jXG5AQCAtNDEsNiArNDEsOCBAQFxuICNpbmNsdWRlIFwieGZzX2lub2RlX3V0aWwuaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfcnRncm91cC5oXCJcbiAjaW5jbHVkZSBcInhmc196b25lX2FsbG9jLmhcIlxuKyNpbmNsdWRlIFwieGZzX2ZzdmVyaXR5LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiBzdHJ1Y3Qga21lbV9jYWNoZVx0XHQqeGZzX2JtYXBfaW50ZW50X2NhY2hlO1xuIFxuQEAgLTQ0MDIsNiArNDQwNCwxMCBAQCB4ZnNfYm1hcGlfY29udmVydF9vbmVfZGVsYWxsb2MoXG4gXHQgKiB0aGUgZXh0ZW50LiAgSnVzdCByZXR1cm4gdGhlIHJlYWwgZXh0ZW50IGF0IHRoaXMgb2Zmc2V0LlxuIFx0ICovXG4gXHRpZiAoIWlzbnVsbHN0YXJ0YmxvY2soYm1hLmdvdC5icl9zdGFydGJsb2NrKSkge1xuK1x0XHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBYRlNfRlNCX1RPX0IobXAsIGJtYS5nb3QuYnJfc3RhcnRvZmYpIFx1MDAzZT1cbitcdFx0XHQgICAgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXG4rXHRcdFx0ZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbiBcdFx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIGlvbWFwLCBcdTAwMjZibWEuZ290LCAwLCBmbGFncyxcbiBcdFx0XHRcdHhmc19pb21hcF9pbm9kZV9zZXF1ZW5jZShpcCwgZmxhZ3MpKTtcbiBcdFx0aWYgKHNlcSlcbkBAIC00NDQ5LDYgKzQ0NTUsMTEgQEAgeGZzX2JtYXBpX2NvbnZlcnRfb25lX2RlbGFsbG9jKFxuIFx0WEZTX1NUQVRTX0FERChtcCwgeHNfeHN0cmF0X2J5dGVzLCBYRlNfRlNCX1RPX0IobXAsIGJtYS5sZW5ndGgpKTtcbiBcdFhGU19TVEFUU19JTkMobXAsIHhzX3hzdHJhdF9xdWljayk7XG4gXG4rXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikgXHUwMDI2XHUwMDI2XG4rXHQgICAgWEZTX0ZTQl9UT19CKG1wLCBibWEuZ290LmJyX3N0YXJ0b2ZmKSBcdTAwM2U9XG4rXHRcdCAgICB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSlcbitcdFx0ZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbitcbiBcdEFTU0VSVCghaXNudWxsc3RhcnRibG9jayhibWEuZ290LmJyX3N0YXJ0YmxvY2spKTtcbiBcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2Ym1hLmdvdCwgMCwgZmxhZ3MsXG4gXHRcdFx0XHR4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIGZsYWdzKSk7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmggYi9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaFxuaW5kZXggZGQwZWQwNDZmYmU5YzkuLjhiZTFiMTAxYjE5Njk5IDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmhcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2Zvcm1hdC5oXG5AQCAtMzc0LDExICszNzQsMTMgQEAgeGZzX3NiX2hhc19jb21wYXRfZmVhdHVyZShcbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9STUFQQlQgICAoMSBcdTAwM2NcdTAwM2MgMSlcdFx0LyogcmV2ZXJzZSBtYXAgYnRyZWUgKi9cbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9SRUZMSU5LICAoMSBcdTAwM2NcdTAwM2MgMilcdFx0LyogcmVmbGlua2VkIGZpbGVzICovXG4gI2RlZmluZSBYRlNfU0JfRkVBVF9ST19DT01QQVRfSU5PQlRDTlQgKDEgXHUwMDNjXHUwMDNjIDMpXHRcdC8qIGlub2J0IGJsb2NrIGNvdW50cyAqL1xuKyNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1ZFUklUWSAgICgxIFx1MDAzY1x1MDAzYyA0KVx0XHQvKiBmcy12ZXJpdHkgKi9cbiAjZGVmaW5lIFhGU19TQl9GRUFUX1JPX0NPTVBBVF9BTEwgXFxcbiBcdFx0KFhGU19TQl9GRUFUX1JPX0NPTVBBVF9GSU5PQlQgfCBcXFxuIFx0XHQgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1JNQVBCVCB8IFxcXG4tXHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfUkVGTElOS3wgXFxcbi1cdFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVClcbitcdFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9SRUZMSU5LIHwgXFxcbitcdFx0IFhGU19TQl9GRUFUX1JPX0NPTVBBVF9JTk9CVENOVCB8IFxcXG4rXHRcdCBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZKVxuICNkZWZpbmUgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX1VOS05PV05cdH5YRlNfU0JfRkVBVF9ST19DT01QQVRfQUxMXG4gc3RhdGljIGlubGluZSBib29sXG4geGZzX3NiX2hhc19yb19jb21wYXRfZmVhdHVyZShcbkBAIC0xMjMwLDE2ICsxMjMyLDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB4ZnNfZGlub2RlX3B1dF9yZGV2KHN0cnVjdCB4ZnNfZGlub2RlICpkaXAsIHhmc19kZXZfdCByZGV2KVxuICAqL1xuICNkZWZpbmUgWEZTX0RJRkxBRzJfTUVUQURBVEFfQklUXHQ1XG4gXG4rLyogaW5vZGVzIHNlYWxlZCB3aXRoIGZzLXZlcml0eSAqL1xuKyNkZWZpbmUgWEZTX0RJRkxBRzJfVkVSSVRZX0JJVFx0XHQ2XG4rXG4gI2RlZmluZSBYRlNfRElGTEFHMl9EQVhcdFx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX0RBWF9CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9SRUZMSU5LXHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfUkVGTElOS19CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9DT1dFWFRTSVpFXHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfQ09XRVhUU0laRV9CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9CSUdUSU1FXHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfQklHVElNRV9CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9OUkVYVDY0XHQoMVVMTCBcdTAwM2NcdTAwM2MgWEZTX0RJRkxBRzJfTlJFWFQ2NF9CSVQpXG4gI2RlZmluZSBYRlNfRElGTEFHMl9NRVRBREFUQVx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX01FVEFEQVRBX0JJVClcbisjZGVmaW5lIFhGU19ESUZMQUcyX1ZFUklUWVx0KDFVTEwgXHUwMDNjXHUwMDNjIFhGU19ESUZMQUcyX1ZFUklUWV9CSVQpXG4gXG4gI2RlZmluZSBYRlNfRElGTEFHMl9BTlkgXFxcbiBcdChYRlNfRElGTEFHMl9EQVggfCBYRlNfRElGTEFHMl9SRUZMSU5LIHwgWEZTX0RJRkxBRzJfQ09XRVhUU0laRSB8IFxcXG4tXHQgWEZTX0RJRkxBRzJfQklHVElNRSB8IFhGU19ESUZMQUcyX05SRVhUNjQgfCBYRlNfRElGTEFHMl9NRVRBREFUQSlcbitcdCBYRlNfRElGTEFHMl9CSUdUSU1FIHwgWEZTX0RJRkxBRzJfTlJFWFQ2NCB8IFhGU19ESUZMQUcyX01FVEFEQVRBIHwgXFxcbitcdCBYRlNfRElGTEFHMl9WRVJJVFkpXG4gXG4gc3RhdGljIGlubGluZSBib29sIHhmc19kaW5vZGVfaGFzX2JpZ3RpbWUoY29uc3Qgc3RydWN0IHhmc19kaW5vZGUgKmRpcClcbiB7XG5AQCAtMjAyNyw0ICsyMDM0LDI2IEBAIHN0cnVjdCB4ZnNfYWNsIHtcbiAjZGVmaW5lIFNHSV9BQ0xfRklMRV9TSVpFXHQoc2l6ZW9mKFNHSV9BQ0xfRklMRSktMSlcbiAjZGVmaW5lIFNHSV9BQ0xfREVGQVVMVF9TSVpFXHQoc2l6ZW9mKFNHSV9BQ0xfREVGQVVMVCktMSlcbiBcbisvKlxuKyAqIEF0IG1heGltdW0gb2YgOCBsZXZlbHMgd2l0aCAxMjggaGFzaGVzIHBlciBibG9jayAoMzIgYnl0ZXMgU0hBLTI1NikgbWF4aW11bVxuKyAqIHRyZWUgc2l6ZSBpcyAoKDEyOF44IOKIkiAxKS8oMTI4IOKIkiAxKSkgPSA1NjcqMTBeMTIgYmxvY2tzLiBUaGlzIHNob3VsZCBmaXQgaW5cbisgKiA1MyBiaXRzIGFkZHJlc3Mgc3BhY2UuXG4rICpcbisgKiBBdCB0aGlzIE1lcmtsZSB0cmVlIHNpemUgd2UgY2FuIGNvdmVyIDI5NUVCIGxhcmdlIGZpbGUuIFRoaXMgaXMgbXVjaCBsYXJnZXJcbisgKiB0aGFuIHRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIGZpbGUgc2l6ZS5cbisgKlxuKyAqIEZvciBzaGE1MTIgdGhlIGxhcmdlc3QgZmlsZSB3ZSBjYW4gY292ZXIgZW5kcyBhdCAxIFx1MDAzY1x1MDAzYyA1MCBvZmZzZXQsIHRoaXMgaXMgYWxzb1xuKyAqIGdvb2QuXG4rICovXG4rI2RlZmluZSBYRlNfRlNWRVJJVFlfTEFSR0VTVF9GSUxFXHQoKGxvZmZfdCkxVUxMIFx1MDAzY1x1MDAzYyA1MylcbitcbisvKlxuKyAqIEFsaWdubWVudCBvZiB0aGUgZnN2ZXJpdHkgbWV0YWRhdGEgcGxhY2VtZW50LiBUaGlzIGlzIGxhcmdlc3Qgc3VwcG9ydGVkIFBBR0VcbisgKiBTSVpFIGZvciBmc3Zlcml0eS4gVGhpcyBpcyB1c2VkIHRvIHNwYWNlIG91dCBkYXRhIGFuZCBtZXRhZGF0YSBpbiBwYWdlIGNhY2hlLlxuKyAqIFRoZSBzcGFjaW5nIGlzIG5lY2Vzc2FyeSBmb3Igbm9uLWV4cG9zdXJlIG9mIG1ldGFkYXRhIHRvIHVzZXJzcGFjZSBhbmRcbisgKiBjb3JyZWN0IG1lcmtsZSB0cmVlIHN5bnRoZXNpcyBpbiB0aGUgaW9tYXAuXG4rICovXG4rI2RlZmluZSBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR05cdCg2NTUzNilcbitcbitcbiAjZW5kaWYgLyogX19YRlNfRk9STUFUX0hfXyAqL1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2ZzLmggYi9mcy94ZnMvbGlieGZzL3hmc19mcy5oXG5pbmRleCAxODVmMDlmMzI3YzAwYy4uODRkNjJiNzUwNmE5YWQgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19mcy5oXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19mcy5oXG5AQCAtMjUwLDYgKzI1MCw3IEBAIHR5cGVkZWYgc3RydWN0IHhmc19mc29wX3Jlc2Jsa3Mge1xuICNkZWZpbmUgWEZTX0ZTT1BfR0VPTV9GTEFHU19QQVJFTlRcdCgxIFx1MDAzY1x1MDAzYyAyNSkgLyogbGludXggcGFyZW50IHBvaW50ZXJzICovXG4gI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX01FVEFESVJcdCgxIFx1MDAzY1x1MDAzYyAyNikgLyogbWV0YWRhdGEgZGlyZWN0b3JpZXMgKi9cbiAjZGVmaW5lIFhGU19GU09QX0dFT01fRkxBR1NfWk9ORURcdCgxIFx1MDAzY1x1MDAzYyAyNykgLyogem9uZWQgcnQgZGV2aWNlICovXG4rI2RlZmluZSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1ZFUklUWVx0KDEgXHUwMDNjXHUwMDNjIDI4KSAvKiBmcy12ZXJpdHkgKi9cbiBcbiAvKlxuICAqIE1pbmltdW0gYW5kIG1heGltdW0gc2l6ZXMgbmVlZCBmb3IgZ3Jvd3RoIGNoZWNrcy5cbkBAIC00MjEsNiArNDIyLDcgQEAgc3RydWN0IHhmc19idWxrc3RhdCB7XG4gI2RlZmluZSBYRlNfQlNfU0lDS19TWU1MSU5LXHQoMSBcdTAwM2NcdTAwM2MgNikgIC8qIHN5bWJvbGljIGxpbmsgcmVtb3RlIHRhcmdldCAqL1xuICNkZWZpbmUgWEZTX0JTX1NJQ0tfUEFSRU5UXHQoMSBcdTAwM2NcdTAwM2MgNykgIC8qIHBhcmVudCBwb2ludGVycyAqL1xuICNkZWZpbmUgWEZTX0JTX1NJQ0tfRElSVFJFRVx0KDEgXHUwMDNjXHUwMDNjIDgpICAvKiBkaXJlY3RvcnkgdHJlZSBzdHJ1Y3R1cmUgKi9cbisjZGVmaW5lIFhGU19CU19TSUNLX0ZTVkVSSVRZXHQoMSBcdTAwM2NcdTAwM2MgOSkgIC8qIGZzdmVyaXR5IG1ldGFkYXRhICovXG4gXG4gLypcbiAgKiBQcm9qZWN0IHF1b3RhIGlkIGhlbHBlcnMgKHByZXZpb3VzbHkgcHJvamlkIHdhcyAxNmJpdCBvbmx5XG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmggYi9mcy94ZnMvbGlieGZzL3hmc19oZWFsdGguaFxuaW5kZXggMWQ0NWNmNTc4OWU4NjQuLjkzMmI0NDcxOTBkYTc2IDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfaGVhbHRoLmhcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2hlYWx0aC5oXG5AQCAtMTA0LDYgKzEwNCw3IEBAIHN0cnVjdCB4ZnNfcnRncm91cDtcbiAvKiBEb24ndCBwcm9wYWdhdGUgc2ljayBzdGF0dXMgdG8gYWcgaGVhbHRoIHN1bW1hcnkgZHVyaW5nIGluYWN0aXZhdGlvbiAqL1xuICNkZWZpbmUgWEZTX1NJQ0tfSU5PX0ZPUkdFVFx0KDEgXHUwMDNjXHUwMDNjIDEyKVxuICNkZWZpbmUgWEZTX1NJQ0tfSU5PX0RJUlRSRUVcdCgxIFx1MDAzY1x1MDAzYyAxMykgIC8qIGRpcmVjdG9yeSB0cmVlIHN0cnVjdHVyZSAqL1xuKyNkZWZpbmUgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZXHQoMSBcdTAwM2NcdTAwM2MgMTQpICAvKiBmc3Zlcml0eSBtZXRhZGF0YSAqL1xuIFxuIC8qIFByaW1hcnkgZXZpZGVuY2Ugb2YgaGVhbHRoIHByb2JsZW1zIGluIGEgZ2l2ZW4gZ3JvdXAuICovXG4gI2RlZmluZSBYRlNfU0lDS19GU19QUklNQVJZXHQoWEZTX1NJQ0tfRlNfQ09VTlRFUlMgfCBcXFxuQEAgLTE0MCw3ICsxNDEsOCBAQCBzdHJ1Y3QgeGZzX3J0Z3JvdXA7XG4gXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX1hBVFRSIHwgXFxcbiBcdFx0XHRcdCBYRlNfU0lDS19JTk9fU1lNTElOSyB8IFxcXG4gXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX1BBUkVOVCB8IFxcXG4tXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX0RJUlRSRUUpXG4rXHRcdFx0XHQgWEZTX1NJQ0tfSU5PX0RJUlRSRUUgfCBcXFxuK1x0XHRcdFx0IFhGU19TSUNLX0lOT19GU1ZFUklUWSlcbiBcbiAjZGVmaW5lIFhGU19TSUNLX0lOT19aQVBQRURcdChYRlNfU0lDS19JTk9fQk1CVERfWkFQUEVEIHwgXFxcbiBcdFx0XHRcdCBYRlNfU0lDS19JTk9fQk1CVEFfWkFQUEVEIHwgXFxcbmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX2J1Zi5jXG5pbmRleCAzMzZlZjg0M2YyZmU0Zi4uYmQ4MGExOWYyZTA5MjkgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV9idWYuY1xuKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfYnVmLmNcbkBAIC03NjAsNiArNzYwLDE0IEBAIHhmc19kaW5vZGVfdmVyaWZ5KFxuIFx0ICAgICF4ZnNfaGFzX3J0cmVmbGluayhtcCkpXG4gXHRcdHJldHVybiBfX3RoaXNfYWRkcmVzcztcbiBcbitcdC8qIG9ubHkgcmVndWxhciBmaWxlcyBjYW4gaGF2ZSBmc3Zlcml0eSAqL1xuK1x0aWYgKGZsYWdzMiBcdTAwMjYgWEZTX0RJRkxBRzJfVkVSSVRZKSB7XG4rXHRcdGlmICgheGZzX2hhc192ZXJpdHkobXApKVxuK1x0XHRcdHJldHVybiBfX3RoaXNfYWRkcmVzcztcbitcdFx0aWYgKCFTX0lTUkVHKG1vZGUpKVxuK1x0XHRcdHJldHVybiBfX3RoaXNfYWRkcmVzcztcbitcdH1cbitcbiBcdGlmICh4ZnNfaGFzX3pvbmVkKG1wKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBkaXAtXHUwMDNlZGlfbWV0YXR5cGUgPT0gY3B1X3RvX2JlMTYoWEZTX01FVEFGSUxFX1JUUk1BUCkpIHtcbiBcdFx0aWYgKGJlMzJfdG9fY3B1KGRpcC1cdTAwM2VkaV91c2VkX2Jsb2NrcykgXHUwMDNlIG1wLVx1MDAzZW1fc2Iuc2JfcmdleHRlbnRzKVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2lub2RlX3V0aWwuY1xuaW5kZXggMjU4YWMzZDBkNDg2ZTYuLjVhNTE2YmQzMWMzMTc1IDEwMDY0NFxuLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfaW5vZGVfdXRpbC5jXG4rKysgYi9mcy94ZnMvbGlieGZzL3hmc19pbm9kZV91dGlsLmNcbkBAIC03NCw3ICs3NCw4IEBAIHhmc19mbGFnczJkaWZsYWdzMihcbiBcdHVpbnQ2NF90XHRcdGRpX2ZsYWdzMiA9XG4gXHRcdChpcC1cdTAwM2VpX2RpZmxhZ3MyIFx1MDAyNiAoWEZTX0RJRkxBRzJfUkVGTElOSyB8XG4gXHRcdFx0XHQgICBYRlNfRElGTEFHMl9CSUdUSU1FIHxcbi1cdFx0XHRcdCAgIFhGU19ESUZMQUcyX05SRVhUNjQpKTtcbitcdFx0XHRcdCAgIFhGU19ESUZMQUcyX05SRVhUNjQgfFxuK1x0XHRcdFx0ICAgWEZTX0RJRkxBRzJfVkVSSVRZKSk7XG4gXG4gXHRpZiAoeGZsYWdzIFx1MDAyNiBGU19YRkxBR19EQVgpXG4gXHRcdGRpX2ZsYWdzMiB8PSBYRlNfRElGTEFHMl9EQVg7XG5AQCAtMTI2LDYgKzEyNyw4IEBAIHhmc19pcDJ4ZmxhZ3MoXG4gXHRcdFx0ZmxhZ3MgfD0gRlNfWEZMQUdfREFYO1xuIFx0XHRpZiAoaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjYgWEZTX0RJRkxBRzJfQ09XRVhUU0laRSlcbiBcdFx0XHRmbGFncyB8PSBGU19YRkxBR19DT1dFWFRTSVpFO1xuK1x0XHRpZiAoaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjYgWEZTX0RJRkxBRzJfVkVSSVRZKVxuK1x0XHRcdGZsYWdzIHw9IEZTX1hGTEFHX1ZFUklUWTtcbiBcdH1cbiBcbiBcdGlmICh4ZnNfaW5vZGVfaGFzX2F0dHJfZm9yayhpcCkpXG5kaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfc2IuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmNcbmluZGV4IDQ3MzIyYWRiNzY5MDU5Li4yMjJiYmU1NTU5ZGY0NyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmNcbisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmNcbkBAIC0xNjUsNiArMTY1LDggQEAgeGZzX3NiX3ZlcnNpb25fdG9fZmVhdHVyZXMoXG4gXHRcdGZlYXR1cmVzIHw9IFhGU19GRUFUX1JFRkxJTks7XG4gXHRpZiAoc2JwLVx1MDAzZXNiX2ZlYXR1cmVzX3JvX2NvbXBhdCBcdTAwMjYgWEZTX1NCX0ZFQVRfUk9fQ09NUEFUX0lOT0JUQ05UKVxuIFx0XHRmZWF0dXJlcyB8PSBYRlNfRkVBVF9JTk9CVENOVDtcbitcdGlmIChzYnAtXHUwMDNlc2JfZmVhdHVyZXNfcm9fY29tcGF0IFx1MDAyNiBYRlNfU0JfRkVBVF9ST19DT01QQVRfVkVSSVRZKVxuK1x0XHRmZWF0dXJlcyB8PSBYRlNfRkVBVF9WRVJJVFk7XG4gXHRpZiAoc2JwLVx1MDAzZXNiX2ZlYXR1cmVzX2luY29tcGF0IFx1MDAyNiBYRlNfU0JfRkVBVF9JTkNPTVBBVF9GVFlQRSlcbiBcdFx0ZmVhdHVyZXMgfD0gWEZTX0ZFQVRfRlRZUEU7XG4gXHRpZiAoc2JwLVx1MDAzZXNiX2ZlYXR1cmVzX2luY29tcGF0IFx1MDAyNiBYRlNfU0JfRkVBVF9JTkNPTVBBVF9TUElOT0RFUylcbkBAIC0xNTg4LDYgKzE1OTAsOCBAQCB4ZnNfZnNfZ2VvbWV0cnkoXG4gXHRcdGdlby1cdTAwM2VmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX01FVEFESVI7XG4gXHRpZiAoeGZzX2hhc196b25lZChtcCkpXG4gXHRcdGdlby1cdTAwM2VmbGFncyB8PSBYRlNfRlNPUF9HRU9NX0ZMQUdTX1pPTkVEO1xuK1x0aWYgKHhmc19oYXNfdmVyaXR5KG1wKSlcbitcdFx0Z2VvLVx1MDAzZWZsYWdzIHw9IFhGU19GU09QX0dFT01fRkxBR1NfVkVSSVRZO1xuIFx0Z2VvLVx1MDAzZXJ0c2VjdHNpemUgPSBzYnAtXHUwMDNlc2JfYmxvY2tzaXplO1xuIFx0Z2VvLVx1MDAzZWRpcmJsb2Nrc2l6ZSA9IHhmc19kaXIyX2RpcmJsb2NrX2J5dGVzKHNicCk7XG4gXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2NvbW1vbi5jIGIvZnMveGZzL3NjcnViL2NvbW1vbi5jXG5pbmRleCBlNTIzM2UzMWFiYjc1MC4uMDJiNjhiZjRjNTEyNzAgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvc2NydWIvY29tbW9uLmNcbisrKyBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uY1xuQEAgLTQ1LDYgKzQ1LDggQEBcbiAjaW5jbHVkZSBcInNjcnViL2hlYWx0aC5oXCJcbiAjaW5jbHVkZSBcInNjcnViL3RlbXBmaWxlLmhcIlxuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbitcbiAvKiBDb21tb24gY29kZSBmb3IgdGhlIG1ldGFkYXRhIHNjcnViYmVycy4gKi9cbiBcbiAvKlxuQEAgLTE3NTQsMyArMTc1Niw1NiBAQCB4Y2hrX2lub2RlX2NvdW50X2Jsb2NrcyhcbiBcdHJldHVybiB4ZnNfYm1hcF9jb3VudF9ibG9ja3Moc2MtXHUwMDNldHAsIHNjLVx1MDAzZWlwLCB3aGljaGZvcmssIG5leHRlbnRzLFxuIFx0XHRcdGNvdW50KTtcbiB9XG4rXG4rLypcbisgKiBJZiB0aGlzIGlub2RlIGhhcyBTX1ZFUklUWSBzZXQgb24gaXQsIHJlYWQgdGhlIHZlcml0eSBpbmZvLiBJZiB0aGUgcmVhZGluZ1xuKyAqIGZhaWxzIHdpdGggYW55dGhpbmcgb3RoZXIgdGhhbiBFTk9NRU0sIHRoZSBmaWxlIGlzIGNvcnJ1cHQsIHdoaWNoIHdlIGNhblxuKyAqIGRldGVjdCBsYXRlciB3aXRoIGZzdmVyaXR5X2FjdGl2ZS5cbisgKlxuKyAqIENhbGxlcnMgbXVzdCBob2xkIHRoZSBJT0xPQ0sgYW5kIG11c3Qgbm90IGhvbGQgdGhlIElMT0NLIG9mIHNjLVx1MDAzZWlwIGJlY2F1c2VcbisgKiBhY3RpdmF0aW9uIHJlYWRzIGlub2RlIGRhdGEuXG4rICovXG4raW50XG4reGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoXG4rXHRzdHJ1Y3QgeGZzX3NjcnViXHQqc2MpXG4re1xuK1x0aW50XHRcdFx0ZXJyb3I7XG4rXG4rXHRpZiAoIWZzdmVyaXR5X2FjdGl2ZShWRlNfSShzYy1cdTAwM2VpcCkpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGVycm9yID0gZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvKFZGU19JKHNjLVx1MDAzZWlwKSk7XG4rXHRzd2l0Y2ggKGVycm9yKSB7XG4rXHRjYXNlIDA6XG4rXHRcdC8qIGZzdmVyaXR5IGlzIGFjdGl2ZSAqL1xuK1x0XHRicmVhaztcbitcdGNhc2UgLUVOT0RBVEE6XG4rXHRjYXNlIC1FTVNHU0laRTpcbitcdGNhc2UgLUVJTlZBTDpcbitcdGNhc2UgLUVGU0NPUlJVUFRFRDpcbitcdGNhc2UgLUVGQklHOlxuK1x0Y2FzZSAtRVJBTkdFOlxuK1x0Y2FzZSAtRUJBRE1TRzpcbitcdFx0LypcbitcdFx0ICogVGhlIG5vbnplcm8gZXJybm8gY29kZXMgYWJvdmUgYXJlIHRoZSBlcnJvciBjb2RlcyB0aGF0IGNhblxuK1x0XHQgKiBiZSByZXR1cm5lZCBmcm9tIGZzdmVyaXR5IG9uIG1ldGFkYXRhIHZhbGlkYXRpb24gZXJyb3JzLlxuK1x0XHQgKi9cbitcdFx0cmV0dXJuIDA7XG4rXHRkZWZhdWx0OlxuK1x0XHQvKiBydW50aW1lIGVycm9ycyAqL1xuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLypcbisgKiBJcyB0aGlzIGEgdmVyaXR5IGZpbGUgdGhhdCBmYWlsZWQgdG8gYWN0aXZhdGU/ICBDYWxsZXJzIG11c3QgaGF2ZSB0cmllZCB0b1xuKyAqIGFjdGl2YXRlIGZzdmVyaXR5IHZpYSB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eS5cbisgKi9cbitib29sXG4reGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKFxuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwKVxuK3tcbitcdHJldHVybiBmc3Zlcml0eV9hY3RpdmUoVkZTX0koaXApKSBcdTAwMjZcdTAwMjYgIWZzdmVyaXR5X2dldF9pbmZvKFZGU19JKGlwKSk7XG4rfVxuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9jb21tb24uaCBiL2ZzL3hmcy9zY3J1Yi9jb21tb24uaFxuaW5kZXggOWQ2MjdmZDUwNjg3ZTQuLjNkZTJiNjAwOWE5OTQxIDEwMDY0NFxuLS0tIGEvZnMveGZzL3NjcnViL2NvbW1vbi5oXG4rKysgYi9mcy94ZnMvc2NydWIvY29tbW9uLmhcbkBAIC0yNjgsNiArMjY4LDggQEAgaW50IHhjaGtfaW5vZGVfaXNfYWxsb2NhdGVkKHN0cnVjdCB4ZnNfc2NydWIgKnNjLCB4ZnNfYWdpbm9fdCBhZ2lubyxcbiBcdFx0Ym9vbCAqaW51c2UpO1xuIGludCB4Y2hrX2lub2RlX2NvdW50X2Jsb2NrcyhzdHJ1Y3QgeGZzX3NjcnViICpzYywgaW50IHdoaWNoZm9yayxcbiBcdFx0eGZzX2V4dG51bV90ICpuZXh0ZW50cywgeGZzX2ZpbGJsa3NfdCAqY291bnQpO1xuK2ludCB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzdHJ1Y3QgeGZzX3NjcnViICpzYyk7XG4rYm9vbCB4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW4oc3RydWN0IHhmc19pbm9kZSAqaXApO1xuIFxuIGJvb2wgeGNoa19pbm9kZV9pc19kaXJ0cmVlX3Jvb3QoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xuIGJvb2wgeGNoa19pbm9kZV9pc19zYl9yb290ZWQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jIGIvZnMveGZzL3NjcnViL2lub2RlLmNcbmluZGV4IDY1YjEzZTMxMTkxNjgxLi5kMWNkZDZiNDQ1ZDAxNyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy9zY3J1Yi9pbm9kZS5jXG4rKysgYi9mcy94ZnMvc2NydWIvaW5vZGUuY1xuQEAgLTM2LDYgKzM2LDEwIEBAIHhjaGtfcHJlcGFyZV9pc2NydWIoXG4gXG4gXHR4Y2hrX2lsb2NrKHNjLCBYRlNfSU9MT0NLX0VYQ0wpO1xuIFxuK1x0ZXJyb3IgPSB4Y2hrX2lub2RlX3NldHVwX3Zlcml0eShzYyk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdHJldHVybiBlcnJvcjtcbitcbiBcdGVycm9yID0geGNoa190cmFuc19hbGxvYyhzYywgMCk7XG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbkBAIC04MzMsNiArODM3LDkgQEAgeGNoa19pbm9kZShcbiBcdGlmIChTX0lTUkVHKFZGU19JKHNjLVx1MDAzZWlwKS1cdTAwM2VpX21vZGUpKVxuIFx0XHR4Y2hrX2lub2RlX2NoZWNrX3JlZmxpbmtfaWZsYWcoc2MsIElfSU5PKHNjLVx1MDAzZWlwKSk7XG4gXG4rXHRpZiAoeGNoa19pbm9kZV92ZXJpdHlfYnJva2VuKHNjLVx1MDAzZWlwKSlcbitcdFx0eGNoa19pbm9fc2V0X2NvcnJ1cHQoc2MsIHNjLVx1MDAzZXNtLVx1MDAzZXNtX2lubyk7XG4rXG4gXHR4Y2hrX2lub2RlX2NoZWNrX3VubGlua2VkKHNjKTtcbiBcbiBcdHhjaGtfaW5vZGVfeHJlZihzYywgSV9JTk8oc2MtXHUwMDNlaXApLCBcdTAwMjZkaSk7XG5kaWZmIC0tZ2l0IGEvZnMveGZzL3NjcnViL2lub2RlX3JlcGFpci5jIGIvZnMveGZzL3NjcnViL2lub2RlX3JlcGFpci5jXG5pbmRleCAzZWM0MWMxOTgzNTExNi4uMzVlOTNhNGI1MGNkOWYgMTAwNjQ0XG4tLS0gYS9mcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNcbisrKyBiL2ZzL3hmcy9zY3J1Yi9pbm9kZV9yZXBhaXIuY1xuQEAgLTU3Myw2ICs1NzMsOCBAQCB4cmVwX2Rpbm9kZV9mbGFncyhcbiBcdFx0ZGlwLVx1MDAzZWRpX25yZXh0NjRfcGFkID0gMDtcbiBcdGVsc2UgaWYgKGRpcC1cdTAwM2VkaV92ZXJzaW9uIFx1MDAzZT0gMylcbiBcdFx0ZGlwLVx1MDAzZWRpX3YzX3BhZCA9IDA7XG4rXHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSB8fCAhU19JU1JFRyhtb2RlKSlcbitcdFx0ZmxhZ3MyIFx1MDAyNj0gflhGU19ESUZMQUcyX1ZFUklUWTtcbiBcbiBcdGlmIChmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX01FVEFEQVRBKSB7XG4gXHRcdHhmc19mYWlsYWRkcl90XHRmYTtcbkBAIC0xNjE3LDYgKzE2MTksMTAgQEAgeHJlcF9kaW5vZGVfY29yZShcbiBcdGlmIChpZ2V0X2Vycm9yKVxuIFx0XHRyZXR1cm4gaWdldF9lcnJvcjtcbiBcbitcdGVycm9yID0geGNoa19pbm9kZV9zZXR1cF92ZXJpdHkoc2MpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4gXHRlcnJvciA9IHhjaGtfdHJhbnNfYWxsb2Moc2MsIDApO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG5AQCAtMjAzNSw2ICsyMDQxLDI3IEBAIHhyZXBfaW5vZGVfdW5saW5rZWQoXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLypcbisgKiBJZiB0aGlzIGZpbGUgaXMgYSBmc3Zlcml0eSBmaWxlLCB4Y2hrX3ByZXBhcmVfaXNjcnViIG9yIHhyZXBfZGlub2RlX2NvcmVcbisgKiBzaG91bGQgaGF2ZSBhY3RpdmF0ZWQgaXQuICBJZiBpdCdzIHN0aWxsIG5vdCBhY3RpdmUsIHRoZW4gdGhlcmUncyBzb21ldGhpbmdcbisgKiB3cm9uZyB3aXRoIHRoZSB2ZXJpdHkgZGVzY3JpcHRvciBhbmQgd2Ugc2hvdWxkIHR1cm4gaXQgb2ZmLlxuKyAqL1xuK1NUQVRJQyBpbnRcbit4cmVwX2lub2RlX3Zlcml0eShcbitcdHN0cnVjdCB4ZnNfc2NydWJcdCpzYylcbit7XG4rXHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlID0gVkZTX0koc2MtXHUwMDNlaXApO1xuK1xuK1x0aWYgKHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbihzYy1cdTAwM2VpcCkpIHtcbitcdFx0c2MtXHUwMDNlaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjY9IH5YRlNfRElGTEFHMl9WRVJJVFk7XG4rXHRcdGlub2RlX3NldF9mbGFncyhpbm9kZSwgMCwgU19WRVJJVFkpO1xuK1xuK1x0XHR4ZnNfdHJhbnNfbG9nX2lub2RlKHNjLVx1MDAzZXRwLCBzYy1cdTAwM2VpcCwgWEZTX0lMT0dfQ09SRSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyogUmVwYWlyIGFuIGlub2RlJ3MgZmllbGRzLiAqL1xuIGludFxuIHhyZXBfaW5vZGUoXG5AQCAtMjA4NCw2ICsyMTExLDE1IEBAIHhyZXBfaW5vZGUoXG4gXHRcdFx0cmV0dXJuIGVycm9yO1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIERpc2FibGUgZnN2ZXJpdHkgaWYgaXQgY2Fubm90IGJlIGFjdGl2YXRlZC4gIEFjdGl2YXRpb24gZmFpbHVyZVxuK1x0ICogcHJvaGliaXRzIHRoZSBmaWxlIGZyb20gYmVpbmcgb3BlbmVkLCBzbyB0aGVyZSBjYW5ub3QgYmUgYW5vdGhlclxuK1x0ICogcHJvZ3JhbSB3aXRoIGFuIG9wZW4gZmQgdG8gd2hhdCBpdCB0aGlua3MgaXMgYSB2ZXJpdHkgZmlsZS5cbitcdCAqL1xuK1x0ZXJyb3IgPSB4cmVwX2lub2RlX3Zlcml0eShzYyk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdHJldHVybiBlcnJvcjtcbitcbiBcdC8qIFJlY29ubmVjdCBpbmNvcmUgdW5saW5rZWQgbGlzdCAqL1xuIFx0ZXJyb3IgPSB4cmVwX2lub2RlX3VubGlua2VkKHNjKTtcbiBcdGlmIChlcnJvcilcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FvcHMuYyBiL2ZzL3hmcy94ZnNfYW9wcy5jXG5pbmRleCA1MTI5M2I2ZjMzMWYwYi4uMTM1YmU3MTFmOWE0MDkgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2FvcHMuY1xuKysrIGIvZnMveGZzL3hmc19hb3BzLmNcbkBAIC0yMiw3ICsyMiw5IEBAXG4gI2luY2x1ZGUgXCJ4ZnNfaWNhY2hlLmhcIlxuICNpbmNsdWRlIFwieGZzX3pvbmVfYWxsb2MuaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfcnRncm91cC5oXCJcbisjaW5jbHVkZSBcInhmc19mc3Zlcml0eS5oXCJcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaW8taW50ZWdyaXR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4gXG4gc3RydWN0IHhmc193cml0ZXBhZ2VfY3R4IHtcbiBcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IGN0eDtcbkBAIC0xODEsNiArMTgzLDQ5IEBAIHhmc19lbmRfaW9lbmRfd3JpdGUoXG4gXHRtZW1hbGxvY19ub2ZzX3Jlc3RvcmUobm9mc19mbGFnKTtcbiB9XG4gXG4rLypcbisgKiBQcmlvcml0aXplIGZzdmVyaXR5IG1ldGFkYXRhIG92ZXIgZmlsZSBkYXRhLiBTb3J0IGJhc2VkIG9uIGlfc2l6ZSBhcyBmc3Zlcml0eVxuKyAqIG1ldGFkYXRhIGlzIGFsd2F5cyBiZXlvbmQgRU9GXG4rICovXG4rc3RhdGljIGludFxuK3hmc19yZWFkX2lvZW5kX2NvbXBhcmUoXG4rXHR2b2lkXHRcdFx0KnByaXYsXG4rXHRjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkXHQqYSxcbitcdGNvbnN0IHN0cnVjdCBsaXN0X2hlYWRcdCpiKVxuK3tcbitcdHN0cnVjdCBpb21hcF9pb2VuZFx0KmlhID0gY29udGFpbmVyX29mKGEsIHN0cnVjdCBpb21hcF9pb2VuZCxcbitcdFx0XHRpb19saXN0KTtcbitcdHN0cnVjdCBpb21hcF9pb2VuZFx0KmliID0gY29udGFpbmVyX29mKGIsIHN0cnVjdCBpb21hcF9pb2VuZCxcbitcdFx0XHRpb19saXN0KTtcbitcdGxvZmZfdFx0XHRcdGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlhLVx1MDAzZWlvX2lub2RlKTtcbitcbitcdGlmICghSVNfVkVSSVRZKGlhLVx1MDAzZWlvX2lub2RlKSlcbitcdFx0cmV0dXJuIGlvbWFwX2lvZW5kX2NvbXBhcmUocHJpdiwgYSwgYik7XG4rXG4rXHRpZiAoaWEtXHUwMDNlaW9fb2Zmc2V0IFx1MDAzZSBpX3NpemUgXHUwMDI2XHUwMDI2IGliLVx1MDAzZWlvX29mZnNldCBcdTAwM2MgaV9zaXplKVxuK1x0XHRyZXR1cm4gLTE7XG4rXHRpZiAoaWEtXHUwMDNlaW9fb2Zmc2V0IFx1MDAzYyBpX3NpemUgXHUwMDI2XHUwMDI2IGliLVx1MDAzZWlvX29mZnNldCBcdTAwM2UgaV9zaXplKVxuK1x0XHRyZXR1cm4gMTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIElPIHJlYWQgY29tcGxldGlvbi5cbisgKi9cbitzdGF0aWMgdm9pZFxuK3hmc19lbmRfaW9lbmRfcmVhZChcbitcdHN0cnVjdCBpb21hcF9pb2VuZFx0KmlvZW5kKVxuK3tcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlvZW5kLVx1MDAzZWlvX2lub2RlKTtcbitcbitcdGlmICghaW9lbmQtXHUwMDNlaW9fYmlvLmJpX3N0YXR1cyBcdTAwMjZcdTAwMjZcbitcdFx0XHR4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGlwLCBpb2VuZC1cdTAwM2Vpb19vZmZzZXQpKVxuK1x0XHRmc3Zlcml0eV92ZXJpZnlfYmlvKGlvZW5kLVx1MDAzZWlvX3ZpLFxuK1x0XHRcdFx0ICAgIFx1MDAyNmlvZW5kLVx1MDAzZWlvX2Jpbyk7XG4rXHRpb21hcF9maW5pc2hfaW9lbmRzKGlvZW5kLFxuK1x0XHRibGtfc3RhdHVzX3RvX2Vycm5vKGlvZW5kLVx1MDAzZWlvX2Jpby5iaV9zdGF0dXMpKTtcbit9XG4rXG4gLypcbiAgKiBGaW5pc2ggYWxsIHBlbmRpbmcgSU8gY29tcGxldGlvbnMgdGhhdCByZXF1aXJlIHRyYW5zYWN0aW9uYWwgbW9kaWZpY2F0aW9ucy5cbiAgKlxuQEAgLTIwOSwxNCArMjU0LDE3IEBAIHhmc19lbmRfaW8oXG4gXHRsaXN0X3JlcGxhY2VfaW5pdChcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX2xpc3QsIFx1MDAyNnRtcCk7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfbG9jaywgZmxhZ3MpO1xuIFxuLVx0aW9tYXBfc29ydF9pb2VuZHMoXHUwMDI2dG1wKTtcbitcdGlvZW5kID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKFx1MDAyNnRtcCwgc3RydWN0IGlvbWFwX2lvZW5kLCBpb19saXN0KTtcbitcdGlmIChiaW9fb3AoXHUwMDI2aW9lbmQtXHUwMDNlaW9fYmlvKSA9PSBSRVFfT1BfUkVBRClcbitcdFx0aW9tYXBfc29ydF9pb2VuZHMoXHUwMDI2dG1wLCB4ZnNfcmVhZF9pb2VuZF9jb21wYXJlKTtcbitcdGVsc2VcbitcdFx0aW9tYXBfc29ydF9pb2VuZHMoXHUwMDI2dG1wLCBpb21hcF9pb2VuZF9jb21wYXJlKTtcbiBcdHdoaWxlICgoaW9lbmQgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoXHUwMDI2dG1wLCBzdHJ1Y3QgaW9tYXBfaW9lbmQsXG4gXHRcdFx0aW9fbGlzdCkpKSB7XG4gXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW9lbmQtXHUwMDNlaW9fbGlzdCk7XG4gXHRcdGlvbWFwX2lvZW5kX3RyeV9tZXJnZShpb2VuZCwgXHUwMDI2dG1wKTtcbiBcdFx0aWYgKGJpb19vcChcdTAwMjZpb2VuZC1cdTAwM2Vpb19iaW8pID09IFJFUV9PUF9SRUFEKVxuLVx0XHRcdGlvbWFwX2ZpbmlzaF9pb2VuZHMoaW9lbmQsXG4tXHRcdFx0XHRibGtfc3RhdHVzX3RvX2Vycm5vKGlvZW5kLVx1MDAzZWlvX2Jpby5iaV9zdGF0dXMpKTtcbitcdFx0XHR4ZnNfZW5kX2lvZW5kX3JlYWQoaW9lbmQpO1xuIFx0XHRlbHNlXG4gXHRcdFx0eGZzX2VuZF9pb2VuZF93cml0ZShpb2VuZCk7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuQEAgLTI0Miw5ICsyOTAsMTQgQEAgeGZzX2VuZF9iaW8oXG4gXHR9XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX2xvY2ssIGZsYWdzKTtcbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfbGlzdCkpXG4tXHRcdFdBUk5fT05fT05DRSghcXVldWVfd29yayhtcC1cdTAwM2VtX3Vud3JpdHRlbl93b3JrcXVldWUsXG4rXHRpZiAobGlzdF9lbXB0eShcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX2xpc3QpKSB7XG4rXHRcdGlmIChJU19FTkFCTEVEKENPTkZJR19GU19WRVJJVFkpIFx1MDAyNlx1MDAyNiBpb2VuZC1cdTAwM2Vpb192aSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGlvZW5kLVx1MDAzZWlvX29mZnNldCBcdTAwM2MgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpXG4rXHRcdFx0ZnN2ZXJpdHlfZW5xdWV1ZV92ZXJpZnlfd29yayhcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX3dvcmspO1xuK1x0XHRlbHNlXG4rXHRcdFx0V0FSTl9PTl9PTkNFKCFxdWV1ZV93b3JrKG1wLVx1MDAzZW1fdW53cml0dGVuX3dvcmtxdWV1ZSxcbiBcdFx0XHRcdFx0IFx1MDAyNmlwLVx1MDAzZWlfaW9lbmRfd29yaykpO1xuK1x0fVxuIFx0bGlzdF9hZGRfdGFpbChcdTAwMjZpb2VuZC1cdTAwM2Vpb19saXN0LCBcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX2xpc3QpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZpcC1cdTAwM2VpX2lvZW5kX2xvY2ssIGZsYWdzKTtcbiB9XG5AQCAtMzUwLDEyICs0MDMsMTYgQEAgeGZzX21hcF9ibG9ja3MoXG4gXHRpbnRcdFx0XHRyZXRyaWVzID0gMDtcbiBcdGludFx0XHRcdGVycm9yID0gMDtcbiBcdHVuc2lnbmVkIGludFx0XHQqc2VxO1xuK1x0dW5zaWduZWQgaW50XHRcdGlvbWFwX2ZsYWdzID0gMDtcbiBcbiBcdGlmICh4ZnNfaXNfc2h1dGRvd24obXApKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdFhGU19FUlJPUlRBR19ERUxBWShtcCwgWEZTX0VSUlRBR19XQl9ERUxBWV9NUyk7XG4gXG4rXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXG4rXHRcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XG4rXG4gXHQvKlxuIFx0ICogQ09XIGZvcmsgYmxvY2tzIGNhbiBvdmVybGFwIGRhdGEgZm9yayBibG9ja3MgZXZlbiBpZiB0aGUgYmxvY2tzXG4gXHQgKiBhcmVuJ3Qgc2hhcmVkLiAgQ09XIEkvTyBhbHdheXMgdGFrZXMgcHJlY2VkZW50LCBzbyB3ZSBtdXN0IGFsd2F5c1xuQEAgLTQ0Myw3ICs1MDAsOCBAQCB4ZnNfbWFwX2Jsb2NrcyhcbiBcdCAgICBpc251bGxzdGFydGJsb2NrKGltYXAuYnJfc3RhcnRibG9jaykpXG4gXHRcdGdvdG8gYWxsb2NhdGVfYmxvY2tzO1xuIFxuLVx0eGZzX2JtYnRfdG9faW9tYXAoaXAsIFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgXHUwMDI2aW1hcCwgMCwgMCwgWEZTX1dQQyh3cGMpLVx1MDAzZWRhdGFfc2VxKTtcbitcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIFx1MDAyNmltYXAsIDAsIGlvbWFwX2ZsYWdzLFxuK1x0XHRcdCAgWEZTX1dQQyh3cGMpLVx1MDAzZWRhdGFfc2VxKTtcbiBcdHRyYWNlX3hmc19tYXBfYmxvY2tzX2ZvdW5kKGlwLCBvZmZzZXQsIGNvdW50LCB3aGljaGZvcmssIFx1MDAyNmltYXApO1xuIFx0cmV0dXJuIDA7XG4gYWxsb2NhdGVfYmxvY2tzOlxuQEAgLTU5MCwxMiArNjQ4LDE2IEBAIHhmc196b25lZF9tYXBfYmxvY2tzKFxuIFx0eGZzX2ZpbGJsa3NfdFx0XHRjb3VudF9mc2I7XG4gXHRzdHJ1Y3QgeGZzX2JtYnRfaXJlY1x0aW1hcCwgZGVsO1xuIFx0c3RydWN0IHhmc19pZXh0X2N1cnNvclx0aWN1cjtcbitcdHUxNlx0XHRcdGlvbWFwX2ZsYWdzID0gMDtcbiBcbiBcdGlmICh4ZnNfaXNfc2h1dGRvd24obXApKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcbiBcdFhGU19FUlJPUlRBR19ERUxBWShtcCwgWEZTX0VSUlRBR19XQl9ERUxBWV9NUyk7XG4gXG4rXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXG4rXHRcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XG4rXG4gXHQvKlxuIFx0ICogQWxsIGRpcnR5IGRhdGEgbXVzdCBiZSBjb3ZlcmVkIGJ5IGRlbGFsbG9jIGV4dGVudHMuICBCdXQgdHJ1bmNhdGUgY2FuXG4gXHQgKiByZW1vdmUgZGVsYWxsb2MgZXh0ZW50cyB1bmRlcm5lYXRoIHVzIG9yIHJlZHVjZSB0aGVpciBzaXplLlxuQEAgLTYxOSw3ICs2ODEsNyBAQCB4ZnNfem9uZWRfbWFwX2Jsb2NrcyhcbiBcdFx0aW1hcC5icl9zdGFydGJsb2NrID0gSE9MRVNUQVJUQkxPQ0s7XG4gXHRcdGltYXAuYnJfc3RhdGUgPSBYRlNfRVhUX05PUk07XG4gXHRcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4tXHRcdHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIFx1MDAyNmltYXAsIDAsIDAsIDApO1xuK1x0XHR4ZnNfYm1idF90b19pb21hcChpcCwgXHUwMDI2d3BjLVx1MDAzZWlvbWFwLCBcdTAwMjZpbWFwLCAwLCBpb21hcF9mbGFncywgMCk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFx0ZW5kX2ZzYiA9IG1pbihlbmRfZnNiLCBpbWFwLmJyX3N0YXJ0b2ZmICsgaW1hcC5icl9ibG9ja2NvdW50KTtcbkBAIC02MzIsMTEgKzY5NCwxMCBAQCB4ZnNfem9uZWRfbWFwX2Jsb2NrcyhcbiBcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4gXG4gXHR3cGMtXHUwMDNlaW9tYXAudHlwZSA9IElPTUFQX01BUFBFRDtcbi1cdHdwYy1cdTAwM2Vpb21hcC5mbGFncyA9IElPTUFQX0ZfRElSVFk7XG4gXHR3cGMtXHUwMDNlaW9tYXAuYmRldiA9IG1wLVx1MDAzZW1fcnRkZXZfdGFyZ3AtXHUwMDNlYnRfYmRldjtcbiBcdHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgPSBvZmZzZXQ7XG4gXHR3cGMtXHUwMDNlaW9tYXAubGVuZ3RoID0gWEZTX0ZTQl9UT19CKG1wLCBjb3VudF9mc2IpO1xuLVx0d3BjLVx1MDAzZWlvbWFwLmZsYWdzID0gSU9NQVBfRl9BTk9OX1dSSVRFO1xuK1x0d3BjLVx1MDAzZWlvbWFwLmZsYWdzID0gaW9tYXBfZmxhZ3MgfCBJT01BUF9GX0FOT05fV1JJVEU7XG4gXG4gXHR0cmFjZV94ZnNfem9uZWRfbWFwX2Jsb2NrcyhpcCwgb2Zmc2V0LCB3cGMtXHUwMDNlaW9tYXAubGVuZ3RoKTtcbiBcdHJldHVybiAwO1xuQEAgLTY4NCw2ICs3NDUsMjIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIHhmc196b25lZF93cml0ZWJhY2tfb3BzID0ge1xuIFx0LndyaXRlYmFja19zdWJtaXRcdD0geGZzX3pvbmVkX3dyaXRlYmFja19zdWJtaXQsXG4gfTtcbiBcbitzdGF0aWMgaW50XG4reGZzX2lvbWFwX3dyaXRlcGFnZXMoXG4rXHRzdHJ1Y3QgeGZzX2lub2RlXHRcdCppcCxcbitcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4XHQqY3R4KVxuK3tcbitcdC8qXG4rXHQgKiBXcml0ZWJhY2sgZG9lcyBub3Qgd29yayBmb3IgZm9saW9zIHBhc3QgRU9GLCBsZXQgaXQga25vdyB0aGF0XG4rXHQgKiBJL08gaGFwcGVucyBmb3IgZnN2ZXJpdHkgbWV0YWRhdGEgYW5kIHRoaXMgcmVzdHJpY3Rpb24gbmVlZFxuK1x0ICogdG8gYmUgc2tpcHBlZFxuK1x0ICovXG4rXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXG4rXHRcdGN0eC1cdTAwM2Vpb21hcC5mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xuK1xuK1x0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoY3R4KTtcbit9XG4rXG4gU1RBVElDIGludFxuIHhmc192bV93cml0ZXBhZ2VzKFxuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2VcdCptYXBwaW5nLFxuQEAgLTcwMyw3ICs3ODAsNyBAQCB4ZnNfdm1fd3JpdGVwYWdlcyhcbiBcdFx0fTtcbiBcdFx0aW50XHRcdFx0XHRlcnJvcjtcbiBcbi1cdFx0ZXJyb3IgPSBpb21hcF93cml0ZXBhZ2VzKFx1MDAyNnhjLmN0eCk7XG4rXHRcdGVycm9yID0geGZzX2lvbWFwX3dyaXRlcGFnZXMoaXAsIFx1MDAyNnhjLmN0eCk7XG4gXHRcdGlmICh4Yy5vcGVuX3pvbmUpXG4gXHRcdFx0eGZzX29wZW5fem9uZV9wdXQoeGMub3Blbl96b25lKTtcbiBcdFx0cmV0dXJuIGVycm9yO1xuQEAgLTcxNiw3ICs3OTMsNyBAQCB4ZnNfdm1fd3JpdGVwYWdlcyhcbiBcdFx0XHR9LFxuIFx0XHR9O1xuIFxuLVx0XHRyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcyhcdTAwMjZ3cGMuY3R4KTtcbitcdFx0cmV0dXJuIHhmc19pb21hcF93cml0ZXBhZ2VzKGlwLCBcdTAwMjZ3cGMuY3R4KTtcbiBcdH1cbiB9XG4gXG5AQCAtNzYxLDkgKzgzOCwxMiBAQCB4ZnNfYmlvX3N1Ym1pdF9yZWFkKFxuIFx0c3RydWN0IGlvbWFwX3JlYWRfZm9saW9fY3R4XHQqY3R4KVxuIHtcbiBcdHN0cnVjdCBiaW9cdFx0XHQqYmlvID0gY3R4LVx1MDAzZXJlYWRfY3R4O1xuK1x0c3RydWN0IGlvbWFwX2lvZW5kXHRcdCppb2VuZDtcbiBcbiBcdC8qIGRlZmVyIHJlYWQgY29tcGxldGlvbnMgdG8gdGhlIGlvZW5kIHdvcmtxdWV1ZSAqL1xuLVx0aW9tYXBfaW5pdF9pb2VuZChpdGVyLVx1MDAzZWlub2RlLCBiaW8sIGN0eC1cdTAwM2VyZWFkX2N0eF9maWxlX29mZnNldCwgMCk7XG4rXHRpb2VuZCA9IGlvbWFwX2luaXRfaW9lbmQoaXRlci1cdTAwM2Vpbm9kZSwgYmlvLCBjdHgtXHUwMDNlcmVhZF9jdHhfZmlsZV9vZmZzZXQsXG4rXHRcdFx0MCk7XG4rXHRpb2VuZC1cdTAwM2Vpb192aSA9IGN0eC1cdTAwM2V2aTtcbiBcdGlvbWFwX2Jpb19zdWJtaXRfcmVhZF9lbmRpbyhpdGVyLCBjdHgsIHhmc19lbmRfYmlvKTtcbiB9XG4gXG5AQCAtNzc1LDExICs4NTUsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb21hcF9yZWFkX29wcyB4ZnNfaW9tYXBfcmVhZF9vcHMgPSB7XG4gXG4gc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgaW9tYXBfcmVhZF9vcHMgKlxuIHhmc19nZXRfaW9tYXBfcmVhZF9vcHMoXG4tXHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZVx0Km1hcHBpbmcpXG4rXHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZVx0Km1hcHBpbmcsXG4rXHRsb2ZmX3RcdFx0XHRcdHBvc2l0aW9uKVxuIHtcbiBcdHN0cnVjdCB4ZnNfaW5vZGVcdFx0KmlwID0gWEZTX0kobWFwcGluZy1cdTAwM2Vob3N0KTtcbiBcbi1cdGlmIChiZGV2X2hhc19pbnRlZ3JpdHlfY3N1bSh4ZnNfaW5vZGVfYnVmdGFyZyhpcCktXHUwMDNlYnRfYmRldikpXG4rXHRpZiAoYmRldl9oYXNfaW50ZWdyaXR5X2NzdW0oeGZzX2lub2RlX2J1ZnRhcmcoaXApLVx1MDAzZWJ0X2JkZXYpIHx8XG4rXHRcdFx0eGZzX2ZzdmVyaXR5X2lzX2ZpbGVfZGF0YShpcCwgcG9zaXRpb24pKVxuIFx0XHRyZXR1cm4gXHUwMDI2eGZzX2lvbWFwX3JlYWRfb3BzO1xuIFx0cmV0dXJuIFx1MDAyNmlvbWFwX2Jpb19yZWFkX29wcztcbiB9XG5AQCAtNzkxLDcgKzg3Myw3IEBAIHhmc192bV9yZWFkX2ZvbGlvKFxuIHtcbiBcdHN0cnVjdCBpb21hcF9yZWFkX2ZvbGlvX2N0eFx0Y3R4ID0geyAuY3VyX2ZvbGlvID0gZm9saW8gfTtcbiBcbi1cdGN0eC5vcHMgPSB4ZnNfZ2V0X2lvbWFwX3JlYWRfb3BzKGZvbGlvLVx1MDAzZW1hcHBpbmcpO1xuK1x0Y3R4Lm9wcyA9IHhmc19nZXRfaW9tYXBfcmVhZF9vcHMoZm9saW8tXHUwMDNlbWFwcGluZywgZm9saW9fcG9zKGZvbGlvKSk7XG4gXHRpb21hcF9yZWFkX2ZvbGlvKFx1MDAyNnhmc19yZWFkX2lvbWFwX29wcywgXHUwMDI2Y3R4LCBOVUxMKTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC04MDIsNyArODg0LDcgQEAgeGZzX3ZtX3JlYWRhaGVhZChcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfcmVhZF9mb2xpb19jdHhcdGN0eCA9IHsgLnJhYyA9IHJhYyB9O1xuIFxuLVx0Y3R4Lm9wcyA9IHhmc19nZXRfaW9tYXBfcmVhZF9vcHMocmFjLVx1MDAzZW1hcHBpbmcpLFxuK1x0Y3R4Lm9wcyA9IHhmc19nZXRfaW9tYXBfcmVhZF9vcHMocmFjLVx1MDAzZW1hcHBpbmcsIHJlYWRhaGVhZF9wb3MocmFjKSk7XG4gXHRpb21hcF9yZWFkYWhlYWQoXHUwMDI2eGZzX3JlYWRfaW9tYXBfb3BzLCBcdTAwMjZjdHgsIE5VTEwpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXBfdXRpbC5jIGIvZnMveGZzL3hmc19ibWFwX3V0aWwuY1xuaW5kZXggYzg4YjlhZGU3Mzg5ZGQuLmIxODc1ZDZlNzQ1Mjk2IDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19ibWFwX3V0aWwuY1xuKysrIGIvZnMveGZzL3hmc19ibWFwX3V0aWwuY1xuQEAgLTMxLDYgKzMxLDcgQEBcbiAjaW5jbHVkZSBcInhmc19ydGJpdG1hcC5oXCJcbiAjaW5jbHVkZSBcInhmc19ydGdyb3VwLmhcIlxuICNpbmNsdWRlIFwieGZzX3pvbmVfYWxsb2MuaFwiXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuIC8qIEtlcm5lbCBvbmx5IEJNQVAgcmVsYXRlZCBkZWZpbml0aW9ucyBhbmQgZnVuY3Rpb25zICovXG4gXG5AQCAtNTUzLDYgKzU1NCwxNCBAQCB4ZnNfY2FuX2ZyZWVfZW9mYmxvY2tzKFxuIFx0aWYgKGxhc3RfZnNiIFx1MDAzYz0gZW5kX2ZzYilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuK1x0LypcbitcdCAqIE5vdGhpbmcgdG8gY2xlYW4gb24gZnN2ZXJpdHkgaW5vZGVzIGFzIHRoZXkgZG9uJ3QgdXNlIHByZWFsbG9jIGFuZFxuK1x0ICogdGhlcmUgbm8gZGVsYWxsb2MgYXMgb25seSB3cml0dGVuIGRhdGEgaXMgZnN2ZXJpdHkgbWV0YWRhdGFcbitcdCAqL1xuK1x0aWYgKElTX1ZFUklUWShWRlNfSShpcCkpIHx8XG4rXHQgICAgeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdC8qXG4gXHQgKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBwb3N0LUVPRiBleHRlbnQgdG8gZnJlZS4gIElmIHRoZXJlIGFyZSBhbnlcbiBcdCAqIGRlbGFsbG9jIGJsb2NrcyBhdHRhY2hlZCB0byB0aGUgaW5vZGUgKGRhdGEgZm9yayBkZWxhbGxvY1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZmlsZS5jIGIvZnMveGZzL3hmc19maWxlLmNcbmluZGV4IDg0NWE5N2M5YjA2MzBiLi5jYmExOTRkNjc4ZmM3NyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfZmlsZS5jXG4rKysgYi9mcy94ZnMveGZzX2ZpbGUuY1xuQEAgLTM3LDYgKzM3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mYWR2aXNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb3VudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZWxvY2suaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wcztcbiBcbkBAIC0yNDUsNiArMjQ2LDI1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyB4ZnNfZGlvX3JlYWRfYm91bmNlX29wcyA9IHtcbiBcdC5iaW9fc2V0XHQ9IFx1MDAyNmlvbWFwX2lvZW5kX2Jpb3NldCxcbiB9O1xuIFxuK1NUQVRJQyBzc2l6ZV90XG4reGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChcbitcdHN0cnVjdCBraW9jYlx0XHQqaW9jYixcbitcdHN0cnVjdCBpb3ZfaXRlclx0XHQqdG8pXG4re1xuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApKTtcbitcdHNzaXplX3RcdFx0XHRyZXQ7XG4rXG4rXHR0cmFjZV94ZnNfZmlsZV9idWZmZXJlZF9yZWFkKGlvY2IsIHRvKTtcbitcbitcdHJldCA9IHhmc19pbG9ja19pb2NiKGlvY2IsIFhGU19JT0xPQ0tfU0hBUkVEKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKGlvY2IsIHRvKTtcbitcdHhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBTVEFUSUMgc3NpemVfdFxuIHhmc19maWxlX2Rpb19yZWFkKFxuIFx0c3RydWN0IGtpb2NiXHRcdCppb2NiLFxuQEAgLTI2NSw2ICsyODUsMTYgQEAgeGZzX2ZpbGVfZGlvX3JlYWQoXG4gXHRyZXQgPSB4ZnNfaWxvY2tfaW9jYihpb2NiLCBYRlNfSU9MT0NLX1NIQVJFRCk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuK1x0LypcbitcdCAqIFJlLWNoZWNrIHZlcml0eSBzdGF0dXMgYWZ0ZXIgYWNxdWlyaW5nIGxvY2suIFRoaXMgcHJldmVudHMgVE9DVE9VIGluXG4rXHQgKiB4ZnNfZmlsZV9yZWFkX2l0ZXIoKSB3aGlsZSBmYWxsaW5nIGJhY2sgZnJvbSBESU8gdG8gYnVmZmVyZWQgSS9PIGFzXG4rXHQgKiBub3cgd2UgYXJlIGhvbGRpbmcgYSBsb2NrXG4rXHQgKi9cbitcdGlmIChmc3Zlcml0eV9hY3RpdmUoVkZTX0koaXApKSkge1xuK1x0XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpO1xuK1x0XHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNj0gfklPQ0JfRElSRUNUO1xuK1x0XHRyZXR1cm4geGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7XG4rXHR9XG4gXHRpZiAobWFwcGluZ19zdGFibGVfd3JpdGVzKGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmcpKSB7XG4gXHRcdGRpb19vcHMgPSBcdTAwMjZ4ZnNfZGlvX3JlYWRfYm91bmNlX29wcztcbiBcdFx0ZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19CT1VOQ0U7XG5AQCAtMjgxLDcgKzMxMSw4IEBAIHhmc19maWxlX2RheF9yZWFkKFxuIFx0c3RydWN0IGtpb2NiXHRcdCppb2NiLFxuIFx0c3RydWN0IGlvdl9pdGVyXHRcdCp0bylcbiB7XG4tXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nLVx1MDAzZWhvc3QpO1xuK1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlub2RlKTtcbiBcdHNzaXplX3RcdFx0XHRyZXQgPSAwO1xuIFxuIFx0dHJhY2VfeGZzX2ZpbGVfZGF4X3JlYWQoaW9jYiwgdG8pO1xuQEAgLTI5OSwyNSArMzMwLDYgQEAgeGZzX2ZpbGVfZGF4X3JlYWQoXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1TVEFUSUMgc3NpemVfdFxuLXhmc19maWxlX2J1ZmZlcmVkX3JlYWQoXG4tXHRzdHJ1Y3Qga2lvY2JcdFx0KmlvY2IsXG4tXHRzdHJ1Y3QgaW92X2l0ZXJcdFx0KnRvKVxuLXtcbi1cdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKSk7XG4tXHRzc2l6ZV90XHRcdFx0cmV0O1xuLVxuLVx0dHJhY2VfeGZzX2ZpbGVfYnVmZmVyZWRfcmVhZChpb2NiLCB0byk7XG4tXG4tXHRyZXQgPSB4ZnNfaWxvY2tfaW9jYihpb2NiLCBYRlNfSU9MT0NLX1NIQVJFRCk7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuLVx0cmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCB0byk7XG4tXHR4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4gU1RBVElDIHNzaXplX3RcbiB4ZnNfZmlsZV9yZWFkX2l0ZXIoXG4gXHRzdHJ1Y3Qga2lvY2JcdFx0KmlvY2IsXG5AQCAtMzMyLDYgKzM0NCwxNCBAQCB4ZnNfZmlsZV9yZWFkX2l0ZXIoXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4rXHQvKlxuK1x0ICogSW4gY2FzZSBmcy12ZXJpdHkgaXMgZW5hYmxlZCwgd2UgYWxzbyBmYWxsYmFjayB0byB0aGUgYnVmZmVyZWQgcmVhZFxuK1x0ICogZnJvbSB0aGUgZGlyZWN0IHJlYWQgcGF0aC4gVGhlcmVmb3JlLCBJT0NCX0RJUkVDVCBpcyBzZXQgYW5kIG5lZWQgdG9cbitcdCAqIGJlIGNsZWFyZWQgKHNlZSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKCkpXG4rXHQgKi9cbitcdGlmIChmc3Zlcml0eV9hY3RpdmUoaW5vZGUpKVxuK1x0XHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNj0gfklPQ0JfRElSRUNUO1xuK1xuIFx0aWYgKElTX0RBWChpbm9kZSkpXG4gXHRcdHJldCA9IHhmc19maWxlX2RheF9yZWFkKGlvY2IsIHRvKTtcbiBcdGVsc2UgaWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKVxuQEAgLTE3MDAsMTEgKzE3MjAsMTggQEAgeGZzX2ZpbGVfb3BlbihcbiBcdHN0cnVjdCBpbm9kZVx0Kmlub2RlLFxuIFx0c3RydWN0IGZpbGVcdCpmaWxlKVxuIHtcbitcdGludFx0XHRlcnJvcjtcbitcbiBcdGlmICh4ZnNfaXNfc2h1dGRvd24oWEZTX00oaW5vZGUtXHUwMDNlaV9zYikpKVxuIFx0XHRyZXR1cm4gLUVJTztcbiBcdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX05PV0FJVCB8IEZNT0RFX0NBTl9PRElSRUNUO1xuIFx0aWYgKHhmc19nZXRfYXRvbWljX3dyaXRlX21pbihYRlNfSShpbm9kZSkpIFx1MDAzZSAwKVxuIFx0XHRmaWxlLVx1MDAzZWZfbW9kZSB8PSBGTU9ERV9DQU5fQVRPTUlDX1dSSVRFO1xuK1xuK1x0ZXJyb3IgPSBmc3Zlcml0eV9maWxlX29wZW4oaW5vZGUsIGZpbGUpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4gXHRyZXR1cm4gZ2VuZXJpY19maWxlX29wZW4oaW5vZGUsIGZpbGUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZzdmVyaXR5LmMgYi9mcy94ZnMveGZzX2ZzdmVyaXR5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNDYyMjIzYjQ2MTliMDZcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuY1xuQEAgLTAsMCArMSw0ODAgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKy8qXG4rICogQ29weXJpZ2h0IChDKSAyMDI2IFJlZCBIYXQsIEluYy5cbisgKi9cbisjaW5jbHVkZSBcInhmc19wbGF0Zm9ybS5oXCJcbisjaW5jbHVkZSBcInhmc19mb3JtYXQuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfc2hhcmVkLmhcIlxuKyNpbmNsdWRlIFwieGZzX3RyYW5zX3Jlc3YuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfbW91bnQuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfZGFfZm9ybWF0LmhcIlxuKyNpbmNsdWRlIFwieGZzX2RhX2J0cmVlLmhcIlxuKyNpbmNsdWRlIFwieGZzX2lub2RlLmhcIlxuKyNpbmNsdWRlIFwieGZzX2xvZ19mb3JtYXQuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfdHJhbnMuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfZGVmZXIuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfdHJhY2UuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfcXVvdGEuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfZnN2ZXJpdHkuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfaW9tYXAuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfZXJyb3IuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfaGVhbHRoLmhcIlxuKyNpbmNsdWRlIFwieGZzX2JtYXAuaFwiXG4rI2luY2x1ZGUgXCJ4ZnNfYm1hcF91dGlsLmhcIlxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4rXG4rbG9mZl90XG4reGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChcbitcdGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGVcdCppcClcbit7XG4rXHRyZXR1cm4gcm91bmRfdXAoaV9zaXplX3JlYWQoVkZTX0lDKGlwKSksIFhGU19GU1ZFUklUWV9TVEFSVF9BTElHTik7XG4rfVxuK1xuK2Jvb2xcbit4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKFxuK1x0Y29uc3Qgc3RydWN0IHhmc19pbm9kZVx0KmlwLFxuK1x0bG9mZl90XHRcdFx0b2Zmc2V0KVxuK3tcbitcdHJldHVybiBmc3Zlcml0eV9hY3RpdmUoVkZTX0lDKGlwKSkgXHUwMDI2XHUwMDI2XG4rXHRcdFx0b2Zmc2V0IFx1MDAzYyB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKTtcbit9XG4rXG4rLypcbisgKiBSZXRyaWV2ZSB0aGUgdmVyaXR5IGRlc2NyaXB0b3IuXG4rICovXG4rc3RhdGljIGludFxuK3hmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvcihcbitcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUsXG4rXHR2b2lkXHRcdFx0KmJ1ZixcbitcdHNpemVfdFx0XHRcdGJ1Zl9zaXplKVxuK3tcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcCA9IFhGU19JKGlub2RlKTtcbitcdHN0cnVjdCB4ZnNfbW91bnRcdCptcCA9IGlwLVx1MDAzZWlfbW91bnQ7XG4rXHRfX2JlMzJcdFx0XHRkX2Rlc2Nfc2l6ZTtcbitcdHUzMlx0XHRcdGRlc2Nfc2l6ZTtcbitcdHU2NFx0XHRcdGRlc2Nfc2l6ZV9wb3M7XG4rXHRpbnRcdFx0XHRlcnJvcjtcbitcdHU2NFx0XHRcdGRlc2NfcG9zO1xuK1x0c3RydWN0IHhmc19ibWJ0X2lyZWNcdHJlYztcbitcdGludFx0XHRcdGlzX2VtcHR5O1xuK1x0dWludDMyX3RcdFx0YmxvY2tzaXplID0gaV9ibG9ja3NpemUoVkZTX0koaXApKTtcbitcdHhmc19maWxlb2ZmX3RcdFx0bGFzdF9ibG9ja19vZmZzZXQ7XG4rXG4rXHRBU1NFUlQoaW5vZGUtXHUwMDNlaV9mbGFncyBcdTAwMjYgU19WRVJJVFkpO1xuK1x0eGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTtcbitcdGVycm9yID0geGZzX2JtYXBfbGFzdF9leHRlbnQoTlVMTCwgaXAsIFhGU19EQVRBX0ZPUkssIFx1MDAyNnJlYywgXHUwMDI2aXNfZW1wdHkpO1xuK1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRpZiAoaXNfZW1wdHkpXG4rXHRcdHJldHVybiAtRU5PREFUQTtcbitcbitcdGxhc3RfYmxvY2tfb2Zmc2V0ID1cbitcdFx0WEZTX0ZTQl9UT19CKG1wLCByZWMuYnJfc3RhcnRvZmYgKyByZWMuYnJfYmxvY2tjb3VudCk7XG4rXHRpZiAobGFzdF9ibG9ja19vZmZzZXQgXHUwMDNjPSB4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSlcbitcdFx0cmV0dXJuIC1FTk9EQVRBO1xuK1xuK1x0ZGVzY19zaXplX3BvcyA9IGxhc3RfYmxvY2tfb2Zmc2V0IC0gc2l6ZW9mKF9fYmUzMik7XG4rXHRlcnJvciA9IGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkKGlub2RlLCAoY2hhciAqKVx1MDAyNmRfZGVzY19zaXplLFxuK1x0XHRcdHNpemVvZihkX2Rlc2Nfc2l6ZSksIGRlc2Nfc2l6ZV9wb3MpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHRkZXNjX3NpemUgPSBiZTMyX3RvX2NwdShkX2Rlc2Nfc2l6ZSk7XG4rXHRpZiAoWEZTX0lTX0NPUlJVUFQobXAsIGRlc2Nfc2l6ZSBcdTAwM2UgRlNfVkVSSVRZX01BWF9ERVNDUklQVE9SX1NJWkUpKSB7XG4rXHRcdHhmc19pbm9kZV9tYXJrX3NpY2soWEZTX0koaW5vZGUpLCBYRlNfU0lDS19JTk9fRlNWRVJJVFkpO1xuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdGlmIChYRlNfSVNfQ09SUlVQVChtcCwgZGVzY19zaXplIFx1MDAzZSBkZXNjX3NpemVfcG9zKSkge1xuK1x0XHR4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTtcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXHR9XG4rXG4rXHRpZiAoIWJ1Zl9zaXplKVxuK1x0XHRyZXR1cm4gZGVzY19zaXplO1xuK1xuK1x0aWYgKFhGU19JU19DT1JSVVBUKG1wLCBkZXNjX3NpemUgXHUwMDNlIGJ1Zl9zaXplKSkge1xuK1x0XHR4ZnNfaW5vZGVfbWFya19zaWNrKFhGU19JKGlub2RlKSwgWEZTX1NJQ0tfSU5PX0ZTVkVSSVRZKTtcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXHR9XG4rXG4rXHRkZXNjX3BvcyA9IHJvdW5kX2Rvd24oZGVzY19zaXplX3BvcyAtIGRlc2Nfc2l6ZSwgYmxvY2tzaXplKTtcbitcdGlmIChkZXNjX3BvcyBcdTAwM2MgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpIHtcbitcdFx0eGZzX2lub2RlX21hcmtfc2ljayhYRlNfSShpbm9kZSksIFhGU19TSUNLX0lOT19GU1ZFUklUWSk7XG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1x0fVxuK1xuK1x0ZXJyb3IgPSBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChpbm9kZSwgYnVmLCBkZXNjX3NpemUsIGRlc2NfcG9zKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0cmV0dXJuIGRlc2Nfc2l6ZTtcbit9XG4rXG4rc3RhdGljIGludFxuK3hmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yKFxuK1x0c3RydWN0IGZpbGVcdFx0KmZpbGUsXG4rXHRjb25zdCB2b2lkXHRcdCpkZXNjLFxuK1x0dTMyXHRcdFx0ZGVzY19zaXplLFxuK1x0dTY0XHRcdFx0bWVya2xlX3RyZWVfc2l6ZSlcbit7XG4rXHRpbnRcdFx0XHRlcnJvcjtcbitcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koaW5vZGUpO1xuK1x0dW5zaWduZWQgaW50XHRcdGJsa3NpemUgPSBpcC1cdTAwM2VpX21vdW50LVx1MDAzZW1fc2Iuc2JfYmxvY2tzaXplO1xuK1x0dTY0XHRcdFx0dHJlZV9sYXN0X2Jsb2NrID1cbitcdFx0XHR4ZnNfZnN2ZXJpdHlfbWV0YWRhdGFfb2Zmc2V0KGlwKSArIG1lcmtsZV90cmVlX3NpemU7XG4rXHR1NjRcdFx0XHRkZXNjX3BvcyA9XG4rXHRcdFx0cm91bmRfdXAodHJlZV9sYXN0X2Jsb2NrLCBYRlNfRlNWRVJJVFlfU1RBUlRfQUxJR04pO1xuK1x0dTY0XHRcdFx0ZGVzY19lbmQgPSBkZXNjX3BvcyArIGRlc2Nfc2l6ZTtcbitcdF9fYmUzMlx0XHRcdGRlc2Nfc2l6ZV9kaXNrID0gY3B1X3RvX2JlMzIoZGVzY19zaXplKTtcbitcdHU2NFx0XHRcdGRlc2Nfc2l6ZV9wb3MgPVxuK1x0XHRcdHJvdW5kX3VwKGRlc2NfZW5kICsgc2l6ZW9mKGRlc2Nfc2l6ZV9kaXNrKSwgYmxrc2l6ZSkgLVxuK1x0XHRcdHNpemVvZihkZXNjX3NpemVfZGlzayk7XG4rXG4rXHRlcnJvciA9IGlvbWFwX2ZzdmVyaXR5X3dyaXRlKGZpbGUsIGRlc2Nfc2l6ZV9wb3MsIHNpemVvZihfX2JlMzIpLFxuK1x0XHRcdChjb25zdCB2b2lkICopXHUwMDI2ZGVzY19zaXplX2Rpc2ssXG4rXHRcdFx0XHUwMDI2eGZzX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX29wcyxcbitcdFx0XHRcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0cmV0dXJuIGlvbWFwX2ZzdmVyaXR5X3dyaXRlKGZpbGUsIGRlc2NfcG9zLCBkZXNjX3NpemUsIGRlc2MsXG4rXHRcdFx0XHUwMDI2eGZzX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX29wcyxcbitcdFx0XHRcdTAwMjZ4ZnNfaW9tYXBfd3JpdGVfb3BzKTtcbit9XG4rXG4rLypcbisgKiBUcnkgdG8gcmVtb3ZlIGFsbCB0aGUgZnN2ZXJpdHkgbWV0YWRhdGEgYWZ0ZXIgYSBmYWlsZWQgZW5hYmxlbWVudC5cbisgKi9cbitzdGF0aWMgaW50XG4reGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YShcbitcdHN0cnVjdCB4ZnNfaW5vZGVcdCppcClcbit7XG4rXHRzdHJ1Y3QgeGZzX3RyYW5zXHQqdHA7XG4rXHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuK1x0aW50XHRcdFx0ZXJyb3I7XG4rXG4rXHRlcnJvciA9IHhmc190cmFuc19hbGxvYyhtcCwgXHUwMDI2TV9SRVMobXApLVx1MDAzZXRyX2l0cnVuY2F0ZSwgMCwgMCwgMCwgXHUwMDI2dHApO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHR4ZnNfaWxvY2soaXAsIFhGU19NTUFQTE9DS19FWENMIHwgWEZTX0lMT0NLX0VYQ0wpO1xuK1x0dHJ1bmNhdGVfaW5vZGVfcGFnZXMoVkZTX0koaXApLVx1MDAzZWlfbWFwcGluZywgWEZTX0lTSVpFKGlwKSk7XG4rXHR4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCAwKTtcbitcbitcdC8qXG4rXHQgKiBXZSByZW1vdmUgcG9zdCBFT0YgZGF0YSwgbm8gbmVlZCB0byB1cGRhdGUgaV9zaXplIGFzIGZzdmVyaXR5XG4rXHQgKiBkaWRuJ3QgbW92ZSBpX3NpemUgaW4gdGhlIGZpcnN0IHBsYWNlXG4rXHQgKi9cbitcdGVycm9yID0geGZzX2l0cnVuY2F0ZV9leHRlbnRzKFx1MDAyNnRwLCBpcCwgWEZTX0RBVEFfRk9SSywgWEZTX0lTSVpFKGlwKSk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gZXJyX2NhbmNlbDtcbitcbitcdGVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCk7XG4rXHR4ZnNfaXVubG9jayhpcCwgWEZTX01NQVBMT0NLX0VYQ0wgfCBYRlNfSUxPQ0tfRVhDTCk7XG4rXHRyZXR1cm4gZXJyb3I7XG4rZXJyX2NhbmNlbDpcbitcdHhmc190cmFuc19jYW5jZWwodHApO1xuK1x0eGZzX2l1bmxvY2soaXAsIFhGU19NTUFQTE9DS19FWENMIHwgWEZTX0lMT0NLX0VYQ0wpO1xuK1x0cmV0dXJuIGVycm9yO1xuK31cbitcbitzdGF0aWMgaW50XG4reGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4oXG4rXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAsXG4rXHRsb2ZmX3RcdFx0XHRzdGFydCxcbitcdGxvZmZfdFx0XHRcdGVuZClcbit7XG4rXHRzdHJ1Y3QgeGZzX21vdW50XHQqbXAgPSBpcC1cdTAwM2VpX21vdW50O1xuK1x0c3RydWN0IHhmc190cmFuc1x0KnRwO1xuK1x0eGZzX2ZpbGVvZmZfdFx0XHRvZmZzZXRfZnNiID0gWEZTX0JfVE9fRlNCVChtcCwgc3RhcnQpO1xuK1x0eGZzX2ZpbGVvZmZfdFx0XHRlbmRfZnNiID0gWEZTX0JfVE9fRlNCKG1wLCBlbmQpO1xuK1x0c3RydWN0IHhmc19ibWJ0X2lyZWNcdGltYXA7XG4rXHRpbnRcdFx0XHRuaW1hcHM7XG4rXHRpbnRcdFx0XHRlcnJvciA9IDA7XG4rXHRpbnRcdFx0XHRkb25lO1xuK1xuK1x0d2hpbGUgKG9mZnNldF9mc2IgXHUwMDNjIGVuZF9mc2IpIHtcbitcdFx0bmltYXBzID0gMTtcbitcbitcdFx0ZXJyb3IgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFx1MDAyNk1fUkVTKG1wKS1cdTAwM2V0cl93cml0ZSwgMCwgMCwgMCwgXHUwMDI2dHApO1xuK1x0XHRpZiAoZXJyb3IpXG4rXHRcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0XHR4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbitcdFx0ZXJyb3IgPSB4ZnNfYm1hcGlfcmVhZChpcCwgb2Zmc2V0X2ZzYixcbitcdFx0XHRcdGVuZF9mc2IgLSBvZmZzZXRfZnNiLCBcdTAwMjZpbWFwLCBcdTAwMjZuaW1hcHMsXG4rXHRcdFx0XHQwKTtcbitcdFx0aWYgKGVycm9yKVxuK1x0XHRcdGdvdG8gb3V0X2NhbmNlbDtcbitcbitcdFx0aWYgKG5pbWFwcyA9PSAwKVxuK1x0XHRcdGdvdG8gb3V0X2NhbmNlbDtcbitcbitcdFx0aWYgKGltYXAuYnJfc3RhdGUgPT0gWEZTX0VYVF9VTldSSVRURU4pIHtcbitcdFx0XHRkb25lID0gMDtcbitcbitcdFx0XHR4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCAwKTtcbitcbitcdFx0XHR3aGlsZSAoIWRvbmUpIHtcbitcdFx0XHRcdGVycm9yID0geGZzX2J1bm1hcGkodHAsIGlwLCBpbWFwLmJyX3N0YXJ0b2ZmLFxuK1x0XHRcdFx0XHRcdGltYXAuYnJfYmxvY2tjb3VudCwgMCwgMSxcbitcdFx0XHRcdFx0XHRcdTAwMjZkb25lKTtcbitcdFx0XHRcdGlmIChlcnJvcilcbitcdFx0XHRcdFx0Z290byBvdXRfY2FuY2VsO1xuK1xuK1x0XHRcdFx0ZXJyb3IgPSB4ZnNfZGVmZXJfZmluaXNoKFx1MDAyNnRwKTtcbitcdFx0XHRcdGlmIChlcnJvcilcbitcdFx0XHRcdFx0Z290byBvdXRfY2FuY2VsO1xuK1x0XHRcdH1cbitcbitcdFx0XHRlcnJvciA9IHhmc190cmFuc19jb21taXQodHApO1xuK1x0XHRcdGlmIChlcnJvcilcbitcdFx0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0fSBlbHNlIHtcbitcdFx0XHR4ZnNfdHJhbnNfY2FuY2VsKHRwKTtcbitcdFx0fVxuK1x0XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuK1xuK1x0XHRvZmZzZXRfZnNiID0gaW1hcC5icl9zdGFydG9mZiArIGltYXAuYnJfYmxvY2tjb3VudDtcbitcdH1cbitcbitcdHJldHVybiBlcnJvcjtcbitvdXRfY2FuY2VsOlxuK1x0eGZzX3RyYW5zX2NhbmNlbCh0cCk7XG4rb3V0X3VubG9jazpcbitcdHhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7XG4rXHRyZXR1cm4gZXJyb3I7XG4rfVxuK1xuK1xuKy8qXG4rICogUHJlcGFyZSB0byBlbmFibGUgZnN2ZXJpdHkgYnkgY2xlYXJpbmcgb2xkIG1ldGFkYXRhLlxuKyAqL1xuK3N0YXRpYyBpbnRcbit4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlKFxuK1x0c3RydWN0IGZpbGVcdFx0KmZpbHApXG4re1xuK1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7XG4rXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpbm9kZSk7XG4rXHRpbnRcdFx0XHRlcnJvcjtcbitcbitcdHhmc19hc3NlcnRfaWxvY2tlZChpcCwgWEZTX0lPTE9DS19FWENMKTtcbitcbitcdGlmIChJU19EQVgoaW5vZGUpIHx8IGlwLVx1MDAzZWlfZGlmbGFnczIgXHUwMDI2IFhGU19ESUZMQUcyX0RBWClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRpZiAoaW5vZGUtXHUwMDNlaV9zaXplIFx1MDAzZSBYRlNfRlNWRVJJVFlfTEFSR0VTVF9GSUxFKVxuK1x0XHRyZXR1cm4gLUVGQklHO1xuK1xuK1x0LypcbitcdCAqIEZsdXNoIHBhZ2VjYWNoZSBiZWZvcmUgYnVpbGRpbmcgTWVya2xlIHRyZWUuIElub2RlIGlzIGxvY2tlZCBhbmQgbm9cbitcdCAqIGZ1cnRoZXIgd3JpdGVzIHdpbGwgaGFwcGVuIHRvIHRoZSBmaWxlIGV4Y2VwdCBmc3Zlcml0eSBtZXRhZGF0YVxuK1x0ICovXG4rXHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0aWYgKHhmc19pZmxhZ3NfdGVzdF9hbmRfc2V0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRlcnJvciA9IHhmc19xbV9kcWF0dGFjaChpcCk7XG4rXHRpZiAoZXJyb3IpXG4rXHRcdGdvdG8gb3V0X2NsZWFyO1xuK1xuK1x0ZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBvdXRfY2xlYXI7XG4rXHRyZXR1cm4gZXJyb3I7XG4rb3V0X2NsZWFyOlxuK1x0eGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pO1xuK1x0cmV0dXJuIGVycm9yO1xuK31cbitcbisvKlxuKyAqIENvbXBsZXRlIChvciBmYWlsKSB0aGUgcHJvY2VzcyBvZiBlbmFibGluZyBmc3Zlcml0eS5cbisgKi9cbitzdGF0aWMgaW50XG4reGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUoXG4rXHRzdHJ1Y3QgZmlsZVx0XHQqZmlsZSxcbitcdGNvbnN0IHZvaWRcdFx0KmRlc2MsXG4rXHRzaXplX3RcdFx0XHRkZXNjX3NpemUsXG4rXHR1NjRcdFx0XHRtZXJrbGVfdHJlZV9zaXplKVxuK3tcbitcdHN0cnVjdCBpbm9kZVx0XHQqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuK1x0c3RydWN0IHhmc19pbm9kZVx0KmlwID0gWEZTX0koaW5vZGUpO1xuK1x0c3RydWN0IHhmc19tb3VudFx0Km1wID0gaXAtXHUwMDNlaV9tb3VudDtcbitcdHN0cnVjdCB4ZnNfdHJhbnNcdCp0cDtcbitcdGludFx0XHRcdGVycm9yID0gMDtcbitcdGxvZmZfdFx0XHRcdHJhbmdlX3N0YXJ0ID0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCk7XG4rXG4rXHR4ZnNfYXNzZXJ0X2lsb2NrZWQoaXAsIFhGU19JT0xPQ0tfRVhDTCk7XG4rXG4rXHQvKiBmcy12ZXJpdHkgZmFpbGVkLCBqdXN0IGNsZWFudXAgKi9cbitcdGlmIChkZXNjID09IE5VTEwpIHtcbitcdFx0ZXJyb3IgPSB4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhKGlwKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRlcnJvciA9IHhmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yKGZpbGUsIGRlc2MsIGRlc2Nfc2l6ZSxcbitcdFx0XHRtZXJrbGVfdHJlZV9zaXplKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKlxuK1x0ICogV2FpdCBmb3IgTWVya2xlIHRyZWUgZ2V0IHdyaXR0ZW4gdG8gZGlzayBiZWZvcmUgc2V0dGluZyBvbi1kaXNrIGlub2RlXG4rXHQgKiBmbGFnIGFuZCBjbGVhcmluZyBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTlxuK1x0ICovXG4rXHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCByYW5nZV9zdGFydCxcbitcdFx0XHRMTE9OR19NQVgpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qXG4rXHQgKiBSZW1vdmUgdW53cml0dGVuIGV4dGVudHMgbGVmdCBieSBDT1cgcHJlYWxsb2NhdGlvbnMgYW5kIHdyaXRlXG4rXHQgKiBwcmVhbGxvY2F0aW9uIGluIHRoZSBtZXJrbGUgdHJlZSBob2xlcyBhbmQgcGFzdCBkZXNjcmlwdG9yXG4rXHQgKi9cbitcdGVycm9yID0geGZzX2ZzdmVyaXR5X2NhbmNlbF91bndyaXR0ZW4oaXAsIHJhbmdlX3N0YXJ0LCBMTE9OR19NQVgpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qXG4rXHQgKiBQcm9hY3RpdmVseSBkcm9wIGFueSBkZWxheWVkIGFsbG9jYXRpb25zIGluIENPVyBmb3JrLCB0aGUgZnN2ZXJpdHlcbitcdCAqIGZpbGVzIGFyZSByZWFkLW9ubHlcbitcdCAqL1xuK1x0aWYgKHhmc19pc19jb3dfaW5vZGUoaXApKSB7XG4rXHRcdHhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuK1x0XHR4ZnNfaWZvcmtfaW5pdF9jb3coaXApO1xuK1x0XHR4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpO1xuK1x0XHR4ZnNfYm1hcF9wdW5jaF9kZWxhbGxvY19yYW5nZShpcCwgWEZTX0NPV19GT1JLLCAwLCBMTE9OR19NQVgsXG4rXHRcdFx0XHROVUxMKTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBTZXQgZnN2ZXJpdHkgaW5vZGUgZmxhZ1xuK1x0ICovXG4rXHRlcnJvciA9IHhmc190cmFuc19hbGxvY19pbm9kZShpcCwgXHUwMDI2TV9SRVMobXApLVx1MDAzZXRyX2ljaGFuZ2UsXG4rXHRcdFx0MCwgMCwgZmFsc2UsIFx1MDAyNnRwKTtcbitcdGlmIChlcnJvcilcbitcdFx0Z290byBvdXQ7XG4rXG4rXHQvKlxuK1x0ICogRW5zdXJlIHRoYXQgd2UndmUgcGVyc2lzdGVkIHRoZSB2ZXJpdHkgaW5mb3JtYXRpb24gYmVmb3JlIHdlIGVuYWJsZVxuK1x0ICogaXQgb24gdGhlIGlub2RlIGFuZCB0ZWxsIHRoZSBjYWxsZXIgd2UgaGF2ZSBzZWFsZWQgdGhlIGlub2RlLlxuK1x0ICovXG4rXHRpcC1cdTAwM2VpX2RpZmxhZ3MyIHw9IFhGU19ESUZMQUcyX1ZFUklUWTtcbitcbitcdHhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTtcbitcdHhmc190cmFuc19zZXRfc3luYyh0cCk7XG4rXG4rXHRlcnJvciA9IHhmc190cmFuc19jb21taXQodHApO1xuK1x0eGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTtcbitcbitcdGlmICghZXJyb3IpXG4rXHRcdGlub2RlX3NldF9mbGFncyhpbm9kZSwgU19WRVJJVFksIFNfVkVSSVRZKTtcbitcbitvdXQ6XG4rXHRpZiAoZXJyb3IpIHtcbitcdFx0aW50XHRlcnJvcjI7XG4rXG4rXHRcdGVycm9yMiA9IHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGEoaXApO1xuK1x0XHRpZiAoZXJyb3IyKVxuK1x0XHRcdHhmc19hbGVydChpcC1cdTAwM2VpX21vdW50LFxuK1wiaW5vIDB4JWxseCBmYWlsZWQgdG8gY2xlYW4gdXAgbmV3IGZzdmVyaXR5IG1ldGFkYXRhLCBlcnIgJWRcIixcbitcdFx0XHRcdFx0SV9JTk8oaXApLCBlcnJvcjIpO1xuK1x0fVxuK1xuK1x0eGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX1ZFUklUWV9DT05TVFJVQ1RJT04pO1xuK1x0cmV0dXJuIGVycm9yO1xuK31cbitcbisvKlxuKyAqIFJldHJpZXZlIGEgbWVya2xlIHRyZWUgYmxvY2suXG4rICovXG4rc3RhdGljIHN0cnVjdCBwYWdlICpcbit4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGUoXG4rXHRzdHJ1Y3QgaW5vZGVcdFx0Kmlub2RlLFxuK1x0cGdvZmZfdFx0XHRcdGluZGV4KVxuK3tcbitcdGluZGV4ICs9IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoWEZTX0koaW5vZGUpKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcbitcdHJldHVybiBnZW5lcmljX3JlYWRfbWVya2xlX3RyZWVfcGFnZShpbm9kZSwgaW5kZXgpO1xuK31cbitcbisvKlxuKyAqIFJldHJpZXZlIGEgbWVya2xlIHRyZWUgYmxvY2suXG4rICovXG4rc3RhdGljIHZvaWRcbit4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlKFxuK1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSxcbitcdHBnb2ZmX3RcdFx0XHRpbmRleCxcbitcdHVuc2lnbmVkIGxvbmdcdFx0bnJfcGFnZXMpXG4re1xuK1x0aW5kZXggKz0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChYRlNfSShpbm9kZSkpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1xuK1x0Z2VuZXJpY19yZWFkYWhlYWRfbWVya2xlX3RyZWUoaW5vZGUsIGluZGV4LCBucl9wYWdlcyk7XG4rfVxuK1xuKy8qXG4rICogV3JpdGUgYSBtZXJrbGUgdHJlZSBibG9jay5cbisgKi9cbitzdGF0aWMgaW50XG4reGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZShcbitcdHN0cnVjdCBmaWxlXHRcdCpmaWxlLFxuK1x0Y29uc3Qgdm9pZFx0XHQqYnVmLFxuK1x0dTY0XHRcdFx0cG9zLFxuK1x0dW5zaWduZWQgaW50XHRcdHNpemUsXG4rXHRjb25zdCB1OFx0XHQqemVyb19kaWdlc3QsXG4rXHR1bnNpZ25lZCBpbnRcdFx0ZGlnZXN0X3NpemUpXG4re1xuK1x0c3RydWN0IGlub2RlXHRcdCppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4rXHRzdHJ1Y3QgeGZzX2lub2RlXHQqaXAgPSBYRlNfSShpbm9kZSk7XG4rXHRsb2ZmX3RcdFx0XHRwb3NpdGlvbiA9IHBvcyArXG4rXHRcdHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoaXApO1xuK1xuK1x0aWYgKHBvc2l0aW9uICsgc2l6ZSBcdTAwM2UgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX21heGJ5dGVzKVxuK1x0XHRyZXR1cm4gLUVGQklHO1xuK1xuK1x0LypcbitcdCAqIElmIHRoaXMgaXMgYSBibG9jayBmdWxsIG9mIGhhc2hlcyBvZiB6ZXJvZWQgYmxvY2tzLCBkb24ndCBib3RoZXJcbitcdCAqIHN0b3JpbmcgdGhlIGJsb2NrLiBXZSBjYW4gc3ludGhlc2l6ZSB0aGVtIGxhdGVyLlxuK1x0ICpcbitcdCAqIEhvd2V2ZXIsIGRvIHRoaXMgb25seSBpbiBjYXNlIE1lcmtsZSB0cmVlIGJsb2NrID09IGZzIGJsb2NrIHNpemUuXG4rXHQgKiBJb21hcCBzeW50aGVzaXplcyB0aGVzZSBibG9ja3MgYmFzZWQgb24gaG9sZXMgaW4gdGhlIG1lcmtsZSB0cmVlLiBXZVxuK1x0ICogd29uJ3QgYmUgYWJsZSB0byB0ZWxsIGlmIHNvbWV0aGluZyBuZWVkIHRvIGJlIHN5bnRoZXNpemVzIGZvciB0aGVcbitcdCAqIHJhbmdlIGluIHRoZSBmcyBibG9jay4gRm9yIGV4YW1wbGUsIGZvciA0ayBmaWxlc3lzdGVtIGJsb2NrXG4rXHQgKlxuK1x0ICpcdFsgMWsgfCB6ZXJvIGhhc2hlcyB8IHplcm8gaGFzaGVzIHwgMWsgXVxuK1x0ICpcbitcdCAqIElvbWFwIHdvbid0IGtub3cgYWJvdXQgdGhlc2UgZW1wdHkgYmxvY2tzLlxuK1x0ICovXG4rXHRpZiAoc2l6ZSA9PSBpcC1cdTAwM2VpX21vdW50LVx1MDAzZW1fc2Iuc2JfYmxvY2tzaXplIFx1MDAyNlx1MDAyNlxuK1x0XHRcdC8qXG4rXHRcdFx0ICogRmlyc3QgZGlnZXN0IGlzIHplcm9fZGlnZXN0XG4rXHRcdFx0ICovXG4rXHRcdFx0bWVtY21wKGJ1ZiwgemVyb19kaWdlc3QsIGRpZ2VzdF9zaXplKSA9PSAwIFx1MDAyNlx1MDAyNlxuK1x0XHRcdC8qXG4rXHRcdFx0ICogRXZlcnkgZGlnZXN0IGlzIHNhbWUgYXMgcHJldmlvdXMsIHRodXMgYWxsIGFyZVxuK1x0XHRcdCAqIHplcm9fZGlnZXN0XG4rXHRcdFx0ICovXG4rXHRcdFx0bWVtY21wKGJ1ZiArIGRpZ2VzdF9zaXplLCBidWYsIHNpemUgLSBkaWdlc3Rfc2l6ZSkgPT0gMClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gaW9tYXBfZnN2ZXJpdHlfd3JpdGUoZmlsZSwgcG9zaXRpb24sIHNpemUsIGJ1ZixcbitcdFx0XHRcdTAwMjZ4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfb3BzLFxuK1x0XHRcdFx1MDAyNnhmc19pb21hcF93cml0ZV9vcHMpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB4ZnNfZnN2ZXJpdHlfb3BzID0ge1xuK1x0LmJlZ2luX2VuYWJsZV92ZXJpdHlcdFx0PSB4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlLFxuK1x0LmVuZF9lbmFibGVfdmVyaXR5XHRcdD0geGZzX2ZzdmVyaXR5X2VuZF9lbmFibGUsXG4rXHQuZ2V0X3Zlcml0eV9kZXNjcmlwdG9yXHRcdD0geGZzX2ZzdmVyaXR5X2dldF9kZXNjcmlwdG9yLFxuK1x0LnJlYWRfbWVya2xlX3RyZWVfcGFnZVx0XHQ9IHhmc19mc3Zlcml0eV9yZWFkX21lcmtsZSxcbitcdC5yZWFkYWhlYWRfbWVya2xlX3RyZWVcdFx0PSB4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlLFxuK1x0LndyaXRlX21lcmtsZV90cmVlX2Jsb2NrXHQ9IHhmc19mc3Zlcml0eV93cml0ZV9tZXJrbGUsXG4rfTtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZzdmVyaXR5LmggYi9mcy94ZnMveGZzX2ZzdmVyaXR5Lmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNmE5ODFlMjBhNzViYjhcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL3hmcy94ZnNfZnN2ZXJpdHkuaFxuQEAgLTAsMCArMSwyOCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLypcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjYgUmVkIEhhdCwgSW5jLlxuKyAqL1xuKyNpZm5kZWYgX19YRlNfRlNWRVJJVFlfSF9fXG4rI2RlZmluZSBfX1hGU19GU1ZFUklUWV9IX19cbitcbisjaW5jbHVkZSBcInhmc19wbGF0Zm9ybS5oXCJcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9mc3Zlcml0eS5oXHUwMDNlXG4rXG4rI2lmZGVmIENPTkZJR19GU19WRVJJVFlcbitleHRlcm4gY29uc3Qgc3RydWN0IGZzdmVyaXR5X29wZXJhdGlvbnMgeGZzX2ZzdmVyaXR5X29wcztcbitsb2ZmX3QgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChjb25zdCBzdHJ1Y3QgeGZzX2lub2RlICppcCk7XG4rYm9vbCB4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBsb2ZmX3Qgb2Zmc2V0KTtcbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgbG9mZl90IHhmc19mc3Zlcml0eV9tZXRhZGF0YV9vZmZzZXQoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApXG4re1xuK1x0V0FSTl9PTl9PTkNFKDEpO1xuK1x0cmV0dXJuIFVMTE9OR19NQVg7XG4rfVxuK3N0YXRpYyBpbmxpbmUgYm9vbCB4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhKGNvbnN0IHN0cnVjdCB4ZnNfaW5vZGUgKmlwLFxuK1x0XHRcdFx0XHQgICAgbG9mZl90IG9mZnNldClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuKyNlbmRpZlx0LyogQ09ORklHX0ZTX1ZFUklUWSAqL1xuK1xuKyNlbmRpZlx0LyogX19YRlNfRlNWRVJJVFlfSF9fICovXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19oZWFsdGguYyBiL2ZzL3hmcy94ZnNfaGVhbHRoLmNcbmluZGV4IDIzOWI4NDNlODNkNDJhLi5iZTY2NzYwZmIxMjBmNyAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfaGVhbHRoLmNcbisrKyBiL2ZzL3hmcy94ZnNfaGVhbHRoLmNcbkBAIC02MjUsNiArNjI1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpb2N0bF9zaWNrX21hcCBpbm9fbWFwW10gPSB7XG4gXHR7IFhGU19TSUNLX0lOT19ESVJfWkFQUEVELFx0WEZTX0JTX1NJQ0tfRElSIH0sXG4gXHR7IFhGU19TSUNLX0lOT19TWU1MSU5LX1pBUFBFRCxcdFhGU19CU19TSUNLX1NZTUxJTksgfSxcbiBcdHsgWEZTX1NJQ0tfSU5PX0RJUlRSRUUsXHRYRlNfQlNfU0lDS19ESVJUUkVFIH0sXG4rXHR7IFhGU19TSUNLX0lOT19GU1ZFUklUWSxcdFhGU19CU19TSUNLX0ZTVkVSSVRZIH0sXG4gfTtcbiBcbiAvKiBGaWxsIG91dCBidWxrc3RhdCBoZWFsdGggaW5mby4gKi9cbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmhcbmluZGV4IDM0YzEwMzhlYmZjZGUxLi4xN2NlMDgzNTkxZjQwOCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuaFxuKysrIGIvZnMveGZzL3hmc19pbm9kZS5oXG5AQCAtNDE5LDYgKzQxOSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2lub2RlX2Nhbl9zd19hdG9taWNfd3JpdGUoY29uc3Qgc3RydWN0IHhmc19pbm9kZSAqaXApXG4gICovXG4gI2RlZmluZSBYRlNfSVJFTUFQUElOR1x0XHQoMVUgXHUwMDNjXHUwMDNjIDE1KVxuIFxuKy8qXG4rICogZnMtdmVyaXR5J3MgTWVya2xlIHRyZWUgaXMgdW5kZXIgY29uc3RydWN0aW9uLiBUaGUgZmlsZSBpcyByZWFkLW9ubHksIHRoZVxuKyAqIG9ubHkgd3JpdGVzIGhhcHBlbmluZyBhcmUgZm9yIHRoZSBmc3Zlcml0eSBtZXRhZGF0YS5cbisgKi9cbisjZGVmaW5lIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OXHQoMVUgXHUwMDNjXHUwMDNjIDE2KVxuK1xuIC8qIEFsbCBpbm9kZSBzdGF0ZSBmbGFncyByZWxhdGVkIHRvIGlub2RlIHJlY2xhaW0uICovXG4gI2RlZmluZSBYRlNfQUxMX0lSRUNMQUlNX0ZMQUdTXHQoWEZTX0lSRUNMQUlNQUJMRSB8IFxcXG4gXHRcdFx0XHQgWEZTX0lSRUNMQUlNIHwgXFxcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvY3RsLmMgYi9mcy94ZnMveGZzX2lvY3RsLmNcbmluZGV4IDFiNTM3MDFiZWJlYTFhLi5mYzc4NjBhOGI1YWJiMSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfaW9jdGwuY1xuKysrIGIvZnMveGZzL3hmc19pb2N0bC5jXG5AQCAtNDksNiArNDksNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlYXR0ci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnN2ZXJpdHkuaFx1MDAzZVxuIFxuIC8qIFJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgcG9zaXRpdmUgZXJyb3IgKi9cbiBpbnRcbkBAIC0xNDY2LDYgKzE0NjcsMTkgQEAgeGZzX2ZpbGVfaW9jdGwoXG4gXHRjYXNlIFhGU19JT0NfVkVSSUZZX01FRElBOlxuIFx0XHRyZXR1cm4geGZzX2lvY192ZXJpZnlfbWVkaWEoZmlscCwgYXJnKTtcbiBcbitcdGNhc2UgRlNfSU9DX0VOQUJMRV9WRVJJVFk6XG4rXHRcdGlmICgheGZzX2hhc192ZXJpdHkobXApKVxuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0cmV0dXJuIGZzdmVyaXR5X2lvY3RsX2VuYWJsZShmaWxwLCBhcmcpO1xuK1x0Y2FzZSBGU19JT0NfTUVBU1VSRV9WRVJJVFk6XG4rXHRcdGlmICgheGZzX2hhc192ZXJpdHkobXApKVxuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0cmV0dXJuIGZzdmVyaXR5X2lvY3RsX21lYXN1cmUoZmlscCwgYXJnKTtcbitcdGNhc2UgRlNfSU9DX1JFQURfVkVSSVRZX01FVEFEQVRBOlxuK1x0XHRpZiAoIXhmc19oYXNfdmVyaXR5KG1wKSlcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdHJldHVybiBmc3Zlcml0eV9pb2N0bF9yZWFkX21ldGFkYXRhKGZpbHAsIGFyZyk7XG4rXG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVOT1RUWTtcbiBcdH1cbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvbWFwLmMgYi9mcy94ZnMveGZzX2lvbWFwLmNcbmluZGV4IDIyNWMzZGU4OGQwM2IxLi5hNGQ1NjU2NjE5ODkzMSAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuY1xuKysrIGIvZnMveGZzL3hmc19pb21hcC5jXG5AQCAtMzIsNiArMzIsOCBAQFxuICNpbmNsdWRlIFwieGZzX3J0Yml0bWFwLmhcIlxuICNpbmNsdWRlIFwieGZzX2ljYWNoZS5oXCJcbiAjaW5jbHVkZSBcInhmc196b25lX2FsbG9jLmhcIlxuKyNpbmNsdWRlIFwieGZzX2ZzdmVyaXR5LmhcIlxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiAjZGVmaW5lIFhGU19BTExPQ19BTElHTihtcCwgb2ZmKSBcXFxuIFx0KCgob2ZmKSBcdTAwM2VcdTAwM2UgbXAtXHUwMDNlbV9hbGxvY3NpemVfbG9nKSBcdTAwM2NcdTAwM2MgbXAtXHUwMDNlbV9hbGxvY3NpemVfbG9nKVxuQEAgLTg4Myw2ICs4ODUsOSBAQCB4ZnNfZGlyZWN0X3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0aWYgKGZsYWdzIFx1MDAyNiBJT01BUF9BVE9NSUMpXG4gXHRcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfQVRPTUlDX0JJTztcbiBcbitcdGlmICh4ZnNfaWZsYWdzX3Rlc3QoaXAsIFhGU19WRVJJVFlfQ09OU1RSVUNUSU9OKSlcbitcdFx0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9GU1ZFUklUWTtcbitcbiBcdC8qXG4gXHQgKiBDT1cgd3JpdGVzIG1heSBhbGxvY2F0ZSBkZWxhbGxvYyBzcGFjZSBvciBjb252ZXJ0IHVud3JpdHRlbiBDT1dcbiBcdCAqIGV4dGVudHMsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRvIHRha2UgdGhlIGxvY2sgZXhjbHVzaXZlbHkgaGVyZS5cbkBAIC0xNTg5LDcgKzE1OTQsOCBAQCB4ZnNfem9uZWRfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oXG4gXHRsb2ZmX3RcdFx0XHRjb3VudCxcbiBcdHVuc2lnbmVkXHRcdGZsYWdzLFxuIFx0c3RydWN0IGlvbWFwXHRcdCppb21hcCxcbi1cdHN0cnVjdCBpb21hcFx0XHQqc3JjbWFwKVxuK1x0c3RydWN0IGlvbWFwXHRcdCpzcmNtYXAsXG4rXHR1MTZcdFx0XHRpb21hcF9mbGFncylcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfaXRlclx0Kml0ZXIgPVxuIFx0XHRjb250YWluZXJfb2YoaW9tYXAsIHN0cnVjdCBpb21hcF9pdGVyLCBpb21hcCk7XG5AQCAtMTU5OSw3ICsxNjA1LDYgQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0c3RydWN0IHhmc19tb3VudFx0Km1wID0gaXAtXHUwMDNlaV9tb3VudDtcbiBcdHhmc19maWxlb2ZmX3RcdFx0b2Zmc2V0X2ZzYiA9IFhGU19CX1RPX0ZTQlQobXAsIG9mZnNldCk7XG4gXHR4ZnNfZmlsZW9mZl90XHRcdGVuZF9mc2IgPSB4ZnNfaW9tYXBfZW5kX2ZzYihtcCwgb2Zmc2V0LCBjb3VudCk7XG4tXHR1MTZcdFx0XHRpb21hcF9mbGFncyA9IElPTUFQX0ZfU0hBUkVEO1xuIFx0dW5zaWduZWQgaW50XHRcdGxvY2ttb2RlID0gWEZTX0lMT0NLX0VYQ0w7XG4gXHR4ZnNfZmlsYmxrc190XHRcdGNvdW50X2ZzYjtcbiBcdHhmc19leHRsZW5fdFx0XHRpbmRsZW47XG5AQCAtMTY2Miw3ICsxNjY3LDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0XHRcdFx0c21hcC5icl9zdGFydG9mZiArIHNtYXAuYnJfYmxvY2tjb3VudCk7XG4gXHRcdFx0eGZzX3RyaW1fZXh0ZW50KFx1MDAyNnNtYXAsIG9mZnNldF9mc2IsXG4gXHRcdFx0XHRcdGVuZF9mc2IgLSBvZmZzZXRfZnNiKTtcbi1cdFx0XHRlcnJvciA9IHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBzcmNtYXAsIFx1MDAyNnNtYXAsIGZsYWdzLCAwLFxuK1x0XHRcdGVycm9yID0geGZzX2JtYnRfdG9faW9tYXAoaXAsIHNyY21hcCwgXHUwMDI2c21hcCwgZmxhZ3MsXG4rXHRcdFx0XHRcdGlvbWFwX2ZsYWdzLFxuIFx0XHRcdFx0XHR4ZnNfaW9tYXBfaW5vZGVfc2VxdWVuY2UoaXAsIDApKTtcbiBcdFx0XHRpZiAoZXJyb3IpXG4gXHRcdFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtMTY3Miw2ICsxNjc4LDggQEAgeGZzX3pvbmVkX2J1ZmZlcmVkX3dyaXRlX2lvbWFwX2JlZ2luKFxuIFx0aWYgKCFpcC1cdTAwM2VpX2Nvd2ZwKVxuIFx0XHR4ZnNfaWZvcmtfaW5pdF9jb3coaXApO1xuIFxuK1x0aW9tYXBfZmxhZ3MgfD0gSU9NQVBfRl9TSEFSRUQ7XG4rXG4gXHRpZiAoIXhmc19pZXh0X2xvb2t1cF9leHRlbnQoaXAsIGlwLVx1MDAzZWlfY293ZnAsIG9mZnNldF9mc2IsIFx1MDAyNmljdXIsIFx1MDAyNmdvdCkpXG4gXHRcdGdvdC5icl9zdGFydG9mZiA9IGVuZF9mc2I7XG4gXHRpZiAoZ290LmJyX3N0YXJ0b2ZmIFx1MDAzYz0gb2Zmc2V0X2ZzYikge1xuQEAgLTE4MDMsOSArMTgxMSwxMiBAQCB4ZnNfYnVmZmVyZWRfd3JpdGVfaW9tYXBfYmVnaW4oXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4rXHRpZiAoeGZzX2lmbGFnc190ZXN0KGlwLCBYRlNfVkVSSVRZX0NPTlNUUlVDVElPTikpXG4rXHRcdGlvbWFwX2ZsYWdzIHw9IElPTUFQX0ZfRlNWRVJJVFk7XG4rXG4gXHRpZiAoeGZzX2lzX3pvbmVkX2lub2RlKGlwKSlcbiBcdFx0cmV0dXJuIHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbihpbm9kZSwgb2Zmc2V0LFxuLVx0XHRcdFx0Y291bnQsIGZsYWdzLCBpb21hcCwgc3JjbWFwKTtcbitcdFx0XHRcdGNvdW50LCBmbGFncywgaW9tYXAsIHNyY21hcCwgaW9tYXBfZmxhZ3MpO1xuIFxuIFx0Lyogd2UgY2FuJ3QgdXNlIGRlbGF5ZWQgYWxsb2NhdGlvbnMgd2hlbiB1c2luZyBleHRlbnQgc2l6ZSBoaW50cyAqL1xuIFx0aWYgKHhmc19nZXRfZXh0c3pfaGludChpcCkpXG5AQCAtMjE5MSwxMiArMjIwMiwxNyBAQCB4ZnNfcmVhZF9pb21hcF9iZWdpbihcbiBcdGJvb2xcdFx0XHRzaGFyZWQgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIGludFx0XHRsb2NrbW9kZSA9IFhGU19JTE9DS19TSEFSRUQ7XG4gXHR1NjRcdFx0XHRzZXE7XG4rXHR1bnNpZ25lZCBpbnRcdFx0aW9tYXBfZmxhZ3MgPSAwO1xuIFxuIFx0QVNTRVJUKCEoZmxhZ3MgXHUwMDI2IChJT01BUF9XUklURSB8IElPTUFQX1pFUk8pKSk7XG4gXG4gXHRpZiAoeGZzX2lzX3NodXRkb3duKG1wKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4rXHRpZiAoZnN2ZXJpdHlfYWN0aXZlKGlub2RlKSBcdTAwMjZcdTAwMjZcbitcdCAgICAob2Zmc2V0IFx1MDAzZT0geGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldChpcCkpKVxuK1x0XHRpb21hcF9mbGFncyB8PSBJT01BUF9GX0ZTVkVSSVRZO1xuK1xuIFx0ZXJyb3IgPSB4ZnNfaWxvY2tfZm9yX2lvbWFwKGlwLCBmbGFncywgXHUwMDI2bG9ja21vZGUpO1xuIFx0aWYgKGVycm9yKVxuIFx0XHRyZXR1cm4gZXJyb3I7XG5AQCAtMjIxMCw4ICsyMjI2LDkgQEAgeGZzX3JlYWRfaW9tYXBfYmVnaW4oXG4gXHRpZiAoZXJyb3IpXG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdHRyYWNlX3hmc19pb21hcF9mb3VuZChpcCwgb2Zmc2V0LCBsZW5ndGgsIFhGU19EQVRBX0ZPUkssIFx1MDAyNmltYXApO1xuLVx0cmV0dXJuIHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2aW1hcCwgZmxhZ3MsXG4tXHRcdFx0XHQgc2hhcmVkID8gSU9NQVBfRl9TSEFSRUQgOiAwLCBzZXEpO1xuK1x0aW9tYXBfZmxhZ3MgfD0gc2hhcmVkID8gSU9NQVBfRl9TSEFSRUQgOiAwO1xuK1xuK1x0cmV0dXJuIHhmc19ibWJ0X3RvX2lvbWFwKGlwLCBpb21hcCwgXHUwMDI2aW1hcCwgZmxhZ3MsIGlvbWFwX2ZsYWdzLCBzZXEpO1xuIH1cbiBcbiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIHhmc19yZWFkX2lvbWFwX29wcyA9IHtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvcHMuYyBiL2ZzL3hmcy94ZnNfaW9wcy5jXG5pbmRleCA2MzM5ZjQ5NTZlY2IzOS4uNzA2MzdjZGNjMjk5NzIgMTAwNjQ0XG4tLS0gYS9mcy94ZnMveGZzX2lvcHMuY1xuKysrIGIvZnMveGZzL3hmc19pb3BzLmNcbkBAIC0zNSw2ICszNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2l2ZXJzaW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWVtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzdmVyaXR5LmhcdTAwM2VcbiBcbiAvKlxuICAqIERpcmVjdG9yaWVzIGhhdmUgZGlmZmVyZW50IGxvY2sgb3JkZXIgdy5yLnQuIG1tYXBfbG9jayBjb21wYXJlZCB0byByZWd1bGFyXG5AQCAtNTgwLDYgKzU4MSwxMCBAQCB4ZnNfcmVwb3J0X2Rpb2FsaWduKFxuIFx0c3RydWN0IGJsb2NrX2RldmljZVx0KmJkZXYgPSB0YXJnZXQtXHUwMDNlYnRfYmRldjtcbiBcbiBcdHN0YXQtXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfRElPQUxJR04gfCBTVEFUWF9ESU9fUkVBRF9BTElHTjtcbitcbitcdGlmIChmc3Zlcml0eV9hY3RpdmUoVkZTX0koaXApKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0c3RhdC1cdTAwM2VkaW9fbWVtX2FsaWduID0gYmRldl9kbWFfYWxpZ25tZW50KGJkZXYpICsgMTtcbiBcbiBcdC8qXG5AQCAtMTM3MCw2ICsxMzc1LDggQEAgeGZzX2lub2RlX3Nob3VsZF9lbmFibGVfZGF4KFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAoIXhmc19pbm9kZV9zdXBwb3J0c19kYXgoaXApKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoaXAtXHUwMDNlaV9kaWZsYWdzMiBcdTAwMjYgWEZTX0RJRkxBRzJfVkVSSVRZKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAoeGZzX2hhc19kYXhfYWx3YXlzKGlwLVx1MDAzZWlfbW91bnQpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGlmIChpcC1cdTAwM2VpX2RpZmxhZ3MyIFx1MDAyNiBYRlNfRElGTEFHMl9EQVgpXG5AQCAtMTM5OCwxMiArMTQwNSwxNSBAQCB4ZnNfZGlmbGFnc190b19pZmxhZ3MoXG4gXHRcdGZsYWdzIHw9IFNfTk9BVElNRTtcbiBcdGlmIChpbml0IFx1MDAyNlx1MDAyNiB4ZnNfaW5vZGVfc2hvdWxkX2VuYWJsZV9kYXgoaXApKVxuIFx0XHRmbGFncyB8PSBTX0RBWDtcbitcdGlmICh4ZmxhZ3MgXHUwMDI2IEZTX1hGTEFHX1ZFUklUWSlcbitcdFx0ZmxhZ3MgfD0gU19WRVJJVFk7XG4gXG4gXHQvKlxuIFx0ICogU19EQVggY2FuIG9ubHkgYmUgc2V0IGR1cmluZyBpbm9kZSBpbml0aWFsaXphdGlvbiBhbmQgaXMgbmV2ZXIgc2V0IGJ5XG4gXHQgKiB0aGUgVkZTLCBzbyB3ZSBjYW5ub3QgbWFzayBvZmYgU19EQVggaW4gaV9mbGFncy5cbiBcdCAqL1xuLVx0aW5vZGUtXHUwMDNlaV9mbGFncyBcdTAwMjY9IH4oU19JTU1VVEFCTEUgfCBTX0FQUEVORCB8IFNfU1lOQyB8IFNfTk9BVElNRSk7XG4rXHRpbm9kZS1cdTAwM2VpX2ZsYWdzIFx1MDAyNj1cbitcdFx0fihTX0lNTVVUQUJMRSB8IFNfQVBQRU5EIHwgU19TWU5DIHwgU19OT0FUSU1FIHwgU19WRVJJVFkpO1xuIFx0aW5vZGUtXHUwMDNlaV9mbGFncyB8PSBmbGFncztcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tZXNzYWdlLmMgYi9mcy94ZnMveGZzX21lc3NhZ2UuY1xuaW5kZXggMDI0M2U1MDlhNDY4OTEuLjQ0YjEzZDQ2MDQ5YzYyIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19tZXNzYWdlLmNcbisrKyBiL2ZzL3hmcy94ZnNfbWVzc2FnZS5jXG5AQCAtMTQ5LDYgKzE0OSwxMCBAQCB4ZnNfd2Fybl9leHBlcmltZW50YWwoXG4gXHRcdFx0Lm9wc3RhdGVcdD0gWEZTX09QU1RBVEVfV0FSTkVEX0xBUlAsXG4gXHRcdFx0Lm5hbWVcdFx0PSBcImxvZ2dlZCBleHRlbmRlZCBhdHRyaWJ1dGVzXCIsXG4gXHRcdH0sXG4rXHRcdFtYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZXSA9IHtcbitcdFx0XHQub3BzdGF0ZVx0PSBYRlNfT1BTVEFURV9XQVJORURfRlNWRVJJVFksXG4rXHRcdFx0Lm5hbWVcdFx0PSBcImZzdmVyaXR5XCIsXG4rXHRcdH0sXG4gXHR9O1xuIFx0QVNTRVJUKGZlYXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBmZWF0IFx1MDAzYyBYRlNfRVhQRVJJTUVOVEFMX01BWCk7XG4gXHRCVUlMRF9CVUdfT04oQVJSQVlfU0laRShmZWF0dXJlcykgIT0gWEZTX0VYUEVSSU1FTlRBTF9NQVgpO1xuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5oIGIvZnMveGZzL3hmc19tZXNzYWdlLmhcbmluZGV4IDgxMWI4ODVmNDFjMzVhLi4zNjRmY2M3ZTQyYjA4NCAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfbWVzc2FnZS5oXG4rKysgYi9mcy94ZnMveGZzX21lc3NhZ2UuaFxuQEAgLTkzLDYgKzkzLDcgQEAgdm9pZCB4ZnNfYnVmX2FsZXJ0X3JhdGVsaW1pdGVkKHN0cnVjdCB4ZnNfYnVmICpicCwgY29uc3QgY2hhciAqcmxtc2csXG4gZW51bSB4ZnNfZXhwZXJpbWVudGFsX2ZlYXQge1xuIFx0WEZTX0VYUEVSSU1FTlRBTF9TSFJJTkssXG4gXHRYRlNfRVhQRVJJTUVOVEFMX0xBUlAsXG4rXHRYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZLFxuIFxuIFx0WEZTX0VYUEVSSU1FTlRBTF9NQVgsXG4gfTtcbmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmhcbmluZGV4IDY2YTAyZDFiOWFkN2ExLi44NzVjOWIwZjhlOTkxZiAxMDA2NDRcbi0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaFxuKysrIGIvZnMveGZzL3hmc19tb3VudC5oXG5AQCAtMzg4LDYgKzM4OCw3IEBAIHR5cGVkZWYgc3RydWN0IHhmc19tb3VudCB7XG4gI2RlZmluZSBYRlNfRkVBVF9FWENIQU5HRV9SQU5HRVx0KDFVTEwgXHUwMDNjXHUwMDNjIDI3KVx0LyogZXhjaGFuZ2UgcmFuZ2UgKi9cbiAjZGVmaW5lIFhGU19GRUFUX01FVEFESVJcdCgxVUxMIFx1MDAzY1x1MDAzYyAyOClcdC8qIG1ldGFkYXRhIGRpcmVjdG9yeSB0cmVlICovXG4gI2RlZmluZSBYRlNfRkVBVF9aT05FRFx0XHQoMVVMTCBcdTAwM2NcdTAwM2MgMjkpXHQvKiB6b25lZCBSVCBkZXZpY2UgKi9cbisjZGVmaW5lIFhGU19GRUFUX1ZFUklUWVx0XHQoMVVMTCBcdTAwM2NcdTAwM2MgMzApXHQvKiBmcy12ZXJpdHkgKi9cbiBcbiAvKiBNb3VudCBmZWF0dXJlcyAqL1xuICNkZWZpbmUgWEZTX0ZFQVRfTk9MSUZFVElNRVx0KDFVTEwgXHUwMDNjXHUwMDNjIDQ3KVx0LyogZGlzYWJsZSBsaWZldGltZSBoaW50cyAqL1xuQEAgLTQ0NSw2ICs0NDYsNyBAQCBfX1hGU19IQVNfRkVBVChleGNoYW5nZV9yYW5nZSwgRVhDSEFOR0VfUkFOR0UpXG4gX19YRlNfSEFTX0ZFQVQobWV0YWRpciwgTUVUQURJUilcbiBfX1hGU19IQVNfRkVBVCh6b25lZCwgWk9ORUQpXG4gX19YRlNfSEFTX0ZFQVQobm9saWZldGltZSwgTk9MSUZFVElNRSlcbitfX1hGU19IQVNfRkVBVCh2ZXJpdHksIFZFUklUWSlcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgeGZzX2hhc19ydGdyb3Vwcyhjb25zdCBzdHJ1Y3QgeGZzX21vdW50ICptcClcbiB7XG5AQCAtNTgyLDYgKzU4NCw4IEBAIF9fWEZTX0hBU19GRUFUKG5vdXVpZCwgTk9VVUlEKVxuICNkZWZpbmUgWEZTX09QU1RBVEVfUkVTVU1JTkdfUVVPVEFPTlx0MThcbiAvKiAoWm9uZWQpIEdDIGlzIGluIHByb2dyZXNzICovXG4gI2RlZmluZSBYRlNfT1BTVEFURV9aT05FR0NfUlVOTklOR1x0MjBcbisvKiBLZXJuZWwgaGFzIGxvZ2dlZCBhIHdhcm5pbmcgYWJvdXQgZnN2ZXJpdHkgc3VwcG9ydCAqL1xuKyNkZWZpbmUgWEZTX09QU1RBVEVfV0FSTkVEX0ZTVkVSSVRZXHQyMVxuIFxuICNkZWZpbmUgX19YRlNfSVNfT1BTVEFURShuYW1lLCBOQU1FKSBcXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB4ZnNfaXNfICMjIG5hbWUgKHN0cnVjdCB4ZnNfbW91bnQgKm1wKSBcXFxuZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfc3VwZXIuYyBiL2ZzL3hmcy94ZnNfc3VwZXIuY1xuaW5kZXggODUzMWQ1MjZmYzQ0MDkuLmE3Nzc0ZDJkNmIyM2ZjIDEwMDY0NFxuLS0tIGEvZnMveGZzL3hmc19zdXBlci5jXG4rKysgYi9mcy94ZnMveGZzX3N1cGVyLmNcbkBAIC0zMCw2ICszMCw3IEBAXG4gI2luY2x1ZGUgXCJ4ZnNfZmlsZXN0cmVhbS5oXCJcbiAjaW5jbHVkZSBcInhmc19xdW90YS5oXCJcbiAjaW5jbHVkZSBcInhmc19zeXNmcy5oXCJcbisjaW5jbHVkZSBcInhmc19mc3Zlcml0eS5oXCJcbiAjaW5jbHVkZSBcInhmc19vbmRpc2suaFwiXG4gI2luY2x1ZGUgXCJ4ZnNfcm1hcF9pdGVtLmhcIlxuICNpbmNsdWRlIFwieGZzX3JlZmNvdW50X2l0ZW0uaFwiXG5AQCAtMTY4OSw2ICsxNjkwLDkgQEAgeGZzX2ZzX2ZpbGxfc3VwZXIoXG4gXHRzYi1cdTAwM2VzX3F1b3RhX3R5cGVzID0gUVRZUEVfTUFTS19VU1IgfCBRVFlQRV9NQVNLX0dSUCB8IFFUWVBFX01BU0tfUFJKO1xuICNlbmRpZlxuIFx0c2ItXHUwMDNlc19vcCA9IFx1MDAyNnhmc19zdXBlcl9vcGVyYXRpb25zO1xuKyNpZmRlZiBDT05GSUdfRlNfVkVSSVRZXG4rXHRzYi1cdTAwM2VzX3ZvcCA9IFx1MDAyNnhmc19mc3Zlcml0eV9vcHM7XG4rI2VuZGlmXG4gXG4gXHQvKlxuIFx0ICogRGVsYXkgbW91bnQgd29yayBpZiB0aGUgZGVidWcgaG9vayBpcyBzZXQuIFRoaXMgaXMgZGVidWdcbkBAIC0xOTQxLDYgKzE5NDUsOSBAQCB4ZnNfZnNfZmlsbF9zdXBlcihcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBvdXRfZmlsZXN0cmVhbV91bm1vdW50O1xuIFxuK1x0aWYgKHhmc19oYXNfdmVyaXR5KG1wKSlcbitcdFx0eGZzX3dhcm5fZXhwZXJpbWVudGFsKG1wLCBYRlNfRVhQRVJJTUVOVEFMX0ZTVkVSSVRZKTtcbitcbiBcdHJvb3QgPSBpZ3JhYihWRlNfSShtcC1cdTAwM2VtX3Jvb3RpcCkpO1xuIFx0aWYgKCFyb290KSB7XG4gXHRcdGVycm9yID0gLUVOT0VOVDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmggYi9pbmNsdWRlL2xpbnV4L2ZzdmVyaXR5LmhcbmluZGV4IDZjNDY3ZGVkOTc1MWZjLi5mOTQzMzMzMmMyNzRiYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZnN2ZXJpdHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9mc3Zlcml0eS5oXG5AQCAtMTI0LDYgKzEyNCw4IEBAIHN0cnVjdCBmc3Zlcml0eV9vcGVyYXRpb25zIHtcbiBcdCAqIEBidWY6IHRoZSBNZXJrbGUgdHJlZSBibG9jayB0byB3cml0ZVxuIFx0ICogQHBvczogdGhlIHBvc2l0aW9uIG9mIHRoZSBibG9jayBpbiB0aGUgTWVya2xlIHRyZWUgKGluIGJ5dGVzKVxuIFx0ICogQHNpemU6IHRoZSBNZXJrbGUgdHJlZSBibG9jayBzaXplIChpbiBieXRlcylcbitcdCAqIEB6ZXJvX2RpZ2VzdDogdGhlIGhhc2ggb2YgdGhlIGFsbC16ZXJvZXMgYmxvY2tcbitcdCAqIEBkaWdlc3Rfc2l6ZTogc2l6ZSBvZiB6ZXJvX2RpZ2VzdCwgaW4gYnl0ZXNcbiBcdCAqXG4gXHQgKiBUaGlzIGlzIG9ubHkgY2FsbGVkIGJldHdlZW4gLVx1MDAzZWJlZ2luX2VuYWJsZV92ZXJpdHkoKSBhbmRcbiBcdCAqIC1cdTAwM2VlbmRfZW5hYmxlX3Zlcml0eSgpLlxuQEAgLTEzMSw3ICsxMzMsOSBAQCBzdHJ1Y3QgZnN2ZXJpdHlfb3BlcmF0aW9ucyB7XG4gXHQgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLWVycm5vIG9uIGZhaWx1cmVcbiBcdCAqL1xuIFx0aW50ICgqd3JpdGVfbWVya2xlX3RyZWVfYmxvY2spKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICpidWYsXG4tXHRcdFx0XHQgICAgICAgdTY0IHBvcywgdW5zaWduZWQgaW50IHNpemUpO1xuK1x0XHRcdFx0ICAgICAgIHU2NCBwb3MsIHVuc2lnbmVkIGludCBzaXplLFxuK1x0XHRcdFx0ICAgICAgIGNvbnN0IHU4ICp6ZXJvX2RpZ2VzdCxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgZGlnZXN0X3NpemUpO1xuIH07XG4gXG4gI2lmZGVmIENPTkZJR19GU19WRVJJVFlcbkBAIC0zMTcsMTAgKzMyMSwxNCBAQCBzdGF0aWMgaW5saW5lIGludCBmc3Zlcml0eV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4raW50IGZzdmVyaXR5X2Vuc3VyZV92ZXJpdHlfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbitcbiB2b2lkIGZzdmVyaXR5X2NsZWFudXBfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7XG4gXG4gc3RydWN0IHBhZ2UgKmdlbmVyaWNfcmVhZF9tZXJrbGVfdHJlZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgpO1xuIHZvaWQgZ2VuZXJpY19yZWFkYWhlYWRfbWVya2xlX3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuK2ludCBmc3Zlcml0eV9wYWdlY2FjaGVfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCxcbitcdFx0XHQgICAgbG9mZl90IHBvcyk7XG4gXG4gI2VuZGlmXHQvKiBfTElOVVhfRlNWRVJJVFlfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuaW5kZXggNTZiNDNkNTk0ZTZlMjkuLjM2ZmM5MzEzODJhODc2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbkBAIC0xMCw2ICsxMCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1fdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jsa2Rldi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZm9saW9fYmF0Y2guaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3Rfc29ydC5oXHUwMDNlXG4gXG4gc3RydWN0IGFkZHJlc3Nfc3BhY2U7XG4gc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbztcbkBAIC00ODgsNyArNDg5LDkgQEAgc3RydWN0IGlvbWFwX2lvZW5kICppb21hcF9zcGxpdF9pb2VuZChzdHJ1Y3QgaW9tYXBfaW9lbmQgKmlvZW5kLFxuIHZvaWQgaW9tYXBfZmluaXNoX2lvZW5kcyhzdHJ1Y3QgaW9tYXBfaW9lbmQgKmlvZW5kLCBpbnQgZXJyb3IpO1xuIHZvaWQgaW9tYXBfaW9lbmRfdHJ5X21lcmdlKHN0cnVjdCBpb21hcF9pb2VuZCAqaW9lbmQsXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKm1vcmVfaW9lbmRzKTtcbi12b2lkIGlvbWFwX3NvcnRfaW9lbmRzKHN0cnVjdCBsaXN0X2hlYWQgKmlvZW5kX2xpc3QpO1xuK2ludCBpb21hcF9pb2VuZF9jb21wYXJlKHZvaWQgKnByaXYsIGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmEsXG4rXHRcdGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmIpO1xuK3ZvaWQgaW9tYXBfc29ydF9pb2VuZHMoc3RydWN0IGxpc3RfaGVhZCAqaW9lbmRfbGlzdCwgbGlzdF9jbXBfZnVuY190IGNtcCk7XG4gc3NpemVfdCBpb21hcF9hZGRfdG9faW9lbmQoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0bG9mZl90IHBvcywgbG9mZl90IGVuZF9wb3MsIHVuc2lnbmVkIGludCBkaXJ0eV9sZW4pO1xuIGludCBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0KHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsIGludCBlcnJvcik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxMzo1ODo0My43MDY0Nzc1NjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODI5NzI4Njg3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipYRlMgZnMtdmVyaXR5IFBhdGNoIEFuYWx5c2lzIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gd2UndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgYWRkaW5nIGZzLXZlcml0eSBzdXBwb3J0IHRvIFhGUy4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGFkZGl0aW9uLCBzbyBsZXQncyBicmVhayBpdCBkb3duLiBSaWdodCBhd2F5LCBJJ20gbm90aWNpbmcgbW9kaWZpY2F0aW9ucyBhY3Jvc3MgbXVsdGlwbGUgZmlsZSBzeXN0ZW1zIOKAkyBgZnMveGZzL2AsIGBmcy92ZXJpdHkvYCwgYW5kIGV2ZW4gdG91Y2hlcyBpbiBgZnMvZXh0NC9gLCBgZnMvYnRyZnMvYCwgYW5kIGBmcy9mMmZzL2AuIFRoZSBmYWN0IHRoYXQgYGZzL3Zlcml0eS9gIGlzIGJlaW5nIHRvdWNoZWQgaXMgaW50ZXJlc3RpbmcsIGFsb25nIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBgZnMveGZzL3hmc19mc3Zlcml0eS5jYC4gQWRkaXRpb25hbGx5LCB3ZSBzZWUgY2hhbmdlcyBpbiBgZnMvYXR0ci5jYCwgYGZzL3N0YXQuY2AsIGBmcy9maWxlX2F0dHIuY2AsIGFuZCBgZnMvaW9tYXAvaW9lbmQuY2Ag4oCTIHRoaXMgdGhpbmcncyBnb3QgaXRzIGZpbmdlcnMgaW4gYSBsb3Qgb2YgcGllcy5cblxuRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgZW5hYmxpbmcgZnMtdmVyaXR5IGFzIGEgbmV3IGZlYXR1cmUgZm9yIFhGUywgd2hpY2ggbWVhbnMgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlIGFuZCwgdGhlcmVmb3JlLCBmdXp6YWJsZS4gTXkgaW5pdGlhbCBzdHJhdGVneSBpcyB0byBpZGVudGlmeSB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLiBgQ09ORklHX0ZTX1ZFUklUWWAgaXMgYW4gb2J2aW91cyBwcmVyZXF1aXNpdGUuIEFuZCwgb2YgY291cnNlLCBgQ09ORklHX1hGU19GU2AgaXMgcmVxdWlyZWQuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGNvcmUgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb24uIEknbSBzZWVpbmcgYSBoYW5kZnVsIHRoYXQgbG9vayBwYXJ0aWN1bGFybHkgcmVsZXZhbnQ6IGB4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3JgLCBgeGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3JgLCBgeGZzX2ZzdmVyaXR5X2RlbGV0ZV9tZXRhZGF0YWAsIGB4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbmAsIGB4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlYCwgYHhmc19mc3Zlcml0eV9lbmRfZW5hYmxlYCwgYHhmc19mc3Zlcml0eV9yZWFkX21lcmtsZWAsIGB4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlYCwgYHhmc19mc3Zlcml0eV93cml0ZV9tZXJrbGVgLCBhcyB3ZWxsIGFzIHN0YW5kYXJkIHJlYWQvd3JpdGUvb3BlbiByb3V0aW5lcyBsaWtlIGB4ZnNfZmlsZV9idWZmZXJlZF9yZWFkYCwgYHhmc19maWxlX2Rpb19yZWFkYCwgYHhmc19maWxlX3JlYWRfaXRlcmAsIGB4ZnNfZmlsZV9vcGVuYCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgbGlrZSBgeGZzX2ZzdmVyaXR5X21ldGFkYXRhX29mZnNldGAgYW5kIGB4ZnNfZnN2ZXJpdHlfaXNfZmlsZV9kYXRhYC5cblxuSSB3YW50IHRvIGNvbmZpcm0gd2hldGhlciBgQ09ORklHX0ZTX1ZFUklUWWAgaXMgdGhlIG9ubHkgY29uZmlnIHRoYXQncyByZXF1aXJlZC4gSSdsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgWEZTIEtjb25maWcgb3IgTWFrZWZpbGUuIFRoZSBwYXRjaCBhZGRzIGB4ZnMtJChDT05GSUdfRlNfVkVSSVRZKSArPSB4ZnNfZnN2ZXJpdHkub2AsIHNvIHRoYXQgY29uZmlybXMgaXQuXG5cbk5vdywgSSdtIGxvb2tpbmcgZm9yIGFueSBub3RhYmxlIGNoYW5nZXMgaW4gdGhlIGV4aXN0aW5nIGBmcy92ZXJpdHkvYCBjb2RlLiBgZnN2ZXJpdHlfZW5zdXJlX3Zlcml0eV9pbmZvYCwgYGZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkYCwgYW5kIGBmc3Zlcml0eV9maWxsX3plcm9oYXNoYCBsb29rIGxpa2UgdGhleSBjb3VsZCBiZSB3b3J0aCBhIGNsb3NlciBsb29rIGZvciBpbnRlcmFjdGlvbnMuXG5cbkknbSBhbHNvIHNlZWluZyBzb21lIGZzLXZlcml0eS1yZWxhdGVkIGFkZGl0aW9ucyBvciBtb2RpZmljYXRpb25zIGluIG90aGVyIFhGUyBzdWItc3lzdGVtcy4gSW4gYGZzL3hmcy9zY3J1Yi9jb21tb24uY2AsIHRoZXJlJ3MgYHhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5YCBhbmQgYHhjaGtfaW5vZGVfdmVyaXR5X2Jyb2tlbmAuIEluIGBmcy94ZnMvc2NydWIvaW5vZGVfcmVwYWlyLmNgLCB0aGVyZSBpcyBgeHJlcF9pbm9kZV92ZXJpdHlgLiBJbiBgZnMveGZzL3hmc19hb3BzLmNgLCBJIHNlZSBgeGZzX3JlYWRfaW9lbmRfY29tcGFyZWAsIGB4ZnNfZW5kX2lvZW5kX3JlYWRgLCBhbmQgYHhmc19pb21hcF93cml0ZXBhZ2VzYCBiZWluZyB0b3VjaGVkLiBBbmQgZmluYWxseSwgSSBzZWUgYHhmc196b25lZF9idWZmZXJlZF93cml0ZV9pb21hcF9iZWdpbmAgaW4gYGZzL3hmcy94ZnNfaW9tYXAuY2AsIGFsb25nIHdpdGggYHhmc19maWxlX2J1ZmZlcmVkX3JlYWRgIGluIGBmcy94ZnMveGZzX2ZpbGUuY2AuXG5cbk9rYXksIGJhc2VkIG9uIHRoaXMgaW5pdGlhbCBzd2VlcCwgSSdsbCBjb21waWxlIGEgYEZvY3VzU3ltYm9sc2AgbGlzdCBmb3IgdGhlIGZ1enppbmcgY2FtcGFpZ24uIEknbSBnb2luZyB0byBpbmNsdWRlOlxuXG4tIGB4ZnNfZnN2ZXJpdHlfYmVnaW5fZW5hYmxlYFxuLSBgeGZzX2ZzdmVyaXR5X2VuZF9lbmFibGVgXG4tIGB4ZnNfZnN2ZXJpdHlfZ2V0X2Rlc2NyaXB0b3JgXG4tIGB4ZnNfZnN2ZXJpdHlfcmVhZF9tZXJrbGVgXG4tIGB4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlYFxuLSBgeGZzX2ZzdmVyaXR5X3dyaXRlX21lcmtsZWBcbi0gYHhmc19mc3Zlcml0eV9kZWxldGVfbWV0YWRhdGFgXG4tIGB4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlbmBcbi0gYHhmc19mc3Zlcml0eV93cml0ZV9kZXNjcmlwdG9yYFxuLSBgeGNoa19pbm9kZV9zZXR1cF92ZXJpdHlgXG4tXG5cbiIsIklucHV0VG9rZW5zIjozMTU2OSwiT3V0cHV0VG9rZW5zIjozMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjI2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTM6NTk6MDIuMDAzNzY3Mjc1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzczMzcyMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTX1ZFUklUWVwiLFxuICAgIFwiWEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZVwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X2VuZF9lbmFibGVcIixcbiAgICBcInhmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvclwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlblwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3JcIixcbiAgICBcInhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5XCIsXG4gICAgXCJ4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW5cIixcbiAgICBcInhyZXBfaW5vZGVfdmVyaXR5XCIsXG4gICAgXCJ4ZnNfcmVhZF9pb2VuZF9jb21wYXJlXCIsXG4gICAgXCJ4ZnNfZW5kX2lvZW5kX3JlYWRcIixcbiAgICBcInhmc19pb21hcF93cml0ZXBhZ2VzXCIsXG4gICAgXCJmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm9cIixcbiAgICBcImZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBmcy12ZXJpdHkgc3VwcG9ydCBmb3IgdGhlIFhGUyBmaWxlc3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZpbGUgYGZzL3hmcy94ZnNfZnN2ZXJpdHkuY2Agd2l0aCB0aGUgY29yZSBsb2dpYywgbW9kaWZpZXMgWEZTIEkvTyBwYXRocywgYW5kIGludGVncmF0ZXMgd2l0aCB0aGUgZ2VuZXJpYyBmcy12ZXJpdHkgbGF5ZXIuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZTX1ZFUklUWVwiLFxuICAgIFwiWEZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieGZzX2ZzdmVyaXR5X2JlZ2luX2VuYWJsZVwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X2VuZF9lbmFibGVcIixcbiAgICBcInhmc19mc3Zlcml0eV9nZXRfZGVzY3JpcHRvclwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3JlYWRfbWVya2xlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfcmVhZGFoZWFkX21lcmtsZV90cmVlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfd3JpdGVfbWVya2xlXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfZGVsZXRlX21ldGFkYXRhXCIsXG4gICAgXCJ4ZnNfZnN2ZXJpdHlfY2FuY2VsX3Vud3JpdHRlblwiLFxuICAgIFwieGZzX2ZzdmVyaXR5X3dyaXRlX2Rlc2NyaXB0b3JcIixcbiAgICBcInhjaGtfaW5vZGVfc2V0dXBfdmVyaXR5XCIsXG4gICAgXCJ4Y2hrX2lub2RlX3Zlcml0eV9icm9rZW5cIixcbiAgICBcInhyZXBfaW5vZGVfdmVyaXR5XCIsXG4gICAgXCJ4ZnNfcmVhZF9pb2VuZF9jb21wYXJlXCIsXG4gICAgXCJ4ZnNfZW5kX2lvZW5kX3JlYWRcIixcbiAgICBcInhmc19pb21hcF93cml0ZXBhZ2VzXCIsXG4gICAgXCJmc3Zlcml0eV9lbnN1cmVfdmVyaXR5X2luZm9cIixcbiAgICBcImZzdmVyaXR5X3BhZ2VjYWNoZV9yZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW1wbGVtZW50cyBmcy12ZXJpdHkgc3VwcG9ydCBmb3IgdGhlIFhGUyBmaWxlc3lzdGVtLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZpbGUgYGZzL3hmcy94ZnNfZnN2ZXJpdHkuY2Agd2l0aCB0aGUgY29yZSBsb2dpYywgbW9kaWZpZXMgWEZTIEkvTyBwYXRocywgYW5kIGludGVncmF0ZXMgd2l0aCB0aGUgZ2VuZXJpYyBmcy12ZXJpdHkgbGF5ZXIuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowtbg6t[1] Phase: Succeeded StartedAt: 2026-07-22 13:59:14 +0000 UTC FinishedAt: 2026-07-22 13:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-22 13:59:14 +0000 UTC FinishedAt: 2026-07-22 13:59:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2] Phase: Succeeded StartedAt: 2026-07-22 13:59:14 +0000 UTC FinishedAt: 2026-07-22 18:04:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-22 13:59:14 +0000 UTC FinishedAt: 2026-07-22 18:04:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-22 13:59:14 +0000 UTC FinishedAt: 2026-07-22 13:59:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-22 13:59:14 +0000 UTC FinishedAt: 2026-07-22 13:59:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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-workflowtbg6t/series-workflowtbg6t-convert-artifact-2238163054/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-22 13:59:35 +0000 UTC FinishedAt: 2026-07-22 14:30:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-22 13:59:35 +0000 UTC FinishedAt: 2026-07-22 14:30:51 +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:*7c769605-f67e-45e4-a249-e3768232c2ef,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-workflowtbg6t/series-workflowtbg6t-convert-artifact-2238163054/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": "0369508d-44d3-4352-9eee-9224d69a628d", "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-workflowtbg6t/series-workflowtbg6t-build-action-94891988/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-22 13:59:35 +0000 UTC FinishedAt: 2026-07-22 14:30:41 +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:*7c769605-f67e-45e4-a249-e3768232c2ef,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-workflowtbg6t/series-workflowtbg6t-convert-artifact-2238163054/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": "0369508d-44d3-4352-9eee-9224d69a628d", "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-workflowtbg6t/series-workflowtbg6t-build-action-94891988/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-22 14:30:51 +0000 UTC FinishedAt: 2026-07-22 14:30:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-22 14:30:51 +0000 UTC FinishedAt: 2026-07-22 14:30:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-22 14:30:51 +0000 UTC FinishedAt: 2026-07-22 14:31:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-22 14:30:51 +0000 UTC FinishedAt: 2026-07-22 14:31:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","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-workflowtbg6t/series-workflowtbg6t-convert-artifact-2090948449/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-22 14:31:13 +0000 UTC FinishedAt: 2026-07-22 14:33:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-22 14:31:13 +0000 UTC FinishedAt: 2026-07-22 14:33:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0369508d-44d3-4352-9eee-9224d69a628d,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-workflowtbg6t/series-workflowtbg6t-build-action-94891988/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-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-22 14:33:17 +0000 UTC FinishedAt: 2026-07-22 14:33:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-22 14:33:17 +0000 UTC FinishedAt: 2026-07-22 14:33:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-22 14:33:17 +0000 UTC FinishedAt: 2026-07-22 14:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-22 14:33:17 +0000 UTC FinishedAt: 2026-07-22 14:58:55 +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:*7c769605-f67e-45e4-a249-e3768232c2ef,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-workflowtbg6t/series-workflowtbg6t-convert-artifact-2090948449/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": "610b096f-c117-49ec-9a2b-94b75eb0a0d9", "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-workflowtbg6t/series-workflowtbg6t-build-action-2641942637/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-22 14:33:17 +0000 UTC FinishedAt: 2026-07-22 14:58:45 +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:*7c769605-f67e-45e4-a249-e3768232c2ef,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-workflowtbg6t/series-workflowtbg6t-convert-artifact-2090948449/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": "610b096f-c117-49ec-9a2b-94b75eb0a0d9", "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-workflowtbg6t/series-workflowtbg6t-build-action-2641942637/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-22 14:58:55 +0000 UTC FinishedAt: 2026-07-22 14:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-22 14:58:55 +0000 UTC FinishedAt: 2026-07-22 14:58:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-22 14:58:55 +0000 UTC FinishedAt: 2026-07-22 15:01:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-22 14:58:55 +0000 UTC FinishedAt: 2026-07-22 15:00:51 +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:*610b096f-c117-49ec-9a2b-94b75eb0a0d9,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-workflowtbg6t/series-workflowtbg6t-build-action-2641942637/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-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-22 15:01:01 +0000 UTC FinishedAt: 2026-07-22 18:04:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-22 15:01:01 +0000 UTC FinishedAt: 2026-07-22 18:04:28 +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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*0369508d-44d3-4352-9eee-9224d69a628d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*610b096f-c117-49ec-9a2b-94b75eb0a0d9,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-workflowtbg6t/series-workflowtbg6t-build-action-94891988/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-workflowtbg6t/series-workflowtbg6t-build-action-2641942637/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-22 15:01:01 +0000 UTC FinishedAt: 2026-07-22 15:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-22 15:01:01 +0000 UTC FinishedAt: 2026-07-22 15:01:20 +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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtbg6t/series-workflowtbg6t-convert-artifact-2423103222/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-22 15:01:01 +0000 UTC FinishedAt: 2026-07-22 15:01:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-22 15:01:01 +0000 UTC FinishedAt: 2026-07-22 15:01:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-22 15:01:02 +0000 UTC FinishedAt: 2026-07-22 15:01:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-22 15:01:28 +0000 UTC FinishedAt: 2026-07-22 18:04:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtbg6t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_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":["xfs_fsverity_begin_enable","xfs_fsverity_end_enable","xfs_fsverity_get_descriptor","xfs_fsverity_read_merkle","xfs_fsverity_readahead_merkle_tree","xfs_fsverity_write_merkle","xfs_fsverity_delete_metadata","xfs_fsverity_cancel_unwritten","xfs_fsverity_write_descriptor","xchk_inode_setup_verity","xchk_inode_verity_broken","xrep_inode_verity","xfs_read_ioend_compare","xfs_end_ioend_read","xfs_iomap_writepages","fsverity_ensure_verity_info","fsverity_pagecache_read"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e61e6fd4f139f2342a6bc86da602df7456ef87f6","config_name":"upstream-apparmor-kasan.config","enable_configs":["FS_VERITY","XFS_FS"],"series_id":"f9af06ff-2752-4dc6-89f9-dbc566fd8f0d","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-22 15:01:28 +0000 UTC FinishedAt: 2026-07-22 18:04:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0369508d-44d3-4352-9eee-9224d69a628d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*610b096f-c117-49ec-9a2b-94b75eb0a0d9,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-workflowtbg6t/series-workflowtbg6t-build-action-94891988/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-workflowtbg6t/series-workflowtbg6t-build-action-2641942637/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-workflowtbg6t/series-workflowtbg6t-convert-artifact-2423103222/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,}