LyoKICogTFRDMjYzMiBEaWdpdGFsIHRvIGFuYWxvZyBjb252ZXJ0b3JzIHNwaSBkcml2ZXIKICoKICogQ29weXJpZ2h0IDIwMTcgTWF4aW1lIFJvdXNzaW4tQulsYW5nZXIKICoKICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yLgogKi8KCiNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgojaW5jbHVkZSA8bGludXgvaWlvL2lpby5oPgoKI2RlZmluZSBMVEMyNjMyX0RBQ19DSEFOTkVMUyAgICAgICAgICAgICAgICAgICAgMgoKI2RlZmluZSBMVEMyNjMyX0FERFJfREFDMCAgICAgICAgICAgICAgICAgICAgICAgMHgwCiNkZWZpbmUgTFRDMjYzMl9BRERSX0RBQzEgICAgICAgICAgICAgICAgICAgICAgIDB4MQoKI2RlZmluZSBMVEMyNjMyX0NNRF9XUklURV9JTlBVVF9OICAgICAgICAgICAgICAgMHgwCiNkZWZpbmUgTFRDMjYzMl9DTURfVVBEQVRFX0RBQ19OICAgICAgICAgICAgICAgIDB4MQojZGVmaW5lIExUQzI2MzJfQ01EX1dSSVRFX0lOUFVUX05fVVBEQVRFX0FMTCAgICAweDIKI2RlZmluZSBMVEMyNjMyX0NNRF9XUklURV9JTlBVVF9OX1VQREFURV9OICAgICAgMHgzCiNkZWZpbmUgTFRDMjYzMl9DTURfUE9XRVJET1dOX0RBQ19OICAgICAgICAgICAgIDB4NAojZGVmaW5lIExUQzI2MzJfQ01EX1BPV0VSRE9XTl9DSElQICAgICAgICAgICAgICAweDUKI2RlZmluZSBMVEMyNjMyX0NNRF9JTlRFUk5BTF9SRUZFUiAgICAgICAgICAgICAgMHg2CiNkZWZpbmUgTFRDMjYzMl9DTURfRVhURVJOQUxfUkVGRVIgICAgICAgICAgICAgIDB4NwoKLyoqCiAqIHN0cnVjdCBsdGMyNjMyX2NoaXBfaW5mbyAtIGNoaXAgc3BlY2lmaWMgaW5mb3JtYXRpb24KICogQGNoYW5uZWxzOgkJY2hhbm5lbCBzcGVjIGZvciB0aGUgREFDCiAqIEB2cmVmX212OgkJcmVmZXJlbmNlIHZvbHRhZ2UKICovCnN0cnVjdCBsdGMyNjMyX2NoaXBfaW5mbyB7Cgljb25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyAqY2hhbm5lbHM7Cgljb25zdCBpbnQgdnJlZl9tdjsKfTsKCi8qKgogKiBzdHJ1Y3QgbHRjMjYzMl9zdGF0ZSAtIGRyaXZlciBpbnN0YW5jZSBzcGVjaWZpYyBkYXRhCiAqIEBzcGlfZGV2OgkJCXBvaW50ZXIgdG8gdGhlIHNwaV9kZXZpY2Ugc3RydWN0CiAqIEBwb3dlcmRvd25fY2FjaGVfbWFzawl1c2VkIHRvIHNob3cgY3VycmVudCBjaGFubmVsIHBvd2VyZG93biBzdGF0ZQogKi8Kc3RydWN0IGx0YzI2MzJfc3RhdGUgewoJc3RydWN0IHNwaV9kZXZpY2UgKnNwaV9kZXY7Cgl1bnNpZ25lZCBpbnQgcG93ZXJkb3duX2NhY2hlX21hc2s7Cn07CgplbnVtIGx0YzI2MzJfc3VwcG9ydGVkX2RldmljZV9pZHMgewoJSURfTFRDMjYzMkwxMiwKCUlEX0xUQzI2MzJMMTAsCglJRF9MVEMyNjMyTDgsCglJRF9MVEMyNjMySDEyLAoJSURfTFRDMjYzMkgxMCwKCUlEX0xUQzI2MzJIOCwKfTsKCnN0YXRpYyBpbnQgbHRjMjYzMl9zcGlfd3JpdGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKCQkJICAgICB1OCBjbWQsIHU4IGFkZHIsIHUxNiB2YWwsIHU4IHNoaWZ0KQp7Cgl1MzIgZGF0YTsKCXU4IG1zZ1szXTsKCgkvKgoJICogVGhlIGlucHV0IHNoaWZ0IHJlZ2lzdGVyIGlzIDI0IGJpdHMgd2lkZS4KCSAqIFRoZSBuZXh0IGZvdXIgYXJlIHRoZSBjb21tYW5kIGJpdHMsIEMzIHRvIEMwLAoJICogZm9sbG93ZWQgYnkgdGhlIDQtYml0IERBQyBhZGRyZXNzLCBBMyB0byBBMCwgYW5kIHRoZW4gdGhlCgkgKiAxMi0sIDEwLSwgOC1iaXQgZGF0YS13b3JkLiBUaGUgZGF0YS13b3JkIGNvbXByaXNlcyB0aGUgMTItLAoJICogMTAtLCA4LWJpdCBpbnB1dCBjb2RlIGZvbGxvd2VkIGJ5IDQsIDYsIG9yIDggZG9uJ3QgY2FyZSBiaXRzLgoJICovCglkYXRhID0gKGNtZCA8PCAyMCkgfCAoYWRkciA8PCAxNikgfCAodmFsIDw8IHNoaWZ0KTsKCW1zZ1swXSA9IGRhdGEgPj4gMTY7Cgltc2dbMV0gPSBkYXRhID4+IDg7Cgltc2dbMl0gPSBkYXRhOwoKCXJldHVybiBzcGlfd3JpdGUoc3BpLCBtc2csIHNpemVvZihtc2cpKTsKfQoKc3RhdGljIGludCBsdGMyNjMyX3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCgkJCSAgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKCQkJICAgIGludCAqdmFsLAoJCQkgICAgaW50ICp2YWwyLAoJCQkgICAgbG9uZyBtKQp7CglzdHJ1Y3QgbHRjMjYzMl9jaGlwX2luZm8gKmNoaXBfaW5mbzsKCgljb25zdCBzdHJ1Y3QgbHRjMjYzMl9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoJY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgKnNwaV9kZXZfaWQgPSBzcGlfZ2V0X2RldmljZV9pZChzdC0+c3BpX2Rldik7CgoJY2hpcF9pbmZvID0gKHN0cnVjdCBsdGMyNjMyX2NoaXBfaW5mbyAqKXNwaV9kZXZfaWQtPmRyaXZlcl9kYXRhOwoKCXN3aXRjaCAobSkgewoJY2FzZSBJSU9fQ0hBTl9JTkZPX1NDQUxFOgoJCSp2YWwgPSBjaGlwX2luZm8tPnZyZWZfbXY7CgkJKnZhbDIgPSBjaGFuLT5zY2FuX3R5cGUucmVhbGJpdHM7CgkJcmV0dXJuIElJT19WQUxfRlJBQ1RJT05BTF9MT0cyOwoJfQoJcmV0dXJuIC1FSU5WQUw7Cn0KCnN0YXRpYyBpbnQgbHRjMjYzMl93cml0ZV9yYXcoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKCQkJICAgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwKCQkJICAgICBpbnQgdmFsLAoJCQkgICAgIGludCB2YWwyLAoJCQkgICAgIGxvbmcgbWFzaykKewoJc3RydWN0IGx0YzI2MzJfc3RhdGUgKnN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKCglzd2l0Y2ggKG1hc2spIHsKCWNhc2UgSUlPX0NIQU5fSU5GT19SQVc6CgkJaWYgKHZhbCA+PSAoMSA8PCBjaGFuLT5zY2FuX3R5cGUucmVhbGJpdHMpIHx8IHZhbCA8IDApCgkJCXJldHVybiAtRUlOVkFMOwoKCQlyZXR1cm4gbHRjMjYzMl9zcGlfd3JpdGUoc3QtPnNwaV9kZXYsCgkJCQkJIExUQzI2MzJfQ01EX1dSSVRFX0lOUFVUX05fVVBEQVRFX04sCgkJCQkJIGNoYW4tPmFkZHJlc3MsIHZhbCwKCQkJCQkgY2hhbi0+c2Nhbl90eXBlLnNoaWZ0KTsKCWRlZmF1bHQ6CgkJcmV0dXJuIC1FSU5WQUw7Cgl9Cn0KCnN0YXRpYyBzc2l6ZV90IGx0YzI2MzJfcmVhZF9kYWNfcG93ZXJkb3duKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsCgkJCQkJICB1aW50cHRyX3QgcHJpdmF0ZSwKCQkJCQkgIGNvbnN0IHN0cnVjdCBpaW9fY2hhbl9zcGVjICpjaGFuLAoJCQkJCSAgY2hhciAqYnVmKQp7CglzdHJ1Y3QgbHRjMjYzMl9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoKCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAoJCSAgICAgICAhIShzdC0+cG93ZXJkb3duX2NhY2hlX21hc2sgJiAoMSA8PCBjaGFuLT5jaGFubmVsKSkpOwp9CgpzdGF0aWMgc3NpemVfdCBsdGMyNjMyX3dyaXRlX2RhY19wb3dlcmRvd24oc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiwKCQkJCQkgICB1aW50cHRyX3QgcHJpdmF0ZSwKCQkJCQkgICBjb25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyAqY2hhbiwKCQkJCQkgICBjb25zdCBjaGFyICpidWYsCgkJCQkJICAgc2l6ZV90IGxlbikKewoJYm9vbCBwd3JfZG93bjsKCWludCByZXQ7CglzdHJ1Y3QgbHRjMjYzMl9zdGF0ZSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOwoKCXJldCA9IHN0cnRvYm9vbChidWYsICZwd3JfZG93bik7CglpZiAocmV0KQoJCXJldHVybiByZXQ7CgoJaWYgKHB3cl9kb3duKQoJCXN0LT5wb3dlcmRvd25fY2FjaGVfbWFzayB8PSAoMSA8PCBjaGFuLT5jaGFubmVsKTsKCWVsc2UKCQlzdC0+cG93ZXJkb3duX2NhY2hlX21hc2sgJj0gfigxIDw8IGNoYW4tPmNoYW5uZWwpOwoKCXJldCA9IGx0YzI2MzJfc3BpX3dyaXRlKHN0LT5zcGlfZGV2LAoJCQkJTFRDMjYzMl9DTURfUE9XRVJET1dOX0RBQ19OLAoJCQkJY2hhbi0+Y2hhbm5lbCwgMCwgMCk7CgoJcmV0dXJuIHJldCA/IHJldCA6IGxlbjsKfQoKc3RhdGljIGNvbnN0IHN0cnVjdCBpaW9faW5mbyBsdGMyNjMyX2luZm8gPSB7Cgkud3JpdGVfcmF3CT0gbHRjMjYzMl93cml0ZV9yYXcsCgkucmVhZF9yYXcJPSBsdGMyNjMyX3JlYWRfcmF3LAoJLmRyaXZlcl9tb2R1bGUJPSBUSElTX01PRFVMRSwKfTsKCnN0YXRpYyBjb25zdCBzdHJ1Y3QgaWlvX2NoYW5fc3BlY19leHRfaW5mbyBsdGMyNjMyX2V4dF9pbmZvW10gPSB7Cgl7CgkJLm5hbWUgPSAicG93ZXJkb3duIiwKCQkucmVhZCA9IGx0YzI2MzJfcmVhZF9kYWNfcG93ZXJkb3duLAoJCS53cml0ZSA9IGx0YzI2MzJfd3JpdGVfZGFjX3Bvd2VyZG93biwKCQkuc2hhcmVkID0gSUlPX1NFUEFSQVRFLAoJfSwKCXsgfSwKfTsKCiNkZWZpbmUgTFRDMjYzMl9DSEFOTkVMKF9jaGFuLCBfYml0cykgeyBcCgkJLnR5cGUgPSBJSU9fVk9MVEFHRSwgXAoJCS5pbmRleGVkID0gMSwgXAoJCS5vdXRwdXQgPSAxLCBcCgkJLmNoYW5uZWwgPSAoX2NoYW4pLCBcCgkJLmluZm9fbWFza19zZXBhcmF0ZSA9IEJJVChJSU9fQ0hBTl9JTkZPX1JBVyksIFwKCQkuaW5mb19tYXNrX3NoYXJlZF9ieV90eXBlID0gQklUKElJT19DSEFOX0lORk9fU0NBTEUpLCBcCgkJLmFkZHJlc3MgPSAoX2NoYW4pLCBcCgkJLnNjYW5fdHlwZSA9IHsgXAoJCQkucmVhbGJpdHMJPSAoX2JpdHMpLCBcCgkJCS5zaGlmdAkJPSAxNiAtIChfYml0cyksIFwKCQl9LCBcCgkJLmV4dF9pbmZvID0gbHRjMjYzMl9leHRfaW5mbywgXAp9CgojZGVmaW5lIERFQ0xBUkVfTFRDMjYzMl9DSEFOTkVMUyhfbmFtZSwgX2JpdHMpIFwKCWNvbnN0IHN0cnVjdCBpaW9fY2hhbl9zcGVjIF9uYW1lICMjIF9jaGFubmVsc1tdID0geyBcCgkJTFRDMjYzMl9DSEFOTkVMKDAsIF9iaXRzKSwgXAoJCUxUQzI2MzJfQ0hBTk5FTCgxLCBfYml0cyksIFwKCX0KCnN0YXRpYyBERUNMQVJFX0xUQzI2MzJfQ0hBTk5FTFMobHRjMjYzMmwxMiwgMTIpOwpzdGF0aWMgREVDTEFSRV9MVEMyNjMyX0NIQU5ORUxTKGx0YzI2MzJsMTAsIDEwKTsKc3RhdGljIERFQ0xBUkVfTFRDMjYzMl9DSEFOTkVMUyhsdGMyNjMybDgsIDgpOwoKc3RhdGljIERFQ0xBUkVfTFRDMjYzMl9DSEFOTkVMUyhsdGMyNjMyaDEyLCAxMik7CnN0YXRpYyBERUNMQVJFX0xUQzI2MzJfQ0hBTk5FTFMobHRjMjYzMmgxMCwgMTApOwpzdGF0aWMgREVDTEFSRV9MVEMyNjMyX0NIQU5ORUxTKGx0YzI2MzJoOCwgOCk7CgpzdGF0aWMgY29uc3Qgc3RydWN0IGx0YzI2MzJfY2hpcF9pbmZvIGx0YzI2MzJfY2hpcF9pbmZvX3RibFtdID0gewoJW0lEX0xUQzI2MzJMMTJdID0gewoJCS5jaGFubmVscwk9IGx0YzI2MzJsMTJfY2hhbm5lbHMsCgkJLnZyZWZfbXYJPSAyNTAwLAoJfSwKCVtJRF9MVEMyNjMyTDEwXSA9IHsKCQkuY2hhbm5lbHMJPSBsdGMyNjMybDEwX2NoYW5uZWxzLAoJCS52cmVmX212CT0gMjUwMCwKCX0sCglbSURfTFRDMjYzMkw4XSA9ICB7CgkJLmNoYW5uZWxzCT0gbHRjMjYzMmw4X2NoYW5uZWxzLAoJCS52cmVmX212CT0gMjUwMCwKCX0sCglbSURfTFRDMjYzMkgxMl0gPSB7CgkJLmNoYW5uZWxzCT0gbHRjMjYzMmgxMl9jaGFubmVscywKCQkudnJlZl9tdgk9IDQwOTYsCgl9LAoJW0lEX0xUQzI2MzJIMTBdID0gewoJCS5jaGFubmVscwk9IGx0YzI2MzJoMTBfY2hhbm5lbHMsCgkJLnZyZWZfbXYJPSA0MDk2LAoJfSwKCVtJRF9MVEMyNjMySDhdID0gIHsKCQkuY2hhbm5lbHMJPSBsdGMyNjMyaDhfY2hhbm5lbHMsCgkJLnZyZWZfbXYJPSA0MDk2LAoJfSwKfTsKCnN0YXRpYyBpbnQgbHRjMjYzMl9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQp7CglzdHJ1Y3QgbHRjMjYzMl9zdGF0ZSAqc3Q7CglzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2OwoJc3RydWN0IGx0YzI2MzJfY2hpcF9pbmZvICpjaGlwX2luZm87CglpbnQgcmV0OwoKCWluZGlvX2RldiA9IGRldm1faWlvX2RldmljZV9hbGxvYygmc3BpLT5kZXYsIHNpemVvZigqc3QpKTsKCWlmICghaW5kaW9fZGV2KQoJCXJldHVybiAtRU5PTUVNOwoKCXN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKCglzcGlfc2V0X2RydmRhdGEoc3BpLCBpbmRpb19kZXYpOwoJc3QtPnNwaV9kZXYgPSBzcGk7CgoJY2hpcF9pbmZvID0gKHN0cnVjdCBsdGMyNjMyX2NoaXBfaW5mbyAqKQoJCQlzcGlfZ2V0X2RldmljZV9pZChzcGkpLT5kcml2ZXJfZGF0YTsKCglpbmRpb19kZXYtPmRldi5wYXJlbnQgPSAmc3BpLT5kZXY7CglpbmRpb19kZXYtPm5hbWUgPSBkZXZfb2Zfbm9kZSgmc3BpLT5kZXYpID8gZGV2X29mX25vZGUoJnNwaS0+ZGV2KS0+bmFtZQoJCQkJCQkgOiBzcGlfZ2V0X2RldmljZV9pZChzcGkpLT5uYW1lOwoJaW5kaW9fZGV2LT5pbmZvID0gJmx0YzI2MzJfaW5mbzsKCWluZGlvX2Rldi0+bW9kZXMgPSBJTkRJT19ESVJFQ1RfTU9ERTsKCWluZGlvX2Rldi0+Y2hhbm5lbHMgPSBjaGlwX2luZm8tPmNoYW5uZWxzOwoJaW5kaW9fZGV2LT5udW1fY2hhbm5lbHMgPSBMVEMyNjMyX0RBQ19DSEFOTkVMUzsKCglyZXQgPSBsdGMyNjMyX3NwaV93cml0ZShzcGksIExUQzI2MzJfQ01EX0lOVEVSTkFMX1JFRkVSLCAwLCAwLCAwKTsKCWlmIChyZXQpIHsKCQlkZXZfZXJyKCZzcGktPmRldiwKCQkJIlNldCBpbnRlcm5hbCByZWZlcmVuY2UgY29tbWFuZCBmYWlsZWQsICVkXG4iLCByZXQpOwoJCXJldHVybiByZXQ7Cgl9CgoJcmV0dXJuIGRldm1faWlvX2RldmljZV9yZWdpc3Rlcigmc3BpLT5kZXYsIGluZGlvX2Rldik7Cn0KCnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCBsdGMyNjMyX2lkW10gPSB7Cgl7ICJsdGMyNjMyLWwxMiIsIChrZXJuZWxfdWxvbmdfdCkmbHRjMjYzMl9jaGlwX2luZm9fdGJsW0lEX0xUQzI2MzJMMTJdIH0sCgl7ICJsdGMyNjMyLWwxMCIsIChrZXJuZWxfdWxvbmdfdCkmbHRjMjYzMl9jaGlwX2luZm9fdGJsW0lEX0xUQzI2MzJMMTBdIH0sCgl7ICJsdGMyNjMyLWw4IiwgKGtlcm5lbF91bG9uZ190KSZsdGMyNjMyX2NoaXBfaW5mb190YmxbSURfTFRDMjYzMkw4XSB9LAoJeyAibHRjMjYzMi1oMTIiLCAoa2VybmVsX3Vsb25nX3QpJmx0YzI2MzJfY2hpcF9pbmZvX3RibFtJRF9MVEMyNjMySDEyXSB9LAoJeyAibHRjMjYzMi1oMTAiLCAoa2VybmVsX3Vsb25nX3QpJmx0YzI2MzJfY2hpcF9pbmZvX3RibFtJRF9MVEMyNjMySDEwXSB9LAoJeyAibHRjMjYzMi1oOCIsIChrZXJuZWxfdWxvbmdfdCkmbHRjMjYzMl9jaGlwX2luZm9fdGJsW0lEX0xUQzI2MzJIOF0gfSwKCXt9Cn07Ck1PRFVMRV9ERVZJQ0VfVEFCTEUoc3BpLCBsdGMyNjMyX2lkKTsKCnN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBsdGMyNjMyX2RyaXZlciA9IHsKCS5kcml2ZXIJCT0gewoJCS5uYW1lCT0gImx0YzI2MzIiLAoJfSwKCS5wcm9iZQkJPSBsdGMyNjMyX3Byb2JlLAoJLmlkX3RhYmxlCT0gbHRjMjYzMl9pZCwKfTsKbW9kdWxlX3NwaV9kcml2ZXIobHRjMjYzMl9kcml2ZXIpOwoKc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbHRjMjYzMl9vZl9tYXRjaFtdID0gewoJewoJCS5jb21wYXRpYmxlID0gImxsdGMsbHRjMjYzMi1sMTIiLAoJCS5kYXRhID0gJmx0YzI2MzJfY2hpcF9pbmZvX3RibFtJRF9MVEMyNjMyTDEyXQoJfSwgewoJCS5jb21wYXRpYmxlID0gImxsdGMsbHRjMjYzMi1sMTAiLAoJCS5kYXRhID0gJmx0YzI2MzJfY2hpcF9pbmZvX3RibFtJRF9MVEMyNjMyTDEwXQoJfSwgewoJCS5jb21wYXRpYmxlID0gImxsdGMsbHRjMjYzMi1sOCIsCgkJLmRhdGEgPSAmbHRjMjYzMl9jaGlwX2luZm9fdGJsW0lEX0xUQzI2MzJMOF0KCX0sIHsKCQkuY29tcGF0aWJsZSA9ICJsbHRjLGx0YzI2MzItaDEyIiwKCQkuZGF0YSA9ICZsdGMyNjMyX2NoaXBfaW5mb190YmxbSURfTFRDMjYzMkgxMl0KCX0sIHsKCQkuY29tcGF0aWJsZSA9ICJsbHRjLGx0YzI2MzItaDEwIiwKCQkuZGF0YSA9ICZsdGMyNjMyX2NoaXBfaW5mb190YmxbSURfTFRDMjYzMkgxMF0KCX0sIHsKCQkuY29tcGF0aWJsZSA9ICJsbHRjLGx0YzI2MzItaDgiLAoJCS5kYXRhID0gJmx0YzI2MzJfY2hpcF9pbmZvX3RibFtJRF9MVEMyNjMySDhdCgl9LAoJe30KfTsKTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbHRjMjYzMl9vZl9tYXRjaCk7CgpNT0RVTEVfQVVUSE9SKCJNYXhpbWUgUm91c3Npbi1CZWxhbmdlciA8bWF4aW1lLnJvdXNzaW5iZWxhbmdlckBnbWFpbC5jb20+Iik7Ck1PRFVMRV9ERVNDUklQVElPTigiTFRDMjYzMiBEQUMgU1BJIGRyaXZlciIpOwpNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cg==