Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754185AbcK1DLY (ORCPT ); Sun, 27 Nov 2016 22:11:24 -0500 Received: from youngberry.canonical.com ([91.189.89.112]:60611 "EHLO youngberry.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753884AbcK1DLQ (ORCPT ); Sun, 27 Nov 2016 22:11:16 -0500 MIME-Version: 1.0 From: Ming Lei Date: Mon, 28 Nov 2016 11:10:14 +0800 X-Gmail-Original-Message-ID: Message-ID: Subject: [bug report v4.8] fs/locks.c: kernel oops during posix lock stress test To: Linux FS Devel , Alexander Viro , Jeff Layton , "J. Bruce Fields" , Will Deacon , Catalin Marinas Cc: Linux Kernel Mailing List , linux-arm-kernel Content-Type: multipart/mixed; boundary=001a113e45ce89c092054253cf50 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 13729 Lines: 246 --001a113e45ce89c092054253cf50 Content-Type: text/plain; charset=UTF-8 Hi Guys, When I run stress-ng via the following steps on one ARM64 dual socket system(Cavium Thunder), the kernel oops[1] can often be triggered after running the stress test for several hours(sometimes it may take longer): - git clone git://kernel.ubuntu.com/cking/stress-ng.git - apply the attachment patch which just makes the posix file lock stress test more aggressive - run the test via '~/git/stress-ng$./stress-ng --lockf 128 --aggressive' >From the oops log, looks one garbage file_lock node is got from the linked list of 'ctx->flc_posix' when the issue happens. BTW, the issue isn't observed on single socket Cavium Thunder yet, and the same issue can be seen on Ubuntu Xenial(v4.4 based kernel) too. Thanks, Ming [1] kernel oops log ubuntu@ubuntu:~/git/stress-ng$ ./stress-ng --lockf 128 --aggressive stress-ng: info: [63828] defaulting to a 86400 second run per stressor stress-ng: info: [63828] dispatching hogs: 128 lockf stress-ng: info: [63828] cache allocate: default cache size: 16384K [80659.799092] Unable to handle kernel NULL pointer dereference at virtual address 00000030 [80659.807219] pgd = ffff81001f365800 [80659.810683] [00000030] *pgd=000001001a290003, *pud=000001001a290003, *pmd=0000010fa07f0003, *pte=0000000000000000 [80659.821029] Internal error: Oops: 96000007 [#1] SMP [80659.825901] Modules linked in: [80659.828962] CPU: 15 PID: 63848 Comm: stress-ng-lockf Tainted: G W 4.8.0 #167 [80659.837132] Hardware name: Cavium ThunderX CRB/To be filled by O.E.M., BIOS 5.11 12/12/2012 [80659.845479] task: ffff81001ee78580 task.stack: ffff81001f798000 [80659.851402] PC is at posix_locks_conflict+0x94/0xc0 [80659.856282] LR is at posix_lock_inode+0x90/0x6b0 [80659.860896] pc : [] lr : [] pstate: a0000145 [80659.868285] sp : ffff81001f79bca0 [80659.871596] x29: ffff81001f79bca0 x28: ffff81001f798000 [80659.876915] x27: ffff800fdffbc160 x26: 0000000000000000 [80659.882234] x25: ffff800fd2da2b30 x24: ffff800fce927430 [80659.887551] x23: ffff800fce92d8f0 x22: ffff81001f79bd30 [80659.892869] x21: ffff800fd2da2b18 x20: fffffffffffffff8 [80659.898187] x19: ffff800fdffbc160 x18: 0000000000001140 [80659.903504] x17: 0000ffff8870a578 x16: ffff000008245768 [80659.908821] x15: 0000ffff888bc000 x14: 0000000000000000 [80659.914139] x13: 00000003e8000000 x12: 0000000000000018 [80659.919457] x11: 00000000000e6a17 x10: 00000000ffffffd0 [80659.924776] x9 : 0000000000000000 x8 : ffff800fce927500 [80659.930094] x7 : 0000000000000000 x6 : 000000000000007f [80659.935413] x5 : 0000000000000080 x4 : ffff800fce927438 [80659.940729] x3 : ffff800fce927458 x2 : 00000000000026b9 [80659.946047] x1 : ffff81001f37f300 x0 : 0000000000000000 [80659.951363] [80659.952851] Process stress-ng-lockf (pid: 63848, stack limit = 0xffff81001f798020) [80659.960415] Stack: (0xffff81001f79bca0 to 0xffff81001f79c000) [80659.966158] bca0: ffff81001f79bcc0 ffff00000828cd90 fffffffffffffff8 ffff800fa3a66568 [80659.973986] bcc0: ffff81001f79bd40 ffff00000828d5f0 ffff800f8185c700 ffff800fdffbc160 [80659.981812] bce0: 0000000000000006 0000000000000000 ffff81001f79bdd0 0000000000000006 [80659.989638] bd00: 0000000000000120 0000000000000019 ffff0000088b1000 ffff81001f798000 [80659.997465] bd20: ffff81001f79bd40 ffff000008403fec ffff81001f79bd30 ffff81001f79bd30 [80660.005292] bd40: ffff81001f79bd70 ffff00000828d8bc ffff800f8185c700 ffff800fdffbc160 [80660.013118] bd60: ffff800fdffbc1b8 ffff800f8185c700 ffff81001f79bde0 ffff00000828ef10 [80660.020944] bd80: ffff800f8185c700 0000000000000000 ffff800fdffbc160 ffff800fa3a66568 [80660.028770] bda0: 0000000000000006 0000000000000004 ffff81001f79bde0 ffff00000828ee14 [80660.036596] bdc0: ffff800f8185c700 00000000fffffff2 ffff800fdffbc160 ffff810ff99aae80 [80660.044423] bde0: ffff81001f79be70 ffff000008245b84 ffff800f8185c700 ffff800f8185c700 [80660.052249] be00: 0000000000000000 0000000000000006 0000ffffdad5d4b0 0000000000000004 [80660.060087] be20: 0000000000000120 000000000000003e 0000000000010001 0000000000000000 [80660.067916] be40: 0000000000000008 0000000000000000 0000000000010001 0000000000000000 [80660.075742] be60: 0000000000000008 0000000000000000 0000000000000000 ffff0000080836f0 [80660.083568] be80: 0000000000000000 00000000005c5000 ffffffffffffffff 0000ffff8870a3b8 [80660.091394] bea0: 0000000080000000 0000000000000015 0000000080000000 00000000005c5000 [80660.099220] bec0: 0000000000000004 0000000000000006 0000ffffdad5d4b0 00000000ffffff80 [80660.107046] bee0: 0000ffffdad5d490 0000000026c26373 000000000000176f 0000000000004650 [80660.114873] bf00: 0000000000000019 0000000000006536 00000000ffffffd0 00000000000e6a17 [80660.122698] bf20: 0000000000000018 00000003e8000000 0000000000000000 0000ffff888bc000 [80660.130524] bf40: 000000000048a170 0000ffff8870a578 0000000000001140 000000000000055f [80660.138351] bf60: 00000000005c5000 0000000000000004 0000ffff879f9008 0000000000000000 [80660.146177] bf80: 0000000000000002 000000000048b530 2001000800400201 0000ffffdad60758 [80660.154004] bfa0: 000000000048b008 0000ffffdad5d390 0000ffff8870a518 0000ffffdad5d390 [80660.161830] bfc0: 0000ffff8870a3b8 0000000080000000 0000000000000004 0000000000000019 [80660.169656] bfe0: 0000000000000000 0000000000000000 0000000000000000 0000000000000000 [80660.177481] Call trace: [80660.179928] Exception stack(0xffff81001f79bad0 to 0xffff81001f79bc00) [80660.186365] bac0: ffff800fdffbc160 0001000000000000 [80660.194192] bae0: ffff81001f79bca0 ffff00000828c694 ffff800fc0002c00 ffff81001ee78600 [80660.202017] bb00: ffff81001f79bb70 ffff00000820b57c ffff800fcb2a6d88 ffff800fc0002c00 [80660.209843] bb20: 0000000000000001 ffff810008ddbf00 ffff81001f79bc30 ffff81001f79bc30 [80660.217670] bb40: 0000000000000000 ffff810fa0712be8 ffff800f81dfd680 ffff810fa0712be8 [80660.225496] bb60: 0000000000000001 ffff810008ddbf00 0000000000000000 ffff81001f37f300 [80660.233322] bb80: 00000000000026b9 ffff800fce927458 ffff800fce927438 0000000000000080 [80660.241148] bba0: 000000000000007f 0000000000000000 ffff800fce927500 0000000000000000 [80660.248974] bbc0: 00000000ffffffd0 00000000000e6a17 0000000000000018 00000003e8000000 [80660.256800] bbe0: 0000000000000000 0000ffff888bc000 ffff000008245768 0000ffff8870a578 [80660.264636] [] posix_locks_conflict+0x94/0xc0 [80660.270559] [] posix_lock_inode+0x90/0x6b0 [80660.276220] [] vfs_lock_file+0x68/0x78 [80660.281537] [] do_lock_file_wait+0x54/0xe0 [80660.287199] [] fcntl_setlk+0x1c0/0x308 [80660.292513] [] SyS_fcntl+0x41c/0x5b8 [80660.297653] [] el0_svc_naked+0x24/0x28 [80660.302961] Code: a8c27bfd d65f03c0 d503201f f9401e61 (f9401e80) [80660.309188] ---[ end trace aa50050684d3a3fe ]--- --001a113e45ce89c092054253cf50 Content-Type: text/x-patch; charset=US-ASCII; name="stress-ng-more-aggressive.patch" Content-Disposition: attachment; filename="stress-ng-more-aggressive.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iw1hk6cb0 ZGlmZiAtLWdpdCBhL3N0cmVzcy1sb2NrZi5jIGIvc3RyZXNzLWxvY2tmLmMKaW5kZXggZmIyZjdi NWYwODVlLi4yMzJjMjY5ZDBlYzggMTAwNjQ0Ci0tLSBhL3N0cmVzcy1sb2NrZi5jCisrKyBiL3N0 cmVzcy1sb2NrZi5jCkBAIC00Myw3ICs0Myw3IEBACiAKICNkZWZpbmUgTE9DS19GSUxFX1NJWkUJ KDY0ICogMTAyNCkKICNkZWZpbmUgTE9DS19TSVpFCSg4KQotI2RlZmluZSBMT0NLX01BWAkoMTAy NCkKKyNkZWZpbmUgTE9DS19NQVgJKDgxOTIpCiAKIHR5cGVkZWYgc3RydWN0IGxvY2tmX2luZm8g ewogCW9mZl90CW9mZnNldDsKZGlmZiAtLWdpdCBhL3N0cmVzcy1uZy5jIGIvc3RyZXNzLW5nLmMK aW5kZXggN2FiMmFiMWM0MmE2Li5kZTQ4ZDJhMzQ3MzggMTAwNjQ0Ci0tLSBhL3N0cmVzcy1uZy5j CisrKyBiL3N0cmVzcy1uZy5jCkBAIC0xNjQyLDEyICsxNjQyLDIyIEBAIHN0YXRpYyB2b2lkIGtp bGxfcHJvY3MoY29uc3QgaW50IHNpZykKIAkJaW50IGo7CiAKIAkJZm9yIChqID0gMDsgaiA8IHBy b2NzW2ldLnN0YXJ0ZWRfcHJvY3M7IGorKykgewotCQkJaWYgKHByb2NzW2ldLnBpZHNbal0pCi0J CQkJKHZvaWQpa2lsbChwcm9jc1tpXS5waWRzW2pdLCBzaWdudW0pOworCQkJaWYgKHByb2NzW2ld LnBpZHNbal0ucGlkKQorCQkJCSh2b2lkKWtpbGwocHJvY3NbaV0ucGlkc1tqXS5waWQsIHNpZ251 bSk7CiAJCX0KIAl9CiB9CiAKK3N0YXRpYyBpbnQgb25fb25lX3NvY2sodW5zaWduZWQgY3B1MSwg dW5zaWduZWQgY3B1MiwgdW5zaWduZWQgY3B1cykKK3sKKwl1bnNpZ25lZCBtaWQgPSBjcHVzIC8g MjsKKwlpZiAoY3B1MSA8IG1pZCAmJiBjcHUyIDwgbWlkKQorCQlyZXR1cm4gMTsKKwlpZiAoY3B1 MSA+PSBtaWQgJiYgY3B1MiA+PSBtaWQpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiAv KgogICogIHdhaXRfcHJvY3MoKQogICogCXdhaXQgZm9yIHByb2NzCkBAIC0xNjcwLDcgKzE2ODAs OCBAQCBzdGF0aWMgdm9pZCBNTE9DS0VEIHdhaXRfcHJvY3MoYm9vbCAqc3VjY2VzcywgYm9vbCAq cmVzb3VyY2Vfc3VjY2VzcykKIAkJY3B1X3NldF90IHByb2NfbWFzazsKIAkJdW5zaWduZWQgbG9u ZyBpbnQgY3B1ID0gMDsKIAkJY29uc3QgdWludDMyX3QgdGlja3NfcGVyX3NlYyA9IHN0cmVzc19n ZXRfdGlja3NfcGVyX3NlY29uZCgpICogNTsKLQkJY29uc3QgdXNlY29uZHNfdCB1c2VjX3NsZWVw ID0gdGlja3NfcGVyX3NlYyA/IDEwMDAwMDAgLyB0aWNrc19wZXJfc2VjIDogMTAwMDAwMCAvIDI1 MDsKKwkJLy9jb25zdCB1c2Vjb25kc190IHVzZWNfc2xlZXAgPSB0aWNrc19wZXJfc2VjID8gMTAw MDAwMCAvIHRpY2tzX3Blcl9zZWMgOiAxMDAwMDAwIC8gMjUwOworCQljb25zdCB1c2Vjb25kc190 IHVzZWNfc2xlZXAgPSA1MDAwMDsKIAogCQl3aGlsZSAob3B0X2RvX3dhaXQpIHsKIAkJCWNvbnN0 IGludDMyX3QgY3B1cyA9IHN0cmVzc19nZXRfcHJvY2Vzc29yc19jb25maWd1cmVkKCk7CkBAIC0x Njg1LDcgKzE2OTYsOSBAQCBzdGF0aWMgdm9pZCBNTE9DS0VEIHdhaXRfcHJvY3MoYm9vbCAqc3Vj Y2VzcywgYm9vbCAqcmVzb3VyY2Vfc3VjY2VzcykKIAkJCQlpbnQgajsKIAogCQkJCWZvciAoaiA9 IDA7IGogPCBwcm9jc1tpXS5zdGFydGVkX3Byb2NzOyBqKyspIHsKLQkJCQkJY29uc3QgcGlkX3Qg cGlkID0gcHJvY3NbaV0ucGlkc1tqXTsKKwkJCQkJY29uc3QgcGlkX3QgcGlkID0gcHJvY3NbaV0u cGlkc1tqXS5waWQ7CisJCQkJCXVuc2lnbmVkIGxhc3RfY3B1ID0KKwkJCQkJCXByb2NzW2ldLnBp ZHNbal0ubGFzdF9jcHU7CiAJCQkJCWlmIChwaWQpIHsKIAkJCQkJCWNwdV9zZXRfdCBtYXNrOwog CQkJCQkJaW50MzJfdCBjcHVfbnVtOwpAQCAtMTY5NCwxMCArMTcwNywxNiBAQCBzdGF0aWMgdm9p ZCBNTE9DS0VEIHdhaXRfcHJvY3MoYm9vbCAqc3VjY2VzcywgYm9vbCAqcmVzb3VyY2Vfc3VjY2Vz cykKIAkJCQkJCQljcHVfbnVtID0gbXdjMzIoKSAlIGNwdXM7CiAJCQkJCQl9IHdoaWxlICghKENQ VV9JU1NFVChjcHVfbnVtLCAmcHJvY19tYXNrKSkpOwogCisJCQkJCQlpZiAob25fb25lX3NvY2so bGFzdF9jcHUsCisJCQkJCQkJCQljcHVfbnVtLAorCQkJCQkJCQkJY3B1cykpCisJCQkJCQkJY3B1 X251bSA9IGNwdXMgLSBjcHVfbnVtIC0xOworCiAJCQkJCQlDUFVfWkVSTygmbWFzayk7CiAJCQkJ CQlDUFVfU0VUKGNwdV9udW0sICZtYXNrKTsKIAkJCQkJCWlmIChzY2hlZF9zZXRhZmZpbml0eShw aWQsIHNpemVvZihtYXNrKSwgJm1hc2spIDwgMCkKIAkJCQkJCQlnb3RvIGRvX3dhaXQ7CisJCQkJ CQlwcm9jc1tpXS5waWRzW2pdLmxhc3RfY3B1ID0gY3B1X251bTsKIAkJCQkJfQogCQkJCX0KIAkJ CX0KQEAgLTE3MTMsNyArMTczMiw3IEBAIGRvX3dhaXQ6CiAJCWZvciAoaiA9IDA7IGogPCBwcm9j c1tpXS5zdGFydGVkX3Byb2NzOyBqKyspIHsKIAkJCXBpZF90IHBpZDsKIHJlZG86Ci0JCQlwaWQg PSBwcm9jc1tpXS5waWRzW2pdOworCQkJcGlkID0gcHJvY3NbaV0ucGlkc1tqXS5waWQ7CiAJCQlp ZiAocGlkKSB7CiAJCQkJaW50IHN0YXR1cywgcmV0OwogCkBAIC0xNzUyLDcgKzE3NzEsNyBAQCBy ZWRvOgogCQkJCQkJKnN1Y2Nlc3MgPSBmYWxzZTsKIAkJCQkJCWJyZWFrOwogCQkJCQl9Ci0JCQkJ CXByb2NfZmluaXNoZWQoJnByb2NzW2ldLnBpZHNbal0pOworCQkJCQlwcm9jX2ZpbmlzaGVkKCZw cm9jc1tpXS5waWRzW2pdLnBpZCk7CiAJCQkJCXByX2RiZyhzdGRlcnIsICJwcm9jZXNzIFslZF0g dGVybWluYXRlZFxuIiwgcmV0KTsKIAkJCQl9IGVsc2UgaWYgKHJldCA9PSAtMSkgewogCQkJCQkv KiBTb21lYm9keSBpbnRlcnJ1cHRlZCB0aGUgd2FpdCAqLwpAQCAtMTc2MCw3ICsxNzc5LDcgQEAg cmVkbzoKIAkJCQkJCWdvdG8gcmVkbzsKIAkJCQkJLyogVGhpcyBjaGlsZCBkaWQgbm90IGV4aXN0 LCBtYXJrIGl0IGRvbmUgYW55aG93ICovCiAJCQkJCWlmIChlcnJubyA9PSBFQ0hJTEQpCi0JCQkJ CQlwcm9jX2ZpbmlzaGVkKCZwcm9jc1tpXS5waWRzW2pdKTsKKwkJCQkJCXByb2NfZmluaXNoZWQo JnByb2NzW2ldLnBpZHNbal0ucGlkKTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTE5MDEsNyArMTky MCw3IEBAIGFnYWluOgogCQkJCWRlZmF1bHQ6CiAJCQkJCWlmIChwaWQgPiAtMSkgewogCQkJCQkJ KHZvaWQpc2V0cGdpZChwaWQsIHBncnApOwotCQkJCQkJcHJvY3NbaV0ucGlkc1tqXSA9IHBpZDsK KwkJCQkJCXByb2NzW2ldLnBpZHNbal0ucGlkID0gcGlkOwogCQkJCQkJcHJvY3NbaV0uc3RhcnRl ZF9wcm9jcysrOwogCQkJCQl9CiAKQEAgLTI5NTIsNyArMjk3MSw3IEBAIG5leHRfb3B0OgogCQkv KiBTZXF1ZW50aWFsIG1vZGUgaGFzIG5vIGJvZ28gb3BzIHRocmVzaG9sZCAqLwogCQlmb3IgKGkg PSAwOyBpIDwgU1RSRVNTX01BWDsgaSsrKSB7CiAJCQlwcm9jc1tpXS5ib2dvX29wcyA9IDA7Ci0J CQlwcm9jc1tpXS5waWRzID0gY2FsbG9jKG9wdF9zZXF1ZW50aWFsLCBzaXplb2YocGlkX3QpKTsK KwkJCXByb2NzW2ldLnBpZHMgPSBjYWxsb2Mob3B0X3NlcXVlbnRpYWwsIHNpemVvZihteV9waWRf dCkpOwogCQkJaWYgKCFwcm9jc1tpXS5waWRzKSB7CiAJCQkJcHJfZXJyKHN0ZGVyciwgImNhbm5v dCBhbGxvY2F0ZSBwaWQgbGlzdFxuIik7CiAJCQkJZnJlZV9wcm9jcygpOwpAQCAtMjk4MCw3ICsy OTk5LDcgQEAgbmV4dF9vcHQ6CiAJCQlpZiAobWF4X3Byb2NzIDwgcHJvY3NbaV0ubnVtX3Byb2Nz KQogCQkJCW1heF9wcm9jcyA9IHByb2NzW2ldLm51bV9wcm9jczsKIAkJCWlmIChwcm9jc1tpXS5u dW1fcHJvY3MpIHsKLQkJCQlwcm9jc1tpXS5waWRzID0gY2FsbG9jKHByb2NzW2ldLm51bV9wcm9j cywgc2l6ZW9mKHBpZF90KSk7CisJCQkJcHJvY3NbaV0ucGlkcyA9IGNhbGxvYyhwcm9jc1tpXS5u dW1fcHJvY3MsIHNpemVvZihteV9waWRfdCkpOwogCQkJCWlmICghcHJvY3NbaV0ucGlkcykgewog CQkJCQlwcl9lcnIoc3RkZXJyLCAiY2Fubm90IGFsbG9jYXRlIHBpZCBsaXN0XG4iKTsKIAkJCQkJ ZnJlZV9wcm9jcygpOwpAQCAtMzAwOCw3ICszMDI3LDcgQEAgbmV4dF9vcHQ6CiAJCQlpZiAobWF4 X3Byb2NzIDwgcHJvY3NbaV0ubnVtX3Byb2NzKQogCQkJCW1heF9wcm9jcyA9IHByb2NzW2ldLm51 bV9wcm9jczsKIAkJCWlmIChwcm9jc1tpXS5udW1fcHJvY3MpIHsKLQkJCQlwcm9jc1tpXS5waWRz ID0gY2FsbG9jKHByb2NzW2ldLm51bV9wcm9jcywgc2l6ZW9mKHBpZF90KSk7CisJCQkJcHJvY3Nb aV0ucGlkcyA9IGNhbGxvYyhwcm9jc1tpXS5udW1fcHJvY3MsIHNpemVvZihteV9waWRfdCkpOwog CQkJCWlmICghcHJvY3NbaV0ucGlkcykgewogCQkJCQlwcl9lcnIoc3RkZXJyLCAiY2Fubm90IGFs bG9jYXRlIHBpZCBsaXN0XG4iKTsKIAkJCQkJZnJlZV9wcm9jcygpOwpkaWZmIC0tZ2l0IGEvc3Ry ZXNzLW5nLmggYi9zdHJlc3MtbmcuaAppbmRleCBjNTEwNGEzMjJlNDUuLjRmNDA5OGZjMGQxMSAx MDA2NDQKLS0tIGEvc3RyZXNzLW5nLmgKKysrIGIvc3RyZXNzLW5nLmgKQEAgLTE3MTMsNyArMTcx MywxMiBAQCB0eXBlZGVmIHN0cnVjdCB7CiB9IHN0cmVzc190OwogCiB0eXBlZGVmIHN0cnVjdCB7 Ci0JcGlkX3QJKnBpZHM7CQkJLyogcHJvY2VzcyBpZCAqLworCXBpZF90IHBpZDsKKwl1bnNpZ25l ZCBsYXN0X2NwdTsKK30gbXlfcGlkX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlteV9waWRfdCAq cGlkczsJCQkvKiBwcm9jZXNzIGlkICovCiAJaW50MzJfdCBzdGFydGVkX3Byb2NzOwkJLyogY291 bnQgb2Ygc3RhcnRlZCBwcm9jZXNzZXMgKi8KIAlpbnQzMl90IG51bV9wcm9jczsJCS8qIG51bWJl ciBvZiBwcm9jZXNzIHBlciBzdHJlc3NvciAqLwogCXVpbnQ2NF90IGJvZ29fb3BzOwkJLyogbnVt YmVyIG9mIGJvZ28gb3BzICovCg== --001a113e45ce89c092054253cf50--