LyoKICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIEFSTTkyNSBDUFUtY29yZQogKgogKiAgQ29weXJpZ2h0IChjKSAyMDAzICBUZXhhcyBJbnN0cnVtZW50cwogKgogKiAgLS0tLS0gQWRhcHRlZCBmb3IgT01BUDE1MTAgZnJvbSBBUk05MjAgY29kZSAtLS0tLS0KICoKICogIENvcHlyaWdodCAoYykgMjAwMQlNYXJpdXMgR3L2Z2VyIDxtYWdAc3lzZ28uZGU+CiAqICBDb3B5cmlnaHQgKGMpIDIwMDIJQWxleCBa/HBrZSA8YXp1QHN5c2dvLmRlPgogKiAgQ29weXJpZ2h0IChjKSAyMDAyCUdhcnkgSmVubmVqb2huIDxnakBkZW54LmRlPgogKiAgQ29weXJpZ2h0IChjKSAyMDAzCVJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KICogIENvcHlyaWdodCAoYykgMjAwMwlLc2hpdGlqIAkgPGtzaGl0aWpAdGkuY29tPgogKgogKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogKiBwcm9qZWN0LgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAogKiBNQSAwMjExMS0xMzA3IFVTQQogKi8KCgoKI2luY2x1ZGUgPGNvbmZpZy5oPgojaW5jbHVkZSA8dmVyc2lvbi5oPgoKI2lmIGRlZmluZWQoQ09ORklHX09NQVAxNTEwKQojaW5jbHVkZSA8Li9jb25maWdzL29tYXAxNTEwLmg+CiNlbmRpZgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogSnVtcCB2ZWN0b3IgdGFibGUgYXMgaW4gdGFibGUgMy4xIGluIFsxXQogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCgouZ2xvYmwgX3N0YXJ0Cl9zdGFydDoJYiAgICAgICByZXNldAoJbGRyCXBjLCBfdW5kZWZpbmVkX2luc3RydWN0aW9uCglsZHIJcGMsIF9zb2Z0d2FyZV9pbnRlcnJ1cHQKCWxkcglwYywgX3ByZWZldGNoX2Fib3J0CglsZHIJcGMsIF9kYXRhX2Fib3J0CglsZHIJcGMsIF9ub3RfdXNlZAoJbGRyCXBjLCBfaXJxCglsZHIJcGMsIF9maXEKCl91bmRlZmluZWRfaW5zdHJ1Y3Rpb246CS53b3JkIHVuZGVmaW5lZF9pbnN0cnVjdGlvbgpfc29mdHdhcmVfaW50ZXJydXB0Ogkud29yZCBzb2Z0d2FyZV9pbnRlcnJ1cHQKX3ByZWZldGNoX2Fib3J0Ogkud29yZCBwcmVmZXRjaF9hYm9ydApfZGF0YV9hYm9ydDoJCS53b3JkIGRhdGFfYWJvcnQKX25vdF91c2VkOgkJLndvcmQgbm90X3VzZWQKX2lycToJCQkud29yZCBpcnEKX2ZpcToJCQkud29yZCBmaXEKCgkuYmFsaWdubCAxNiwweGRlYWRiZWVmCgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogU3RhcnR1cCBDb2RlIChyZXNldCB2ZWN0b3IpCiAqCiAqIGRvIGltcG9ydGFudCBpbml0IG9ubHkgaWYgd2UgZG9uJ3Qgc3RhcnQgZnJvbSBtZW1vcnkhCiAqIHNldHVwIE1lbW9yeSBhbmQgYm9hcmQgc3BlY2lmaWMgYml0cyBwcmlvciB0byByZWxvY2F0aW9uLgogKiByZWxvY2F0ZSBhcm1ib290IHRvIHJhbQogKiBzZXR1cCBzdGFjawogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCi8qCiAqIENGR19NRU1fRU5EIGlzIGluIHRoZSBib2FyZCBkZXBlbmRlbnQgY29uZmlnLWZpbGUgKGNvbmZpZ3MvY29uZmlnX0JPQVJELmgpCiAqLwpfVEVYVF9CQVNFOgoJLndvcmQJVEVYVF9CQVNFCgouZ2xvYmwgX2FybWJvb3Rfc3RhcnQKX2FybWJvb3Rfc3RhcnQ6Cgkud29yZCBfc3RhcnQKCi8qCiAqIE5vdGU6IF9hcm1ib290X2VuZF9kYXRhIGFuZCBfYXJtYm9vdF9lbmQgYXJlIGRlZmluZWQKICogYnkgdGhlIChib2FyZC1kZXBlbmRlbnQpIGxpbmtlciBzY3JpcHQuCiAqIF9hcm1ib290X2VuZF9kYXRhIGlzIHRoZSBmaXJzdCB1c2FibGUgRkxBU0ggYWRkcmVzcyBhZnRlciBhcm1ib290CiAqLwouZ2xvYmwgX2FybWJvb3RfZW5kX2RhdGEKX2FybWJvb3RfZW5kX2RhdGE6Cgkud29yZCBhcm1ib290X2VuZF9kYXRhCi5nbG9ibCBfYXJtYm9vdF9lbmQKX2FybWJvb3RfZW5kOgoJLndvcmQgYXJtYm9vdF9lbmQKCi8qCiAqIF9hcm1ib290X3JlYWxfZW5kIGlzIHRoZSBmaXJzdCB1c2FibGUgUkFNIGFkZHJlc3MgYmVoaW5kIGFybWJvb3QKICogYW5kIHRoZSB2YXJpb3VzIHN0YWNrcwogKi8KLmdsb2JsIF9hcm1ib290X3JlYWxfZW5kCl9hcm1ib290X3JlYWxfZW5kOgoJLndvcmQgMHgwYmFkYzBkZQoKI2lmZGVmIENPTkZJR19VU0VfSVJRCi8qIElSUSBzdGFjayBtZW1vcnkgKGNhbGN1bGF0ZWQgYXQgcnVuLXRpbWUpICovCi5nbG9ibCBJUlFfU1RBQ0tfU1RBUlQKSVJRX1NUQUNLX1NUQVJUOgoJLndvcmQJMHgwYmFkYzBkZQoKLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KLmdsb2JsIEZJUV9TVEFDS19TVEFSVApGSVFfU1RBQ0tfU1RBUlQ6Cgkud29yZCAweDBiYWRjMGRlCiNlbmRpZgoKCi8qCiAqIHRoZSBhY3R1YWwgcmVzZXQgY29kZQogKi8KCnJlc2V0OgoJLyoKCSAqIHNldCB0aGUgY3B1IHRvIFNWQzMyIG1vZGUKCSAqLwoJbXJzCXIwLGNwc3IKCWJpYwlyMCxyMCwjMHgxZgoJb3JyCXIwLHIwLCMweGQzCgltc3IJY3BzcixyMAoJCgkvKgoJICogU2V0IHVwIDkyNVQgbW9kZQoJICovCgltb3YgcjEsICMweDgxICAgICAgICAgICAgICAgLyogU2V0IEFSTTkyNVQgY29uZmlndXJhdGlvbi4gKi8KCW1jciBwMTUsIDAsIHIxLCBjMTUsIGMxLCAwICAvKiBXcml0ZSBBUk05MjVUIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuICovCgoJLyogCgkgKiB0dXJuIG9mZiB0aGUgd2F0Y2hkb2csIHVubG9jay9kaWFibGUgc2VxdWVuY2UKCSAqLwoJbW92ICByMSwgIzB4RjUKCWxkciAgcjAsID1XRFRJTV9NT0RFCglzdHJoIHIxLCBbcjBdCgltb3YgIHIxLCAjMHhBMAoJc3RyaCByMSwgW3IwXQoKCS8qCgkgKiBtYXNrIGFsbCBJUlFzIGJ5IHNldHRpbmcgYWxsIGJpdHMgaW4gdGhlIElOVE1SIC0gZGVmYXVsdAoJICovCgltb3YgcjEsICMweGZmZmZmZmZmCglsZHIgcjAsID1SRUdfSUhMMV9NSVIKCXN0ciByMSwgW3IwXQoJbGRyIHIwLCA9UkVHX0lITDJfTUlSCglzdHIgcjEsIFtyMF0KCgkvKiAKCSAqIHdhaXQgZm9yIGRwbGwgdG8gbG9jawoJICovICAgICAgIAoJbGRyICByMCwgPUNLX0RQTEwxCgltb3YgIHIxLCAjMHgxMAoJc3RyaCByMSwgW3IwXQpwb2xsMToKCWxkcmggcjEsIFtyMF0KCWFuZHMgcjEsIHIxLCAjMHgwMQoJYmVxIHBvbGwxCglibCAgY3B1X2luaXRfY3JpdAoKcmVsb2NhdGU6CgkvKgoJICogcmVsb2NhdGUgYXJtYm9vdCB0byBSQU0KCSAqLwoJYWRyCXIwLCBfc3RhcnQJCS8qIHIwIDwtIGN1cnJlbnQgcG9zaXRpb24gb2YgY29kZSAqLwoJbGRyCXIyLCBfYXJtYm9vdF9zdGFydAoJbGRyCXIzLCBfYXJtYm9vdF9lbmQKCXN1YglyMiwgcjMsIHIyCQkvKiByMiA8LSBzaXplIG9mIGFybWJvb3QgKi8KCWxkcglyMSwgX1RFWFRfQkFTRQkJLyogcjEgPC0gZGVzdGluYXRpb24gYWRkcmVzcyAqLwoJYWRkCXIyLCByMCwgcjIJCS8qIHIyIDwtIHNvdXJjZSBlbmQgYWRkcmVzcyAqLwoKCS8qCgkgKiByMCA9IHNvdXJjZSBhZGRyZXNzCgkgKiByMSA9IHRhcmdldCBhZGRyZXNzCgkgKiByMiA9IHNvdXJjZSBlbmQgYWRkcmVzcwoJICovCmNvcHlfbG9vcDoKCWxkbWlhCXIwISwge3IzLXIxMH0KCXN0bWlhCXIxISwge3IzLXIxMH0KCWNtcAlyMCwgcjIKCWJsZQljb3B5X2xvb3AKCgkvKiBzZXQgdXAgdGhlIHN0YWNrICovCglsZHIJcjAsIF9hcm1ib290X2VuZAoJYWRkCXIwLCByMCwgI0NPTkZJR19TVEFDS1NJWkUKCXN1YglzcCwgcjAsICMxMgkJLyogbGVhdmUgMyB3b3JkcyBmb3IgYWJvcnQtc3RhY2sgKi8KCglsZHIJcGMsIF9zdGFydF9hcm1ib290Cgpfc3RhcnRfYXJtYm9vdDoJLndvcmQgc3RhcnRfYXJtYm9vdAoKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIENQVV9pbml0X2NyaXRpY2FsIHJlZ2lzdGVycwogKgogKiBzZXR1cCBpbXBvcnRhbnQgcmVnaXN0ZXJzCiAqIHNldHVwIG1lbW9yeSB0aW1pbmcKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgoKY3B1X2luaXRfY3JpdDoKCS8qCgkgKiBmbHVzaCB2NCBJL0QgY2FjaGVzCgkgKi8KCW1vdglyMCwgIzAKCW1jcglwMTUsIDAsIHIwLCBjNywgYzcsIDAJLyogZmx1c2ggdjMvdjQgY2FjaGUgKi8KCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJLyogZmx1c2ggdjQgVExCICovCgoJLyoKCSAqIGRpc2FibGUgTU1VIHN0dWZmIGFuZCBjYWNoZXMKCSAqLwoJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAoJYmljCXIwLCByMCwgIzB4MDAwMDIzMDAJQCBjbGVhciBiaXRzIDEzLCA5OjggKC0tVi0gLS1SUykKCWJpYwlyMCwgcjAsICMweDAwMDAwMDg3CUAgY2xlYXIgYml0cyA3LCAyOjAgKEItLS0gLUNBTSkKCW9ycglyMCwgcjAsICMweDAwMDAwMDAyCUAgc2V0IGJpdCAyIChBKSBBbGlnbgoJb3JyCXIwLCByMCwgIzB4MDAwMDEwMDAJQCBzZXQgYml0IDEyIChJKSBJLUNhY2hlCgltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCgoJLyoKCSAqIEdvIHNldHVwIE1lbW9yeSBhbmQgYm9hcmQgc3BlY2lmaWMgYml0cyBwcmlvciB0byByZWxvY2F0aW9uLgoJICovCgltb3YJaXAsIGxyICAgICAgICAgIC8qIHBlcnNlcnZlIGxpbmsgcmVnIGFjcm9zcyBjYWxsICovCglibAlwbGF0Zm9ybXNldHVwICAgLyogZ28gc2V0dXAgcGxsLG11eCxtZW1vcnkgKi8KCW1vdglsciwgaXAgICAgICAgICAgLyogcmVzdG9yZSBsaW5rICovCgltb3YJcGMsIGxyICAgICAgICAgIC8qIGJhY2sgdG8gbXkgY2FsbGVyICovCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIEludGVycnVwdCBoYW5kbGluZwogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCkAKQCBJUlEgc3RhY2sgZnJhbWUuCkAKI2RlZmluZSBTX0ZSQU1FX1NJWkUJNzIKCiNkZWZpbmUgU19PTERfUjAJNjgKI2RlZmluZSBTX1BTUgkJNjQKI2RlZmluZSBTX1BDCQk2MAojZGVmaW5lIFNfTFIJCTU2CiNkZWZpbmUgU19TUAkJNTIKCiNkZWZpbmUgU19JUAkJNDgKI2RlZmluZSBTX0ZQCQk0NAojZGVmaW5lIFNfUjEwCQk0MAojZGVmaW5lIFNfUjkJCTM2CiNkZWZpbmUgU19SOAkJMzIKI2RlZmluZSBTX1I3CQkyOAojZGVmaW5lIFNfUjYJCTI0CiNkZWZpbmUgU19SNQkJMjAKI2RlZmluZSBTX1I0CQkxNgojZGVmaW5lIFNfUjMJCTEyCiNkZWZpbmUgU19SMgkJOAojZGVmaW5lIFNfUjEJCTQKI2RlZmluZSBTX1IwCQkwCgojZGVmaW5lIE1PREVfU1ZDIDB4MTMKI2RlZmluZSBJX0JJVAkgMHg4MAoKLyoKICogdXNlIGJhZF9zYXZlX3VzZXJfcmVncyBmb3IgYWJvcnQvcHJlZmV0Y2gvdW5kZWYvc3dpIC4uLgogKiB1c2UgaXJxX3NhdmVfdXNlcl9yZWdzIC8gaXJxX3Jlc3RvcmVfdXNlcl9yZWdzIGZvciBJUlEvRklRIGhhbmRsaW5nCiAqLwoKCS5tYWNybwliYWRfc2F2ZV91c2VyX3JlZ3MKCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUgICAgICAgICAgIEAgY2FydmUgb3V0IGEgZnJhbWUgb24gY3VycmVudCB1c2VyIHN0YWNrCglzdG1pYQlzcCwge3IwIC0gcjEyfQkJCUAgU2F2ZSB1c2VyIHJlZ2lzdGVycyAobm93IGluIHN2YyBtb2RlKSByMC1yMTIKCglsZHIJcjIsIF9hcm1ib290X2VuZCAgICAgICAgICAgICAgICBAIGZpbmQgdG9wIG9mIHN0YWNrCglhZGQJcjIsIHIyLCAjQ09ORklHX1NUQUNLU0laRSAgICAgICBAIGZpbmQgYmFzZSBvZiBub3JtYWwgc3RhY2sKCXN1YglyMiwgcjIsICM4ICAgICAgICAgICAgICAgICAgICAgIEAgc2V0IGJhc2UgMiB3b3JkcyBpbnRvIGFib3J0IHN0YWNrCglsZG1pYQlyMiwge3IyIC0gcjN9ICAgICAgICAgICAgICAgICAgIEAgZ2V0IHZhbHVlcyBmb3IgImFib3J0ZWQiIHBjIGFuZCBjcHNyIChpbnRvIHBhcm0gcmVncykKCWFkZAlyMCwgc3AsICNTX0ZSQU1FX1NJWkUJCUAgZ3JhYiBwb2ludGVyIHRvIG9sZCBzdGFjawoKCWFkZAlyNSwgc3AsICNTX1NQCgltb3YJcjEsIGxyCglzdG1pYQlyNSwge3IwIC0gcjN9ICAgICAgICAgICAgICAgICAgIEAgc2F2ZSBzcF9TVkMsIGxyX1NWQywgcGMsIGNwc3IKCW1vdglyMCwgc3AgICAgICAgICAgICAgICAgICAgICAgICAgIEAgc2F2ZSBjdXJyZW50IHN0YWNrIGludG8gcjAgKHBhcmFtIHJlZ2lzdGVyKQoJLmVuZG0KCgkubWFjcm8JaXJxX3NhdmVfdXNlcl9yZWdzCglzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCglzdG1pYQlzcCwge3IwIC0gcjEyfQkJCUAgQ2FsbGluZyByMC1yMTIKCWFkZCAgICAgcjgsIHNwLCAjU19QQyAgICAgICAgICAgICAgICAgICBAICEhISEgUjggTkVFRFMgdG8gYmUgc2F2ZWQgISEhISBhIHJlc2VydmVkIHN0YWNrIHNwb3Qgd291bGQgYmUgZ29vZC4KCXN0bWRiICAgcjgsIHtzcCwgbHJ9XiAgICAgICAgICAgICAgICAgICBAIENhbGxpbmcgU1AsIExSCglzdHIgICAgIGxyLCBbcjgsICMwXSAgICAgICAgICAgICAgICAgICAgQCBTYXZlIGNhbGxpbmcgUEMKCW1ycyAgICAgcjYsIHNwc3IKCXN0ciAgICAgcjYsIFtyOCwgIzRdICAgICAgICAgICAgICAgICAgICBAIFNhdmUgQ1BTUgoJc3RyICAgICByMCwgW3I4LCAjOF0gICAgICAgICAgICAgICAgICAgIEAgU2F2ZSBPTERfUjAKCW1vdglyMCwgc3AKCS5lbmRtCgoJLm1hY3JvCWlycV9yZXN0b3JlX3VzZXJfcmVncwoJbGRtaWEJc3AsIHtyMCAtIGxyfV4JCQlAIENhbGxpbmcgcjAgLSBscgoJbW92CXIwLCByMAoJbGRyCWxyLCBbc3AsICNTX1BDXQkJCUAgR2V0IFBDCglhZGQJc3AsIHNwLCAjU19GUkFNRV9TSVpFCglzdWJzCXBjLCBsciwgIzQJCQlAIHJldHVybiAmIG1vdmUgc3Bzcl9zdmMgaW50byBjcHNyCgkuZW5kbQoKCS5tYWNybyBnZXRfYmFkX3N0YWNrCglsZHIJcjEzLCBfYXJtYm9vdF9lbmQJCUAgZ2V0IGJvdHRvbSBvZiBzdGFjayAoaW50byBzcCBieSBieSB1c2VyIHN0YWNrIHBvaW50ZXIpLgoJYWRkCXIxMywgcjEzLCAjQ09ORklHX1NUQUNLU0laRQlAIGhlYWQgdG8gcmVzZXJ2ZWQgd29yZHMgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2sKCXN1YglyMTMsIHIxMywgIzggICAgICAgICAgICAgICAgICAgIEAgcmVzZXJ2ZWQgYSBjb3VwbGUgc3BvdHMgaW4gYWJvcnQgc3RhY2sKCglzdHIJbHIsIFtyMTNdCQkJQCBzYXZlIGNhbGxlciBsciBpbiBwb3NpdGlvbiAwIG9mIHNhdmVkIHN0YWNrCgltcnMJbHIsIHNwc3IgICAgICAgICAgICAgICAgICAgICAgICBAIGdldCB0aGUgc3BzcgoJc3RyICAgICBsciwgW3IxMywgIzRdICAgICAgICAgICAgICAgICAgIEAgc2F2ZSBzcHNyIGluIHBvc2l0aW9uIDEgb2Ygc2F2ZWQgc3RhY2sKCgltb3YJcjEzLCAjTU9ERV9TVkMJCQlAIHByZXBhcmUgU1ZDLU1vZGUKCUAgbXNyCXNwc3JfYywgcjEzCgltc3IJc3BzciwgcjEzICAgICAgICAgICAgICAgICAgICAgICBAIHN3aXRjaCBtb2RlcywgbWFrZSBzdXJlIG1vdmVzIHdpbGwgZXhlY3V0ZQoJbW92CWxyLCBwYyAgICAgICAgICAgICAgICAgICAgICAgICAgQCBjYXB0dXJlIHJldHVybiBwYwoJbW92cwlwYywgbHIgICAgICAgICAgICAgICAgICAgICAgICAgIEAganVtcCB0byBuZXh0IGluc3RydWN0aW9uICYgc3dpdGNoIG1vZGVzLgoJLmVuZG0KCgkubWFjcm8gZ2V0X2lycV9zdGFjawkJCUAgc2V0dXAgSVJRIHN0YWNrCglsZHIJc3AsIElSUV9TVEFDS19TVEFSVAoJLmVuZG0KCgkubWFjcm8gZ2V0X2ZpcV9zdGFjawkJCUAgc2V0dXAgRklRIHN0YWNrCglsZHIJc3AsIEZJUV9TVEFDS19TVEFSVAoJLmVuZG0KCi8qCiAqIGV4Y2VwdGlvbiBoYW5kbGVycwogKi8KCS5hbGlnbiAgNQp1bmRlZmluZWRfaW5zdHJ1Y3Rpb246CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsIAlkb191bmRlZmluZWRfaW5zdHJ1Y3Rpb24KCgkuYWxpZ24JNQpzb2Z0d2FyZV9pbnRlcnJ1cHQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsIAlkb19zb2Z0d2FyZV9pbnRlcnJ1cHQKCgkuYWxpZ24JNQpwcmVmZXRjaF9hYm9ydDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwgCWRvX3ByZWZldGNoX2Fib3J0CgoJLmFsaWduCTUKZGF0YV9hYm9ydDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwgCWRvX2RhdGFfYWJvcnQKCgkuYWxpZ24JNQpub3RfdXNlZDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwgCWRvX25vdF91c2VkCgojaWZkZWYgQ09ORklHX1VTRV9JUlEKCgkuYWxpZ24JNQppcnE6CglnZXRfaXJxX3N0YWNrCglpcnFfc2F2ZV91c2VyX3JlZ3MKCWJsIAlkb19pcnEKCWlycV9yZXN0b3JlX3VzZXJfcmVncwoKCS5hbGlnbgk1CmZpcToKCWdldF9maXFfc3RhY2sKCS8qIHNvbWVvbmUgb3VnaHQgdG8gd3JpdGUgYSBtb3JlIGVmZmljdGlvbiBmaXFfc2F2ZV91c2VyX3JlZ3MgKi8KCWlycV9zYXZlX3VzZXJfcmVncwoJYmwgCWRvX2ZpcQoJaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCgojZWxzZQoKCS5hbGlnbgk1CmlycToKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwgCWRvX2lycQoKCS5hbGlnbgk1CmZpcToKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwgCWRvX2ZpcQoKI2VuZGlmCgoJLmFsaWduCTUKLmdsb2JsIHJlc2V0X2NwdQpyZXNldF9jcHU6CglsZHIJcjEsIHJzdGN0bDEgICAgIC8qIGdldCBjbGttMSByZXNldCBjdGwgKi8KCW1vdiAgICAgcjMsICMweDAgICAgICAgIAoJc3RyaAlyMywgW3IxXSAgICAgICAgLyogY2xlYXIgaXQgKi8KCW1vdiAgICAgcjMsICMweDgKCXN0cmggICAgcjMsIFtyMV0gICAgICAgIC8qIGZvcmNlIGRzcCthcm0gcmVzZXQgKi8KX2xvb3BfZm9yZXZlcjoKCWIJX2xvb3BfZm9yZXZlcgpyc3RjdGwxOgoJLndvcmQJMHhmZmZlY2UxMAo=